コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
        }