public void OperationAggregatorUsingParallel()
        {
            var expected = new BatchOperationResponse
            {
                Results = new List <OperationResult>
                {
                    new OperationResult
                    {
                        Value = "1"
                    }
                }
            };

            var request = new BatchOperationRequest
            {
                Operations = CreateOperations(ProcessingType.Parallel),
                Arguments  = new List <OperationArgument> {
                    new OperationArgument {
                        Name = "Operation Args", Value = "1"
                    }
                }
            };

            var result = _operationAggregator.Execute(request);

            Assert.AreEqual(expected.Results.First().Value, result.Results.First().Value);
        }
示例#2
0
 /// <summary>
 /// Parse response body as a resource model
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="response"></param>
 /// <returns></returns>
 public T ParseObject <T>(BatchOperationResponse response)
 {
     if (response.Status >= 200 && response.Status < 300)
     {
         using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(response.Entity)))
         {
             return(JSON_SERIALIZER.ReadObject <T>(stream));
         }
     }
     else
     {
         return(default(T));
     }
 }
示例#3
0
 /// <summary>
 /// Parse error
 /// </summary>
 /// <param name="response"></param>
 /// <returns></returns>
 public Error ParseError(BatchOperationResponse response)
 {
     if (response.Status >= 400)
     {
         using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(response.Entity)))
         {
             return(JSON_SERIALIZER.ReadObject <Error>(stream));
         }
     }
     else
     {
         return(null);
     }
 }
示例#4
0
        private async Task <BatchOperationResponse> DeleteContainersWithFiltersAsync(
            DockerFilterCollection filters,
            bool ignoreEmptyResult,
            bool force,
            bool removeVolumes
            )
        {
            var response = new BatchOperationResponse(_logger);

            filters.RequiresLabel(DockerLabelHelper.CreatedByTriceratopsLabel);

            using (_logger.BeginScope("Using filters to delete containers"))
            {
                filters.LogContents(_logger);
            }

            try
            {
                using var dockerClient = CreateDockerClient();

                IList <ContainerListResponse> existingContainers = null;

                using (_logger.BeginScope("Finding existing containers to delete"))
                {
                    existingContainers = await dockerClient.Containers.ListContainersAsync(new ContainersListParameters
                    {
                        Filters = filters.ToDictionary()
                    });

                    if (!existingContainers.Any())
                    {
                        if (ignoreEmptyResult)
                        {
                            _logger.LogInformation("The filter parameters supplied matched no containers, " +
                                                   "but empty result is being ignored.");

                            return(response.IsSuccessful());
                        }

                        return(response
                               .LogWarning("The filter parameters supplied matched no containers")
                               .HasFailed());
                    }

                    _logger.LogInformation($"Found {existingContainers.Count} containers to delete");
                }

                foreach (var container in existingContainers)
                {
                    using (_logger.BeginScope($"Deleting container {container.ID}"))
                    {
                        try
                        {
                            await dockerClient.Containers.RemoveContainerAsync(container.ID, new ContainerRemoveParameters
                            {
                                Force         = force,
                                RemoveVolumes = removeVolumes
                            });

                            response.AddSuccessfulContainerId(container.ID);

                            _logger.LogInformation("Container deleted");
                        }
                        catch (Exception exception)
                        {
                            response
                            .LogException(exception, $"Unable to delete container {container.ID}")
                            .AddFailedContainerId(container.ID);
                        }
                    }
                }

                if (response.SuccessCount == response.TotalOperations)
                {
                    return(response.IsSuccessful());
                }

                return(response
                       .LogError($"Expected to delete {response.TotalOperations}, only deleted {response.SuccessCount}")
                       .HasFailed());
            }
            catch (Exception exception)
            {
                response
                .LogException(exception, "Unable to delete containers")
                .HasFailed();
            }

            return(response);
        }