public static async Task Run([QueueTrigger("%OnlineFormQueueName%", Connection = "SIMSOnlineFormConnection")] string rawForm, [Table("OnlineFormSequester", "ConnectionStrings:SIMSOnlineFormConnection")] IAsyncCollector <TableEntity> tblClient, ILogger log) { try { var doc = JsonDocument.Parse(rawForm); // Extract the recetly generated reference no. var refNo = doc.RootElement.GetProperty("Incidents").GetProperty("IncidentTitle").GetString(); #if DEBUG try { log.LogInformation($"Addding to table storage: {refNo}"); var partiionKey = DateTime.Now.Date.ToShortDateString().Replace("/", "-"); await tblClient.AddAsync(new FormProcessingEntity(partiionKey, refNo) { FormData = doc.RootElement.GetRawText() }); } catch (Exception ex) { log.LogCritical("Could now squestor online-form data", ex); } #endif log.LogInformation($"Online form entity received: {refNo}"); // Get the token var token = await TokenFetcherHelper.FetchToken(_client, log); await SendForm(refNo, rawForm, token, log); } catch (KeyNotFoundException ex) { log.LogCritical("Reference number not found.", ex); } }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { var cacheConn = Environment.GetEnvironmentVariable("CacheConnection") ?? Environment.GetEnvironmentVariable("ConnectionStrings:CacheConnection"); RedisConn = ConnectionMultiplexer.Connect(cacheConn); try { var redisDb = RedisConn.GetDatabase(); var lookupData = redisDb.StringGet(SimsLookups.KeyName); var lookupTimeoutMins = int.Parse(Environment.GetEnvironmentVariable("LookupTimeout")); if (lookupData == RedisValue.Null) { log.LogInformation("Requesting Online form lookups."); var token = await TokenFetcherHelper.FetchToken(client, log); var lookups = await FetchLookups(client, token, log); redisDb.StringSet(KeyName, System.Text.Json.JsonSerializer.Serialize(lookups)); redisDb.KeyExpire(KeyName, TimeSpan.FromMinutes(lookupTimeoutMins)); return(new OkObjectResult(lookups)); } else { log.LogInformation("Fetching from cache."); return(new OkObjectResult(System.Text.Json.JsonSerializer.Deserialize <SimsLookupsHost>(lookupData))); } } catch (RedisException ex) { log.LogCritical("Redis Error", ex); return(new BadRequestErrorMessageResult("Failed to fetch lookups.")); } catch (NullReferenceException ex) { log.LogCritical("Token error", ex); return(new BadRequestErrorMessageResult("Failed to fetch lookups.")); } }