Exemple #1
0
        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."));
            }
        }