Beispiel #1
0
        public static async Task BatchProcessor(
            [QueueTrigger(_QUEUENAME)] string message,
            [Table(_INDEXERTABLENAME)] CloudTable summaryTable,
            [EventHub(_EVENTHUBEPATH, Connection = "EventHubConnection")] IAsyncCollector <string> eventHub,
            ILogger logger)
        {
            var run = DateTime.Now;

            logger.LogInformation($"Processing batch {run}");
            var analytics = LogAnalyticQuery.GetInstance(logger);

            if (_local)
            {
                await analytics.AuthenticateWithClient(tenantId, _clientId, _clientSecret);
            }
            else
            {
                await analytics.AuthenticateWithMSI();
            }

            var timer   = Stopwatch.StartNew();
            var summary = JsonConvert.DeserializeObject <Summary>(message);

            var events = await analytics.FetchEvents($"datetime({summary.LastCursor})", $"datetime({summary.NextCursor})");

            await eventHub.SendEvents(events, logger);

            summary      = new Summary(summary.LastCursor, summary.NextCursor, events.Count, "OK", timer.ElapsedMilliseconds, run);
            summary.ETag = "*";  //Etag required for replace
            await summaryTable.ExecuteAsync(TableOperation.Replace(summary));
        }