perf(headless): establish K4 resource telemetry
This commit is contained in:
parent
827a039760
commit
cb512fd091
5 changed files with 662 additions and 4 deletions
|
|
@ -13,6 +13,7 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
private readonly HeadlessProcessScheduler _scheduler;
|
||||
private readonly HeadlessDiagnosticWriter _diagnostics;
|
||||
private readonly HeadlessProcessContentOwner? _content;
|
||||
private readonly HeadlessProcessResourceSampler _resources;
|
||||
private int _disposeIndex;
|
||||
private bool _disposed;
|
||||
|
||||
|
|
@ -50,6 +51,7 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
var sessions = new List<HeadlessSessionHost>(
|
||||
configuration.Sessions.Count);
|
||||
HeadlessProcessContentOwner? content = null;
|
||||
HeadlessProcessResourceSampler? resources = null;
|
||||
try
|
||||
{
|
||||
if (configuration.Process?.Content is { } contentDescriptor)
|
||||
|
|
@ -102,14 +104,23 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
}
|
||||
|
||||
_sessions = sessions.ToArray();
|
||||
resources = new HeadlessProcessResourceSampler(timeProvider);
|
||||
_scheduler = new HeadlessProcessScheduler(
|
||||
_sessions,
|
||||
timeProvider);
|
||||
timeProvider,
|
||||
observation: snapshot =>
|
||||
CaptureResources(
|
||||
"periodic",
|
||||
resources,
|
||||
snapshot,
|
||||
content));
|
||||
_resources = resources;
|
||||
_content = content;
|
||||
_disposeIndex = _sessions.Length - 1;
|
||||
}
|
||||
catch
|
||||
{
|
||||
resources?.Dispose();
|
||||
for (int index = sessions.Count - 1; index >= 0; index--)
|
||||
sessions[index].Dispose();
|
||||
content?.Dispose();
|
||||
|
|
@ -164,6 +175,12 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
"running",
|
||||
session.Runtime);
|
||||
}
|
||||
_scheduler.RebaseDeadlinesAfterSessionStart();
|
||||
CaptureResources(
|
||||
"running-start",
|
||||
_resources,
|
||||
_scheduler.CaptureSnapshot(),
|
||||
_content);
|
||||
|
||||
try
|
||||
{
|
||||
|
|
@ -180,6 +197,11 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
return HeadlessExitCode.RuntimeError;
|
||||
}
|
||||
|
||||
CaptureResources(
|
||||
"running-stop",
|
||||
_resources,
|
||||
_scheduler.CaptureSnapshot(),
|
||||
_content);
|
||||
return _scheduler.CaptureSnapshot().FaultedSessionCount > 0
|
||||
? HeadlessExitCode.RuntimeError
|
||||
: HeadlessExitCode.Success;
|
||||
|
|
@ -195,6 +217,25 @@ internal sealed class HeadlessProcessHost : IDisposable
|
|||
_disposeIndex--;
|
||||
}
|
||||
_content?.Dispose();
|
||||
CaptureResources(
|
||||
"disposed",
|
||||
_resources,
|
||||
_scheduler.CaptureSnapshot(),
|
||||
_content);
|
||||
_resources.Dispose();
|
||||
_disposed = true;
|
||||
}
|
||||
|
||||
private void CaptureResources(
|
||||
string state,
|
||||
HeadlessProcessResourceSampler resources,
|
||||
HeadlessSchedulerSnapshot scheduler,
|
||||
HeadlessProcessContentOwner? content)
|
||||
{
|
||||
HeadlessProcessResourceSnapshot snapshot = resources.Capture(
|
||||
_sessions,
|
||||
scheduler,
|
||||
content?.CaptureSnapshot());
|
||||
_diagnostics.Resources(state, snapshot);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue