Logs de Execução
Consulta de logs de execução de decisões no Decision Engine.
Endpoints
| Método | Endpoint | Descrição | Permissão |
|---|---|---|---|
| GET | /api/v1/execution-logs | Listar todos os logs | DECISION_LOGS_READ |
| GET | /api/v1/execution-logs/:id | Obter log específico | DECISION_LOGS_READ |
| GET | /api/v1/decisions/:id/execution-logs | Listar logs de uma decisão | DECISION_LOGS_READ |
Listar Todos os Logs
GET /api/v1/execution-logs
Lista todos os logs de execução da organização.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
page[number] | integer | Número da página |
page[size] | integer | Itens por página |
filter[versionId] | string | Filtrar por versão |
filter[startDate] | string | Data inicial (ISO 8601) |
filter[endDate] | string | Data final (ISO 8601) |
- cURL
- JavaScript
curl 'https://decision-engine.stg.catalisa.app/api/v1/execution-logs?filter[startDate]=2024-01-01T00:00:00Z&filter[endDate]=2024-01-31T23:59:59Z' \
-H 'Authorization: Bearer SEU_TOKEN'
const params = new URLSearchParams({
'filter[startDate]': '2024-01-01T00:00:00Z',
'filter[endDate]': '2024-01-31T23:59:59Z',
'page[size]': '50',
});
const response = await fetch(
`https://decision-engine.stg.catalisa.app/api/v1/execution-logs?${params}`,
{
headers: {
'Authorization': `Bearer ${token}`,
},
}
);
const { data, meta } = await response.json();
Response (200 OK)
{
"data": [
{
"type": "execution-logs",
"id": "990e8400-e29b-41d4-a716-446655440010",
"attributes": {
"decisionId": "660e8400-e29b-41d4-a716-446655440001",
"versionId": "770e8400-e29b-41d4-a716-446655440002",
"versionNumber": "1.0.0",
"input": {
"score": 720,
"amount": 10000
},
"output": {
"decision": "approved",
"maxAmount": 15000
},
"executionTimeMs": 45,
"success": true,
"executedAt": "2024-01-15T10:30:00Z"
}
},
{
"type": "execution-logs",
"id": "990e8400-e29b-41d4-a716-446655440011",
"attributes": {
"decisionId": "660e8400-e29b-41d4-a716-446655440001",
"versionId": "770e8400-e29b-41d4-a716-446655440002",
"versionNumber": "1.0.0",
"input": {
"score": 450,
"amount": 5000
},
"output": {
"decision": "rejected",
"reason": "score_below_minimum"
},
"executionTimeMs": 38,
"success": true,
"executedAt": "2024-01-15T10:35:00Z"
}
}
],
"meta": {
"totalItems": 1250,
"totalPages": 25,
"currentPage": 1,
"itemsPerPage": 50
}
}
Obter Log Específico
GET /api/v1/execution-logs/:logId
Obtém detalhes de um log de execução específico.
- cURL
- JavaScript
curl 'https://decision-engine.stg.catalisa.app/api/v1/execution-logs/990e8400-e29b-41d4-a716-446655440010' \
-H 'Authorization: Bearer SEU_TOKEN'
const logId = '990e8400-e29b-41d4-a716-446655440010';
const response = await fetch(
`https://decision-engine.stg.catalisa.app/api/v1/execution-logs/${logId}`,
{
headers: {
'Authorization': `Bearer ${token}`,
},
}
);
const log = await response.json();
Response (200 OK)
{
"data": {
"type": "execution-logs",
"id": "990e8400-e29b-41d4-a716-446655440010",
"attributes": {
"decisionId": "660e8400-e29b-41d4-a716-446655440001",
"decisionName": "Verificação de Score",
"versionId": "770e8400-e29b-41d4-a716-446655440002",
"versionNumber": "1.0.0",
"input": {
"score": 720,
"amount": 10000,
"employmentType": "CLT"
},
"output": {
"decision": "approved",
"maxAmount": 15000,
"interestRate": 0.0299
},
"executionTimeMs": 45,
"success": true,
"error": null,
"executedAt": "2024-01-15T10:30:00Z",
"executedBy": "user-uuid"
},
"links": {
"self": "/api/v1/execution-logs/990e8400-e29b-41d4-a716-446655440010"
}
}
}
Listar Logs de uma Decisão
GET /api/v1/decisions/:decisionId/execution-logs
Lista logs de execução de uma decisão específica.
- cURL
- JavaScript
curl 'https://decision-engine.stg.catalisa.app/api/v1/decisions/660e8400-e29b-41d4-a716-446655440001/execution-logs?page[size]=20' \
-H 'Authorization: Bearer SEU_TOKEN'
const decisionId = '660e8400-e29b-41d4-a716-446655440001';
const params = new URLSearchParams({
'page[size]': '20',
});
const response = await fetch(
`https://decision-engine.stg.catalisa.app/api/v1/decisions/${decisionId}/execution-logs?${params}`,
{
headers: {
'Authorization': `Bearer ${token}`,
},
}
);
const { data, meta } = await response.json();
Estrutura do Log
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID único do log |
decisionId | string | ID da decisão executada |
decisionName | string | Nome da decisão |
versionId | string | ID da versão executada |
versionNumber | string | Número da versão (semver) |
input | object | Dados de entrada |
output | object | Resultado da execução |
executionTimeMs | integer | Tempo de execução em ms |
success | boolean | Se a execução foi bem-sucedida |
error | string | Mensagem de erro (se houver) |
executedAt | string | Data/hora da execução |
executedBy | string | ID do usuário que executou |
Exemplos de Uso
Analisar Performance
async function getAverageExecutionTime(decisionId, startDate, endDate) {
const params = new URLSearchParams({
'filter[startDate]': startDate,
'filter[endDate]': endDate,
'page[size]': '100',
});
let totalTime = 0;
let count = 0;
let page = 1;
let hasMore = true;
while (hasMore) {
params.set('page[number]', page.toString());
const response = await fetch(
`https://decision-engine.stg.catalisa.app/api/v1/decisions/${decisionId}/execution-logs?${params}`,
{
headers: {
'Authorization': `Bearer ${token}`,
},
}
);
const { data, meta } = await response.json();
data.forEach((log) => {
totalTime += log.attributes.executionTimeMs;
count++;
});
hasMore = meta.hasNextPage;
page++;
}
return count > 0 ? totalTime / count : 0;
}
const avgTime = await getAverageExecutionTime(
'decision-uuid',
'2024-01-01T00:00:00Z',
'2024-01-31T23:59:59Z'
);
console.log(`Tempo medio de execução: ${avgTime}ms`);
Contar Aprovacoes vs Rejeicoes
async function getDecisionStats(decisionId, startDate, endDate) {
// ... buscar todos os logs
const stats = {
approved: 0,
rejected: 0,
total: 0,
};
data.forEach((log) => {
stats.total++;
if (log.attributes.output.decision === 'approved') {
stats.approved++;
} else {
stats.rejected++;
}
});
return stats;
}
Erros Comuns
| Código | Erro | Descrição |
|---|---|---|
| 404 | NOT_FOUND | Log ou decisão não encontrado |
| 400 | VALIDATION | Filtro de data inválido |