server.js•2.94 kB
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;