Beispiel #1
0
        public static async Task Run(
            [QueueTrigger("webpage-scan-jobs", Connection = "AzureWebJobsStorage")] AddWebPageUpdatedJobDto job,
            //[TimerTrigger(runEvery5MinutesBetween8AMAnd6PM, RunOnStartup = runOnStartUp)]TimerInfo myTimer,
            [Queue("webpage-scan-jobs", Connection = "AzureWebJobsStorage")] CloudQueue outputQueue,
            ILogger log)
        {
            var pageService = await WebPageService.LoadPage(job.WebPageUrl);

            var eleMd5 = await pageService.GetMd5ValueOfElement(job.PathOfElementToWatch);

            // If element has been updated
            if (!eleMd5.Equals(job.ElementMd5LastRun))
            {
                var screenshot = await pageService.TakeScreenshot();

                var screenshotStorageUrl = await SaveScreenshotToStorage(screenshot);
                await SendNotificationEmail(job, screenshotStorageUrl);

                log.LogInformation("It's updated! - element: \"{0}\" on {1}", job.PathOfElementToWatch, job.WebPageUrl);

                // If we're only watching for one change, then we're finished
                if (!job.WatchIndefinitely)
                {
                    return;
                }
            }

            job.ElementMd5LastRun = eleMd5;

            // Add message to queue and make it visible after a specific time.
            var cqm = new CloudQueueMessage(JsonConvert.SerializeObject(job));
            await outputQueue.AddMessageAsync(cqm, null, TimeSpan.FromMinutes(double.Parse(Environment.GetEnvironmentVariable("HideNewMessagesForInMinutes"))), null, null);

            log.LogInformation("No change for element: \"{0}\" on {1}", job.PathOfElementToWatch, job.WebPageUrl);
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            [Queue("webpage-scan-jobs", Connection = "AzureWebJobsStorage")] ICollector <string> msg,
            ILogger log)
        {
            var request = await req.GetJsonBody <AddWebPageUpdatedJobDto, AddWebPageUpdatedJobValidator>();

            if (!request.IsValid)
            {
                log.LogInformation($"Invalid form data.");
                return(request.ToBadRequest());
            }

            var pageService = await WebPageService.LoadPage(request.Value.WebPageUrl);

            // Get current element value so that when we run the job, we can tell if it's changed.
            request.Value.ElementMd5LastRun = await pageService.GetMd5ValueOfElement(request.Value.PathOfElementToWatch);

            msg.Add(JsonConvert.SerializeObject(request.Value));

            return(new NoContentResult());
        }