private static async Task AsyncMain(Arguments args) { if (!String.IsNullOrEmpty(args.EncodedPayload)) { args.Payload = Encoding.UTF8.GetString(Convert.FromBase64String(args.EncodedPayload)); } if (!String.IsNullOrEmpty(args.EncodedConfiguration)) { args.Configuration = Encoding.UTF8.GetString(Convert.FromBase64String(args.EncodedConfiguration)); } var configuration = InvocationPayloadSerializer.Deserialize(args.Configuration); var service = await LocalWorkService.Create(configuration); var tcs = new TaskCompletionSource<object>(); string message = String.Format("Invoking job: {0}.", args.Job); Console.WriteLine(message); Console.WriteLine(new String('-', message.Length)); Stopwatch sw = new Stopwatch(); try { sw.Start(); var observable = service.RunJob(args.Job, args.Payload); observable .Subscribe( evt => RenderEvent(evt), ex => tcs.SetException(ex), () => tcs.SetResult(null)); await tcs.Task; sw.Stop(); } catch (AggregateException aex) { Console.Error.WriteLine(aex.InnerException.ToString()); } catch (Exception ex) { Console.Error.WriteLine(ex.ToString()); } message = String.Format("Completed invocation of job {0} in {1}.", args.Job, sw.Elapsed); Console.WriteLine(new String('-', message.Length)); Console.WriteLine(message); }
protected override async Task OnExecute() { if (!String.IsNullOrEmpty(EncodedPayload)) { Payload = Encoding.UTF8.GetString(Convert.FromBase64String(EncodedPayload)); } var client = await OpenClient(); if (client == null) { return; } await Console.WriteTraceLine(Strings.Commands_UsingServiceUri, ServiceUri.AbsoluteUri); // Try to parse the payload Dictionary <string, string> payload = null; Exception thrown = null; try { payload = InvocationPayloadSerializer.Deserialize(Payload); } catch (Exception ex) { thrown = ex; } if (thrown != null) { await Console.WriteErrorLine(Strings.Work_InvokeCommand_PayloadInvalid, thrown.Message); return; } if (String.IsNullOrEmpty(Payload)) { await Console.WriteInfoLine(Strings.Work_InvokeCommand_CreatingInvocation_NoPayload, Job); } else { await Console.WriteInfoLine(Strings.Work_InvokeCommand_CreatingInvocation_WithPayload, Job); await Console.WriteInfoLine(Payload); } if (!WhatIf) { var response = await client.Invocations.Put(new InvocationRequest(Job, Source) { Payload = payload, JobInstanceName = JobInstanceName, UnlessAlreadyRunning = UnlessAlreadyRunning }); if (await ReportHttpStatus(response)) { if (response.StatusCode == HttpStatusCode.NoContent) { await Console.WriteInfoLine(Strings.Work_InvokeCommand_AlreadyRunning); } else { var invocation = await response.ReadContent(); await Console.WriteInfoLine(Strings.Work_InvokeCommand_CreatedInvocation, invocation.Id.ToString("N").ToLowerInvariant()); } } } }
protected override async Task OnExecute(SubscriptionCloudCredentials credentials) { if (!String.IsNullOrEmpty(EncodedPayload)) { Payload = Encoding.UTF8.GetString(Convert.FromBase64String(EncodedPayload)); } if (ServiceUri == null) { await Console.WriteErrorLine(Strings.ParameterRequired, "SerivceUri"); } else { Dictionary <string, string> payload = null; if (!String.IsNullOrEmpty(Payload)) { payload = InvocationPayloadSerializer.Deserialize(Payload); } var bodyValue = new InvocationRequest( Job, "Scheduler", payload) { JobInstanceName = InstanceName, UnlessAlreadyRunning = Singleton }; var body = JsonFormat.Serialize(bodyValue); var request = new JobCreateOrUpdateParameters() { StartTime = StartTime, Action = new JobAction() { Type = JobActionType.Https, Request = new JobHttpRequest() { Uri = new Uri(ServiceUri, "work/invocations"), Method = "PUT", Body = body, Headers = new Dictionary <string, string>() { { "Content-Type", "application/json" }, { "Authorization", GenerateAuthHeader(Password) } } } // TODO: Retry Policy }, Recurrence = new JobRecurrence() { Count = Count, EndTime = EndTime, Frequency = Frequency, Interval = Interval // TODO: Schedule field? } }; using (var client = CloudContext.Clients.CreateSchedulerClient(credentials, CloudService, Collection)) { await Console.WriteInfoLine(Strings.Scheduler_NewJobCommand_CreatingJob, Job, CloudService, Collection); if (WhatIf) { await Console.WriteInfoLine(Strings.Scheduler_NewJobCommand_WouldCreateJob, JsonConvert.SerializeObject(request, new JsonSerializerSettings() { Formatting = Formatting.Indented, ContractResolver = new CamelCasePropertyNamesContractResolver() })); } else { var response = await client.Jobs.CreateOrUpdateAsync(InstanceName, request, CancellationToken.None); await Console.WriteObject(response.Job); } await Console.WriteInfoLine(Strings.Scheduler_NewJobCommand_CreatedJob, Job, CloudService, Collection); } } }