264 lines
11 KiB
JavaScript
264 lines
11 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.register = exports.externalServiceUp = exports.cm_docs_operations = exports.cm_docs_cache_misses = exports.cm_docs_cache_hits = exports.emailTemplateCacheMiss = exports.emailTemplateCacheHit = exports.emailTemplateRollback = exports.emailTestSent = exports.emailTemplatesUpdated = exports.cm_geocode_duration = exports.cm_geocode_requests_total = exports.cm_geocode_cache_misses = exports.cm_geocode_cache_hits = exports.locationResultCount = exports.locationQueryCount = exports.locationQueryDuration = exports.shiftSignupsTotal = exports.activeCanvassSessions = exports.canvassVisitsTotal = exports.responseSubmissionsTotal = exports.campaignEmailsTotal = exports.activeSessions = exports.loginAttemptsTotal = exports.emailSendDuration = exports.emailQueueSize = exports.emailsFailedTotal = exports.emailsSentTotal = exports.httpRequestsTotal = exports.httpRequestDuration = void 0;
|
|
exports.recordEmailSent = recordEmailSent;
|
|
exports.recordEmailFailed = recordEmailFailed;
|
|
exports.setEmailQueueSize = setEmailQueueSize;
|
|
exports.recordLoginAttempt = recordLoginAttempt;
|
|
exports.setActiveSessions = setActiveSessions;
|
|
exports.recordCampaignEmail = recordCampaignEmail;
|
|
exports.recordResponseSubmission = recordResponseSubmission;
|
|
exports.recordCanvassVisit = recordCanvassVisit;
|
|
exports.setActiveCanvassSessions = setActiveCanvassSessions;
|
|
exports.recordShiftSignup = recordShiftSignup;
|
|
exports.recordLocationQuery = recordLocationQuery;
|
|
exports.setServiceUp = setServiceUp;
|
|
exports.recordEmailTemplateUpdate = recordEmailTemplateUpdate;
|
|
exports.recordEmailTest = recordEmailTest;
|
|
exports.recordTemplateRollback = recordTemplateRollback;
|
|
exports.recordTemplateCacheHit = recordTemplateCacheHit;
|
|
exports.recordTemplateCacheMiss = recordTemplateCacheMiss;
|
|
const prom_client_1 = __importDefault(require("prom-client"));
|
|
const register = new prom_client_1.default.Registry();
|
|
exports.register = register;
|
|
register.setDefaultLabels({ app: 'changemaker-v2-api' });
|
|
prom_client_1.default.collectDefaultMetrics({ register });
|
|
// --- HTTP Metrics (existing) ---
|
|
exports.httpRequestDuration = new prom_client_1.default.Histogram({
|
|
name: 'http_request_duration_seconds',
|
|
help: 'Duration of HTTP requests in seconds',
|
|
labelNames: ['method', 'route', 'status_code'],
|
|
buckets: [0.01, 0.05, 0.1, 0.3, 0.5, 1, 3, 5, 10],
|
|
registers: [register],
|
|
});
|
|
exports.httpRequestsTotal = new prom_client_1.default.Counter({
|
|
name: 'http_requests_total',
|
|
help: 'Total number of HTTP requests',
|
|
labelNames: ['method', 'route', 'status_code'],
|
|
registers: [register],
|
|
});
|
|
// --- Email Metrics ---
|
|
exports.emailsSentTotal = new prom_client_1.default.Counter({
|
|
name: 'cm_emails_sent_total',
|
|
help: 'Total campaign emails sent successfully',
|
|
labelNames: ['campaign_id'],
|
|
registers: [register],
|
|
});
|
|
exports.emailsFailedTotal = new prom_client_1.default.Counter({
|
|
name: 'cm_emails_failed_total',
|
|
help: 'Total campaign emails that failed to send',
|
|
labelNames: ['campaign_id', 'error_type'],
|
|
registers: [register],
|
|
});
|
|
exports.emailQueueSize = new prom_client_1.default.Gauge({
|
|
name: 'cm_email_queue_size',
|
|
help: 'Current email queue size (waiting + active)',
|
|
registers: [register],
|
|
});
|
|
exports.emailSendDuration = new prom_client_1.default.Histogram({
|
|
name: 'cm_email_send_duration_seconds',
|
|
help: 'Duration of individual email sends',
|
|
buckets: [0.1, 0.5, 1, 2, 5, 10, 30],
|
|
registers: [register],
|
|
});
|
|
// --- Auth Metrics ---
|
|
exports.loginAttemptsTotal = new prom_client_1.default.Counter({
|
|
name: 'cm_login_attempts_total',
|
|
help: 'Total login attempts',
|
|
labelNames: ['status'],
|
|
registers: [register],
|
|
});
|
|
exports.activeSessions = new prom_client_1.default.Gauge({
|
|
name: 'cm_active_sessions',
|
|
help: 'Number of active refresh tokens (approximate session count)',
|
|
registers: [register],
|
|
});
|
|
// --- Campaign / Influence Metrics ---
|
|
exports.campaignEmailsTotal = new prom_client_1.default.Counter({
|
|
name: 'cm_campaign_emails_total',
|
|
help: 'Total campaign emails created (SMTP + mailto)',
|
|
labelNames: ['campaign_id'],
|
|
registers: [register],
|
|
});
|
|
exports.responseSubmissionsTotal = new prom_client_1.default.Counter({
|
|
name: 'cm_response_submissions_total',
|
|
help: 'Total response submissions from public',
|
|
registers: [register],
|
|
});
|
|
// --- Canvass / Map Metrics ---
|
|
exports.canvassVisitsTotal = new prom_client_1.default.Counter({
|
|
name: 'cm_canvass_visits_total',
|
|
help: 'Total canvass visits recorded',
|
|
labelNames: ['outcome'],
|
|
registers: [register],
|
|
});
|
|
exports.activeCanvassSessions = new prom_client_1.default.Gauge({
|
|
name: 'cm_active_canvass_sessions',
|
|
help: 'Number of active canvass sessions',
|
|
registers: [register],
|
|
});
|
|
exports.shiftSignupsTotal = new prom_client_1.default.Counter({
|
|
name: 'cm_shift_signups_total',
|
|
help: 'Total shift signups',
|
|
registers: [register],
|
|
});
|
|
// --- Location Query Metrics ---
|
|
exports.locationQueryDuration = new prom_client_1.default.Histogram({
|
|
name: 'cm_map_location_query_duration_seconds',
|
|
help: 'Duration of location queries',
|
|
labelNames: ['endpoint', 'has_bounds'],
|
|
buckets: [0.01, 0.05, 0.1, 0.2, 0.5, 1, 2, 5],
|
|
registers: [register],
|
|
});
|
|
exports.locationQueryCount = new prom_client_1.default.Counter({
|
|
name: 'cm_map_location_query_count_total',
|
|
help: 'Total location queries',
|
|
labelNames: ['endpoint', 'has_bounds'],
|
|
registers: [register],
|
|
});
|
|
exports.locationResultCount = new prom_client_1.default.Histogram({
|
|
name: 'cm_map_location_result_count',
|
|
help: 'Number of locations returned per query',
|
|
labelNames: ['endpoint'],
|
|
buckets: [10, 50, 100, 500, 1000, 5000, 10000],
|
|
registers: [register],
|
|
});
|
|
// --- Geocoding Metrics ---
|
|
exports.cm_geocode_cache_hits = new prom_client_1.default.Counter({
|
|
name: 'cm_geocode_cache_hits_total',
|
|
help: 'Total geocoding cache hits',
|
|
registers: [register],
|
|
});
|
|
exports.cm_geocode_cache_misses = new prom_client_1.default.Counter({
|
|
name: 'cm_geocode_cache_misses_total',
|
|
help: 'Total geocoding cache misses',
|
|
registers: [register],
|
|
});
|
|
exports.cm_geocode_requests_total = new prom_client_1.default.Counter({
|
|
name: 'cm_geocode_requests_total',
|
|
help: 'Total geocoding requests',
|
|
labelNames: ['provider', 'status'],
|
|
registers: [register],
|
|
});
|
|
exports.cm_geocode_duration = new prom_client_1.default.Histogram({
|
|
name: 'cm_geocode_duration_seconds',
|
|
help: 'Duration of geocoding requests',
|
|
labelNames: ['provider'],
|
|
buckets: [0.1, 0.5, 1, 2, 5, 10, 30],
|
|
registers: [register],
|
|
});
|
|
// --- Email Template Metrics ---
|
|
exports.emailTemplatesUpdated = new prom_client_1.default.Counter({
|
|
name: 'cm_email_templates_updated_total',
|
|
help: 'Email templates updated',
|
|
labelNames: ['template_key', 'user_role'],
|
|
registers: [register],
|
|
});
|
|
exports.emailTestSent = new prom_client_1.default.Counter({
|
|
name: 'cm_email_test_sent_total',
|
|
help: 'Test emails sent',
|
|
labelNames: ['template_key', 'success'],
|
|
registers: [register],
|
|
});
|
|
exports.emailTemplateRollback = new prom_client_1.default.Counter({
|
|
name: 'cm_email_template_rollback_total',
|
|
help: 'Template rollbacks',
|
|
labelNames: ['template_key'],
|
|
registers: [register],
|
|
});
|
|
exports.emailTemplateCacheHit = new prom_client_1.default.Counter({
|
|
name: 'cm_email_template_cache_hit_total',
|
|
help: 'Template cache hits',
|
|
labelNames: ['template_key'],
|
|
registers: [register],
|
|
});
|
|
exports.emailTemplateCacheMiss = new prom_client_1.default.Counter({
|
|
name: 'cm_email_template_cache_miss_total',
|
|
help: 'Template cache misses',
|
|
labelNames: ['template_key'],
|
|
registers: [register],
|
|
});
|
|
// --- Docs Editor Metrics ---
|
|
exports.cm_docs_cache_hits = new prom_client_1.default.Counter({
|
|
name: 'cm_docs_cache_hits_total',
|
|
help: 'Documentation cache hits',
|
|
labelNames: ['type'], // 'tree' or 'file'
|
|
registers: [register],
|
|
});
|
|
exports.cm_docs_cache_misses = new prom_client_1.default.Counter({
|
|
name: 'cm_docs_cache_misses_total',
|
|
help: 'Documentation cache misses',
|
|
labelNames: ['type'],
|
|
registers: [register],
|
|
});
|
|
exports.cm_docs_operations = new prom_client_1.default.Counter({
|
|
name: 'cm_docs_operations_total',
|
|
help: 'Documentation file operations',
|
|
labelNames: ['operation'], // 'read', 'write', 'create', 'delete', 'rename'
|
|
registers: [register],
|
|
});
|
|
// --- External Service Health ---
|
|
exports.externalServiceUp = new prom_client_1.default.Gauge({
|
|
name: 'cm_external_service_up',
|
|
help: 'Whether an external service is reachable (1=up, 0=down)',
|
|
labelNames: ['service'],
|
|
registers: [register],
|
|
});
|
|
// --- Helper Functions ---
|
|
function recordEmailSent(campaignId) {
|
|
exports.emailsSentTotal.inc({ campaign_id: campaignId });
|
|
}
|
|
function recordEmailFailed(campaignId, errorType = 'unknown') {
|
|
exports.emailsFailedTotal.inc({ campaign_id: campaignId, error_type: errorType });
|
|
}
|
|
function setEmailQueueSize(size) {
|
|
exports.emailQueueSize.set(size);
|
|
}
|
|
function recordLoginAttempt(status) {
|
|
exports.loginAttemptsTotal.inc({ status });
|
|
}
|
|
function setActiveSessions(count) {
|
|
exports.activeSessions.set(count);
|
|
}
|
|
function recordCampaignEmail(campaignId) {
|
|
exports.campaignEmailsTotal.inc({ campaign_id: campaignId });
|
|
}
|
|
function recordResponseSubmission() {
|
|
exports.responseSubmissionsTotal.inc();
|
|
}
|
|
function recordCanvassVisit(outcome) {
|
|
exports.canvassVisitsTotal.inc({ outcome });
|
|
}
|
|
function setActiveCanvassSessions(count) {
|
|
exports.activeCanvassSessions.set(count);
|
|
}
|
|
function recordShiftSignup() {
|
|
exports.shiftSignupsTotal.inc();
|
|
}
|
|
function recordLocationQuery(endpoint, hasBounds, resultCount, durationSeconds) {
|
|
exports.locationQueryCount.inc({ endpoint, has_bounds: hasBounds.toString() });
|
|
exports.locationQueryDuration.observe({ endpoint, has_bounds: hasBounds.toString() }, durationSeconds);
|
|
exports.locationResultCount.observe({ endpoint }, resultCount);
|
|
}
|
|
function setServiceUp(service, up) {
|
|
exports.externalServiceUp.set({ service }, up ? 1 : 0);
|
|
}
|
|
function recordEmailTemplateUpdate(templateKey, userRole) {
|
|
exports.emailTemplatesUpdated.inc({ template_key: templateKey, user_role: userRole });
|
|
}
|
|
function recordEmailTest(templateKey, success) {
|
|
exports.emailTestSent.inc({ template_key: templateKey, success: success.toString() });
|
|
}
|
|
function recordTemplateRollback(templateKey) {
|
|
exports.emailTemplateRollback.inc({ template_key: templateKey });
|
|
}
|
|
function recordTemplateCacheHit(templateKey) {
|
|
exports.emailTemplateCacheHit.inc({ template_key: templateKey });
|
|
}
|
|
function recordTemplateCacheMiss(templateKey) {
|
|
exports.emailTemplateCacheMiss.inc({ template_key: templateKey });
|
|
}
|
|
//# sourceMappingURL=metrics.js.map
|