/// <summary> /// 初始化管理服务 /// </summary> public static void AddJoyOIManagement( this IServiceCollection services, JoyOIManagementConfiguration configuration) { // 注册配置 configuration.AfterLoaded(); services.AddSingleton(configuration); // 注册服务 services.AddTransient <IRepository <ActorEntity, Guid>, EFCoreRepository <ActorEntity, Guid> >(); services.AddTransient <IRepository <BlobEntity, Guid>, EFCoreRepository <BlobEntity, Guid> >(); services.AddTransient <IRepository <StateMachineEntity, Guid>, EFCoreRepository <StateMachineEntity, Guid> >(); services.AddTransient <IRepository <StateMachineInstanceEntity, Guid>, EFCoreRepository <StateMachineInstanceEntity, Guid> >(); services.AddTransient <IActorService, ActorService>(); services.AddTransient <IBlobService, BlobService>(); services.AddTransient <IStateMachineService, StateMachineService>(); services.AddTransient <IStateMachineInstanceService, StateMachineInstanceService>(); services.AddSingleton <IStateMachineInstanceStore, StateMachineInstanceStore>(); services.AddSingleton <IDockerNodeStore, DockerNodeStore>(); services.AddTransient <IDockerNodeService, DockerNodeService>(); services.AddSingleton <IDynamicCompileService, DynamicCompileService>(); services.AddSingleton <INotificationService, NotificationService>(); // 静态功能 InitializeStaticFunctions(); }
public TestServiceBase() { var dir = Environment.CurrentDirectory; while (!File.Exists(Path.Combine(dir, "appsettings.json"))) { dir = Path.GetDirectoryName(dir); } Environment.CurrentDirectory = dir; JoyOIManagementServiceCollectionExtensions.InitializeStaticFunctions(); var builder = new ConfigurationBuilder() .SetBasePath(Environment.CurrentDirectory) .AddJsonFile("appsettings.json"); var configuration = builder.Build(); _configuration = new JoyOIManagementConfiguration(); configuration.GetSection("JoyOIManagement").Bind(_configuration); _configuration.AfterLoaded(); _storage = new DummyStorage(); // 数据库除错代码 if (false) { #pragma warning disable CS0162 _storage.OnSaveChanges = (storage) => { var stackTrace = new StackTrace().ToString(); var tables = JsonConvert.SerializeObject(storage.Tables, Formatting.Indented); File.AppendAllText($"e:\\mgmtsvc_dblog_{Process.GetCurrentProcess().Id}.txt", $"{stackTrace}\r\n{tables}\r\n=====================================================\r\n\r\n"); }; #pragma warning restore CS0162 } }
public StateMachineInstanceService( JoyOIManagementConfiguration configuration, IStateMachineInstanceStore stateMachineInstanceStore, IRepository <StateMachineInstanceEntity, Guid> repository, IRepository <StateMachineEntity, Guid> stateMachineRepository) { _configuration = configuration; _stateMachineInstanceStore = stateMachineInstanceStore; _repository = repository; _stateMachineRepository = stateMachineRepository; }
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddSwaggerGen(c => c.SwaggerDoc("v1", new Info() { Title = "JoyOI Management Service", Version = "V1" })); JoyOIManagementContext.ConnectionString = _configuration.GetConnectionString("DefaultConnection"); JoyOIManagementContext.MigrationAssembly = "JoyOI.ManagementService.WebApi"; services.AddDbContext <JoyOIManagementContext>(); var configuration = new JoyOIManagementConfiguration(); _configuration.GetSection("JoyOIManagement").Bind(configuration); services.AddJoyOIManagement(configuration); }
public DockerNodeStore( JoyOIManagementConfiguration configuration, INotificationService notificationService) { _configuration = configuration; _notificationService = notificationService; _nodes = new List <DockerNode>(); _nodesMap = new Dictionary <string, DockerNode>(); _waitReleaseQueue = new SortedDictionary <int, Queue <TaskCompletionSource <DockerNode> > >(); _nodesLock = new object(); _keepaliveReportInterval = TimeSpan.FromHours(1); // 最多1小时报告一次错误 _keepaliveScanInterval = TimeSpan.FromSeconds(5); // 5秒扫描一次 _keepaliveTimeout = TimeSpan.FromSeconds(30); // 每个节点最多使用30秒 _keepaliveMaxErrorCount = 3; // 3次失败后标记节点状态异常 foreach (var nodeInfo in _configuration.Nodes) { var node = new DockerNode(nodeInfo.Key, nodeInfo.Value); _nodes.Add(node); _nodesMap.Add(node.Name, node); } }