public async Task RunAsync()
        {
            var count = 0;

            var maxWorkers = Math.Max(1, MaxParallelWorkers) - 1;
            var maxSize    = Math.Max(1024, MaxBlobSizeForBuffering);

            Log?.Invoke($"Using {maxWorkers + 1} workers and buffering blobs smaller than {(maxSize / 1024.0):F0} KB", 1);

            var buffers = new MemoryStream[maxWorkers];

            for (int i = 0; i < maxWorkers; i++)
            {
                buffers[i] = new MemoryStream(maxSize);
            }

            var sw = Stopwatch.StartNew();

            foreach (var container in BlobClient.ListContainers())
            {
                if (ContainerFilter?.Invoke(container) == false)
                {
                    continue;
                }

                count += await ProcessContainerAsync(container, buffers, maxSize);
            }

            sw.Stop();

            Log?.Invoke($"Archived {count} files in {sw.Elapsed.TotalSeconds:F0} seconds", 0);
        }
Exemple #2
0
 public static IEntityFiltrator <AlbumEntity> ToEntity(this IFiltrator <Album> filter)
 {
     if (filter is ContainerFilter)
     {
         ContainerFilter filterImpl = ((ContainerFilter)filter);
         return(new ContainerEntityFilter(filterImpl.Balance, filterImpl.Name));
     }
     return(new ContainerEntityFilter(0, string.Empty));
 }
Exemple #3
0
        public async Task <IList <Container> > GetContainers(ContainerFilter parameters)
        {
            var containers = await this.Client.Containers.ListContainersAsync(parameters);

            return(this.Mapper.Map <IList <Container> >(containers));
        }
Exemple #4
0
        private async Task <List <string> > ListContainers(ContainerState containerState, ContainerFilter containerFilter, string param)
        {
            if (this.DockerClient == null)
            {
                return(null);
            }

            IDictionary <string, IDictionary <string, bool> > filter = new Dictionary <string, IDictionary <string, bool> >();

            if ((containerState & ContainerState.Exited) == ContainerState.Exited)
            {
                filter.Add("status", new Dictionary <string, bool>()
                {
                    { "exited", true }
                });
                filter.Add("name", new Dictionary <string, bool>()
                {
                    { param, true }
                });
            }

            if ((containerState & ContainerState.Created) == ContainerState.Created)
            {
                bool ok = filter.TryGetValue("status", out IDictionary <string, bool> f);
                if (ok)
                {
                    f.Add("created", true);
                }
                else
                {
                    filter.Add("status", new Dictionary <string, bool>()
                    {
                        { "created", true }
                    });
                    filter.Add("name", new Dictionary <string, bool>()
                    {
                        { param, true }
                    });
                }
            }
            else
            {
                if (containerFilter == ContainerFilter.Name)
                {
                    filter.Add("name", new Dictionary <string, bool>()
                    {
                        { param, true }
                    });
                }
                else if (containerFilter == ContainerFilter.Network)
                {
                    filter.Add("network", new Dictionary <string, bool>()
                    {
                        { param, true }
                    });
                }
            }

            Task <IList <ContainerListResponse> > responsesTask = this.DockerClient.Containers.ListContainersAsync
                                                                  (
                new ContainersListParameters()
            {
                Filters = filter
            }
                                                                  );

            responsesTask.Wait();
            IList <ContainerListResponse> responses = await responsesTask;

            List <string> containerIds = new List <string>();

            foreach (ContainerListResponse response in responses)
            {
                containerIds.Add(response.ID);
            }

            return(containerIds);
        }