コード例 #1
0
        public async Task execute_definded_action_for_health_check()
        {
            var taskResult = Task.FromResult(LivenessResult.UnHealthy("action liveness is not working"));

            var livenessContext = new LivenessExecutionContext();

            var liveness = new ActionLiveness((cancellationToken) => taskResult);

            (await liveness.IsHealthy(livenessContext))
            .Should().Be(taskResult.Result);
        }
コード例 #2
0
        async Task <LivenessResult> RunLiveness(IBeatPulseLiveness liveness, LivenessExecutionContext executionContext, BeatPulseOptions options)
        {
            _logger.LogInformation($"Executing liveness {executionContext.Name}.");

            var clock = Clock.StartNew();

            try
            {
                using (var cancellationTokenSource = new CancellationTokenSource())
                {
                    var livenessTask = liveness.IsHealthy(executionContext, cancellationTokenSource.Token);

                    if (await Task.WhenAny(livenessTask, Task.Delay(options.Timeout, cancellationTokenSource.Token)) == livenessTask)
                    {
                        _logger.LogInformation($"The liveness {executionContext.Name} is executed.");

                        return((await livenessTask)
                               .SetEnforced(name: executionContext.Name, path: executionContext.Path, duration: clock.Elapsed(), detailedErrors: options.DetailedErrors));
                    }
                    else
                    {
                        _logger.LogWarning($"The liveness {executionContext.Name} return timeout, execution is cancelled.");

                        cancellationTokenSource.Cancel();

                        return(LivenessResult.TimedOut()
                               .SetEnforced(name: executionContext.Name, path: executionContext.Path, duration: clock.Elapsed(), detailedErrors: options.DetailedErrors));
                    }
                }
            }
            catch (Exception ex)
            {
                // The uri executed is now well formed, dns not found
                // or any other unexpected exceptions from liveness executions.

                _logger.LogError(ex, $"The liveness {executionContext.Name} is unhealthy.");

                return(LivenessResult.UnHealthy(ex)
                       .SetEnforced(name: executionContext.Name, path: executionContext.Path, duration: clock.Elapsed(), detailedErrors: options.DetailedErrors));
            }
        }