Benutzerdefinierte Analytics-Abfrage
curl --request POST \
--url https://server.codeium.com/api/v1/Analytics \
--header 'Content-Type: application/json' \
--data '
{
"service_key": "<string>",
"group_name": "<string>",
"query_requests": [
{
"data_source": "<string>",
"selections": [
{
"field": "<string>",
"name": "<string>",
"aggregation_function": "<string>"
}
],
"filters": [
{
"name": "<string>",
"filter": "<string>",
"value": "<string>"
}
],
"aggregations": [
{
"field": "<string>",
"name": "<string>"
}
]
}
]
}
'import requests
url = "https://server.codeium.com/api/v1/Analytics"
payload = {
"service_key": "<string>",
"group_name": "<string>",
"query_requests": [
{
"data_source": "<string>",
"selections": [
{
"field": "<string>",
"name": "<string>",
"aggregation_function": "<string>"
}
],
"filters": [
{
"name": "<string>",
"filter": "<string>",
"value": "<string>"
}
],
"aggregations": [
{
"field": "<string>",
"name": "<string>"
}
]
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
service_key: '<string>',
group_name: '<string>',
query_requests: [
{
data_source: '<string>',
selections: [{field: '<string>', name: '<string>', aggregation_function: '<string>'}],
filters: [{name: '<string>', filter: '<string>', value: '<string>'}],
aggregations: [{field: '<string>', name: '<string>'}]
}
]
})
};
fetch('https://server.codeium.com/api/v1/Analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v1/Analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'service_key' => '<string>',
'group_name' => '<string>',
'query_requests' => [
[
'data_source' => '<string>',
'selections' => [
[
'field' => '<string>',
'name' => '<string>',
'aggregation_function' => '<string>'
]
],
'filters' => [
[
'name' => '<string>',
'filter' => '<string>',
'value' => '<string>'
]
],
'aggregations' => [
[
'field' => '<string>',
'name' => '<string>'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v1/Analytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://server.codeium.com/api/v1/Analytics")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/Analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"queryResults": [
{
"responseItems": [
{
"item": {}
}
]
}
]
}Analytics-API
Benutzerdefinierte Analytics-Abfrage
Flexible Analytics-Abfragen mit benutzerdefinierten selections, Filtern und aggregations für Autocomplete-, Chat-, Command- und PCW-Daten.
POST
/
api
/
v1
/
Analytics
Benutzerdefinierte Analytics-Abfrage
curl --request POST \
--url https://server.codeium.com/api/v1/Analytics \
--header 'Content-Type: application/json' \
--data '
{
"service_key": "<string>",
"group_name": "<string>",
"query_requests": [
{
"data_source": "<string>",
"selections": [
{
"field": "<string>",
"name": "<string>",
"aggregation_function": "<string>"
}
],
"filters": [
{
"name": "<string>",
"filter": "<string>",
"value": "<string>"
}
],
"aggregations": [
{
"field": "<string>",
"name": "<string>"
}
]
}
]
}
'import requests
url = "https://server.codeium.com/api/v1/Analytics"
payload = {
"service_key": "<string>",
"group_name": "<string>",
"query_requests": [
{
"data_source": "<string>",
"selections": [
{
"field": "<string>",
"name": "<string>",
"aggregation_function": "<string>"
}
],
"filters": [
{
"name": "<string>",
"filter": "<string>",
"value": "<string>"
}
],
"aggregations": [
{
"field": "<string>",
"name": "<string>"
}
]
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
service_key: '<string>',
group_name: '<string>',
query_requests: [
{
data_source: '<string>',
selections: [{field: '<string>', name: '<string>', aggregation_function: '<string>'}],
filters: [{name: '<string>', filter: '<string>', value: '<string>'}],
aggregations: [{field: '<string>', name: '<string>'}]
}
]
})
};
fetch('https://server.codeium.com/api/v1/Analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v1/Analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'service_key' => '<string>',
'group_name' => '<string>',
'query_requests' => [
[
'data_source' => '<string>',
'selections' => [
[
'field' => '<string>',
'name' => '<string>',
'aggregation_function' => '<string>'
]
],
'filters' => [
[
'name' => '<string>',
'filter' => '<string>',
'value' => '<string>'
]
],
'aggregations' => [
[
'field' => '<string>',
'name' => '<string>'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v1/Analytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://server.codeium.com/api/v1/Analytics")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/Analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"queryResults": [
{
"responseItems": [
{
"item": {}
}
]
}
]
}Überblick
Request
string
erforderlich
Ihr Service Key mit Berechtigung „Analytics Read“
string
Ergebnisse auf Nutzer in einer bestimmten Gruppe filtern (optional)
array
erforderlich
Array von Query-Request-Objekten, die die abzurufenden Daten definieren
Anzeigen Query Request Object
Anzeigen Query Request Object
string
erforderlich
Datenquelle, die abgefragt werden soll. Optionen:
QUERY_DATA_SOURCE_USER_DATA- Autocomplete-DatenQUERY_DATA_SOURCE_CHAT_DATA- Chat-DatenQUERY_DATA_SOURCE_COMMAND_DATA- Command-DatenQUERY_DATA_SOURCE_PCW_DATA- Percent-Code-Written-Daten
array
erforderlich
Array von Feldselektionen, die abgerufen werden sollen
Anzeigen Selection Object
Anzeigen Selection Object
string
erforderlich
Name des auszuwählenden Feldes (siehe Abschnitt Available Fields)
string
Alias für das Feld. Wenn nicht angegeben, lautet der Standardwert
{aggregation_function}_{field_name} (in Kleinbuchstaben)string
Anzuwendende Aggregationsfunktion:
QUERY_AGGREGATION_UNSPECIFIED(Standard)QUERY_AGGREGATION_COUNTQUERY_AGGREGATION_SUMQUERY_AGGREGATION_AVGQUERY_AGGREGATION_MAXQUERY_AGGREGATION_MIN
array
Array von Filtern, die angewendet werden sollen
Anzeigen Filter Object
Anzeigen Filter Object
string
erforderlich
Feldname, auf den gefiltert werden soll
string
erforderlich
Filteroperation:
QUERY_FILTER_EQUALQUERY_FILTER_NOT_EQUALQUERY_FILTER_GREATER_THANQUERY_FILTER_LESS_THANQUERY_FILTER_GE(größer oder gleich)QUERY_FILTER_LE(kleiner oder gleich)
string
erforderlich
Wert, mit dem verglichen werden soll
Struktur der Query-Anfrage
- data_source (erforderlich): Abzufragende Datenquelle
- selections (erforderlich): Array von Feldselections, die abgerufen werden sollen
- filters (optional): Array von Filtern, die angewendet werden sollen
- aggregations (optional): Array von Aggregations zum Gruppieren
Selections
- field (erforderlich): Name des auszuwählenden Feldes
- name (optional): Alias für das Feld
- aggregation_function (optional): Anzuwendende Aggregationsfunktion
Beispiel zur Auswahl
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
Filter
- name (erforderlich): Feldname, nach dem gefiltert werden soll
- filter (erforderlich): Filter-Operation
- value (erforderlich): Wert, mit dem verglichen werden soll
Beispiel für Filter
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
Aggregations
- field (required): Feldname, nach dem gruppiert werden soll
- name (required): Alias für das Aggregationsfeld
Beispiel für Aggregation
{
"field": "ide",
"name": "ide_type"
}
Verfügbare Felder
Nutzerdaten
| Feldname | Beschreibung | Gültige Aggregationen |
|---|---|---|
api_key | Hash des Benutzer-API-Schlüssels | UNSPECIFIED, COUNT |
date | UTC-Datum der Autocomplete-Vorgänge | UNSPECIFIED, COUNT |
date UTC-x | Datum mit Zeitzonenversatz (z. B. „date UTC-8“ für PST) | UNSPECIFIED, COUNT |
hour | UTC-Stunde der Autocomplete-Vorgänge | UNSPECIFIED, COUNT |
language | Programmiersprache | UNSPECIFIED, COUNT |
ide | Verwendete IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
num_acceptances | Anzahl der Autocomplete-Annahmen | SUM, MAX, MIN, AVG |
num_lines_accepted | Angenommene Codezeilen | SUM, MAX, MIN, AVG |
num_bytes_accepted | Angenommene Bytes | SUM, MAX, MIN, AVG |
distinct_users | Eindeutige Nutzer | UNSPECIFIED, COUNT |
distinct_developer_days | Eindeutige (Nutzer, Tag)-Tupel | UNSPECIFIED, COUNT |
distinct_developer_hours | Eindeutige (Nutzer, Stunde)-Tupel | UNSPECIFIED, COUNT |
Chat-Daten
Chat-Daten sind von Cascade-Daten getrennt und erfassen die Nutzung unserer älteren, nicht-agentischen Plugins
| Field Name | Description | Valid Aggregations |
|---|---|---|
api_key | Hash des API-Schlüssels des Benutzers | UNSPECIFIED, COUNT |
model_id | Chat-AI-Modell-ID | UNSPECIFIED, COUNT |
date | UTC-Datum der Chat-Antwort | UNSPECIFIED, COUNT |
date UTC-x | Datum mit Zeitzonenversatz | UNSPECIFIED, COUNT |
ide | Verwendete IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
latest_intent_type | Chat-Intent-Typ (siehe Intent-Typen unten) | UNSPECIFIED, COUNT |
num_chats_received | Anzahl empfangener Chat-Nachrichten | SUM, MAX, MIN, AVG |
chat_accepted | Ob der Chat akzeptiert wurde (Daumen hoch) | SUM, COUNT |
chat_inserted_at_cursor | Ob die Schaltfläche „Insert“ geklickt wurde | SUM, COUNT |
chat_applied | Ob die Schaltfläche „Apply Diff“ geklickt wurde | SUM, COUNT |
chat_loc_used | Aus dem Chat genutzte Codezeilen | SUM, MAX, MIN, AVG |
Chat-Intent-Typen
CHAT_INTENT_GENERIC- Normales ChatCHAT_INTENT_FUNCTION_EXPLAIN- CodeLens zur Erklärung einer FunktionCHAT_INTENT_FUNCTION_DOCSTRING- CodeLens für den Docstring einer FunktionCHAT_INTENT_FUNCTION_REFACTOR- CodeLens zum Refactoring einer FunktionCHAT_INTENT_CODE_BLOCK_EXPLAIN- CodeLens zur Erklärung eines CodeblocksCHAT_INTENT_CODE_BLOCK_REFACTOR- CodeLens zum Refactoring eines CodeblocksCHAT_INTENT_PROBLEM_EXPLAIN- CodeLens zur Erklärung eines ProblemsCHAT_INTENT_FUNCTION_UNIT_TESTS- CodeLens für Unit-Tests einer Funktion
Command-Daten
accepted, um nur nach akzeptierten Commands zu filtern.
| Feldname | Beschreibung | Gültige Aggregationen |
|---|---|---|
api_key | Hash des API-Schlüssels des Nutzers | UNSPECIFIED, COUNT |
date | UTC-Datum des Commands | UNSPECIFIED, COUNT |
timestamp | UTC-Zeitstempel des Commands | UNSPECIFIED, COUNT |
language | Programmiersprache | UNSPECIFIED, COUNT |
ide | Verwendetes IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
command_source | Auslöserquelle des Commands (siehe Command Sources unten) | UNSPECIFIED, COUNT |
provider_source | Generierungs- oder Bearbeitungsmodus | UNSPECIFIED, COUNT |
lines_added | Hinzugefügte Codezeilen | SUM, MAX, MIN, AVG |
lines_removed | Entfernte Codezeilen | SUM, MAX, MIN, AVG |
bytes_added | Hinzugefügte Bytes | SUM, MAX, MIN, AVG |
bytes_removed | Entfernte Bytes | SUM, MAX, MIN, AVG |
selection_lines | Ausgewählte Zeilen (0 bei Generierungen) | SUM, MAX, MIN, AVG |
selection_bytes | Ausgewählte Bytes (0 bei Generierungen) | SUM, MAX, MIN, AVG |
accepted | Ob der Command akzeptiert wurde | SUM, COUNT |
Command-Quellen
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENSCOMMAND_REQUEST_SOURCE_DEFAULT- Typische Command-VerwendungCOMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTORCOMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENSCOMMAND_REQUEST_SOURCE_FOLLOWUPCOMMAND_REQUEST_SOURCE_CLASS_CODE_LENSCOMMAND_REQUEST_SOURCE_PLANCOMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS
Providerquellen
PROVIDER_SOURCE_COMMAND_GENERATE- GenerierungsmodusPROVIDER_SOURCE_COMMAND_EDIT- Bearbeitungsmodus
PCW-Daten
| Feldname | Beschreibung | Gültige Aggregationen |
|---|---|---|
percent_code_written | Berechnet als codeium_bytes / (codeium_bytes + user_bytes) | UNSPECIFIED |
codeium_bytes | Gesamtanzahl der von Codeium generierten Bytes | UNSPECIFIED |
user_bytes | Gesamtanzahl der vom Benutzer geschriebenen Bytes | UNSPECIFIED |
total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
codeium_bytes_by_autocomplete | Von Autocomplete stammende Codeium-Bytes | UNSPECIFIED |
codeium_bytes_by_command | Von Command stammende Codeium-Bytes | UNSPECIFIED |
PCW-Filter
| Feldname | Beschreibung | Beispiele |
|---|---|---|
language | Programmiersprache | KOTLIN, GO, JAVA |
ide | Verwendete IDE | jetbrains, vscode |
version | Windsurf-Version | 1.28.0, 130.0 |
start_timestamp und end_timestamp im Hauptteil der Anfrage.
Beispielanfragen
Beispiel für Nutzerdaten
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_USER_DATA",
"selections": [
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "num_lines_accepted",
"name": "total_lines",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "date",
"filter": "QUERY_FILTER_GE",
"value": "2024-01-01"
},
{
"name": "date",
"filter": "QUERY_FILTER_LE",
"value": "2024-02-01"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Beispiel für Chatdaten
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
"selections": [
{
"field": "chat_loc_used",
"name": "lines_used",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "latest_intent_type",
"filter": "QUERY_FILTER_EQUAL",
"value": "CHAT_INTENT_FUNCTION_DOCSTRING"
}
],
"aggregations": [
{
"field": "ide",
"name": "ide_type"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Beispiel für Command-Daten
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "ihr_service_schlüssel_hier",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
"selections": [
{
"field": "lines_added",
"name": "total_lines_added",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "lines_removed",
"name": "total_lines_removed",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "provider_source",
"filter": "QUERY_FILTER_EQUAL",
"value": "PROVIDER_SOURCE_COMMAND_EDIT"
},
{
"name": "accepted",
"filter": "QUERY_FILTER_EQUAL",
"value": "true"
}
],
"aggregations": [
{
"field": "language",
"name": "programming_language"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Beispiel für PCW-Daten
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"start_timestamp": "2024-01-01T00:00:00Z",
"end_timestamp": "2024-12-22T00:00:00Z",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_PCW_DATA",
"selections": [
{
"field": "percent_code_written",
"name": "pcw"
},
{
"field": "codeium_bytes",
"name": "ai_bytes"
},
{
"field": "total_bytes",
"name": "total"
},
{
"field": "codeium_bytes_by_autocomplete",
"name": "autocomplete_bytes"
},
{
"field": "codeium_bytes_by_command",
"name": "command_bytes"
}
],
"filters": [
{
"filter": "QUERY_FILTER_EQUAL",
"name": "language",
"value": "GO"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Antwort
array
Beispielantworten
Antwort mit Benutzerdaten
{
"queryResults": [
{
"responseItems": [
{
"item": {
"total_acceptances": "125",
"total_lines": "863"
}
}
]
}
]
}
Antwort mit Chat-Daten
{
"queryResults": [
{
"responseItems": [
{
"item": {
"lines_used": "74",
"ide_type": "jetbrains"
}
},
{
"item": {
"lines_used": "41",
"ide_type": "vscode"
}
}
]
}
]
}
Command-Datenantwort
{
"queryResults": [
{
"responseItems": [
{
"item": {
"programming_language": "PYTHON",
"total_lines_added": "21",
"total_lines_removed": "5"
}
},
{
"item": {
"programming_language": "GO",
"total_lines_added": "31",
"total_lines_removed": "27"
}
}
]
}
]
}
PCW-Datenantwort
{
"queryResults": [
{
"responseItems": [
{
"item": {
"ai_bytes": "6018",
"autocomplete_bytes": "4593",
"command_bytes": "1425",
"pcw": "0.61",
"total": "9900"
}
}
]
}
]
}
Wichtige Hinweise
- PCW (Percent Code Written) weist innerhalb einzelner Tage oder bei einzelnen Nutzern eine hohe Varianz auf – aggregieren Sie über Wochen, um bessere Einblicke zu erhalten
- Alle selection-Felder müssen entweder Aggregationsfunktionen haben oder keine (Mischformen sind nicht möglich)
- Felder mit dem Muster “distinct_*” können nicht in aggregations verwendet werden
- Feldaliase müssen über alle selections und aggregations hinweg eindeutig sein
- Wenn keine Aggregationsfunktion angegeben ist, wird standardmäßig UNSPECIFIED verwendet