Consulta personalizada de Analytics
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
Consulta personalizada de Analytics
Consultas flexibles de Analytics con selections, filtros y aggregations personalizados para datos de Autocomplete, Chat, Command y PCW.
POST
/
api
/
v1
/
Analytics
Consulta personalizada de Analytics
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": {}
}
]
}
]
}Descripción general
Request
string
requerido
Tu clave de servicio con permisos “Analytics Read”
string
Filtra los resultados para usuarios de un grupo específico (opcional)
array
requerido
Array de objetos de solicitud de consulta que definen los datos a recuperar
Mostrar Objeto de solicitud de consulta
Mostrar Objeto de solicitud de consulta
string
requerido
Origen de datos a consultar. Opciones:
QUERY_DATA_SOURCE_USER_DATA- Datos de AutocompleteQUERY_DATA_SOURCE_CHAT_DATA- Datos de ChatQUERY_DATA_SOURCE_COMMAND_DATA- Datos de CommandQUERY_DATA_SOURCE_PCW_DATA- Datos de Percent Code Written
array
requerido
Array de selections de campos que se van a recuperar
Mostrar Objeto de selección
Mostrar Objeto de selección
string
requerido
Nombre del campo a seleccionar (consulta la sección Available Fields)
string
Alias del campo. Si no se especifica, el valor predeterminado es
{aggregation_function}_{field_name} (en minúsculas)string
Función de agregación a aplicar:
QUERY_AGGREGATION_UNSPECIFIED(valor predeterminado)QUERY_AGGREGATION_COUNTQUERY_AGGREGATION_SUMQUERY_AGGREGATION_AVGQUERY_AGGREGATION_MAXQUERY_AGGREGATION_MIN
array
Array de filtros a aplicar
Mostrar Objeto de filtro
Mostrar Objeto de filtro
Estructura de la solicitud de consulta
- data_source (obligatorio): Fuente de datos a consultar
- selections (obligatorio): Arreglo de selecciones de campos para recuperar
- filters (opcional): Arreglo de filtros a aplicar
- aggregations (opcional): Arreglo de aggregations para agrupar
Selections
- field (obligatorio): Nombre del campo a seleccionar
- name (opcional): Alias del campo
- aggregation_function (opcional): Función de agregación que se aplicará
Ejemplo de selección
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
Filtros
- name (obligatorio): Nombre del campo por el que filtrar
- filter (obligatorio): Operación de filtro
- value (obligatorio): Valor a comparar
Ejemplo de filtrado
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
Aggregations
- field (obligatorio): Nombre del campo por el que agrupar
- name (obligatorio): Alias para el campo de agregación
Ejemplo de agregación
{
"field": "ide",
"name": "tipo_ide"
}
Campos disponibles
Datos de usuario
| Nombre del campo | Descripción | Agregaciones válidas |
|---|---|---|
api_key | Hash de la clave de API del usuario | UNSPECIFIED, COUNT |
date | Fecha UTC de autocompletado | UNSPECIFIED, COUNT |
date UTC-x | Fecha con desfase de zona horaria (p. ej., “date UTC-8” para PST) | UNSPECIFIED, COUNT |
hour | Hora UTC de autocompletado | UNSPECIFIED, COUNT |
language | Lenguaje de programación | UNSPECIFIED, COUNT |
ide | IDE utilizado | UNSPECIFIED, COUNT |
version | Versión de Windsurf | UNSPECIFIED, COUNT |
num_acceptances | Número de aceptaciones de Autocomplete | SUM, MAX, MIN, AVG |
num_lines_accepted | Líneas de código aceptadas | SUM, MAX, MIN, AVG |
num_bytes_accepted | Bytes aceptados | SUM, MAX, MIN, AVG |
distinct_users | Usuarios únicos | UNSPECIFIED, COUNT |
distinct_developer_days | Tuplas únicas (usuario, día) | UNSPECIFIED, COUNT |
distinct_developer_hours | Tuplas únicas (usuario, hora) | UNSPECIFIED, COUNT |
Datos de Chat
Los datos de Chat están separados de los datos de Cascade y representan el uso de nuestros plugins heredados, no agentivos
| Field Name | Description | Valid Aggregations |
|---|---|---|
api_key | Hash de la clave de API del usuario | UNSPECIFIED, COUNT |
model_id | ID del modelo de Chat | UNSPECIFIED, COUNT |
date | Fecha en UTC de la respuesta de chat | UNSPECIFIED, COUNT |
date UTC-x | Fecha con desplazamiento de zona horaria | UNSPECIFIED, COUNT |
ide | IDE en uso | UNSPECIFIED, COUNT |
version | Versión de Windsurf | UNSPECIFIED, COUNT |
latest_intent_type | Tipo de intención de Chat (ver Tipos de intención más abajo) | UNSPECIFIED, COUNT |
num_chats_received | Número de mensajes de chat recibidos | SUM, MAX, MIN, AVG |
chat_accepted | Si el chat fue aceptado (pulgar arriba) | SUM, COUNT |
chat_inserted_at_cursor | Si se hizo clic en el botón “Insert” | SUM, COUNT |
chat_applied | Si se hizo clic en el botón “Apply Diff” | SUM, COUNT |
chat_loc_used | Líneas de código usadas desde el chat | SUM, MAX, MIN, AVG |
Tipos de intención de Chat
CHAT_INTENT_GENERIC- Chat normalCHAT_INTENT_FUNCTION_EXPLAIN- Indicador Code Lens de explicación de funciónCHAT_INTENT_FUNCTION_DOCSTRING- Indicador Code Lens de docstring de funciónCHAT_INTENT_FUNCTION_REFACTOR- Indicador Code Lens de refactorización de funciónCHAT_INTENT_CODE_BLOCK_EXPLAIN- Indicador Code Lens de explicación de bloque de códigoCHAT_INTENT_CODE_BLOCK_REFACTOR- Indicador Code Lens de refactorización de bloque de códigoCHAT_INTENT_PROBLEM_EXPLAIN- Indicador Code Lens de explicación de problemaCHAT_INTENT_FUNCTION_UNIT_TESTS- Indicador Code Lens de pruebas unitarias de función
Datos de Command
accepted para filtrar únicamente los comandos aceptados.
| Nombre del campo | Descripción | Agregaciones válidas |
|---|---|---|
api_key | Hash de la clave de API del usuario | UNSPECIFIED, COUNT |
date | Fecha UTC del comando | UNSPECIFIED, COUNT |
timestamp | Marca de tiempo UTC del comando | UNSPECIFIED, COUNT |
language | Lenguaje de programación | UNSPECIFIED, COUNT |
ide | IDE en uso | UNSPECIFIED, COUNT |
version | Versión de Windsurf | UNSPECIFIED, COUNT |
command_source | Origen del disparador de Command (ver Command Sources más abajo) | UNSPECIFIED, COUNT |
provider_source | Modo de generación o edición | UNSPECIFIED, COUNT |
lines_added | Líneas de código agregadas | SUM, MAX, MIN, AVG |
lines_removed | Líneas de código eliminadas | SUM, MAX, MIN, AVG |
bytes_added | Bytes agregados | SUM, MAX, MIN, AVG |
bytes_removed | Bytes eliminados | SUM, MAX, MIN, AVG |
selection_lines | Líneas seleccionadas (cero en generaciones) | SUM, MAX, MIN, AVG |
selection_bytes | Bytes seleccionados (cero en generaciones) | SUM, MAX, MIN, AVG |
accepted | Si el comando fue aceptado | SUM, COUNT |
Fuentes de Command
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENSCOMMAND_REQUEST_SOURCE_DEFAULT- Uso típico 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
Fuentes del proveedor
PROVIDER_SOURCE_COMMAND_GENERATE- Modo generaciónPROVIDER_SOURCE_COMMAND_EDIT- Modo edición
Datos de PCW
| Field Name | Description | Valid Aggregations |
|---|---|---|
percent_code_written | Calculado como codeium_bytes / (codeium_bytes + user_bytes) | UNSPECIFIED |
codeium_bytes | Total de bytes generados por Codeium | UNSPECIFIED |
user_bytes | Total de bytes escritos por el usuario | UNSPECIFIED |
total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
codeium_bytes_by_autocomplete | Bytes de Codeium provenientes de Autocomplete | UNSPECIFIED |
codeium_bytes_by_command | Bytes de Codeium provenientes de Command | UNSPECIFIED |
Filtros de PCW
| Nombre del campo | Descripción | Ejemplos |
|---|---|---|
language | Lenguaje de programación | KOTLIN, GO, JAVA |
ide | IDE en uso | jetbrains, vscode |
version | Versión de Windsurf | 1.28.0, 130.0 |
start_timestamp y end_timestamp en el cuerpo principal de la solicitud.
Ejemplos de solicitudes
Ejemplo de datos del usuario
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "tu_service_key_aquí",
"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
Ejemplo de datos 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
Ejemplo de datos de 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
Ejemplo de datos de 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
Respuesta
array
Ejemplos de respuestas
Respuesta de datos del usuario
{
"queryResults": [
{
"responseItems": [
{
"item": {
"total_acceptances": "125",
"total_lines": "863"
}
}
]
}
]
}
Respuesta de datos de Chat
{
"queryResults": [
{
"responseItems": [
{
"item": {
"lines_used": "74",
"ide_type": "jetbrains"
}
},
{
"item": {
"lines_used": "41",
"ide_type": "vscode"
}
}
]
}
]
}
Respuesta de datos 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"
}
}
]
}
]
}
Respuesta de datos de PCW
{
"queryResults": [
{
"responseItems": [
{
"item": {
"ai_bytes": "6018",
"autocomplete_bytes": "4593",
"command_bytes": "1425",
"pcw": "0.61",
"total": "9900"
}
}
]
}
]
}
Notas importantes
- PCW (Percent Code Written) presenta una gran variabilidad dentro de un mismo día o entre usuarios; agrégalo por semanas para obtener información más útil
- Todos los campos de selección deben tener funciones de agregación o ninguno debe tenerlas (no se pueden mezclar)
- Los campos con el patrón “distinct_*” no se pueden usar en aggregations
- Los alias de campos deben ser únicos en todas las selections y aggregations
- Si no se especifica ninguna función de agregación, el valor predeterminado es UNSPECIFIED