Files
DLE/backend/routes/monitoring.js
2025-10-08 18:01:14 +03:00

127 lines
3.5 KiB
JavaScript

/**
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
* All rights reserved.
*
* This software is proprietary and confidential.
* Unauthorized copying, modification, or distribution is prohibited.
*
* For licensing inquiries: info@hb3-accelerator.com
* Website: https://hb3-accelerator.com
* GitHub: https://github.com/HB3-ACCELERATOR
*/
const express = require('express');
const router = express.Router();
const axios = require('axios');
const db = require('../db');
const aiAssistant = require('../services/ai-assistant');
const aiCache = require('../services/ai-cache');
const logger = require('../utils/logger');
const ollamaConfig = require('../services/ollamaConfig');
router.get('/', async (req, res) => {
const results = {};
// Backend
results.backend = { status: 'ok' };
// Vector Search
try {
const baseUrl = process.env.VECTOR_SEARCH_URL || 'http://vector-search:8001';
const healthUrl = baseUrl.replace(/\/$/, '') + '/health';
const vs = await axios.get(healthUrl, { timeout: 2000 });
results.vectorSearch = { status: 'ok', ...vs.data };
} catch (e) {
console.log('Vector Search error:', e.message, 'Status:', e.response?.status);
results.vectorSearch = { status: 'error', error: e.message };
}
// Ollama
try {
const ollamaConfig = require('../services/ollamaConfig');
const ollama = await axios.get(ollamaConfig.getApiUrl('tags'), { timeout: 2000 });
results.ollama = { status: 'ok', models: ollama.data.models?.length || 0 };
} catch (e) {
results.ollama = { status: 'error', error: e.message };
}
// PostgreSQL
try {
await db.query('SELECT 1');
results.postgres = { status: 'ok' };
} catch (e) {
results.postgres = { status: 'error', error: e.message };
}
res.json({ status: 'ok', services: results, timestamp: new Date().toISOString() });
});
// GET /api/monitoring/ai-stats - статистика AI
router.get('/ai-stats', async (req, res) => {
try {
res.json({
status: 'ok',
timestamp: new Date().toISOString(),
ai: {
health: 'ok',
model: ollamaConfig.getDefaultModel(),
baseUrl: ollamaConfig.getBaseUrl()
},
cache: {
size: 0,
maxSize: 100,
hitRate: 0
},
queue: {
totalAdded: 0,
totalProcessed: 0,
totalFailed: 0,
averageProcessingTime: 0,
currentQueueSize: 0,
lastProcessedAt: null,
uptime: 0
}
});
} catch (error) {
logger.error('Error getting AI stats:', error);
res.status(500).json({
status: 'error',
error: error.message
});
}
});
// POST /api/monitoring/ai-cache/clear - очистка кэша
router.post('/ai-cache/clear', async (req, res) => {
try {
aiCache.clear();
res.json({
status: 'ok',
message: 'AI cache cleared successfully'
});
} catch (error) {
logger.error('Error clearing AI cache:', error);
res.status(500).json({
status: 'error',
error: error.message
});
}
});
// POST /api/monitoring/ai-queue/clear - очистка очереди
router.post('/ai-queue/clear', async (req, res) => {
try {
aiAssistant.aiQueue.clearQueue();
res.json({
status: 'ok',
message: 'AI queue cleared successfully'
});
} catch (error) {
logger.error('Error clearing AI queue:', error);
res.status(500).json({
status: 'error',
error: error.message
});
}
});
module.exports = router;