const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
require('dotenv').config();
const vmRoutes = require('./routes/vmRoutes');
const vmssRoutes = require('./routes/vmssRoutes');
const azureConfig = require('./config/azure');
const app = express();
const PORT = process.env.PORT || 3000;
// Middlewares de segurança e parsing
app.use(helmet());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Logger middleware
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.path}`);
next();
});
// Health check endpoint
app.get('/health', (req, res) => {
res.json({
status: 'healthy',
azureConfigured: azureConfig.isReady(),
timestamp: new Date().toISOString(),
service: 'Azure MCP Server'
});
});
// Root endpoint
app.get('/', (req, res) => {
res.json({
service: 'Azure MCP Server',
version: '1.0.0',
description: 'Servidor para monitorar serviços da Azure (VMSS, VMs, etc)',
endpoints: {
vms: {
listAll: 'GET /api/vms',
listByResourceGroup: 'GET /api/vms/resource-group/:resourceGroup',
getVM: 'GET /api/vms/:resourceGroup/:vmName',
getVMStatus: 'GET /api/vms/:resourceGroup/:vmName/status'
},
vmss: {
listAll: 'GET /api/vmss',
listByResourceGroup: 'GET /api/vmss/resource-group/:resourceGroup',
getVMSS: 'GET /api/vmss/:resourceGroup/:vmssName',
getVMSSStatus: 'GET /api/vmss/:resourceGroup/:vmssName/status',
listInstances: 'GET /api/vmss/:resourceGroup/:vmssName/instances',
getInstance: 'GET /api/vmss/:resourceGroup/:vmssName/instances/:instanceId'
}
}
});
});
// Routes
app.use('/api/vms', vmRoutes);
app.use('/api/vmss', vmssRoutes);
// Error handling middleware
app.use((err, req, res, next) => {
console.error('Error:', err);
res.status(500).json({
success: false,
error: err.message || 'Erro interno do servidor'
});
});
// 404 handler
app.use((req, res) => {
res.status(404).json({
success: false,
error: 'Endpoint não encontrado'
});
});
// Start server
app.listen(PORT, () => {
console.log('='.repeat(50));
console.log(`✓ Azure MCP Server iniciado com sucesso!`);
console.log(` Porta: ${PORT}`);
console.log(` Ambiente: ${process.env.NODE_ENV || 'development'}`);
console.log(` Azure Config: ${azureConfig.isReady() ? '✓ Configurado' : '✗ Não configurado'}`);
console.log(` Health check: http://localhost:${PORT}/health`);
console.log(` API Docs: http://localhost:${PORT}/`);
console.log('='.repeat(50));
});
// Graceful shutdown
process.on('SIGTERM', () => {
console.log('SIGTERM recebido. Encerrando servidor...');
process.exit(0);
});
process.on('SIGINT', () => {
console.log('\nSIGINT recebido. Encerrando servidor...');
process.exit(0);
});
module.exports = app;