public async static Task Run([TimerTrigger("29 0 * * * *")] TimerInfo myTimer, ILogger log) { log.LogInformation($"SetToken function executed at: {DateTime.Now.ToLocalTime().ToString(Constants.DateTimeFormatString)}"); var slackMessenger = new SlackMessenger(_webhookUrl); try { var currentAuthToken = await KeyVault.GetAuthTokenFromKeyVault(_keyVaultName); var currentAuthTokenExpiryDate = GetExpiryDate(currentAuthToken); if (currentAuthTokenExpiryDate < DateTimeOffset.Now.AddDays(2)) { log.LogInformation("Auth token expires soon, starting refresh process..."); SetupHttpClient(); var username = Environment.GetEnvironmentVariable("BrightUsername"); var password = Environment.GetEnvironmentVariable("BrightPassword"); var authResponse = await GetAuthResponse(username, password); if (authResponse.Valid) { log.LogInformation($"New auth token was retrieved successfully. Expiry date: {authResponse.ExpiryDate.ToLocalTime().ToString(Constants.DateTimeFormatString)}"); var secretVersion = await KeyVault.SaveAuthTokenToKeyVault(authResponse.Token, _keyVaultName); log.LogInformation($"Auth token was saved to Azure Key Vault, secret version: '{secretVersion}'."); } else { throw new Exception("Auth token response was not valid."); } } else { log.LogInformation($"Auth token expires at {currentAuthTokenExpiryDate.ToLocalTime().ToString(Constants.DateTimeFormatString)}, not refreshing yet."); } } catch (Exception ex) { var error = $"Error in SetToken: {ex.Message}{Environment.NewLine}{ex.StackTrace}"; log.LogError(error); await slackMessenger.SendMessage(error, Emoji.Exclamation, "SetToken Error"); throw; } log.LogInformation($"SetToken function completed at: {DateTime.Now.ToLocalTime().ToString(Constants.DateTimeFormatString)}"); }