From 58bd439aa72473c6c69fd488b42837e18c9c4bc0 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Tue, 6 Feb 2024 23:35:33 +0500 Subject: [PATCH] Revert "Add profiler base" (#260) Reverts TeamOctolings/Octobot#235 See #244 --- src/Octobot.cs | 3 - src/Services/Profiler/Profiler.cs | 114 ----------------------- src/Services/Profiler/ProfilerEvent.cs | 9 -- src/Services/Profiler/ProfilerFactory.cs | 27 ------ 4 files changed, 153 deletions(-) delete mode 100644 src/Services/Profiler/Profiler.cs delete mode 100644 src/Services/Profiler/ProfilerEvent.cs delete mode 100644 src/Services/Profiler/ProfilerFactory.cs diff --git a/src/Octobot.cs b/src/Octobot.cs index a2b4773..1ebf7c3 100644 --- a/src/Octobot.cs +++ b/src/Octobot.cs @@ -4,7 +4,6 @@ using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Octobot.Commands.Events; using Octobot.Services; -using Octobot.Services.Profiler; using Octobot.Services.Update; using Remora.Discord.API.Abstractions.Gateway.Commands; using Remora.Discord.API.Abstractions.Objects; @@ -87,8 +86,6 @@ public sealed class Octobot .AddPreparationErrorEvent() .AddPostExecutionEvent() // Services - .AddTransient() - .AddSingleton() .AddSingleton() .AddSingleton() .AddHostedService(provider => provider.GetRequiredService()) diff --git a/src/Services/Profiler/Profiler.cs b/src/Services/Profiler/Profiler.cs deleted file mode 100644 index 8d4ca98..0000000 --- a/src/Services/Profiler/Profiler.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System.Diagnostics; -using System.Text; -using Microsoft.Extensions.Logging; -using Remora.Results; - -// TODO: remove in future profiler PRs -// ReSharper disable All - -namespace Octobot.Services.Profiler; - -/// -/// Provides the ability to profile how long certain parts of code take to complete using es. -/// -/// Resolve instead in singletons. -public sealed class Profiler -{ - private const int MaxProfilerTime = 1000; // milliseconds - private readonly List _events = []; - private readonly ILogger _logger; - - public Profiler(ILogger logger) - { - _logger = logger; - } - - /// - /// Pushes an event to the profiler. - /// - /// The ID of the event. - public void Push(string id) - { - _events.Add(new ProfilerEvent - { - Id = id, - Stopwatch = Stopwatch.StartNew() - }); - } - - /// - /// Pops the last pushed event from the profiler. - /// - /// Thrown if the profiler contains no events. - public void Pop() - { - if (_events.Count is 0) - { - throw new InvalidOperationException("Nothing to pop"); - } - - _events.Last().Stopwatch.Stop(); - } - - /// - /// If the profiler took too long to execute, this will log a warning with per-event time usage - /// - /// - private void Report() - { - var main = _events[0]; - if (main.Stopwatch.ElapsedMilliseconds < MaxProfilerTime) - { - return; - } - - var unprofiled = main.Stopwatch.ElapsedMilliseconds; - var builder = new StringBuilder().AppendLine(); - for (var i = 1; i < _events.Count; i++) - { - var profilerEvent = _events[i]; - if (profilerEvent.Stopwatch.IsRunning) - { - throw new InvalidOperationException( - $"Tried to report on a profiler with running stopwatches: {profilerEvent.Id}"); - } - - builder.AppendLine($"{profilerEvent.Id}: {profilerEvent.Stopwatch.ElapsedMilliseconds}ms"); - unprofiled -= profilerEvent.Stopwatch.ElapsedMilliseconds; - } - - builder.AppendLine($": {unprofiled}ms"); - - _logger.LogWarning("Profiler {ID} took {Elapsed} milliseconds to execute (max: {Max}ms):{Events}", main.Id, - main.Stopwatch.ElapsedMilliseconds, MaxProfilerTime, builder.ToString()); - } - - /// - /// the profiler and on it afterwards. - /// - public void PopAndReport() - { - Pop(); - Report(); - } - - /// - /// on the profiler and return a . - /// - /// - /// - public Result ReportWithResult(Result result) - { - PopAndReport(); - return result; - } - - /// - /// Calls with - /// - /// A successful result. - public Result ReportWithSuccess() - { - return ReportWithResult(Result.FromSuccess()); - } -} diff --git a/src/Services/Profiler/ProfilerEvent.cs b/src/Services/Profiler/ProfilerEvent.cs deleted file mode 100644 index f655fc4..0000000 --- a/src/Services/Profiler/ProfilerEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Diagnostics; - -namespace Octobot.Services.Profiler; - -public struct ProfilerEvent -{ - public string Id { get; init; } - public Stopwatch Stopwatch { get; init; } -} diff --git a/src/Services/Profiler/ProfilerFactory.cs b/src/Services/Profiler/ProfilerFactory.cs deleted file mode 100644 index 0135771..0000000 --- a/src/Services/Profiler/ProfilerFactory.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Octobot.Services.Profiler; - -/// -/// Provides a method to create a . Useful in singletons. -/// -public sealed class ProfilerFactory -{ - private readonly IServiceScopeFactory _scopeFactory; - - public ProfilerFactory(IServiceScopeFactory scopeFactory) - { - _scopeFactory = scopeFactory; - } - - /// - /// Creates a new . - /// - /// A new . - // TODO: remove in future profiler PRs - // ReSharper disable once UnusedMember.Global - public Profiler Create() - { - return _scopeFactory.CreateScope().ServiceProvider.GetRequiredService(); - } -}