/// <inheritdoc/>
        public async Task <PublishBulkResultModel> NodePublishBulkAsync(
            string endpoint, PublishBulkRequestModel request)
        {
            var result = await _client.NodePublishBulkAsync(endpoint,
                                                            request.ToApiModel());

            return(result.ToServiceModel());
        }
Beispiel #2
0
        /// <inheritdoc/>
        public async Task <PublishBulkResultModel> NodePublishBulkAsync(
            string endpoint,
            PublishBulkRequestModel request,
            CancellationToken ct = default
            )
        {
            var result = await _client.NodePublishBulkAsync(endpoint,
                                                            request.ToApiModel(), ct);

            return(result.ToServiceModel());
        }
Beispiel #3
0
        /// <inheritdoc/>
        public async Task <PublishBulkResultModel> NodePublishBulkAsync(string endpointId,
                                                                        PublishBulkRequestModel request)
        {
            if (string.IsNullOrEmpty(endpointId))
            {
                throw new ArgumentNullException(nameof(endpointId));
            }
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            var endpoint = await _endpoints.GetEndpointAsync(endpointId);

            var result = await _jobs.NewOrUpdateJobAsync(GetDefaultId(endpointId), job => {
                var publishJob = AsJob(job);
                var jobChanged = false;
                var connection = new ConnectionModel {
                    Endpoint    = endpoint.Registration.Endpoint,
                    Diagnostics = request.Header?.Diagnostics,
                    User        = request.Header?.Elevation
                };

                if (request.NodesToAdd != null)
                {
                    var dataSetWriterName = Guid.NewGuid().ToString();
                    foreach (var item in request.NodesToAdd)
                    {
                        AddOrUpdateItemInJob(publishJob, item, endpointId, job.Id,
                                             connection, dataSetWriterName);
                        jobChanged = true;
                    }
                }
                if (request.NodesToRemove != null)
                {
                    foreach (var item in request.NodesToRemove)
                    {
                        jobChanged = RemoveItemFromJob(publishJob, item, connection);
                    }
                }

                if (jobChanged)
                {
                    job.JobConfiguration = _serializer.SerializeJobConfiguration(
                        publishJob, out var jobType);
                    job.JobConfigurationType = jobType;
                    if (publishJob.WriterGroup.DataSetWriters.Count != 0 &&
                        job.LifetimeData.Status != JobStatus.Deleted)
                    {
                        job.LifetimeData.Status = JobStatus.Active;
                    }
                    job.Demands = PublisherDemands(endpoint);
                }
                return(Task.FromResult(jobChanged));
            });

            return(new PublishBulkResultModel {
                NodesToAdd = request.NodesToAdd?
                             .Select(_ => new ServiceResultModel()).ToList(),
                NodesToRemove = request.NodesToRemove?
                                .Select(_ => new ServiceResultModel()).ToList(),
            });
        }
Beispiel #4
0
        /// <inheritdoc/>
        public async Task <PublishBulkResultModel> NodePublishBulkAsync(
            string endpointId,
            PublishBulkRequestModel request,
            CancellationToken ct = default
            )
        {
            if (string.IsNullOrEmpty(endpointId))
            {
                throw new ArgumentNullException(nameof(endpointId));
            }
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var endpoint = await _endpoints.GetEndpointAsync(endpointId, ct : ct);

            if (endpoint == null)
            {
                throw new ArgumentException("Invalid endpointId");
            }

            PublishBulkResultModel bulkResult = null;

            var jobId  = GetDefaultId(endpointId);
            var result = await _jobs.NewOrUpdateJobAsync(jobId, job => {
                var publishJob = AsJob(job);
                var jobChanged = false;
                var connection = new ConnectionModel {
                    Endpoint    = endpoint.Registration.Endpoint,
                    Diagnostics = request.Header?.Diagnostics,
                    User        = request.Header?.Elevation
                };

                bulkResult = new PublishBulkResultModel {
                    NodesToAdd    = new Dictionary <string, ServiceResultModel>(),
                    NodesToRemove = new Dictionary <string, ServiceResultModel>()
                };

                // Add nodes.
                if (request.NodesToAdd != null && request.NodesToAdd.Count() > 0)
                {
                    var dataSetWriterName = Guid.NewGuid().ToString();
                    foreach (var item in request.NodesToAdd)
                    {
                        AddOrUpdateItemInJob(publishJob, item, endpointId, job.Id,
                                             connection, dataSetWriterName);
                        jobChanged = true;

                        bulkResult.NodesToAdd.Add(item.NodeId, new ServiceResultModel());
                    }
                }

                // Remove nodes.
                if (request.NodesToRemove != null && request.NodesToRemove.Count() > 0)
                {
                    foreach (var item in request.NodesToRemove)
                    {
                        var currentJobChanged = RemoveItemFromJob(publishJob, item, connection);
                        jobChanged           |= currentJobChanged;

                        var serviceResultModel = currentJobChanged
                            ? new ServiceResultModel()
                            : new ServiceResultModel()
                        {
                            StatusCode   = (uint)HttpStatusCode.NotFound,
                            ErrorMessage = "Job not found"
                        };
                        bulkResult.NodesToRemove.Add(item, serviceResultModel);
                    }
                }

                if (jobChanged)
                {
                    job.JobConfiguration = _serializer.SerializeJobConfiguration(
                        publishJob, out var jobType);
                    job.JobConfigurationType = jobType;
                    if (publishJob.WriterGroup.DataSetWriters.Count != 0 &&
                        job.LifetimeData.Status != JobStatus.Deleted)
                    {
                        job.LifetimeData.Status = JobStatus.Active;
                    }
                    job.Demands = PublisherDemands(endpoint);
                }
                return(Task.FromResult(jobChanged));
            }, ct);

            return(bulkResult);
        }