genkit-cli
Version:
CLI for interacting with the Google Genkit AI framework
106 lines • 4.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.traceList = void 0;
const utils_1 = require("@genkit-ai/tools-common/utils");
const commander_1 = require("commander");
const manager_utils_1 = require("../utils/manager-utils");
function formatTruncated(val, maxLen = 100) {
if (val === undefined)
return '';
const parsed = typeof val === 'string' ? val : JSON.stringify(val);
return parsed.length > maxLen
? parsed.substring(0, maxLen - 3) + '...'
: parsed;
}
exports.traceList = new commander_1.Command('trace:list')
.description('list traces')
.option('-l, --limit <number>', 'limit the number of returned traces', '15')
.option('--status <status>', 'filter by root span status')
.option('--type <type>', 'filter by root span type')
.option('--name <name>', 'filter by root span name')
.option('--continuation-token <token>', 'continuation token for pagination')
.action(async (options) => {
const projectRoot = await (0, utils_1.findProjectRoot)();
const runAction = async (manager) => {
try {
const eqFilter = {};
if (options.status) {
const statusVal = options.status.toLowerCase() === 'error'
? 2
: options.status.toLowerCase() === 'success'
? 0
: Number(options.status);
eqFilter['status'] = [statusVal];
}
if (options.type) {
eqFilter['type'] = [options.type];
}
if (options.name) {
eqFilter['name'] = [options.name];
}
const filter = {
eq: Object.keys(eqFilter).length > 0 ? eqFilter : undefined,
neq: { 'genkitx:ignore-trace': ['true'] },
};
const listRequest = {
limit: Number.parseInt(options.limit, 10),
continuationToken: options.continuationToken,
filter,
};
const response = await manager.listTraces(listRequest);
if (!response || !response.traces || response.traces.length === 0) {
utils_1.logger.info('No traces found.');
return;
}
console.log(`Found ${response.traces.length} traces:\n`);
response.traces.forEach((trace) => {
let duration = 'unknown';
let time = 'unknown';
if (trace.startTime) {
time = new Date(trace.startTime).toLocaleString();
if (trace.endTime) {
duration = `${trace.endTime - trace.startTime}ms`;
}
}
let status = 'unknown';
let type = 'unknown';
let inputStr = '';
let outputStr = '';
const rootSpan = (0, utils_1.stackTraceSpans)(trace);
if (rootSpan) {
const attrs = rootSpan.attributes || {};
status =
attrs['genkit:state'] ||
(rootSpan.status?.code !== undefined
? String(rootSpan.status.code)
: 'unknown');
type =
attrs['genkit:metadata:subtype'] ||
attrs['genkit:type'] ||
'unknown';
inputStr = formatTruncated(attrs['genkit:input']);
outputStr = formatTruncated(attrs['genkit:output']);
}
console.log(`ID: ${trace.traceId}`);
console.log(`Type: ${type}`);
console.log(`Name: ${trace.displayName || 'unknown'}`);
console.log(`Status: ${status}`);
console.log(`Time: ${time}`);
console.log(`Duration: ${duration}`);
if (inputStr)
console.log(`Input: ${inputStr}`);
if (outputStr)
console.log(`Output: ${outputStr}`);
console.log('---');
});
if (response.continuationToken) {
console.log(`\nTo get the next page, use: --continuation-token ${response.continuationToken}`);
}
}
catch (e) {
utils_1.logger.error(`Error listing traces: ${e}`);
}
};
await (0, manager_utils_1.runWithManager)(projectRoot, runAction);
});
//# sourceMappingURL=trace-list.js.map