コード例 #1
0
        public void DoSemanticCheck(bool firstAttemptToCheck)
        {
            DataResponse data;

            try
            {
                data = _serviceProxy.GetSemanticData();
            }
            catch (ServiceUnavailableException e)
            {
                var message = "Data service unavailable";

                if (e.InnerException != null)
                {
                    message += ": " + e.InnerException.Message;
                }

                _logger.Information(message);
                _metricServer.ReportIsBroken();
                return;
            }

            if (firstAttemptToCheck)
            {
                _metricServer.ReportInconclusive();
                return;
            }

            var expectedTimeToGetTheSemanticMessage = TimeSpan.FromSeconds(60);

            if (data == null)
            {
                _logger.Information("No message received, semantic message did not pass " +
                                    $"through in the expected time ({expectedTimeToGetTheSemanticMessage})");
                _metricServer.ReportIsBroken();
                return;
            }


            if (data.MessageCreatedAt == DateTime.MinValue)
            {
                _metricServer.ReportIsBroken();
                throw new Exception($"Received data.MessageCreatedAt as {DateTime.MinValue} which should NEVER be possible " +
                                    "(we always send a semantic message with message created at which is datetime.now!");
            }

            if ((DateTime.UtcNow - data.MessageCreatedAt) > expectedTimeToGetTheSemanticMessage)
            {
                _metricServer.ReportIsBroken();
                _logger.Information("Broken because not arrived in expected time -> MessageCreatedAt = " + data.MessageCreatedAt);
            }

            else
            {
                _metricServer.ReportIsHealthy();
            }
        }