diff --git a/src/Vantage.Core/VantageCoreServices.cs b/src/Vantage.Core/VantageCoreServices.cs new file mode 100644 index 0000000..80756b7 --- /dev/null +++ b/src/Vantage.Core/VantageCoreServices.cs @@ -0,0 +1,71 @@ +using Microsoft.Extensions.DependencyInjection; +using Vantage.Core.Alerts; +using Vantage.Core.Collectors.Network; +using Vantage.Core.Collectors.Processes; +using Vantage.Core.Collectors.Sensors; +using Vantage.Core.Collectors.Systemd; +using Vantage.Core.Configuration; +using Vantage.Core.Docker; +using Vantage.Core.Health; +using Vantage.Core.History; +using Vantage.Core.Logs; +using Vantage.Core.Metrics; +using Vantage.Core.Prometheus; +using Vantage.Core.Ssh; + +namespace Vantage.Core; + +public static class VantageCoreServices +{ + public static IServiceCollection AddVantageCore(this IServiceCollection services, bool useMockProviders) => + services.AddVantageCore(useMockProviders ? VantageProviderMode.Mock : VantageProviderMode.Ssh); + + public static IServiceCollection AddVantageCore(this IServiceCollection services, VantageProviderMode mode) + { + services.AddSingleton(_ => new JsonConfigStore(JsonConfigStore.DefaultPath())); + + services.AddSingleton(_ => new HttpClient + { + Timeout = Timeout.InfiniteTimeSpan + }); + services.AddSingleton(); + services.AddSingleton(); + + services.AddSingleton(_ => SqliteMetricsStore.ForFile(SqliteMetricsStore.DefaultPath())); + services.AddSingleton(_ => new InMemoryAlertLog()); + services.AddSingleton(); + services.AddSingleton(sp => new LogAlertSink(sp.GetRequiredService())); + services.AddSingleton(sp => new DesktopAlertSink(sp.GetRequiredService())); + services.AddSingleton(sp => new AlertEngine(Array.Empty(), sp.GetServices())); + + RegisterProviders(services, mode); + return services; + } + + private static void RegisterProviders(IServiceCollection services, VantageProviderMode mode) + { + if (mode == VantageProviderMode.Mock) + { + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + return; + } + + if (mode == VantageProviderMode.Prometheus) + services.AddSingleton(sp => new PrometheusMetricsProvider(sp.GetRequiredService())); + else + services.AddSingleton(); + + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + } +} diff --git a/src/Vantage.Core/VantageProviderMode.cs b/src/Vantage.Core/VantageProviderMode.cs new file mode 100644 index 0000000..e0609ab --- /dev/null +++ b/src/Vantage.Core/VantageProviderMode.cs @@ -0,0 +1,8 @@ +namespace Vantage.Core; + +public enum VantageProviderMode +{ + Mock, + Ssh, + Prometheus +}