Beispiel #1
0
 public IJobDefinition WithCorrelationPayloadUris(params Uri[] payloadUris)
 {
     foreach (Uri uri in payloadUris)
     {
         CorrelationPayloads.Add(new UriPayload(uri), "");
     }
     return(this);
 }
Beispiel #2
0
 public IJobDefinition WithCorrelationPayloadUris(IDictionary <Uri, string> payloadUrisWithDestinations)
 {
     foreach (var(uri, destination) in payloadUrisWithDestinations)
     {
         CorrelationPayloads.Add(new UriPayload(uri), destination);
     }
     return(this);
 }
Beispiel #3
0
        public async Task <ISentJob> SendAsync(Action <string> log = null)
        {
            IBlobHelper storage;

            if (string.IsNullOrEmpty(StorageAccountConnectionString))
            {
                storage = new ApiBlobHelper(HelixApi.Storage);
            }
            else
            {
                storage = new ConnectionStringBlobHelper(StorageAccountConnectionString);
            }

            IBlobContainer storageContainer = await storage.GetContainerAsync(TargetContainerName);

            var jobList = new List <JobListEntry>();

            List <string> correlationPayloadUris =
                (await Task.WhenAll(CorrelationPayloads.Select(p => p.UploadAsync(storageContainer, log)))).ToList();

            jobList = (await Task.WhenAll(
                           _workItems.Select(async w =>
            {
                var entry = await w.SendAsync(storageContainer, TargetContainerName, log);
                entry.CorrelationPayloadUris = correlationPayloadUris;
                return(entry);
            }
                                             ))).ToList();

            string jobListJson = JsonConvert.SerializeObject(jobList);
            Uri    jobListUri  = await storageContainer.UploadTextAsync(
                jobListJson,
                $"job-list-{Guid.NewGuid()}.json");


            string            jobStartIdentifier = Guid.NewGuid().ToString("N");
            JobCreationResult newJob             = await HelixApi.RetryAsync(
                () => JobApi.NewAsync(
                    new JobCreationRequest(
                        Source,
                        Type,
                        Build,
                        _properties.ToImmutableDictionary(),
                        jobListUri.ToString(),
                        TargetQueueId,
                        storageContainer.Uri,
                        storageContainer.ReadSas,
                        storageContainer.WriteSas)
            {
                Creator            = Creator,
                MaxRetryCount      = MaxRetryCount ?? 0,
                JobStartIdentifier = jobStartIdentifier,
            }),
                ex => log?.Invoke($"Starting job failed with {ex}\nRetrying..."));


            return(new SentJob(JobApi, newJob));
        }
Beispiel #4
0
        public async Task <ISentJob> SendAsync()
        {
            IBlobHelper storage;

            if (string.IsNullOrEmpty(StorageAccountConnectionString))
            {
                storage = new ApiBlobHelper(HelixApi.Storage);
            }
            else
            {
                storage = new ConnectionStringBlobHelper(StorageAccountConnectionString);
            }

            IBlobContainer storageContainer = await storage.GetContainerAsync(TargetContainerName);

            var jobList = new List <JobListEntry>();

            List <string> correlationPayloadUris =
                (await Task.WhenAll(CorrelationPayloads.Select(p => p.UploadAsync(storageContainer)))).ToList();

            foreach (WorkItemDefinition workItem in _workItems)
            {
                JobListEntry entry = await workItem.SendAsync(storageContainer, TargetContainerName);

                entry.CorrelationPayloadUris = correlationPayloadUris;
                jobList.Add(entry);
            }

            string jobListJson = JsonConvert.SerializeObject(jobList);
            Uri    jobListUri  = await storageContainer.UploadTextAsync(
                jobListJson,
                $"job-list-{Guid.NewGuid()}.json");

            JobCreationResult newJob = await JobApi.NewOperationAsync(
                new JobCreationRequest(
                    Source,
                    Type,
                    Build,
                    _properties,
                    jobListUri.ToString(),
                    TargetQueueId,
                    storageContainer.Uri,
                    storageContainer.ReadSas,
                    storageContainer.WriteSas,
                    Creator));

            return(new SentJob(JobApi, newJob));
        }
Beispiel #5
0
 public IJobDefinition WithCorrelationPayloadFiles(params string[] files)
 {
     CorrelationPayloads.Add(new AdhocPayload(files));
     return(this);
 }
Beispiel #6
0
 public IJobDefinition WithCorrelationPayloadDirectory(string directory)
 {
     CorrelationPayloads.Add(new DirectoryPayload(directory));
     return(this);
 }
Beispiel #7
0
 public IJobDefinition WithCorrelationPayloadArchive(string archive, string destination = "")
 {
     CorrelationPayloads.Add(new ArchivePayload(archive), destination);
     return(this);
 }
Beispiel #8
0
 public IJobDefinition WithCorrelationPayloadFiles(IList <string> files, string destination)
 {
     CorrelationPayloads.Add(new AdhocPayload(files.ToArray()), destination);
     return(this);
 }
Beispiel #9
0
 public IJobDefinition WithCorrelationPayloadDirectory(string directory, string archiveEntryPrefix, string destination)
 {
     CorrelationPayloads.Add(new DirectoryPayload(directory, archiveEntryPrefix), destination);
     return(this);
 }
Beispiel #10
0
 public IJobDefinition WithCorrelationPayloadArchive(string archive)
 {
     CorrelationPayloads.Add(new ArchivePayload(archive));
     return(this);
 }