hikma-engine
Version:
Code Knowledge Graph Indexer - A sophisticated TypeScript-based indexer that transforms Git repositories into multi-dimensional knowledge stores for AI agents
117 lines (116 loc) • 4.54 kB
JavaScript
/**
* @file Monitoring routes for basic health status.
* Simplified version for initial API functionality.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createMonitoringRouter = createMonitoringRouter;
const express_1 = require("express");
const health_check_1 = require("../services/health-check");
const response_formatter_1 = require("../utils/response-formatter");
const error_handling_1 = require("../middleware/error-handling");
const auth_1 = require("../middleware/auth");
const logger_1 = require("../../utils/logger");
const logger = (0, logger_1.getLogger)('MonitoringRoutes');
/**
* Creates the monitoring router with basic health endpoint.
*/
function createMonitoringRouter() {
const router = (0, express_1.Router)();
// Apply optional authentication to monitoring endpoints
router.use(auth_1.optionalAuth);
/**
* Simple health status endpoint.
* GET /api/v1/monitoring/health
*/
router.get('/health', (0, error_handling_1.asyncErrorHandler)(async (req, res) => {
const health = await health_check_1.healthCheckService.performHealthCheck();
// Set appropriate HTTP status based on health
let statusCode = 200;
if (health.status === 'degraded') {
statusCode = 200; // Still operational
}
else if (health.status === 'unhealthy') {
statusCode = 503; // Service unavailable
}
res.status(statusCode).json(response_formatter_1.formatResponse.success(req, health));
}));
/**
* Detailed health status endpoint.
* GET /api/v1/monitoring/health/detailed
*/
router.get('/health/detailed', (0, error_handling_1.asyncErrorHandler)(async (req, res) => {
const detailedStatus = await health_check_1.healthCheckService.getDetailedStatus();
res.json(response_formatter_1.formatResponse.success(req, detailedStatus));
}));
/**
* Simple status endpoint for load balancers.
* GET /api/v1/monitoring/status
*/
router.get('/status', (0, error_handling_1.asyncErrorHandler)(async (req, res) => {
const health = await health_check_1.healthCheckService.performHealthCheck();
if (health.status === 'healthy') {
res.status(200).send('OK');
}
else if (health.status === 'degraded') {
res.status(200).send('DEGRADED');
}
else {
res.status(503).send('UNHEALTHY');
}
}));
/**
* Kubernetes readiness probe endpoint.
* GET /api/v1/monitoring/readiness
*/
router.get('/readiness', (0, error_handling_1.asyncErrorHandler)(async (req, res) => {
const health = await health_check_1.healthCheckService.performHealthCheck();
// Check if critical services are available
const criticalChecks = ['searchService', 'sqlite'];
const criticalFailures = criticalChecks.filter((check) => health.checks[check]?.status === 'fail');
if (criticalFailures.length === 0) {
res.status(200).json({ status: 'ready' });
}
else {
res.status(503).json({
status: 'not ready',
failures: criticalFailures,
});
}
}));
/**
* Kubernetes liveness probe endpoint.
* GET /api/v1/monitoring/liveness
*/
router.get('/liveness', (req, res) => {
// Simple liveness check - if we can respond, we're alive
res.status(200).json({
status: 'alive',
timestamp: new Date().toISOString(),
uptime: process.uptime(),
});
});
/**
* System information endpoint.
* GET /api/v1/monitoring/system
*/
router.get('/system', (0, error_handling_1.asyncErrorHandler)(async (req, res) => {
const systemInfo = health_check_1.healthCheckService.getSystemInfo();
res.json(response_formatter_1.formatResponse.success(req, systemInfo));
}));
/**
* Version information endpoint.
* GET /api/v1/monitoring/version
*/
router.get('/version', (req, res) => {
const version = {
api: process.env.npm_package_version || '1.0.0',
node: process.version,
environment: process.env.NODE_ENV || 'development',
buildTime: process.env.BUILD_TIME || 'unknown',
gitCommit: process.env.GIT_COMMIT || 'unknown',
};
res.json(response_formatter_1.formatResponse.success(req, version));
});
return router;
}
;