tasq/node_modules/agentdb/examples/telemetry-integration-batch.ts

193 lines
4.8 KiB
TypeScript

/**
* Example: BatchOperations Telemetry Integration
*
* Shows how to integrate OpenTelemetry observability into batch operations.
*/
import { traced, recordMetric, withBatchTelemetry } from '../src/observability';
class BatchOperationsWithTelemetry {
@traced('batch.insert-episodes', {
recordMetrics: true,
attributes: { component: 'batch-operations' },
})
async insertEpisodes(episodes: any[]): Promise<number> {
return withBatchTelemetry('insert', 'episodes', episodes.length, async () => {
// Batch insert logic with transaction
let completed = 0;
// Process in batches
const batchSize = 100;
for (let i = 0; i < episodes.length; i += batchSize) {
const batch = episodes.slice(i, i + batchSize);
// Insert batch with telemetry
// (already tracked by withBatchTelemetry)
completed += batch.length;
// Record progress
recordMetric('operation', {
operationType: 'batch_insert_progress',
tableName: 'episodes',
resultSize: completed,
});
}
return completed;
});
}
@traced('batch.insert-skills', { recordMetrics: true })
async insertSkills(skills: any[]): Promise<number[]> {
return withBatchTelemetry('insert', 'skills', skills.length, async () => {
const skillIds: number[] = [];
// Batch insert logic...
recordMetric('operation', {
operationType: 'batch_insert_skills',
tableName: 'skills',
resultSize: skillIds.length,
});
return skillIds;
});
}
/**
* Example: Parallel batch operations with telemetry
*/
@traced('batch.parallel-insert', {
recordMetrics: true,
attributes: { parallel: true },
})
async batchInsertParallel(
table: string,
data: any[],
columns: string[],
config: any = {}
): Promise<any> {
const startTime = Date.now();
const result = await withBatchTelemetry('parallel_insert', table, data.length, async () => {
// Parallel batch processing...
const totalInserted = data.length;
const chunksProcessed = Math.ceil(data.length / (config.chunkSize || 1000));
// Record throughput metric
const duration = Date.now() - startTime;
const throughput = totalInserted / (duration / 1000); // rows per second
recordMetric('operation', {
operationType: 'parallel_batch_insert',
tableName: table,
resultSize: totalInserted,
});
return {
totalInserted,
chunksProcessed,
duration,
errors: [],
};
});
// Record batch operation statistics
recordMetric('query', {
latencyMs: result.duration,
operationType: 'parallel_batch_insert',
tableName: table,
success: result.errors.length === 0,
});
return result;
}
/**
* Example: Data pruning with telemetry
*/
@traced('batch.prune-data', { recordMetrics: true })
async pruneData(config: any = {}): Promise<any> {
const startTime = Date.now();
const result = {
episodesPruned: 0,
skillsPruned: 0,
patternsPruned: 0,
spaceSaved: 0,
};
// Prune episodes with telemetry
await withTelemetry('prune_episodes', 'episodes', async () => {
result.episodesPruned = 100; // placeholder
});
// Prune skills with telemetry
await withTelemetry('prune_skills', 'skills', async () => {
result.skillsPruned = 50; // placeholder
});
// Record pruning metrics
const duration = Date.now() - startTime;
recordMetric('operation', {
operationType: 'data_pruning',
tableName: 'all',
resultSize: result.episodesPruned + result.skillsPruned + result.patternsPruned,
});
recordMetric('query', {
latencyMs: duration,
operationType: 'data_pruning',
success: true,
});
return result;
}
/**
* Example: Database optimization with telemetry
*/
@traced('batch.optimize-database', { recordMetrics: true })
optimize(): void {
const startTime = Date.now();
// ANALYZE with telemetry
recordMetric('operation', {
operationType: 'analyze',
tableName: 'all',
});
// VACUUM with telemetry
const duration = Date.now() - startTime;
recordMetric('query', {
latencyMs: duration,
operationType: 'optimize',
success: true,
});
}
}
/**
* Integration Summary for BatchOperations:
*
* 1. Add @traced decorator to:
* - insertEpisodes()
* - insertSkills()
* - insertPatterns()
* - batchInsertParallel()
* - pruneData()
* - optimize()
*
* 2. Use withBatchTelemetry() for:
* - All batch insert operations
* - Parallel processing
*
* 3. Record custom metrics for:
* - Throughput (rows/second)
* - Batch completion percentage
* - Space saved from pruning
* - Optimization duration
*/
export { BatchOperationsWithTelemetry };