Пример #1
0
        private void WarmUpService <TServiceSettings, THandler>(ServiceTypeEnum serviceType)
            where TServiceSettings : BaseServiceSettingsElastic
            where THandler : IServiceHandler <TServiceSettings>
        {
            var services = serviceQuery.GetByType((int)serviceType).ToList();

            var handler = serviceProvider.GetService <THandler>();

            foreach (var service in services)
            {
                ProcessTypeEnum processType;
                switch (serviceType)
                {
                case ServiceTypeEnum.Classifier:
                    processType = ProcessTypeEnum.ClassifierActivate;
                    break;

                case ServiceTypeEnum.Prc:
                    processType = ProcessTypeEnum.PrcActivate;
                    break;

                case ServiceTypeEnum.Search:
                    processType = ProcessTypeEnum.SearchActivate;
                    break;

                default:
                    throw new Exception("Try to warm up service with undefined process activation type!");
                }

                if (service.Status != (int)ServiceStatusEnum.Active)
                {
                    continue;
                }

                var settings = serviceQuery.GetSettings <TServiceSettings>(service.Id);
                var process  = processHandler.Create(
                    processType,
                    service.Id,
                    service,
                    string.Format(Resources.ServiceResources.Activating_0_Service_1, serviceType, service.Name));

                service.ProcessIdList.Add(process.Id);
                serviceQuery.Update(service.Id, service);

                processHandler.Start(process, (tokenSource) => handler.Activate(process.Id, settings, tokenSource.Token));
            }
        }