60 lines
2.2 KiB
C#
60 lines
2.2 KiB
C#
|
using Microsoft.AspNetCore.Mvc;
|
|||
|
using Microsoft.Extensions.Options;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.Text.Json;
|
|||
|
using WebmrAPI.Configuration;
|
|||
|
using WebmrAPI.Models; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> using <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
using WebmrAPI.Services;
|
|||
|
|
|||
|
var builder = WebApplication.CreateBuilder(args);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
builder.Services.Configure<AppSettings>(builder.Configuration);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
builder.Services.AddLogging(config =>
|
|||
|
{
|
|||
|
config.AddConsole();
|
|||
|
config.AddDebug();
|
|||
|
});
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ProcessMonitor <20><><EFBFBD> Singleton <20> <20><><EFBFBD> IHostedService
|
|||
|
builder.Services.AddSingleton<ProcessMonitor>();
|
|||
|
builder.Services.AddHostedService(sp => sp.GetRequiredService<ProcessMonitor>());
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WinApi <20><><EFBFBD> Singleton (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
// <20><><EFBFBD><EFBFBD> WinApi <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
// builder.Services.AddSingleton<WinApi>(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
var app = builder.Build();
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> URL <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
var appSettings = app.Services.GetRequiredService<IOptions<AppSettings>>().Value;
|
|||
|
app.Urls.Add(appSettings.WebServer.Url);
|
|||
|
|
|||
|
|
|||
|
// GET /api/processes
|
|||
|
app.MapGet("/api/processes", (ProcessMonitor monitor, [FromQuery] bool pretty = false) =>
|
|||
|
{
|
|||
|
return Results.Content(JsonSerializer.Serialize(monitor.Processes, new JsonSerializerOptions { WriteIndented = pretty }), "application/json");
|
|||
|
});
|
|||
|
|
|||
|
// GET /api/processes/{pid}/memory_regions
|
|||
|
app.MapGet("/api/processes/{pid}/memory_regions", (int pid, ProcessMonitor monitor, [FromQuery] bool pretty = false) =>
|
|||
|
{
|
|||
|
var regions = monitor.GetBufferedMemoryRegions(pid);
|
|||
|
if (regions == null) {
|
|||
|
return Results.NotFound($"Process with PID {pid} or its memory regions not found.");
|
|||
|
}
|
|||
|
return Results.Content(JsonSerializer.Serialize(regions, new JsonSerializerOptions { WriteIndented = pretty }), "application/json");
|
|||
|
});
|
|||
|
|
|||
|
// GET /api/status/last_modified
|
|||
|
app.MapGet("/api/status/last_modified", (ProcessMonitor monitor, [FromQuery] bool pretty = false) =>
|
|||
|
{
|
|||
|
var date = new { LastModified = monitor.LastModifiedTimestamp.ToString("o") };
|
|||
|
return Results.Content(JsonSerializer.Serialize(date, new JsonSerializerOptions { WriteIndented = pretty }), "application/json");
|
|||
|
});
|
|||
|
|
|||
|
app.Run();
|