コード例 #1
0
ファイル: Program.cs プロジェクト: WeilerWebServices/NuGet
        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);
        }
コード例 #2
0
        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());
                    }
                }
            }
        }
コード例 #3
0
        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);
                }
            }
        }