Beispiel #1
0
        public async Task <int> RunAsync(AppOptions appOptions, UploadCommandOptions commandConfig)
        {
            var connectionInfo = ConnectionInfoHelper.CreateConnectionInfo(appOptions);
            var connection     = connectionInfo.CreateClusterConnection();

            var filesToUpload = DiscoverFilesToUploadRecursivly(commandConfig.PackageSourcePath,
                                                                commandConfig.PackageSourcePath.FullName)
                                .Select(x => new Tuple <FileInfo, string>(x.Key, x.Value));

            var logger        = new Logger(appOptions.Verbose);
            var imageStore    = new SfRestApi.Endpoints.ImageStore(connection, logger);
            var failedUploads = new ConcurrentBag <FileInfo>();

            var uploadFileBlock = new TransformBlock <Tuple <FileInfo, string>, FileInfo>(async tuple =>
            {
                var success = await imageStore
                              .UploadAsync(tuple.Item1, tuple.Item2, commandConfig.PackageName)
                              .ConfigureAwait(false);

                return(success
                    ? null
                    : tuple.Item1);
            }, new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = 4
            });

            var handleFailuresBlock = new ActionBlock <FileInfo>(file =>
            {
                if (file != null)
                {
                    failedUploads.Add(file);
                }
            });

            uploadFileBlock.LinkTo(handleFailuresBlock, new DataflowLinkOptions
            {
                PropagateCompletion = true
            });

            foreach (var file in filesToUpload)
            {
                uploadFileBlock.Post(file);
            }

            uploadFileBlock.Complete();
            handleFailuresBlock.Completion.Wait();

            if (!failedUploads.Any())
            {
                logger.Log($"Upload completed.");
                return(0);
            }

            logger.LogError("Failed to upload some files, aborting");
            return(-1);
        }
Beispiel #2
0
        public async Task <int> RunAsync(AppOptions appOptions, ProvisionCommandOptions commandConfig)
        {
            var connectionInfo = ConnectionInfoHelper.CreateConnectionInfo(appOptions);
            var connection     = connectionInfo.CreateClusterConnection();
            var logger         = new Logger(appOptions.Verbose);

            var register        = new Register(connection, logger);
            var registerSuccess = await register.RegisterAsync(commandConfig.PackageName).ConfigureAwait(false);

            return(registerSuccess ? 0 : -1);
        }
Beispiel #3
0
        public async Task <int> RunAsync(AppOptions appOptions, UpgradeCommandOptions commandConfig)
        {
            var connectionInfo = ConnectionInfoHelper.CreateConnectionInfo(appOptions);
            var connection     = connectionInfo.CreateClusterConnection();
            var logger         = new Logger(appOptions.Verbose);

            var register        = new SfRestApi.Endpoints.Application(connection, logger);
            var upgradeOptions  = commandConfig.ToApplicationModel();
            var registerSuccess = await register.UpgradeAsync(upgradeOptions).ConfigureAwait(false);

            return(registerSuccess ? 0 : -1);
        }