@ahmedhegazee/nestjs-telescope
Version:
Advanced observability and monitoring solution for NestJS applications with ML-powered analytics, enterprise features, and production-ready scaling
104 lines • 4.41 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var DevToolsBridgeService_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DevToolsBridgeService = void 0;
const common_1 = require("@nestjs/common");
const telescope_service_1 = require("../../core/services/telescope.service");
const uuid_1 = require("uuid");
let DevToolsBridgeService = DevToolsBridgeService_1 = class DevToolsBridgeService {
constructor(telescopeService, config) {
this.telescopeService = telescopeService;
this.config = config;
this.logger = new common_1.Logger(DevToolsBridgeService_1.name);
}
async onModuleInit() {
if (!this.config.devtools.enabled) {
this.logger.log('DevTools integration disabled');
return;
}
this.logger.log('DevTools bridge service initialized');
this.startDataCollection();
}
async processDevToolsEntry(entry, type) {
try {
const telescopeEntry = this.transformToTelescopeFormat(entry, type);
await this.telescopeService.record(telescopeEntry);
this.logger.debug(`Processed DevTools entry: ${type}`);
}
catch (error) {
this.logger.error(`Failed to process DevTools entry: ${error.message}`);
}
}
transformToTelescopeFormat(entry, type) {
return {
id: `devtools_${(0, uuid_1.v4)()}`,
type: `devtools-${type}`,
familyHash: this.generateFamilyHash(entry),
content: this.sanitizeContent(entry),
tags: ['devtools', type],
timestamp: new Date(),
sequence: Date.now()
};
}
generateFamilyHash(entry) {
const str = JSON.stringify(entry);
let hash = 0;
for (let i = 0; i < str.length; i++) {
const char = str.charCodeAt(i);
hash = ((hash << 5) - hash) + char;
hash = hash & hash;
}
return Math.abs(hash).toString(16);
}
sanitizeContent(content) {
try {
return JSON.parse(JSON.stringify(content));
}
catch (error) {
return { error: 'Failed to serialize content', original: String(content) };
}
}
startDataCollection() {
setInterval(async () => {
try {
await this.collectDevToolsData();
}
catch (error) {
this.logger.error(`DevTools data collection failed: ${error.message}`);
}
}, 30000);
}
async collectDevToolsData() {
const mockGraph = {
modules: ['AppModule', 'TelescopeModule', 'DevtoolsModule'],
dependencies: ['@nestjs/common', '@nestjs/core', '@nestjs/devtools-integration'],
timestamp: new Date()
};
const mockPerformance = {
memoryUsage: process.memoryUsage(),
uptime: process.uptime(),
timestamp: new Date()
};
await this.processDevToolsEntry(mockGraph, 'dependency-graph');
await this.processDevToolsEntry(mockPerformance, 'performance-metrics');
}
};
exports.DevToolsBridgeService = DevToolsBridgeService;
exports.DevToolsBridgeService = DevToolsBridgeService = DevToolsBridgeService_1 = __decorate([
(0, common_1.Injectable)(),
__param(1, (0, common_1.Inject)('TELESCOPE_CONFIG')),
__metadata("design:paramtypes", [telescope_service_1.TelescopeService, Object])
], DevToolsBridgeService);
//# sourceMappingURL=devtools-bridge.service.js.map