El almacén de datos que ejecuta las consultas de agregación se basa en Elasticsearch (actualmente la versión 1.7.x). Elasticsearch proporciona búsquedas en tiempo real y capacidades de agregación, con la API de estadísticas formando una capa ligera y con seguridad mejorada sobre él. En los ejemplos se utiliza el idioma de consulta y agregación de Elasticsearch.
-
El idioma utilizado en el campo filtrar de la consulta JSON se describe en la documentación de Elasticsearch Query DSL.
-
El idioma utilizado en el campo aggregations de la consulta JSON se describe detalladamente en la documentación de Elasticsearch Aggregations.
Índices
Diferentes tipos de datos residen en diferentes índices. Por ejemplo, los datos de trabajo residen en el índice jobPart, y los datos de costs residen en el índice costs. Los datos requeridos se pueden especificar indicando el índice en la URL del endpoint de la API de estadísticas.
Documentos de elemento raíz-elemento secundario
Partes de la información sobre un trabajo residen en dos documentos diferentes en la base de datos de Elasticsearch. Estos documentos tienen una relación de elemento raíz-elemento secundario. Por ejemplo, la información sobre el proyecto de un trabajo reside en el documento de elemento raíz, mientras que la información sobre el trabajo en sí reside en el documento de elemento secundario. Dependiendo de la información requerida, las agregaciones se realizan antes de la agregación de elemento raíz-elemento secundario de los datos o después de ella, pero la agregación de datos en sí debe estar presente en todas las consultas.
Datos comunes
Análisis
{
"id": cadena,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": number,
"name": cadena,
"tags": cadena[],
"trashed": boolean,
"trashedBy": <User>,
"type": cadena
}
Asignación
{
"name": cadena,
"linguist": <usuario>,
"vendor": <Vendor>
}
portal de solicitudes
{
"id": cadena,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": cadena,
"tags": cadena[],
"trashed": boolean,
"urlId": cadena
}
Comprador
{
"id": cadena,
"name": cadena
}
cliente
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"externalId": cadena,
"name": cadena,
"tags": cadena[],
"trashed": boolean,
}
Centro de costes
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": cadena,
"tags": cadena[],
"trashed": boolean,
}
Dominio
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": cadena,
"tags": cadena[],
"trashed": boolean
}
Job
{
"id": cadena,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"extension": cadena,
"fileName": cadena,
"groupCount": number,
"innerId": "1",
"languagePair": cadena,
"lastModified": Date,
"localePair": string,
"sourceLanguage": cadena,
"sourceLocale": cadena,
"tags": cadena[],
"targetLanguage": cadena,
"targetLocale": string",
"taskId": cadena,
"trashed": boolean,
"trashedBy": <User>,
"uid": cadena
}
JobPart
{
"ID": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"buyer": <comprador>,
"createdBy": <User>,
"dateCreated": Date,
"dateDue": Date,
"endIndex": number,
"groupCount": number,
"innerId": cadena,
"lastModified": Date,
"level": number,
"status": cadena,
"tags": [],
"uid": cadena,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": cadena,
"deleted": boolean,
"default_: boolean,
"includeTags": boolean,
"name": cadena,
"tags": cadena[],
"type": cadena,
}
NetRateScheme
{
"id": cadena,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"deleted": boolean,
"externalId": cadena,
"name": cadena,
"tags": cadena[],
}
PriceList
{
"id": cadena,
"createdBy": <User>,
"currency": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"deleted": boolean,
"name": cadena,
"tags": cadena[],
"trashed": boolean,
"unit": cadena
}
Proyecto
{
"id": cadena,
"buyer": <comprador>,
"client": <Client>,
"costCenter": <CostCenter>,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateDue": Date,
"dateTrashed": Date,
"deleted": boolean,
"domain": <Domain>,
"innerId": number,
"languagePairs": cadena[],
"localePairs": cadena[],
"mtEngine": <MtEngine>,
"name": cadena,
"note": cadena,
"owner": <usuario>,
"sourceLanguage": cadena,
"sourceLocale": cadena,
"status": cadena,
"subDomain": <SubDomain>,
"tags": cadena[],
"targetLanguages": cadena[],
"targetLocales": cadena[],
"trashed": boolean,
"trashedBy": <User>,
"uid": cadena,
"vendor": <Vendor>
}
cotización
{
"id": cadena,
"createdBy: <usuario>,
"currency": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": cadena,
"name": cadena,
"status": cadena,
"tags": cadena[],
"trashed": boolean,
"trashedBy": <User>,
"unit": cadena
}
Servicio
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": cadena,
"publicName": cadena,
"tags": cadena[],
"trashed": boolean,
"type": cadena
}
subdominio
{
"id": cadena,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": cadena,
"tags": cadena[],
"trashed": boolean
}
usuario
{
"id": number,
"active": activo,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"email": cadena,
"firstName": cadena,
"fullName": cadena,
"innerId": number,
"jobTitle": cadena,
"lastName": cadena,
"locale": localización,
"note": cadena,
"role": cadena,
"tags": cadena[],
"timeZone": cadena,
"trashed": boolean,
"userName": string
}
Vendor
{
"id": cadena,
"candidate": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"tags": cadena[],
"token": identificador único (token),
"trashed": boolean
}
WorkflowStep
{
"id": cadena,
"abbreviation": cadena,
"dateDeleted": Date,
"dateTrashed": Date,
"name": cadena,
"order": número,
"tags": cadena[],
"trashed": boolean
}
Índice de análisis
Agregación de datos
"data": {
"children": {
"type": "analysisType"
}
}
Documento elemento raíz
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
documento elemento secundario
{
"analysis": <Analysis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"priority": number,
"data": {
"MT": {
"match0": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match100": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match50": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match75": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match85": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match95": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
},
"repetitions": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"TM": {
"match0": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match100": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match101": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match50": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match75": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match85": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match95": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
},
"total": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
}
}
Índice de API
Agregación de datos
"data": {
"children": {
"type": "apiType"
}
}
Documento elemento raíz
{
"user": <User>
}
documento elemento secundario
{
"request": {
"date": Date,
"host": cadena,
"ipv4": cadena,
"ipv6": cadena,
"location": cadena,
"method": cadena
},
"response": {
"date": Date,
"duration": number,
"status": number
},
"api": {
"action": cadena,
"asynch": boolean,
"type": cadena,
"uri": cadena,
"ver": cadena
}
}
Índice de costes
Agregación de datos
"data": {
"children": {
"type": "costsType"
}
}
Documento elemento raíz
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
documento elemento secundario
{
"analysis": <Analysis>,
"job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"quote": <Quote>,
"workflowStep": <WorkflowStep>,
"priority": number,
"data": {
"MT": {
"match0": number,
"match100": number,
"match50": number,
"match75": number,
"match85": number,
"match95": number
},
"repetitions": number,
"TM": {
"match0": number,
"match100": number,
"match101": number,
"match50": number,
"match75": number,
"match85": number,
"match95": number
},
"total": number
}
}
Índice de trabajoPart
Agregación de datos
"data": {
"children": {
"type": "jobPartType"
}
}
Documento elemento raíz
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
Documento elemento secundario
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
"recuentos": {
"chars": {
"total": número,
"confirmado": número,
"noConfirmado": número,
"bloqueado": número,
"noBloqueado": número,
"confirmadoYBloqueado": número,
"noConfirmadoYBloqueado": número,"
"completed": número,
"notCompleted": número
},
"groups": {
"total": número
},
"segments": {
"total": número,
"confirmado": número,
"noConfirmado": número,
"bloqueado": número,
"noBloqueado": número,
"confirmadoYBloqueado": número,
"noConfirmadoYBloqueado": número,"
"completed": número,
"notCompleted": número,
"mt": {
"postEdited": número,
"relevant": número,
"notRelevant": número
},
"qa": {
"checked": número,
"notChecked": número
}
},
"words": {
"total": número,
"confirmado": número,
"noConfirmado": número,
"bloqueado": número,
"noBloqueado": número,
"confirmadoYBloqueado": número,
"noConfirmadoYBloqueado": número,"
"completed": número,
"notCompleted": número
},
"qa": {
"warnings": número,
"ignoredWarnings": number,
"notIgnoredWarnings": número
}
}
}
-
Las solicitudes HTTP se ejecutan en Postman.
-
Inicie sesión a través de un perfil de PM o admin, y obtenga un identificador único (token) de inicio de sesión utilizando una API de inicio de sesión.
-
POST requests to
api/v3/analytics/jobPart?token=<your_login_token>
Número total de trabajos
consulta
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
Bajo el campo aggregations, la agregación data respondió con 14,417 documentos coincidentes mostrados en el campo doc_count.
Número total de palabras fuente
consulta
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417,
"wordCount": {
"value": 6893067
}
}
}
}
Número total de palabras fuente dividido por idioma meta
consulta
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
},
"aggs": {
"byTargetLanguage": {
"terms": {
"field": "job.targetLanguage",
"size": 3
},
"aggs": {
"wordCount": {
"sum": {
"field": "data.volume.words"
}
}
}
}
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"byTargetLanguage": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 10071,
"buckets": [
{
"doc_count": 1835,
"wordCount": {
"value": 702721
},
"key": "cs"
},
{
"doc_count": 1491,
"wordCount": {
"value": 2602529
},
"key": "de"
},
{
"doc_count": 1020,
"wordCount": {
"value": 92676
},
"key": "fi"
}
]
},
"doc_count": 14417
}
}
}
La entidad buckets se muestra en la respuesta. Cuando se solicita al módulo de estadísticas que divida los datos por alguna categoría, el resultado se representa como una lista de buckets. Cada bucket contiene una clave que define qué datos representa este bucket (en este caso un idioma meta) y un valor (otras agregaciones) específico solo para esta parte del conjunto de datos.
Número total de trabajos divididos por estado del proyecto
consulta
{
"aggregations": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
Respuesta
{
"hits": {
"total": 359
},
"aggregations": {
"projectStatus": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"doc_count": 326,
"data": {
"doc_count": 14318
},
"key": "NEW"
},
{
"doc_count": 31,
"data": {
"doc_count": 89
},
"clave": "COMPLETED"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"clave": "ASSIGNED"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "DECLINED_BY_VENDOR"
}
]
}
}
}
Se ha indicado al módulo de estadísticas que divida los datos por estado del proyecto antes de la agregación de datos.
Número total de trabajos de proyectos nuevos
consulta
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
Respuesta
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
El campo filtrar se utiliza en la consulta. Esto reduce los datos antes de las siguientes agregaciones.