Requête d’analyse personnalisée
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": {}
}
]
}
]
}API d’analyse
Requête d’analyse personnalisée
Interrogation flexible des données d’analyse avec sélections, filtres et agrégations personnalisés pour les données d’autocomplétion, de chat, de Command et de PCW.
POST
/
api
/
v1
/
Analytics
Requête d’analyse personnalisée
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": {}
}
]
}
]
}Vue d’ensemble
L’API d’analyse personnalisée permet d’interroger de manière flexible les données d’autocomplétion, de chat et de Command, avec des sélections, filtres, agrégations et tris personnalisables.Requête
string
requis
Votre clé de service avec les autorisations « Analytics Read »
string
Filtrer les résultats pour n’inclure que les utilisateurs d’un groupe spécifique (facultatif)
array
requis
Tableau d’objets de requête définissant les données à récupérer
Afficher Objet de requête
Afficher Objet de requête
string
requis
Source de données à interroger. Options :
QUERY_DATA_SOURCE_USER_DATA- Données utilisateurQUERY_DATA_SOURCE_CHAT_DATA- Données de chatQUERY_DATA_SOURCE_COMMAND_DATA- Données de CommandQUERY_DATA_SOURCE_PCW_DATA- Données de pourcentage de code écrit
array
requis
Tableau des champs à récupérer
Afficher Objet de sélection
Afficher Objet de sélection
string
requis
Nom du champ à sélectionner (voir la section Champs disponibles)
string
Alias du champ. S’il n’est pas spécifié, la valeur par défaut est
{aggregation_function}_{field_name} (en minuscules)string
Fonction d’agrégation à appliquer :
QUERY_AGGREGATION_UNSPECIFIED(par défaut)QUERY_AGGREGATION_COUNTQUERY_AGGREGATION_SUMQUERY_AGGREGATION_AVGQUERY_AGGREGATION_MAXQUERY_AGGREGATION_MIN
array
Tableau des filtres à appliquer
Afficher Objet de filtre
Afficher Objet de filtre
Structure de l’objet de requête
Chaque objet de requête contient :- data_source (obligatoire) : source de données à interroger
- selections (obligatoire) : tableau des sélections de champs à récupérer
- filters (facultatif) : tableau des filtres à appliquer
- aggregations (facultatif) : tableau des agrégations à utiliser pour le regroupement
Sélections
Les sélections définissent les champs à récupérer et la manière de les agréger.- field (obligatoire) : Nom du champ à sélectionner
- name (facultatif) : Alias du champ
- aggregation_function (facultatif) : Fonction d’agrégation à appliquer
Exemple de sélection
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
Filtres
Les filtres permettent de restreindre les données aux éléments qui répondent à des critères spécifiques.- name (obligatoire) : Nom du champ sur lequel appliquer le filtre
- filter (obligatoire) : Opération de filtrage
- value (obligatoire) : Valeur à laquelle comparer
Exemple de filtre
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
Agrégations
Les agrégations regroupent les données selon des critères spécifiés.- field (obligatoire) : Nom du champ selon lequel regrouper
- name (obligatoire) : Alias du champ d’agrégation
Exemple d’agrégation
{
"field": "ide",
"name": "ide_type"
}
Champs disponibles
Données utilisateur
Toutes les données utilisateur sont agrégées par utilisateur, par heure.| Nom du champ | Description | Agrégations valides |
|---|---|---|
api_key | Hachage de la clé API de l’utilisateur | UNSPECIFIED, COUNT |
date | Date UTC de l’autocomplétion | UNSPECIFIED, COUNT |
date UTC-x | Date avec décalage de fuseau horaire (p. ex., « date UTC-8 » pour PST) | UNSPECIFIED, COUNT |
hour | Heure UTC de l’autocomplétion | UNSPECIFIED, COUNT |
language | Langage de programmation | UNSPECIFIED, COUNT |
ide | IDE utilisé | UNSPECIFIED, COUNT |
version | Version de l’extension/du plugin (language-server), p. ex. 1.48.x | UNSPECIFIED, COUNT |
num_acceptances | Nombre de suggestions d’autocomplétion acceptées | SUM, MAX, MIN, AVG |
num_lines_accepted | Nombre de lignes de code acceptées | SUM, MAX, MIN, AVG |
num_bytes_accepted | Nombre d’octets acceptés | SUM, MAX, MIN, AVG |
distinct_users | Nombre d’utilisateurs distincts | UNSPECIFIED, COUNT |
distinct_developer_days | Nombre de tuples (utilisateur, jour) distincts | UNSPECIFIED, COUNT |
distinct_developer_hours | Nombre de tuples (utilisateur, heure) distincts | UNSPECIFIED, COUNT |
Données de chat
Les données de chat sont distinctes des données Cascade et correspondent à l’utilisation de nos anciens plugins non agentiques
| Nom du champ | Description | Agrégations valides |
|---|---|---|
api_key | Hachage de la clé API de l’utilisateur | UNSPECIFIED, COUNT |
model_id | ID du modèle de chat | UNSPECIFIED, COUNT |
date | Date UTC de la réponse du chat | UNSPECIFIED, COUNT |
date UTC-x | Date avec décalage de fuseau horaire | UNSPECIFIED, COUNT |
ide | IDE utilisé | UNSPECIFIED, COUNT |
version | Version de l’extension/du plugin (language-server), p. ex. 1.48.x | UNSPECIFIED, COUNT |
latest_intent_type | Type d’intention du chat (voir Types d’intention ci-dessous) | UNSPECIFIED, COUNT |
num_chats_received | Nombre de messages de chat reçus | SUM, MAX, MIN, AVG |
chat_accepted | Indique si le chat a été accepté (pouce levé) | SUM, COUNT |
chat_inserted_at_cursor | Indique si le bouton « Insert » a été cliqué | SUM, COUNT |
chat_applied | Indique si le bouton « Apply Diff » a été cliqué | SUM, COUNT |
chat_loc_used | Nombre de lignes de code utilisées depuis le chat | SUM, MAX, MIN, AVG |
Types d’intention du chat
CHAT_INTENT_GENERIC- Chat standardCHAT_INTENT_FUNCTION_EXPLAIN- Code lens d’explication de fonctionCHAT_INTENT_FUNCTION_DOCSTRING- Code lens de docstring de fonctionCHAT_INTENT_FUNCTION_REFACTOR- Code lens de refactorisation de fonctionCHAT_INTENT_CODE_BLOCK_EXPLAIN- Code lens d’explication de bloc de codeCHAT_INTENT_CODE_BLOCK_REFACTOR- Code lens de refactorisation de bloc de codeCHAT_INTENT_PROBLEM_EXPLAIN- Code lens d’explication du problèmeCHAT_INTENT_FUNCTION_UNIT_TESTS- Code lens de tests unitaires pour une fonction
Données de Command
Les données de Command incluent toutes les commandes, y compris celles qui ont été rejetées. Utilisez le champaccepted pour filtrer uniquement les commandes acceptées.
| Nom du champ | Description | Agrégations valides |
|---|---|---|
api_key | Hachage de la clé API de l’utilisateur | UNSPECIFIED, COUNT |
date | Date UTC de la commande | UNSPECIFIED, COUNT |
timestamp | Horodatage UTC de la commande | UNSPECIFIED, COUNT |
language | Langage de programmation | UNSPECIFIED, COUNT |
ide | IDE utilisé | UNSPECIFIED, COUNT |
version | Version de l’extension/du plugin (language-server), p. ex. 1.48.x | UNSPECIFIED, COUNT |
command_source | Source de déclenchement de Command (voir Sources de Command ci-dessous) | UNSPECIFIED, COUNT |
provider_source | Mode de génération ou d’édition | UNSPECIFIED, COUNT |
lines_added | Lignes de code ajoutées | SUM, MAX, MIN, AVG |
lines_removed | Lignes de code supprimées | SUM, MAX, MIN, AVG |
bytes_added | Octets ajoutés | SUM, MAX, MIN, AVG |
bytes_removed | Octets supprimés | SUM, MAX, MIN, AVG |
selection_lines | Lignes sélectionnées (zéro pour les générations) | SUM, MAX, MIN, AVG |
selection_bytes | Octets sélectionnés (zéro pour les générations) | SUM, MAX, MIN, AVG |
accepted | Indique si la commande a été acceptée | SUM, COUNT |
Origines de Command
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENSCOMMAND_REQUEST_SOURCE_DEFAULT- Usage typique de CommandCOMMAND_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
Sources du fournisseur
PROVIDER_SOURCE_COMMAND_GENERATE- Mode de générationPROVIDER_SOURCE_COMMAND_EDIT- Mode d’édition
Données PCW
Données sur le pourcentage de code écrit, avec un suivi distinct des contributions de l’autocomplétion et de Command.| Nom du champ | Description | Agrégations valides |
|---|---|---|
percent_code_written | Calculé selon codeium_bytes / (codeium_bytes + user_bytes) | UNSPECIFIED |
codeium_bytes | Nombre total d’octets générés par Codeium | UNSPECIFIED |
user_bytes | Nombre total d’octets écrits par l’utilisateur | UNSPECIFIED |
total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
codeium_bytes_by_autocomplete | Octets Codeium provenant de l’autocomplétion | UNSPECIFIED |
codeium_bytes_by_command | Octets Codeium provenant de Command | UNSPECIFIED |
Filtres PCW
| Nom du champ | Description | Exemples |
|---|---|---|
language | Langage de programmation | KOTLIN, GO, JAVA |
ide | IDE utilisé | jetbrains, vscode |
version | Version de l’extension/du plugin (language-server), p. ex. 1.48.x | 1.28.0, 130.0 |
start_timestamp et end_timestamp dans le corps principal de la requête.
Exemples de requêtes
Exemple de données utilisateur
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
Exemple de données de chat
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
Exemple de données Command
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
Exemple de données PCW
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
Réponse
array
Exemples de réponses
Réponse de données utilisateur
{
"queryResults": [
{
"responseItems": [
{
"item": {
"total_acceptances": "125",
"total_lines": "863"
}
}
]
}
]
}
Réponse des données de chat
{
"queryResults": [
{
"responseItems": [
{
"item": {
"lines_used": "74",
"ide_type": "jetbrains"
}
},
{
"item": {
"lines_used": "41",
"ide_type": "vscode"
}
}
]
}
]
}
Réponse de données de Command
{
"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"
}
}
]
}
]
}
Réponse de données PCW
{
"queryResults": [
{
"responseItems": [
{
"item": {
"ai_bytes": "6018",
"autocomplete_bytes": "4593",
"command_bytes": "1425",
"pcw": "0.61",
"total": "9900"
}
}
]
}
]
}
Remarques importantes
- Le PCW (Percent Code Written) présente une forte variabilité d’un jour à l’autre ou d’un utilisateur à l’autre - agréguez sur plusieurs semaines pour obtenir des résultats plus pertinents
- Tous les champs de sélection doivent soit avoir une fonction d’agrégation, soit n’en avoir aucune (impossible de mélanger)
- Les champs avec le motif “distinct_*” ne peuvent pas être utilisés dans des agrégations
- Les alias de champ doivent être uniques dans l’ensemble des sélections et des agrégations
- Si aucune fonction d’agrégation n’est spécifiée, la valeur par défaut est UNSPECIFIED

