public IntegrationTestsContext() { bool lockTaken = false; Monitor.Enter(_lockObject, ref lockTaken); try { if (!isRegistered) { ConventionPackDefault.Register(); isRegistered = true; } } finally { if (lockTaken) { Monitor.Exit(_lockObject); } } MongoDatabaseOptions = new DatabaseOptions { ConnectionString = "mongodb://localhost:27017", ConnectionType = ConnectionType.MongoDB, Datasource = GenerateUniqueDatasourceName() }; CreateSomeDummyData(); }
public static IDatabaseOptionsBuilder AddDatabaseOptions( this IServiceCollection services, IConfiguration configuration) { services.Configure <DatabaseOptions>(configuration.GetSection("DatabaseOptions")); var databaseOptions = configuration.GetSection("DatabaseOptions").Get <DatabaseOptions>(); var databaseOptionsBuilder = new DatabaseOptionsBuilder(services, configuration, databaseOptions); services.AddSingleton(databaseOptions); if (databaseOptions.ConnectionType == ConnectionType.MongoDB) { ConventionPackDefault.Register(); services.AddSingleton <MongoConnection>(); } return(databaseOptionsBuilder); }
public static void AddServiceManagement(this IServiceCollection services, IConfiguration configuration) { services.Configure <DatabaseOptions>(configuration.GetSection("DatabaseOptions")); var databaseOptions = configuration.GetSection("DatabaseOptions").Get <DatabaseOptions>(); services.Configure <ServiceManagementOptions>(configuration.GetSection("ServiceManagementOptions")); services.Configure <CentralizedLogOptions>(configuration.GetSection("CentralizedLogOptions")); services.AddSingleton(databaseOptions); if (databaseOptions.ConnectionType == ConnectionType.MongoDB) { ConventionPackDefault.Register(); services.AddSingleton <MongoConnection>(); services.AddSingleton <IServiceRepository, ServiceMongoRepository>(); services.AddSingleton <ILogEventRepository, LogEventMongoRepository>(); services.AddSingleton <IMonitorCounterRepository, MonitorCounterMongoRepository>(); services.AddSingleton <IMonitorHardwareReportRepository, MonitorHardwareReportMongoRepository>(); services.AddSingleton <IMonitorHttpReportRepository, MonitorHttpReportMongoRepository>(); } if (databaseOptions.ConnectionType == ConnectionType.SQLServer || databaseOptions.ConnectionType == ConnectionType.PostgreSQL || databaseOptions.ConnectionType == ConnectionType.MySQL) { services.AddTransient <LetPortalServiceManagementDbContext>(); services.AddTransient <IServiceRepository, ServiceEFRepository>(); services.AddTransient <ILogEventRepository, LogEventEFRepository>(); services.AddTransient <IMonitorCounterRepository, MonitorCounterEFRepository>(); services.AddTransient <IMonitorHardwareReportRepository, MonitorHardwareReportEFRepository>(); services.AddTransient <IMonitorHttpReportRepository, MonitorHttpReportEFRepository>(); } services.AddTransient <IServiceManagementProvider, ServiceManagamentProvider>(); services.AddTransient <IMonitorServiceReportProvider, MonitorServiceReportProvider>(); services.AddTransient <ILogEventProvider, LogEventProvider>(); services.AddTransient <IMonitorProvider, MonitorProvider>(); services.AddHostedService <CheckingLostServicesBackgroundTask>(); services.AddHostedService <CheckingShutdownServicesBackgroundTask>(); services.AddHostedService <GatherAllHardwareCounterServicesBackgroundTask>(); }
public static ILetPortalBuilder ActAsServiceManagement( this IServiceCollection serviceCollection, IConfiguration configuration, Action <LetPortalOptions> action = null) { var serviceOptions = configuration.GetSection("ServiceOptions").Get <ServiceOptions>(); var letPortalOptions = new LetPortalOptions(); if (action != null) { action.Invoke(letPortalOptions); } var corsOptions = configuration.GetSection("CorsPortalOptions").Get <Core.Configurations.CorsPortalOptions>(); var builder = new LetPortalBuilder( serviceCollection, configuration, letPortalOptions, corsOptions, serviceOptions); if (letPortalOptions.EnableDatabaseConnection) { builder.Services.Configure <DatabaseOptions>(configuration.GetSection("DatabaseOptions")); var databaseOptions = configuration.GetSection("DatabaseOptions").Get <DatabaseOptions>(); builder.Services.AddSingleton(databaseOptions); builder.SetConnectionType(databaseOptions.ConnectionType); if (databaseOptions.ConnectionType == ConnectionType.MongoDB) { ConventionPackDefault.Register(); builder.Services.AddSingleton <MongoConnection>(); } } if (letPortalOptions.EnableMicroservices) { builder.Services.Configure <ServiceOptions>(configuration.GetSection("ServiceOptions")); builder.Services.AddSingleton <IServiceContext, InternalServiceContext>(); } if (letPortalOptions.EnableServiceMonitor) { builder.Services.Configure <MonitorOptions>(configuration.GetSection("MonitorOptions")); builder.Services.AddSingleton <IMonitorHealthCheck, MonitorHealthCheck>(); var monitorOption = configuration.GetSection("MonitorOptions").Get <MonitorOptions>(); if (monitorOption.Enable) { if (monitorOption.NotifyOptions.Enable) { builder.Services.Configure <HealthCheckPublisherOptions>(opts => { opts.Delay = TimeSpan.FromSeconds(monitorOption.NotifyOptions.Delay); }); builder.Services.AddSingleton <IHealthCheckPublisher, LetPortalMonitorHealthCheckPublisher>(); } builder.SetHealthCheckBuilder(builder.Services.AddHealthChecks().AddCheck <LetPortalMonitorHealthCheck>(Constants.LetPortalHealthCheck)); } } if (letPortalOptions.EnableSerilog) { builder.Services.Configure <LoggerOptions>(configuration.GetSection("LoggerOptions")); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .Enrich.WithProperty("ServiceName", serviceOptions.Name) .CreateLogger(); builder.Services.AddSingleton(Log.Logger); builder.Services.AddTransient(typeof(IServiceLogger <>), typeof(ServiceLogger <>)); } return(builder); }
public IntegrationTestsContext() { bool lockTaken = false; Monitor.Enter(_lockObject, ref lockTaken); try { if (!isRegistered) { JObject jObject = JObject.Parse(File.ReadAllText(@"Artifacts\settings.json")); intergrationTestOptions = jObject.ToObject <IntergrationTestOptions>(); if (AllowMongoDB) { ConventionPackDefault.Register(); MongoDbRegistry.RegisterEntities(); } isRegistered = true; } } finally { if (lockTaken) { Monitor.Exit(_lockObject); } } if (AllowMongoDB) { MongoDatabaseConenction = new DatabaseConnection { Id = DataUtil.GenerateUniqueId(), DisplayName = "Test Database", Name = "testdatabase", TimeSpan = DateTime.UtcNow.Ticks, ConnectionString = "mongodb://localhost:27017", DatabaseConnectionType = "mongodb", DataSource = GenerateUniqueDatasourceName() }; DatabaseConnection mongoOptions = intergrationTestOptions.DatabasesList.First(a => a.DatabaseConnectionType.ToEnum <ConnectionType>(true) == ConnectionType.MongoDB); MongoDatabaseConenction.ConnectionString = mongoOptions.ConnectionString; } if (AllowSQLServer) { string sqlDatasourceName = GenerateUniqueDatasourceName(); SqlServerDatabaseConnection = new DatabaseConnection { Id = DataUtil.GenerateUniqueId(), DisplayName = "Test Database", Name = "testdatabase", TimeSpan = DateTime.UtcNow.Ticks, ConnectionString = "Server=.;Database=" + sqlDatasourceName + ";User Id=sa;Password = 123456;", DatabaseConnectionType = "sqlserver", DataSource = sqlDatasourceName }; DatabaseConnection sqlOptions = intergrationTestOptions.DatabasesList.First(a => a.DatabaseConnectionType.ToEnum <ConnectionType>(true) == ConnectionType.SQLServer); SqlServerDatabaseConnection.ConnectionString = string.Format(sqlOptions.ConnectionString, sqlDatasourceName); } if (AllowPostgreSQL) { string postgresqlDatasourceName = GenerateUniqueDatasourceName(); PostgreSqlDatabaseConnection = new DatabaseConnection { Id = DataUtil.GenerateUniqueId(), DisplayName = "Test Database", Name = "testdatabase", TimeSpan = DateTime.UtcNow.Ticks, ConnectionString = "Host=localhost;Port=5432;Database=" + postgresqlDatasourceName + ";Username=postgres;Password=123456", DatabaseConnectionType = "postgresql", DataSource = postgresqlDatasourceName }; DatabaseConnection postgreOptions = intergrationTestOptions.DatabasesList.First(a => a.DatabaseConnectionType.ToEnum <ConnectionType>(true) == ConnectionType.PostgreSQL); PostgreSqlDatabaseConnection.ConnectionString = string.Format(postgreOptions.ConnectionString, postgresqlDatasourceName); } if (AllowMySQL) { string mysqlDatasourceName = GenerateUniqueDatasourceName(); MySqlDatabaseConnection = new DatabaseConnection { Id = DataUtil.GenerateUniqueId(), DisplayName = "Test Database", Name = "testdatabase", TimeSpan = DateTime.UtcNow.Ticks, ConnectionString = "Host=localhost;Port=5432;Database=" + mysqlDatasourceName + ";Username=postgres;Password=123456", DatabaseConnectionType = "mysql", DataSource = mysqlDatasourceName }; DatabaseConnection mysqlOptions = intergrationTestOptions.DatabasesList.First(a => a.DatabaseConnectionType.ToEnum <ConnectionType>(true) == ConnectionType.MySQL); MySqlDatabaseConnection.ConnectionString = string.Format(mysqlOptions.ConnectionString, mysqlDatasourceName); } CreateSomeDummyData(); }
private async Task OnExecuteAsync() { var services = new ServiceCollection(); var toolsOption = GetToolsOptions(ConfigFilePath); ConventionPackDefault.Register(); MongoDbRegistry.RegisterEntities(); var dbType = DatabseType.ToEnum <ConnectionType>(true); var databaseOption = new DatabaseOptions { ConnectionString = !string.IsNullOrEmpty(Connection) ? Connection : GetDefaultConnectionString(dbType, App, toolsOption), ConnectionType = dbType }; var runningCommand = GetAvailableCommands().FirstOrDefault(a => a.CommandName.ToLower() == Command.ToLower()); if (runningCommand != null) { ToolsContext toolsContext = null; var storingConnections = toolsOption.GetByDatabaseType(dbType); switch (dbType) { case ConnectionType.MongoDB: var mongoConnection = new MongoConnection(databaseOption); var mongoVersionContext = new MongoVersionContext(databaseOption); var versionMongoRepository = new VersionMongoRepository(mongoConnection); mongoVersionContext.ConnectionType = ConnectionType.MongoDB; mongoVersionContext.DatabaseOptions = databaseOption; mongoVersionContext.ServiceManagementOptions = storingConnections.ServiceManagementConnection; mongoVersionContext.IdentityDbOptions = storingConnections.IdentityConnection; var latestVersion = versionMongoRepository.GetAsQueryable().ToList().LastOrDefault(); var allVersions = Enumerable.Empty <IVersion>(); IServiceProvider serviceProvider = null; if (IsPortal()) { RegisterServicesForPortal(services, databaseOption); serviceProvider = services.BuildServiceProvider(); allVersions = Scanner.GetAllPortalVersions(serviceProvider); } else if (IsIdentity()) { RegisterServicesForIdentity(services, databaseOption); serviceProvider = services.BuildServiceProvider(); allVersions = Scanner.GetAllIdentityVersions(serviceProvider); } toolsContext = new ToolsContext { LatestVersion = latestVersion, VersionContext = mongoVersionContext, VersionNumber = VersionNumber, Versions = allVersions, VersionRepository = versionMongoRepository, PatchesFolder = PatchesFolder, AllowPatch = !string.IsNullOrEmpty(PatchesFolder), Services = serviceProvider, Arguments = CombineArguments() }; break; case ConnectionType.PostgreSQL: case ConnectionType.MySQL: case ConnectionType.SQLServer: if (IsPortal()) { #pragma warning disable CA2000 // Dispose objects before losing scope var letportalContext = new PortalDbContext(databaseOption); #pragma warning restore CA2000 // Dispose objects before losing scope letportalContext.Database.EnsureCreated(); #pragma warning disable CA2000 // Dispose objects before losing scope var letportalContextForRepo = new PortalDbContext(databaseOption); #pragma warning restore CA2000 // Dispose objects before losing scope var sqlEFVersionContext = new EFVersionContext(letportalContext) { ConnectionType = dbType, DatabaseOptions = databaseOption }; var portalVersionRepository = new VersionEFRepository(letportalContextForRepo); var latestVersionEF = portalVersionRepository.GetAsQueryable().ToList().LastOrDefault(); sqlEFVersionContext.ServiceManagementOptions = storingConnections.ServiceManagementConnection; sqlEFVersionContext.IdentityDbOptions = storingConnections.IdentityConnection; RegisterServicesForPortal(services, databaseOption); var sqlServiceProvider = services.BuildServiceProvider(); IEnumerable <IVersion> allSQLVersions = Scanner.GetAllPortalVersions(sqlServiceProvider); toolsContext = new ToolsContext { LatestVersion = latestVersionEF, VersionContext = sqlEFVersionContext, VersionNumber = VersionNumber, Versions = allSQLVersions, VersionRepository = portalVersionRepository, Services = sqlServiceProvider, AllowPatch = !string.IsNullOrEmpty(PatchesFolder), Arguments = CombineArguments() }; } else if (IsIdentity()) { #pragma warning disable CA2000 // Dispose objects before losing scope var letIdentityContext = new IdentityDbContext(databaseOption); #pragma warning restore CA2000 // Dispose objects before losing scope letIdentityContext.Database.EnsureCreated(); #pragma warning disable CA2000 // Dispose objects before losing scope var letportalContextForRepo = new IdentityDbContext(databaseOption); #pragma warning restore CA2000 // Dispose objects before losing scope var sqlEFVersionContext = new EFVersionContext(letportalContextForRepo) { ConnectionType = dbType, DatabaseOptions = databaseOption }; var portalVersionRepository = new VersionEFRepository(letportalContextForRepo); var latestVersionEF = portalVersionRepository.GetAsQueryable().ToList().LastOrDefault(); sqlEFVersionContext.ServiceManagementOptions = storingConnections.ServiceManagementConnection; sqlEFVersionContext.IdentityDbOptions = storingConnections.IdentityConnection; RegisterServicesForIdentity(services, databaseOption); var sqlServiceProvider = services.BuildServiceProvider(); IEnumerable <IVersion> allSQLVersions = Scanner.GetAllIdentityVersions(sqlServiceProvider); toolsContext = new ToolsContext { LatestVersion = latestVersionEF, VersionContext = sqlEFVersionContext, VersionNumber = VersionNumber, Versions = allSQLVersions, VersionRepository = portalVersionRepository, AllowPatch = !string.IsNullOrEmpty(PatchesFolder), Services = sqlServiceProvider }; } break; } if (toolsContext != null) { Console.WriteLine(""); await runningCommand.RunAsync(toolsContext); toolsContext.Dispose(); } Console.WriteLine("-----------------------++++++DONE++++++-------------------------"); } else { Console.WriteLine("Oops! We don't find any matching command to execute. If you don't know how to run, please type '--help'"); } Console.ReadLine(); }
public static void AddMongoConfig(this IServiceCollection serviceCollection) { ConventionPackDefault.Register(); }
private async Task OnExecuteAsync() { var toolsOption = GetToolsOptions(ConfigFilePath); LoadPlugins(toolsOption.RequiredPlugins); LoadPatchs(toolsOption.RequiredPatchs); toolPlugins = GetInstalledPlugins(toolsOption.RequiredPlugins); portalPatches = GetInstalledPortalPatchs(toolsOption.RequiredPatchs); identityPatches = GetInstalledIdentityPatchs(toolsOption.RequiredPatchs); bool isRunningPlugin = !IsPortal() && !IsIdentity(); // Check if run with mode patch bool isPatchRunning = false; if (!isRunningPlugin && !string.IsNullOrEmpty(PatchName) && Command != "install") { throw new NotSupportedException("Sorry, we only support -pn with install command."); } else if (!isRunningPlugin && !string.IsNullOrEmpty(PatchName) && Command == "install") { isPatchRunning = true; } IToolPlugin toolPlugin = isRunningPlugin ? toolPlugins.First(a => a.AppName == App) : null; var services = new ServiceCollection(); ConventionPackDefault.Register(); MongoDbRegistry.RegisterEntities(); var dbType = DatabseType.ToEnum <ConnectionType>(true); var databaseOption = new DatabaseOptions { ConnectionString = !string.IsNullOrEmpty(Connection) ? Connection : (isRunningPlugin ? toolPlugin.LoadDefaultDatabase().ConnectionString : GetDefaultConnectionString(dbType, App, toolsOption)), ConnectionType = dbType }; var runningCommand = GetAvailableCommands().FirstOrDefault(a => a.CommandName.ToLower() == Command.ToLower()); if (runningCommand != null) { ToolsContext toolsContext = null; var storingConnections = toolsOption.GetByDatabaseType(dbType); switch (dbType) { case ConnectionType.MongoDB: var mongoConnection = new MongoConnection(databaseOption); var mongoVersionContext = new MongoVersionContext(databaseOption); var versionMongoRepository = new VersionMongoRepository(mongoConnection); var patchMongoRepository = new PatchVersionMongoRepository(mongoConnection); mongoVersionContext.ConnectionType = ConnectionType.MongoDB; mongoVersionContext.DatabaseOptions = databaseOption; mongoVersionContext.PortalDatabaseOptions = toolsOption.MongoStoringConnections.PortalConnection; mongoVersionContext.ServiceManagementOptions = storingConnections.ServiceManagementConnection; mongoVersionContext.IdentityDbOptions = storingConnections.IdentityConnection; var latestVersion = await versionMongoRepository.GetLastestVersion(App); var allVersions = Enumerable.Empty <IVersion>(); IServiceProvider serviceProvider = null; PatchVersion latestPatchVersion = null; IPortalPatchFeatureTool portalPatchFeatureTool = null; IIdentityPatchFeatureTool identityPatchFeatureTool = null; if (IsPortal()) { RegisterServicesForPortal(services, databaseOption); if (isPatchRunning) { latestPatchVersion = await patchMongoRepository.GetLatestAsync(App, PatchName); portalPatchFeatureTool = portalPatches.First(a => a.PatchName == PatchName); portalPatchFeatureTool.RegisterServices(services, configuration); } serviceProvider = services.BuildServiceProvider(); allVersions = Scanner.GetAllPortalVersions(serviceProvider); } else if (IsIdentity()) { RegisterServicesForIdentity(services, databaseOption); if (isPatchRunning) { latestPatchVersion = await patchMongoRepository.GetLatestAsync(App, PatchName); identityPatchFeatureTool = identityPatches.First(a => a.PatchName == PatchName); identityPatchFeatureTool.RegisterServices(services, configuration); } serviceProvider = services.BuildServiceProvider(); allVersions = Scanner.GetAllIdentityVersions(serviceProvider); } else { var foundPlugin = toolPlugins.First(a => a.AppName.Equals(App, StringComparison.OrdinalIgnoreCase)); foundPlugin.RegisterServices(services, configuration); serviceProvider = services.BuildServiceProvider(); allVersions = foundPlugin.GetAllVersions(serviceProvider); } toolsContext = new ToolsContext { LatestVersion = latestVersion, LatestPatchVersion = latestPatchVersion, VersionContext = mongoVersionContext, VersionNumber = VersionNumber, Versions = allVersions, VersionRepository = versionMongoRepository, PatchesFolder = PatchesFolder, AllowPatch = !string.IsNullOrEmpty(PatchesFolder), Services = serviceProvider, PatchVersionRepository = patchMongoRepository, CurrentPatchPortal = portalPatchFeatureTool, CurrentIdentityPortal = identityPatchFeatureTool, Arguments = CombineArguments() }; break; case ConnectionType.PostgreSQL: case ConnectionType.MySQL: case ConnectionType.SQLServer: #pragma warning disable CA2000 // Dispose objects before losing scope var letportalContext = new SaturnFullContext(databaseOption); #pragma warning restore CA2000 // Dispose objects before losing scope letportalContext.Database.EnsureCreated(); #pragma warning disable CA2000 // Dispose objects before losing scope var letportalContextForRepo = new SaturnFullContext(databaseOption); #pragma warning restore CA2000 // Dispose objects before losing scope var sqlEFVersionContext = new EFVersionContext(letportalContext) { ConnectionType = dbType, DatabaseOptions = databaseOption }; var patchEFRepository = new PatchVersionEFRepository(letportalContextForRepo); var portalVersionRepository = new VersionEFRepository(letportalContextForRepo); var latestVersionEF = await portalVersionRepository.GetLastestVersion(App); sqlEFVersionContext.ServiceManagementOptions = storingConnections.ServiceManagementConnection; sqlEFVersionContext.IdentityDbOptions = storingConnections.IdentityConnection; sqlEFVersionContext.PortalDatabaseOptions = storingConnections.PortalConnection; var sqlAllVersions = Enumerable.Empty <IVersion>(); IServiceProvider sqlServiceProvider = null; PatchVersion latestEFPatchVersion = null; IPortalPatchFeatureTool portalEFPatchFeatureTool = null; IIdentityPatchFeatureTool identityEFPatchFeatureTool = null; if (IsPortal()) { RegisterServicesForPortal(services, databaseOption); if (isPatchRunning) { latestEFPatchVersion = await patchEFRepository.GetLatestAsync(App, PatchName); portalEFPatchFeatureTool = portalPatches.First(a => a.PatchName == PatchName); portalEFPatchFeatureTool.RegisterServices(services, configuration); } sqlServiceProvider = services.BuildServiceProvider(); sqlAllVersions = Scanner.GetAllPortalVersions(sqlServiceProvider); } else if (IsIdentity()) { RegisterServicesForIdentity(services, databaseOption); if (isPatchRunning) { latestEFPatchVersion = await patchEFRepository.GetLatestAsync(App, PatchName); identityEFPatchFeatureTool = identityPatches.First(a => a.PatchName == PatchName); identityEFPatchFeatureTool.RegisterServices(services, configuration); } sqlServiceProvider = services.BuildServiceProvider(); sqlAllVersions = Scanner.GetAllIdentityVersions(sqlServiceProvider); } else { var foundPlugin = toolPlugins.First(a => a.AppName.Equals(App, StringComparison.OrdinalIgnoreCase)); foundPlugin.RegisterServices(services, configuration); sqlServiceProvider = services.BuildServiceProvider(); sqlAllVersions = foundPlugin.GetAllVersions(sqlServiceProvider); } toolsContext = new ToolsContext { LatestVersion = latestVersionEF, VersionContext = sqlEFVersionContext, VersionNumber = VersionNumber, Versions = sqlAllVersions, VersionRepository = portalVersionRepository, AllowPatch = !string.IsNullOrEmpty(PatchesFolder), Services = sqlServiceProvider, Arguments = CombineArguments(), PatchesFolder = PatchesFolder, PatchVersionRepository = patchEFRepository, CurrentPatchPortal = portalEFPatchFeatureTool, CurrentIdentityPortal = identityEFPatchFeatureTool }; break; } if (toolsContext != null) { Console.WriteLine(""); await runningCommand.RunAsync(toolsContext); toolsContext.Dispose(); } Console.WriteLine("-----------------------++++++DONE++++++-------------------------"); } else { Console.WriteLine("Oops! We don't find any matching command to execute. If you don't know how to run, please type '--help'"); } Console.ReadLine(); }