feat: complete final jetstream parity transport and runtime baselines

This commit is contained in:
Joseph Doherty
2026-02-23 11:04:43 -05:00
parent 53585012f3
commit 8bce096f55
61 changed files with 2655 additions and 129 deletions

View File

@@ -0,0 +1,46 @@
using NATS.Server.Auth;
namespace NATS.Server.Monitoring;
public sealed class AccountzHandler
{
private readonly NatsServer _server;
public AccountzHandler(NatsServer server)
{
_server = server;
}
public object Build()
{
var accounts = _server.GetAccounts().Select(ToAccountDto).ToArray();
return new
{
accounts,
num_accounts = accounts.Length,
};
}
public object BuildStats()
{
var accounts = _server.GetAccounts().ToArray();
return new
{
total_accounts = accounts.Length,
total_connections = accounts.Sum(a => a.ClientCount),
total_subscriptions = accounts.Sum(a => a.SubscriptionCount),
};
}
private static object ToAccountDto(Account account)
{
return new
{
name = account.Name,
connections = account.ClientCount,
subscriptions = account.SubscriptionCount,
in_msgs = account.InMsgs,
out_msgs = account.OutMsgs,
};
}
}

View File

@@ -0,0 +1,21 @@
namespace NATS.Server.Monitoring;
public sealed class GatewayzHandler
{
private readonly NatsServer _server;
public GatewayzHandler(NatsServer server)
{
_server = server;
}
public object Build()
{
var gateways = _server.Stats.Gateways;
return new
{
gateways,
num_gateways = gateways,
};
}
}

View File

@@ -0,0 +1,21 @@
namespace NATS.Server.Monitoring;
public sealed class LeafzHandler
{
private readonly NatsServer _server;
public LeafzHandler(NatsServer server)
{
_server = server;
}
public object Build()
{
var leafs = _server.Stats.Leafs;
return new
{
leafs,
num_leafs = leafs,
};
}
}

View File

@@ -17,6 +17,10 @@ public sealed class MonitorServer : IAsyncDisposable
private readonly ConnzHandler _connzHandler;
private readonly SubszHandler _subszHandler;
private readonly JszHandler _jszHandler;
private readonly RoutezHandler _routezHandler;
private readonly GatewayzHandler _gatewayzHandler;
private readonly LeafzHandler _leafzHandler;
private readonly AccountzHandler _accountzHandler;
public MonitorServer(NatsServer server, NatsOptions options, ServerStats stats, ILoggerFactory loggerFactory)
{
@@ -33,6 +37,10 @@ public sealed class MonitorServer : IAsyncDisposable
_connzHandler = new ConnzHandler(server);
_subszHandler = new SubszHandler(server);
_jszHandler = new JszHandler(server, options);
_routezHandler = new RoutezHandler(server);
_gatewayzHandler = new GatewayzHandler(server);
_leafzHandler = new LeafzHandler(server);
_accountzHandler = new AccountzHandler(server);
_app.MapGet(basePath + "/", () =>
{
@@ -63,21 +71,20 @@ public sealed class MonitorServer : IAsyncDisposable
return Results.Ok(_connzHandler.HandleConnz(ctx));
});
// Stubs for unimplemented endpoints
_app.MapGet(basePath + "/routez", () =>
{
stats.HttpReqStats.AddOrUpdate("/routez", 1, (_, v) => v + 1);
return Results.Ok(new { });
return Results.Ok(_routezHandler.Build());
});
_app.MapGet(basePath + "/gatewayz", () =>
{
stats.HttpReqStats.AddOrUpdate("/gatewayz", 1, (_, v) => v + 1);
return Results.Ok(new { });
return Results.Ok(_gatewayzHandler.Build());
});
_app.MapGet(basePath + "/leafz", () =>
{
stats.HttpReqStats.AddOrUpdate("/leafz", 1, (_, v) => v + 1);
return Results.Ok(new { });
return Results.Ok(_leafzHandler.Build());
});
_app.MapGet(basePath + "/subz", (HttpContext ctx) =>
{
@@ -92,12 +99,12 @@ public sealed class MonitorServer : IAsyncDisposable
_app.MapGet(basePath + "/accountz", () =>
{
stats.HttpReqStats.AddOrUpdate("/accountz", 1, (_, v) => v + 1);
return Results.Ok(new { });
return Results.Ok(_accountzHandler.Build());
});
_app.MapGet(basePath + "/accstatz", () =>
{
stats.HttpReqStats.AddOrUpdate("/accstatz", 1, (_, v) => v + 1);
return Results.Ok(new { });
return Results.Ok(_accountzHandler.BuildStats());
});
_app.MapGet(basePath + "/jsz", () =>
{

View File

@@ -0,0 +1,21 @@
namespace NATS.Server.Monitoring;
public sealed class RoutezHandler
{
private readonly NatsServer _server;
public RoutezHandler(NatsServer server)
{
_server = server;
}
public object Build()
{
var routes = _server.Stats.Routes;
return new
{
routes,
num_routes = routes,
};
}
}