private static void UpdateStatus(AverageLoginAlert gameStatus, AverageLoginEvent currentStatus, string gameTitle, ILogger log) { if (currentStatus.LoginCount > 0) { gameStatus.LoginCounter = 0; } else { gameStatus.LoginCounter += 1; } if (gameStatus.LoginCounter < WarningThreshold) { gameStatus.Status = GameStatus.Available; } if (gameStatus.LoginCounter >= WarningThreshold && gameStatus.LoginCounter < CriticalThreshold) { gameStatus.Status = GameStatus.Warning; if (gameStatus.LoginCounter == WarningThreshold) { log.LogWarning($"{DateTime.UtcNow} - Game {gameTitle} has reached WARNING level on Login Event Count.."); } } if (gameStatus.LoginCounter >= CriticalThreshold && gameStatus.LoginCounter < DownThreshold) { gameStatus.Status = GameStatus.Critical; if (gameStatus.LoginCounter == CriticalThreshold) { log.LogWarning($"{DateTime.UtcNow} - Game {gameTitle} has reached CRITICAL level on Login Event Count.."); } } if (gameStatus.LoginCounter >= DownThreshold) { gameStatus.Status = GameStatus.Down; if (gameStatus.LoginCounter == DownThreshold) { log.LogWarning($"{DateTime.UtcNow} - Game {gameTitle} has reached DOWN level on Login Event Count.."); } } gameStatus.LoginCount = currentStatus.LoginCount; }
private static void UpdateAverageStatus(AverageLoginAlert gameStatus, AverageLoginEvent currentStatus, string gameTitle, ILogger log) { if (getAverageDifference(gameStatus.LoginCount, currentStatus.LoginCount) < float.Parse(config["AveragePercentile"])) { gameStatus.LoginAverageCounter = 0; } else { gameStatus.LoginAverageCounter += 1; } if (gameStatus.LoginAverageCounter < WarningThreshold) { gameStatus.AverageStatus = GameStatus.Available; } if (gameStatus.LoginAverageCounter >= WarningThreshold && gameStatus.LoginAverageCounter < CriticalThreshold) { gameStatus.AverageStatus = GameStatus.Warning; if (gameStatus.LoginAverageCounter == WarningThreshold) { log.LogWarning($"{DateTime.UtcNow} - Game {gameTitle} has reached WARNING level on Login Event Count via Average Count.."); } } if (gameStatus.LoginAverageCounter >= CriticalThreshold && gameStatus.LoginAverageCounter < DownThreshold) { gameStatus.AverageStatus = GameStatus.Critical; if (gameStatus.LoginAverageCounter == CriticalThreshold) { log.LogWarning($"{DateTime.UtcNow} - Game {gameTitle} has reached CRITICAL level on Login Event Count via Average Count.."); } } if (gameStatus.LoginAverageCounter >= DownThreshold) { gameStatus.AverageStatus = GameStatus.Down; if (gameStatus.LoginAverageCounter == DownThreshold) { log.LogWarning($"{DateTime.UtcNow} - Game {gameTitle} has reached DOWN level on Login Event Count via Average Count.."); } } gameStatus.LoginCount = currentStatus.LoginCount; }
public static async void Run( [TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ExecutionContext context, ILogger log) { config = Helpers.GetConfig(context); WarningThreshold = Int32.Parse(config["WarningThreshold"]); CriticalThreshold = Int32.Parse(config["CriticalThreshold"]); DownThreshold = Int32.Parse(config["DownThreshold"]); var gameBlob = Helpers.GetBlob(context, log, config["CloudStorageContainer"], config["CloudStorageBlobFile"]); var gameList = Helpers.GetBlobAsList(gameBlob, log); CloudStorageAccount storageAccount = Helpers.GetCloudStorageAccount(context); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference(config["CloudStorageBlobFile"]); var blobs = container.ListBlobs(prefix: "loginEvents", useFlatBlobListing: true).OfType <CloudBlockBlob>().ToList(); if (blobs.Count == 0) { foreach (Game savedGame in gameList) { UpdateStatus(savedGame.LoginAlert, new AverageLoginEvent() { TitleId = savedGame.TitleId }, savedGame.Title, log); UpdateAverageStatus(savedGame.LoginAlert, new AverageLoginEvent() { TitleId = savedGame.TitleId }, savedGame.Title, log); } } else { foreach (var blobEvent in blobs) { List <AverageLoginEvent> currentList = BlobHelpers <AverageLoginEvent> .GetBlobContentLineByLine(blobEvent, log); foreach (Game savedGame in gameList) { log.LogInformation($"{DateTime.UtcNow} - Processing game {savedGame.Title}"); if (currentList.Exists(requestGame => requestGame.TitleId == savedGame.TitleId)) { AverageLoginEvent currentStatus = currentList.Find(x => x.TitleId == savedGame.TitleId); log.LogInformation($"{DateTime.UtcNow} - Game {savedGame.Title} has recorded events. Updating persisted status."); UpdateStatus(savedGame.LoginAlert, currentStatus, savedGame.Title, log); UpdateAverageStatus(savedGame.LoginAlert, currentStatus, savedGame.Title, log); } else { log.LogInformation($"{DateTime.UtcNow} - Game {savedGame.Title} does not have any recorded events. Updating persisted status."); UpdateStatus(savedGame.LoginAlert, new AverageLoginEvent() { TitleId = savedGame.TitleId }, savedGame.Title, log); UpdateAverageStatus(savedGame.LoginAlert, new AverageLoginEvent() { TitleId = savedGame.TitleId }, savedGame.Title, log); } } blobEvent.Delete(); } } await Helpers.UploadGame(gameBlob, gameList, log); }