public IActionResult Activate(string id, [FromBody] PrcActivateSettings prcActivateSettings)
        {
            //SERVICE VALIDATION
            var service = serviceQuery.Get(id);

            if (service == null)
            {
                return(new HttpStatusCodeWithErrorResult(StatusCodes.Status404NotFound, ServiceResources.InvalidIdNotExistingService));
            }
            if (service.Type != (int)ServiceTypeEnum.Prc)
            {
                return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, string.Format(ServiceResources.InvalidServiceTypeOnly_0_ServicesAreValidForThisRequest, "Prc")));
            }
            if (service.Status != (int)ServiceStatusEnum.Prepared)
            {
                return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, ServiceResources.InvalidStatusOnlyTheServicesWithPreparedStatusCanBeActivated));
            }

            var prcSettings = serviceQuery.GetSettings <PrcSettingsElastic>(service.Id);

            if (prcActivateSettings == null)
            {
                if (prcSettings.FieldsForRecommendation == null)
                {
                    return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, ServiceResources.EmptyActivateSettings));
                }
            }
            else
            {
                if (prcActivateSettings?.FieldsForRecommendation?.Any() == true)
                {
                    var fields = prcActivateSettings.FieldsForRecommendation.Intersect(GlobalStore.DataSets.Get(prcSettings.DataSetName).DataSet.InterpretedFields).ToList();
                    if (fields.Count != prcActivateSettings.FieldsForRecommendation.Count)
                    {
                        return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest,
                                                                 string.Format(ServiceResources.TheFollowingFieldsNotExistInTheSampleDocument_0, string.Join(", ", fields))));
                    }
                    prcSettings.FieldsForRecommendation = prcActivateSettings.FieldsForRecommendation;
                }
                else
                {
                    prcSettings.FieldsForRecommendation = GlobalStore.DataSets.Get(prcSettings.DataSetName).DataSet.InterpretedFields;
                }
            }

            var process = processHandler.Create(
                ProcessTypeEnum.PrcActivate,
                service.Id,
                prcSettings,
                string.Format(ServiceResources.Activating_0_Service_1, ServiceTypeEnum.Prc, service.Name));

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

            processHandler.Start(process, (tokenSource) => prcHandler.Activate(process.Id, prcSettings, tokenSource.Token));

            return(new HttpStatusCodeWithObjectResult(StatusCodes.Status202Accepted, process.ToProcessModel()));
        }
 public async Task <ClientResponseWithObject <Process> > ActivateServiceAsync(string serviceId, PrcActivateSettings prcActivateSettings)
 {
     return(await _client.SendAsync <Process>(HttpMethod.Post, prcActivateSettings, $"{serviceId}/{ActivateEndpointSuffix}", null, null));
 }
        public IActionResult Get(string id)
        {
            var service = serviceQuery.Get(id);

            if (service == null)
            {
                return(new StatusCodeResult(StatusCodes.Status404NotFound));
            }
            if (service.Type != (int)ServiceTypeEnum.Prc)
            {
                return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, string.Format(ServiceResources.InvalidServiceTypeOnly_0_ServicesAreValidForThisRequest, "Prc")));
            }

            PrcActivateSettings activateSettings = null;
            PrcPrepareSettings  prepareSettings  = null;
            PrcIndexSettings    indexSettings    = null;

            var prcSettingsElastic = serviceQuery.GetSettings <PrcSettingsElastic>(service.Id);

            if (prcSettingsElastic != null)
            {
                if (service.Status == (int)ServiceStatusEnum.Prepared || service.Status == (int)ServiceStatusEnum.Active)
                {
                    prepareSettings = new PrcPrepareSettings
                    {
                        DataSetName      = GlobalStore.DataSets.Get(prcSettingsElastic.DataSetName).AliasName,
                        TagIdList        = prcSettingsElastic.Tags.Select(t => t.Id).ToList(),
                        CompressSettings = CompressHelper.ToCompressSettings(prcSettingsElastic.CompressSettings),
                        CompressLevel    = CompressHelper.ToCompressLevel(prcSettingsElastic.CompressSettings)
                    };
                    if (service.Status == (int)ServiceStatusEnum.Active)
                    {
                        activateSettings = new PrcActivateSettings
                        {
                            FieldsForRecommendation = prcSettingsElastic.FieldsForRecommendation
                        };

                        if (prcSettingsElastic?.IndexSettings?.IndexDate != null)
                        {
                            indexSettings = new PrcIndexSettings()
                            {
                                Filter = new Filter()
                                {
                                    Query     = prcSettingsElastic.IndexSettings.FilterQuery,
                                    TagIdList = prcSettingsElastic.IndexSettings.FilterTagIdList
                                }
                            };
                        }
                    }
                }
            }

            var respService = service.ToServiceModel <PrcService>();

            respService.ActualProcessId  = service.ProcessIdList.FirstOrDefault(pid => GlobalStore.Processes.IsExist(pid));
            respService.ActivateSettings = activateSettings;
            respService.PrepareSettings  = prepareSettings;
            respService.IndexSettings    = indexSettings;

            return(new OkObjectResult(respService));
        }