Benutzerdefinierte Analytics-Abfrage
curl --request POST \
--url https://server.codeium.com/api/v1/Analytics \
--header 'Authorization: Bearer <token>' \
--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 = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', '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 => [
"Authorization: Bearer <token>",
"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("Authorization", "Bearer <token>")
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("Authorization", "Bearer <token>")
.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["Authorization"] = 'Bearer <token>'
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 Auswahlen, Filtern und Aggregationen für Autovervollständigungs-, Chat-, Befehls- und PCW-Daten.
POST
/
api
/
v1
/
Analytics
Benutzerdefinierte Analytics-Abfrage
curl --request POST \
--url https://server.codeium.com/api/v1/Analytics \
--header 'Authorization: Bearer <token>' \
--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 = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', '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 => [
"Authorization: Bearer <token>",
"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("Authorization", "Bearer <token>")
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("Authorization", "Bearer <token>")
.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["Authorization"] = 'Bearer <token>'
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
Anfrage
string
erforderlich
Ihr Service-Schlüssel mit „Analytics Read“-Berechtigungen
string
Ergebnisse auf Nutzer in einer bestimmten Gruppe beschränken (optional)
array
erforderlich
Array von Abfrageobjekten, die die abzurufenden Daten definieren
Anzeigen Abfrageobjekt
Anzeigen Abfrageobjekt
string
erforderlich
Abzufragende Datenquelle. Optionen:
QUERY_DATA_SOURCE_USER_DATA- Daten zur AutovervollständigungQUERY_DATA_SOURCE_CHAT_DATA- Chat-DatenQUERY_DATA_SOURCE_COMMAND_DATA- BefehlsdatenQUERY_DATA_SOURCE_PCW_DATA- Daten zum Prozentsatz des geschriebenen Codes
array
erforderlich
Array von Feldauswahlen zum Abrufen
Anzeigen Auswahlobjekt
Anzeigen Auswahlobjekt
string
erforderlich
Name des auszuwählenden Felds (siehe Abschnitt „Available Fields“)
string
Alias für das Feld. Falls nicht angegeben, wird standardmäßig
{aggregation_function}_{field_name} verwendet (in Kleinbuchstaben)string
Anzuwendende Aggregationsfunktion:
QUERY_AGGREGATION_UNSPECIFIED(Standard)QUERY_AGGREGATION_COUNTQUERY_AGGREGATION_SUMQUERY_AGGREGATION_AVGQUERY_AGGREGATION_MAXQUERY_AGGREGATION_MIN
array
Array von anzuwendenden Filtern
Anzeigen Filterobjekt
Anzeigen Filterobjekt
string
erforderlich
Name des Felds, nach dem 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
Vergleichswert
Struktur der Query-Anfrage
- data_source (erforderlich): Abzufragende Datenquelle
- selections (erforderlich): Array der abzurufenden Feldauswahlen
- filters (optional): Array der anzuwendenden Filter
- aggregations (optional): Array der Aggregationen zur Gruppierung
Auswahlen
- field (erforderlich): Name des Felds, das ausgewählt werden soll
- name (optional): Alias für das Feld
- aggregation_function (optional): Anzuwendende Aggregationsfunktion
Beispiel für eine Auswahl
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
Filter
- name (erforderlich): Feldname, nach dem gefiltert werden soll
- filter (erforderlich): Filteroperation
- value (erforderlich): Wert, mit dem verglichen werden soll
Beispiel für einen Filter
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
Aggregationen
- field (erforderlich): Feldname, nach dem gruppiert wird
- name (erforderlich): Alias für das Aggregationsfeld
Beispiel für eine Aggregation
{
"field": "ide",
"name": "ide_type"
}
Verfügbare Felder
Nutzerdaten
| Feldname | Beschreibung | Gültige Aggregationen |
|---|---|---|
api_key | Hash des API-Schlüssels des Nutzers | UNSPECIFIED, COUNT |
date | UTC-Datum der Autovervollständigung | UNSPECIFIED, COUNT |
date UTC-x | Datum mit Zeitzonenversatz (z. B. „date UTC-8“ für PST) | UNSPECIFIED, COUNT |
hour | UTC-Stunde der Autovervollständigung | UNSPECIFIED, COUNT |
language | Programmiersprache | UNSPECIFIED, COUNT |
ide | Verwendete IDE | UNSPECIFIED, COUNT |
version | Version der Erweiterung/des Plugins (Language Server), z. B. 1.48.x | UNSPECIFIED, COUNT |
num_acceptances | Anzahl akzeptierter Autovervollständigungen | SUM, MAX, MIN, AVG |
num_lines_accepted | Akzeptierte Codezeilen | SUM, MAX, MIN, AVG |
num_bytes_accepted | Akzeptierte Bytes | SUM, MAX, MIN, AVG |
distinct_users | Eindeutige Nutzer | UNSPECIFIED, COUNT |
distinct_developer_days | Eindeutige Tupel aus (Nutzer, Tag) | UNSPECIFIED, COUNT |
distinct_developer_hours | Eindeutige Tupel aus (Nutzer, Stunde) | UNSPECIFIED, COUNT |
Chat-Daten
Chat-Daten sind von Cascade-Daten getrennt und erfassen die Nutzung unserer älteren, nicht-agentischen Plugins
| Feldname | Beschreibung | Gültige Aggregationen |
|---|---|---|
api_key | Hash des API-Schlüssels des Nutzers | UNSPECIFIED, COUNT |
model_id | ID des Chatmodells | UNSPECIFIED, COUNT |
date | UTC-Datum der Chat-Antwort | UNSPECIFIED, COUNT |
date UTC-x | Datum mit Zeitzonenversatz | UNSPECIFIED, COUNT |
ide | Verwendete IDE | UNSPECIFIED, COUNT |
version | Version der Erweiterung/des Plugins (Language Server), z. B. 1.48.x | UNSPECIFIED, COUNT |
latest_intent_type | Chat-Intent-Typ (siehe Intent-Typen unten) | UNSPECIFIED, COUNT |
num_chats_received | Anzahl der empfangenen Chat-Nachrichten | SUM, MAX, MIN, AVG |
chat_accepted | Ob der Chat akzeptiert wurde („Daumen hoch“) | SUM, COUNT |
chat_inserted_at_cursor | Ob auf die Schaltfläche „Insert“ geklickt wurde | SUM, COUNT |
chat_applied | Ob auf die Schaltfläche „Apply Diff“ geklickt wurde | SUM, COUNT |
chat_loc_used | Aus dem Chat übernommene Codezeilen | SUM, MAX, MIN, AVG |
Chat-Intent-Typen
CHAT_INTENT_GENERIC- Regulärer 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 ProblemerklärungCHAT_INTENT_FUNCTION_UNIT_TESTS- CodeLens für Unit-Tests einer Funktion
Befehlsdaten
accepted, um nur akzeptierte Befehle zu filtern.
| Feldname | Beschreibung | Gültige Aggregationen |
|---|---|---|
api_key | Hash des API-Schlüssels des Nutzers | UNSPECIFIED, COUNT |
date | UTC-Datum des Befehls | UNSPECIFIED, COUNT |
timestamp | UTC-Zeitstempel des Befehls | UNSPECIFIED, COUNT |
language | Programmiersprache | UNSPECIFIED, COUNT |
ide | Verwendete IDE | UNSPECIFIED, COUNT |
version | Erweiterung/Plugin-Version (Language Server), z. B. 1.48.x | UNSPECIFIED, COUNT |
command_source | Quelle, durch die der Befehl ausgelöst wurde (siehe Befehlsquellen 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 | Gibt an, ob der Befehl akzeptiert wurde | SUM, COUNT |
Befehlsquellen
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENSCOMMAND_REQUEST_SOURCE_DEFAULT- Typische Nutzung von BefehlenCOMMAND_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
Provider-Quellen
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 | Insgesamt von Codeium generierte Bytes | UNSPECIFIED |
user_bytes | Insgesamt vom Nutzer geschriebene Bytes | UNSPECIFIED |
total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
codeium_bytes_by_autocomplete | Codeium-Bytes aus Autovervollständigung | UNSPECIFIED |
codeium_bytes_by_command | Codeium-Bytes aus Befehlen | UNSPECIFIED |
PCW-Filter
| Feldname | Beschreibung | Beispiele |
|---|---|---|
language | Programmiersprache | KOTLIN, GO, JAVA |
ide | Verwendete IDE | jetbrains, vscode |
version | Version der Erweiterung/des Plugins (Language Server), z. B. 1.48.x | 1.28.0, 130.0 |
start_timestamp und end_timestamp im Hauptteil des Request-Bodys.
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 Chat-Daten
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 Befehlsdaten
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"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 Nutzerdaten
{
"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"
}
}
]
}
]
}
Antwort mit Befehlsdaten
{
"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"
}
}
]
}
]
}
Antwort mit PCW-Daten
{
"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 – für aussagekräftigere Ergebnisse über mehrere Wochen aggregieren
- Alle Auswahlfelder müssen entweder Aggregationsfunktionen haben oder keines darf eine haben (eine Mischung ist nicht möglich)
- Felder mit dem Muster “distinct_*” können nicht in Aggregationen verwendet werden
- Feldaliase müssen über alle Auswahlen und Aggregationen hinweg eindeutig sein
- Wenn keine Aggregationsfunktion angegeben ist, wird standardmäßig UNSPECIFIED verwendet

