-
Notifications
You must be signed in to change notification settings - Fork 432
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use
App.Metrics
on JSON-RPC replay tool (#5919)
* Use 'App.Metrics' * Remove unused imports * Inspection Redundant arguments * Lift formatter to class field * Refactor out 'IMetricsOutputFormatter' - Removes "duplicated" consumers - Introduces top level references to 'App.Metrics'
- Loading branch information
1 parent
540bf0d
commit ce06472
Showing
9 changed files
with
138 additions
and
178 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,49 +1,65 @@ | ||
// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited | ||
// SPDX-License-Identifier: LGPL-3.0-only | ||
|
||
using App.Metrics; | ||
using App.Metrics.Counter; | ||
using App.Metrics.Timer; | ||
|
||
namespace Nethermind.Tools.Kute; | ||
|
||
public class Metrics | ||
{ | ||
public TimeSpan TotalRunningTime { get; set; } | ||
public int Messages { get; private set; } | ||
public int Failed { get; private set; } | ||
public int IgnoredRequests { get; private set; } | ||
public int Responses { get; private set; } | ||
public ItemMetrics Batches { get; } = new(); | ||
public IDictionary<string, ItemMetrics> ProcessedRequests { get; } = new Dictionary<string, ItemMetrics>(); | ||
|
||
public void TickMessages() => Messages++; | ||
public void TickFailed() => Failed++; | ||
public void TickIgnoredRequests() => IgnoredRequests++; | ||
public void TickResponses() => Responses++; | ||
public void TickBatch(TimeSpan runningTime) => Batches.Tick(runningTime); | ||
|
||
public void TickRequest(string methodName, TimeSpan runningTime) | ||
{ | ||
if (!ProcessedRequests.ContainsKey(methodName)) | ||
{ | ||
ProcessedRequests[methodName] = new ItemMetrics(); | ||
} | ||
private readonly IMetrics _metrics; | ||
|
||
ProcessedRequests[methodName].Tick(runningTime); | ||
} | ||
private readonly TimerOptions _totalRunningTime = new() | ||
{ | ||
Name = "Total Running Time", DurationUnit = TimeUnit.Milliseconds, | ||
}; | ||
private readonly CounterOptions _messages = new() | ||
{ | ||
Name = "Messages", MeasurementUnit = Unit.Items, | ||
}; | ||
private readonly CounterOptions _failed = new() | ||
{ | ||
Name = "Failed", MeasurementUnit = Unit.Items, | ||
}; | ||
private readonly CounterOptions _ignoredRequests = new() | ||
{ | ||
Name = "Ignored Requests", MeasurementUnit = Unit.Items | ||
}; | ||
private readonly CounterOptions _responses = new() | ||
{ | ||
Name = "Responses", MeasurementUnit = Unit.Items | ||
}; | ||
private readonly TimerOptions _batches = new() | ||
{ | ||
Name = "Batches", DurationUnit = TimeUnit.Milliseconds | ||
}; | ||
private readonly IDictionary<string, TimerOptions> _processedRequests = new Dictionary<string, TimerOptions>(); | ||
|
||
public class ItemMetrics | ||
public Metrics() | ||
{ | ||
public int Count { get; private set; } | ||
public TimeSpan RunningTime { get; private set; } | ||
_metrics = new MetricsBuilder().Build(); | ||
} | ||
|
||
public ItemMetrics() | ||
{ | ||
Count = 0; | ||
RunningTime = TimeSpan.Zero; | ||
} | ||
public MetricsDataValueSource Snapshot => _metrics.Snapshot.Get(); | ||
|
||
public void TickMessages() => _metrics.Measure.Counter.Increment(_messages); | ||
public void TickFailed() => _metrics.Measure.Counter.Increment(_failed); | ||
public void TickIgnoredRequests() => _metrics.Measure.Counter.Increment(_ignoredRequests); | ||
public void TickResponses() => _metrics.Measure.Counter.Increment(_responses); | ||
|
||
public void Tick(TimeSpan runningTime) | ||
public TimerContext TimeTotal() => _metrics.Measure.Timer.Time(_totalRunningTime); | ||
public TimerContext TimeBatch() => _metrics.Measure.Timer.Time(_batches); | ||
public TimerContext TimeMethod(string methodName) | ||
{ | ||
if (!_processedRequests.ContainsKey(methodName)) | ||
{ | ||
Count++; | ||
RunningTime += runningTime; | ||
_processedRequests[methodName] = new TimerOptions | ||
{ | ||
Name = methodName, MeasurementUnit = Unit.Requests, DurationUnit = TimeUnit.Milliseconds, RateUnit = TimeUnit.Milliseconds | ||
}; | ||
} | ||
return _metrics.Measure.Timer.Time(_processedRequests[methodName]); | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
tools/Nethermind.Tools.Kute/MetricsConsumer/ConsoleMetricsConsumer.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited | ||
// SPDX-License-Identifier: LGPL-3.0-only | ||
|
||
using App.Metrics.Formatters; | ||
|
||
namespace Nethermind.Tools.Kute.MetricsConsumer; | ||
|
||
public class ConsoleMetricsConsumer : IMetricsConsumer | ||
{ | ||
|
||
private readonly IMetricsOutputFormatter _formatter; | ||
|
||
public ConsoleMetricsConsumer(IMetricsOutputFormatter formatter) | ||
{ | ||
_formatter = formatter; | ||
} | ||
|
||
public async Task ConsumeMetrics(Metrics metrics) | ||
{ | ||
var snapshot = metrics.Snapshot; | ||
using (var stream = Console.OpenStandardOutput()) | ||
{ | ||
await _formatter.WriteAsync(stream, snapshot); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
52 changes: 0 additions & 52 deletions
52
tools/Nethermind.Tools.Kute/MetricsConsumer/JsonMetricsConsumer.cs
This file was deleted.
Oops, something went wrong.
35 changes: 0 additions & 35 deletions
35
tools/Nethermind.Tools.Kute/MetricsConsumer/PrettyReportMetricsConsumer.cs
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.