using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.AspNetCore.Http; using ResourceMonitorService.Hubs; using Microsoft.OpenApi.Models; namespace ResourceMonitorService { public class Startup { public void ConfigureServices(IServiceCollection services) { // Add MVC services services.AddControllers() .AddNewtonsoftJson(); // For JSON serialization // Add SignalR for real-time updates services.AddSignalR(); // Add CORS for API access services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); // Add Swagger for API documentation services.AddEndpointsApiExplorer(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Resource Monitor API", Version = "v1" }); }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Resource Monitor API V1"); }); } // Serve static files (CSS, JS, images) app.UseStaticFiles(); app.UseRouting(); app.UseCors("AllowAll"); app.UseEndpoints(endpoints => { // Map API controllers endpoints.MapControllers(); // Map SignalR hub endpoints.MapHub("/resourceHub"); // Default route to index.html endpoints.MapFallbackToFile("index.html"); }); } } }