public static IHealthBuilder AddCachedCheck(
            this IHealthCheckBuilder builder,
            string name,
            Func <CancellationToken, ValueTask <HealthCheckResult> > check,
            TimeSpan cacheDuration)
        {
            builder.AddCheck(new HealthCheck(name, check, cacheDuration));

            return(builder.Builder);
        }
        public static IHealthBuilder AddAzureQueueStorageCheck(
            this IHealthCheckBuilder builder,
            string name,
            CloudStorageAccount storageAccount,
            string queueName)
        {
            builder.AddCheck(name, CheckQueueExistsAsync(name, storageAccount, queueName));

            return(builder.Builder);
        }
Exemple #3
0
        public static IHealthBuilder AddAzureDocumentDBCollectionCheck(
            this IHealthCheckBuilder builder,
            string name,
            Uri collectionUri,
            DocumentClient documentClient)
        {
            builder.AddCheck(name, CheckDocumentDbCollectionExists(collectionUri, documentClient));

            return(builder.Builder);
        }
Exemple #4
0
        public static IHealthBuilder AddAzureDocumentDBDatabaseCheck(
            this IHealthCheckBuilder builder,
            string name,
            Uri databaseUri,
            DocumentClient documentClient)
        {
            builder.AddCheck(name, CheckDocumentDBDatabaseConnectivity(databaseUri, documentClient));

            return(builder.Builder);
        }
Exemple #5
0
 public static IHealthBuilder AddSqlCheck(
     this IHealthCheckBuilder healthCheckBuilder,
     string name,
     string connectionString,
     TimeSpan timeout,
     TimeSpan cacheDuration,
     bool degradedOnError = false)
 {
     return(healthCheckBuilder.AddSqlCachedCheck(name, () => new SqlConnection(connectionString), timeout, cacheDuration, degradedOnError));
 }
Exemple #6
0
        public static IHealthBuilder AddAzureTableStorageTableCheck(
            this IHealthCheckBuilder builder,
            string name,
            CloudStorageAccount storageAccount,
            string tableName)
        {
            builder.AddCheck(name, CheckAzureTableStorageTableExists(name, storageAccount, tableName));

            return(builder.Builder);
        }
Exemple #7
0
        public static IHealthBuilder AddAzureBlobStorageContainerCheck(
            this IHealthCheckBuilder builder,
            string name,
            CloudStorageAccount storageAccount,
            string containerName)
        {
            builder.AddCheck(name, CheckAzureBlobStorageContainerExists(name, storageAccount, containerName));

            return(builder.Builder);
        }
Exemple #8
0
 public static IHealthBuilder AddSqlCheck(
     this IHealthCheckBuilder healthCheckBuilder,
     string name,
     string connectionString,
     TimeSpan timeout,
     HealthCheck.QuiteTime quiteTime,
     bool degradedOnError = false)
 {
     return(healthCheckBuilder.AddSqlQuiteTimeCheck(name, () => new SqlConnection(connectionString), timeout, quiteTime, degradedOnError));
 }
        public static IHealthBuilder AddAzureServiceBusTopicConnectivityCheck(
            this IHealthCheckBuilder builder,
            string name,
            TopicClient topicClient,
            TimeSpan cacheDuration)
        {
            builder.AddCachedCheck(name, CheckServiceBusTopicConnectivity(name, topicClient), cacheDuration);

            return(builder.Builder);
        }
        public static IHealthBuilder AddAzureQueueStorageCheck(
            this IHealthCheckBuilder builder,
            string name,
            string connectionString,
            string queueName)
        {
            builder.AddCheck(name, CheckQueueExists(name, CloudStorageAccount.Parse(connectionString), queueName));

            return(builder.Builder);
        }
Exemple #11
0
        public static IHealthBuilder AddQuiteTimeCheck(
            this IHealthCheckBuilder builder,
            string name,
            Func <CancellationToken, ValueTask <HealthCheckResult> > check,
            HealthCheck.QuiteTime quiteTime)
        {
            builder.AddCheck(new HealthCheck(name, check, quiteTime));

            return(builder.Builder);
        }
Exemple #12
0
        public static IHealthBuilder AddAzureDocumentDBCollectionCheck(
            this IHealthCheckBuilder builder,
            string name,
            Uri collectionUri,
            string endpointUri,
            string key)
        {
            builder.AddCheck(name, CheckDocumentDbCollectionExists(collectionUri, endpointUri, key));

            return(builder.Builder);
        }
Exemple #13
0
        public static IHealthBuilder AddAzureDocumentDBDatabaseCheck(
            this IHealthCheckBuilder builder,
            string name,
            Uri databaseUri,
            string endpointUri,
            string key)
        {
            builder.AddCheck(name, CheckDocumentDBDatabaseConnectivity(databaseUri, endpointUri, key));

            return(builder.Builder);
        }
Exemple #14
0
        /// <summary>
        /// Adds the health check factory to the <see cref="IHealthCheckBuilder.Descriptors"/> collection.
        /// </summary>
        /// <param name="builder">The health check builder</param>
        /// <param name="factory">The health check factory</param>
        /// <param name="lifetime">The service lifetime</param>
        /// <returns>The builder after changes</returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static IHealthCheckBuilder Add(this IHealthCheckBuilder builder,
                                              Func <IServiceProvider, IHealthCheck> factory, ServiceLifetime lifetime = ServiceLifetime.Scoped)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Add(new HealthCheckServiceDescriptor(factory, lifetime));
            return(builder);
        }
Exemple #15
0
        /// <summary>
        /// Adds a <see cref="HttpHealthCheck"/> to the services.
        /// </summary>
        /// <param name="builder">The health check builder</param>
        /// <param name="name">The health check name</param>
        /// <param name="url">The url address</param>
        /// <param name="timeoutInMs">The request timeout</param>
        /// <param name="ensureSuccessfulStatus">Ensure a successful HTTP status code of 2XX?</param>
        /// <param name="required">Is the health check required?</param>
        /// <param name="tags">The collection of tags</param>
        /// <returns>The builder after changes</returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static IHealthCheckBuilder AddHttp(this IHealthCheckBuilder builder,
                                                  string name, Uri url, int timeoutInMs = 5000, bool ensureSuccessfulStatus = true,
                                                  bool required = false, params string[] tags)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddHttp(new HttpHealthCheckProperties(name, url, timeoutInMs, ensureSuccessfulStatus, required, tags)));
        }
        public static IHealthBuilder AddAzureQueueStorageConnectivityCheck(
            this IHealthCheckBuilder builder,
            string name,
            CloudStorageAccount storageAccount)
        {
            builder.AddCheck(
                name,
                CheckStorageAccountConnectivity(name, storageAccount));

            return(builder.Builder);
        }
        public static IHealthBuilder AddAzureQueueStorageCheck(
            this IHealthCheckBuilder builder,
            string name,
            CloudStorageAccount storageAccount,
            string queueName,
            TimeSpan cacheDuration)
        {
            builder.AddCachedCheck(name, CheckQueueExists(name, storageAccount, queueName), cacheDuration);

            return(builder.Builder);
        }
Exemple #18
0
        public static IHealthBuilder AddSqlCheck(
            this IHealthCheckBuilder healthCheckBuilder,
            string name,
            Func <IDbConnection> newDbConnection,
            TimeSpan timeout,
            bool degradedOnError = false)
        {
            if (timeout <= TimeSpan.Zero)
            {
                throw new InvalidOperationException($"{nameof(timeout)} must be greater than 0");
            }

            healthCheckBuilder.AddCheck(name, cancellationToken =>
            {
                var sw = new Stopwatch();

                try
                {
                    using (var tokenWithTimeout = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken))
                    {
                        tokenWithTimeout.CancelAfter(timeout);

                        sw.Start();
                        using (var connection = newDbConnection())
                        {
                            connection.Open();
                            using (var command = connection.CreateCommand())
                            {
                                command.CommandType = CommandType.Text;
                                command.CommandText = "SELECT 1";
                                var commandResult   = (int)command.ExecuteScalar();

                                var result = commandResult == 1
                                    ? HealthCheckResult.Healthy($"OK. {name}.")
                                    : HealthCheckResultOnError($"FAILED. {name} SELECT failed. Time taken: {sw.ElapsedMilliseconds}ms.", degradedOnError);

                                return(new ValueTask <HealthCheckResult>(result));
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    var failedResult = degradedOnError
                        ? HealthCheckResult.Degraded(ex)
                        : HealthCheckResult.Unhealthy(ex);

                    return(new ValueTask <HealthCheckResult>(failedResult));
                }
            });

            return(healthCheckBuilder.Builder);
        }
        public static IHealthBuilder AddAzureQueueStorageConnectivityCheck(
            this IHealthCheckBuilder builder,
            string name,
            string connectionString,
            TimeSpan cacheDuration)
        {
            builder.AddCachedCheck(
                name,
                CheckStorageAccountConnectivity(name, CloudStorageAccount.Parse(connectionString)),
                cacheDuration);

            return(builder.Builder);
        }
Exemple #20
0
        public static IHealthBuilder AddAzureTableStorageConnectivityCheck(
            this IHealthCheckBuilder builder,
            string name,
            CloudStorageAccount storageAccount,
            TimeSpan cacheDuration)
        {
            builder.AddCachedCheck(
                name,
                CheckTableStorageConnectivity(name, storageAccount),
                cacheDuration);

            return(builder.Builder);
        }
        public static IHealthBuilder AddAzureEventHubConnectivityCheck(
            this IHealthCheckBuilder builder,
            string name,
            EventHubClient eventHubClient,
            TimeSpan cacheDuration)
        {
            builder.AddCachedCheck(
                name,
                CheckEventHubConnectivity(name, eventHubClient),
                cacheDuration);

            return(builder.Builder);
        }
Exemple #22
0
        public static IHealthCheckBuilder AddHttpPingCheck(this IHealthCheckBuilder builder, string name, Uri baseAddress)
        {
            var options = new HttpCheckOptions {
                ExpectedContent = "PONG"
            };

            var uriBuilder = new UriBuilder(baseAddress.GetLeftPart(UriPartial.Authority))
            {
                Path = "_diagnostics/ping"
            };

            return(builder.AddCheck(new HttpCheck(name, uriBuilder.Uri, options)));
        }
Exemple #23
0
        public static IHealthBuilder AddPingCheck(
            this IHealthCheckBuilder healthCheckBuilder,
            string name,
            string host,
            TimeSpan timeout,
            bool degradedOnError = false)
        {
            healthCheckBuilder.AddCheck(
                name,
                async() => await ExecutePingCheckAsync(host, timeout, degradedOnError));

            return(healthCheckBuilder.Builder);
        }
Exemple #24
0
        public static IHealthBuilder AddAzureTableStorageTableCheck(
            this IHealthCheckBuilder builder,
            string name,
            string connectionString,
            string tableName,
            TimeSpan cacheDuration)
        {
            builder.AddCachedCheck(
                name,
                CheckAzureTableStorageTableExists(name, CloudStorageAccount.Parse(connectionString), tableName),
                cacheDuration);

            return(builder.Builder);
        }
        public static IHealthBuilder AddHttpGetCheck(
            this IHealthCheckBuilder healthCheckBuilder,
            string name,
            Uri uri,
            TimeSpan timeout,
            bool degradedOnError = false)
        {
            EnsureValidTimeout(timeout);

            healthCheckBuilder.AddCheck(
                name,
                async cancellationToken => await ExecuteHttpCheckNoRetriesAsync(uri, timeout, degradedOnError, cancellationToken));

            return(healthCheckBuilder.Builder);
        }
Exemple #26
0
        /// <summary>
        /// Adds a <see cref="HttpHealthCheck"/> to the services.
        /// </summary>
        /// <param name="builder">The health check builder</param>
        /// <param name="name">The health check name</param>
        /// <param name="urlBuilder">The url addres builders</param>
        /// <param name="timeoutInMs">The request timeout</param>
        /// <param name="ensureSuccessfulStatus">Ensure a successful HTTP status code of 2XX?</param>
        /// <param name="required">Is the health check required?</param>
        /// <param name="tags">The collection of tags</param>
        /// <returns>The builder after changes</returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static IHealthCheckBuilder AddHttp(this IHealthCheckBuilder builder,
                                                  string name, Func <IServiceProvider, string> urlBuilder, int timeoutInMs = 5000, bool ensureSuccessfulStatus = true,
                                                  bool required = false, params string[] tags)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (urlBuilder == null)
            {
                throw new ArgumentNullException(nameof(urlBuilder));
            }

            return(builder.AddHttp(name, p => new Uri(urlBuilder(p)), timeoutInMs, ensureSuccessfulStatus, required, tags));
        }
        public static IHealthBuilder AddAzureServiceBusTopicConnectivityCheck(
            this IHealthCheckBuilder builder,
            string name,
            string connectionString,
            string topicName)
        {
            var topicClient = new TopicClient(connectionString, topicName)
            {
                OperationTimeout = DefaultTimeout
            };

            builder.AddCheck(name, CheckServiceBusTopicConnectivity(name, topicClient));

            return(builder.Builder);
        }
Exemple #28
0
        /// <summary>
        /// Adds a <see cref="HttpHealthCheck"/> to the services.
        /// </summary>
        /// <param name="builder">The health check builder</param>
        /// <param name="propertiesBuilder">The health check properties builder</param>
        /// <returns>The builder after changes</returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static IHealthCheckBuilder AddHttp(this IHealthCheckBuilder builder,
                                                  Func <IServiceProvider, HttpHealthCheckProperties> propertiesBuilder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (propertiesBuilder == null)
            {
                throw new ArgumentNullException(nameof(propertiesBuilder));
            }

            return(builder.Add(
                       p => new HttpHealthCheck(propertiesBuilder(p), p.GetService <ILogger <HttpHealthCheck> >())));
        }
Exemple #29
0
        public static IHealthBuilder AddSqlCheck(
            this IHealthCheckBuilder healthCheckBuilder,
            string name,
            Func <IDbConnection> newDbConnection,
            TimeSpan timeout,
            bool degradedOnError = false)
        {
            EnsureValidTimeout(timeout);

            healthCheckBuilder.AddCheck(
                name,
                cancellationToken => ExecuteSqlCheckAsync(name, newDbConnection, timeout, degradedOnError, cancellationToken));

            return(healthCheckBuilder.Builder);
        }
Exemple #30
0
        public static IHealthBuilder AddAzureServiceBusQueueConnectivityCheck(
            this IHealthCheckBuilder builder,
            string name,
            string connectionString,
            string queueName)
        {
            var queueClient = new QueueClient(connectionString, queueName, receiveMode: ReceiveMode.PeekLock)
            {
                OperationTimeout = DefaultTimeout
            };

            builder.AddCheck(name, CheckServiceBusQueueConnectivity(name, queueClient));

            return(builder.Builder);
        }