Skip to main content
Glama
MonitoringService.test.ts3.98 kB
import { MonitoringServiceImpl } from '../MonitoringService'; import { AnalyticsEngineDataset } from '../../types/monitoring'; import { Logger } from '../../utils/logger'; describe('MonitoringServiceImpl', () => { let monitoringService: MonitoringServiceImpl; let mockAnalyticsEngine: AnalyticsEngineDataset; let mockLogger: Logger; beforeEach(() => { mockAnalyticsEngine = { writeDataPoint: jest.fn(), }; mockLogger = { info: jest.fn(), error: jest.fn(), warn: jest.fn(), debug: jest.fn(), } as unknown as Logger; monitoringService = new MonitoringServiceImpl( mockAnalyticsEngine, mockLogger, ); }); afterEach(() => { jest.clearAllMocks(); }); describe('trackRequest', () => { it('should track request metrics and log info', () => { monitoringService.trackRequest('GET', '/test', 200, 150, 'user1', undefined); expect(mockLogger.info).toHaveBeenCalledWith('Tracking request', { method: 'GET', path: '/test', status: 200, duration: 150, }); expect(mockAnalyticsEngine.writeDataPoint).toHaveBeenCalledWith({ indexes: ['requests_total', 'GET', '/test'], blobs: ['user1', null], doubles: [200, 150], }); }); it('should handle requests with errors', () => { monitoringService.trackRequest('POST', '/fail', 500, 200, 'user2', 'Server Error'); expect(mockLogger.info).toHaveBeenCalledWith('Tracking request', { method: 'POST', path: '/fail', status: 500, duration: 200, }); expect(mockAnalyticsEngine.writeDataPoint).toHaveBeenCalledWith({ indexes: ['requests_total', 'POST', '/fail'], blobs: ['user2', 'Server Error'], doubles: [500, 200], }); }); }); describe('trackApiCall', () => { it('should track a successful API call', () => { monitoringService.trackApiCall('Tally.so', true, 300, 200); expect(mockLogger.info).toHaveBeenCalledWith('Tracking API call', { service: 'Tally.so', success: true, duration: 300, }); expect(mockAnalyticsEngine.writeDataPoint).toHaveBeenCalledWith({ indexes: ['api_calls_total', 'Tally.so'], blobs: ['success'], doubles: [300, 200], }); }); it('should track a failed API call', () => { monitoringService.trackApiCall('Tally.so', false, 500, 503); expect(mockLogger.info).toHaveBeenCalledWith('Tracking API call', { service: 'Tally.so', success: false, duration: 500, }); expect(mockAnalyticsEngine.writeDataPoint).toHaveBeenCalledWith({ indexes: ['api_calls_total', 'Tally.so'], blobs: ['failure'], doubles: [500, 503], }); }); }); describe('trackError', () => { it('should track an error with context', () => { const error = new Error('Something went wrong'); error.stack = 'error stack trace'; const context = { userId: 'user123' }; monitoringService.trackError(error, context); expect(mockLogger.error).toHaveBeenCalledWith('Tracking error', { errorMessage: 'Something went wrong', stack: 'error stack trace', context, }); expect(mockAnalyticsEngine.writeDataPoint).toHaveBeenCalledWith({ indexes: ['errors_total'], blobs: ['Error', 'Something went wrong', 'error stack trace'], }); }); }); describe('trackExecution', () => { it('should track execution time of a labeled process', () => { monitoringService.trackExecution('database-query', 75); expect(mockLogger.info).toHaveBeenCalledWith('Tracking execution', { label: 'database-query', duration: 75, }); expect(mockAnalyticsEngine.writeDataPoint).toHaveBeenCalledWith({ indexes: ['execution_time', 'database-query'], doubles: [75], }); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/learnwithcc/tally-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server