public DatadogRoutine( AccountService accounts, AchievementService achievements, IAsyncEventingExecutor <IDiscordMessage> commandPipeline, Config config, IDiscordClient discordClient) { if (string.IsNullOrWhiteSpace(config.DatadogHost)) { Log.Warning("Metrics are not being collected"); return; } DogStatsd.Configure(new StatsdConfig { StatsdServerName = config.DatadogHost, StatsdPort = 8125, Prefix = "miki" }); CreateAchievementsMetrics(achievements); CreateAccountMetrics(accounts); CreateEventSystemMetrics(commandPipeline); CreateDiscordMetrics(discordClient); Log.Message("Datadog set up!"); }
private void CreateEventSystemMetrics(IAsyncEventingExecutor <IDiscordMessage> system) { if (system == null) { return; } system.OnExecuted += OnCommandProcessedAsync; }
public async Task StartAsync() { ServiceCollection serviceCollection = new ServiceCollection(); await ConfigureAsync(serviceCollection); serviceCollection.AddSingleton(this); Services = serviceCollection.BuildServiceProvider(); Pipeline = ConfigurePipeline(Services); var providers = ConfigureProviders(Services, Pipeline); await providers.StartAsync(); await Task.Delay(-1); // Halts the thread. }
public override ProviderCollection ConfigureProviders( IServiceProvider services, IAsyncEventingExecutor <IDiscordMessage> pipeline) { var _ = services.GetService <DatadogRoutine>(); // Eager loading var discordClient = services.GetService <IDiscordClient>(); discordClient.Events.GuildJoin.SubscribeTask(ClientJoinedGuildAsync); discordClient.Events.MessageCreate .SubscribeTask(async msg => await pipeline.ExecuteAsync(msg)); pipeline.OnExecuted += LogErrorsAsync; return(new ProviderCollection() .Add(new ProviderAdapter( () => discordClient.StartAsync(default),
public override ProviderCollection ConfigureProviders( IServiceProvider services, IAsyncEventingExecutor <IDiscordMessage> pipeline) { var _ = services.GetService <DatadogRoutine>(); // Eager loading var discordClient = services.GetService <IDiscordClient>(); discordClient.GuildJoin += ClientJoinedGuildAsync; discordClient.MessageCreate += async e => await pipeline.ExecuteAsync(e); pipeline.OnExecuted += LogErrorsAsync; return(new ProviderCollection() .Add(new ProviderAdapter( discordClient.Gateway.StartAsync, discordClient.Gateway.StopAsync))); }
public abstract ProviderCollection ConfigureProviders( IServiceProvider services, IAsyncEventingExecutor <IDiscordMessage> pipeline);