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()); }