/// <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();
        }
Beispiel #2
0
        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;
 }
Beispiel #4
0
        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);
     }
 }