diff --git a/HealthChecks.sln b/HealthChecks.sln
index facc21a..277d911 100644
--- a/HealthChecks.sln
+++ b/HealthChecks.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26228.9
+VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 15.0.26228.4
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{E05DCF88-F916-4B61-A5DC-A8344C9E2429}"
EndProject
@@ -25,6 +25,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNet.HealthChec
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleHealthChecker.AspNet", "samples\SampleHealthChecker.AspNet\SampleHealthChecker.AspNet.csproj", "{33FB5967-62C7-4230-B515-780EF63F748E}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.HealthChecks.MySql", "src\Microsoft.Extensions.HealthChecks.MySql\Microsoft.Extensions.HealthChecks.MySql.csproj", "{29044153-D1A0-4B7E-9B1E-7587737506A0}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -63,6 +65,10 @@ Global
{33FB5967-62C7-4230-B515-780EF63F748E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{33FB5967-62C7-4230-B515-780EF63F748E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{33FB5967-62C7-4230-B515-780EF63F748E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {29044153-D1A0-4B7E-9B1E-7587737506A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {29044153-D1A0-4B7E-9B1E-7587737506A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {29044153-D1A0-4B7E-9B1E-7587737506A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {29044153-D1A0-4B7E-9B1E-7587737506A0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -76,5 +82,9 @@ Global
{13BE838A-200B-4A68-8F58-3EA3BE3A1A8A} = {F9BA869A-7D5F-420F-9505-2D881F7934A7}
{2AE82E1C-6CE1-4755-A332-FA359B7CCE72} = {F9BA869A-7D5F-420F-9505-2D881F7934A7}
{33FB5967-62C7-4230-B515-780EF63F748E} = {E05DCF88-F916-4B61-A5DC-A8344C9E2429}
+ {29044153-D1A0-4B7E-9B1E-7587737506A0} = {F9BA869A-7D5F-420F-9505-2D881F7934A7}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {C19929B3-8E3C-4D58-9873-1EE86EF82CE1}
EndGlobalSection
EndGlobal
diff --git a/samples/SampleHealthChecker.AspNetCore/SampleHealthChecker.AspNetCore.csproj b/samples/SampleHealthChecker.AspNetCore/SampleHealthChecker.AspNetCore.csproj
index 275080f..a6b9f9d 100644
--- a/samples/SampleHealthChecker.AspNetCore/SampleHealthChecker.AspNetCore.csproj
+++ b/samples/SampleHealthChecker.AspNetCore/SampleHealthChecker.AspNetCore.csproj
@@ -7,6 +7,7 @@
+
diff --git a/samples/SampleHealthChecker.AspNetCore/Startup.cs b/samples/SampleHealthChecker.AspNetCore/Startup.cs
index 57a253b..ba285e7 100644
--- a/samples/SampleHealthChecker.AspNetCore/Startup.cs
+++ b/samples/SampleHealthChecker.AspNetCore/Startup.cs
@@ -49,7 +49,8 @@ public void ConfigureServices(IServiceCollection services)
)
.AddCheck("thrower", (Func)(() => { throw new DivideByZeroException(); }))
.AddCheck("long-running", async cancellationToken => { await Task.Delay(10000, cancellationToken); return HealthCheckResult.Healthy("I ran too long"); })
- .AddCheck("custom");
+ .AddCheck("custom")
+ .AddMySqlCheck("mysql", "MySql Connection String", TimeSpan.Zero);
/*
// add valid storage account credentials first
diff --git a/src/Microsoft.Extensions.HealthChecks.MySql/HealthCheckBuilderMySqlServerExtensions.cs b/src/Microsoft.Extensions.HealthChecks.MySql/HealthCheckBuilderMySqlServerExtensions.cs
new file mode 100644
index 0000000..6929914
--- /dev/null
+++ b/src/Microsoft.Extensions.HealthChecks.MySql/HealthCheckBuilderMySqlServerExtensions.cs
@@ -0,0 +1,44 @@
+using MySql.Data.MySqlClient;
+using System;
+
+namespace Microsoft.Extensions.HealthChecks
+{
+ public static class HealthCheckBuilderMySqlServerExtensions
+ {
+ public static HealthCheckBuilder AddMySqlCheck(this HealthCheckBuilder builder, string name, string connectionString)
+ {
+ Guard.ArgumentNotNull(nameof(builder), builder);
+
+ return AddMySqlCheck(builder, name, connectionString, builder.DefaultCacheDuration);
+ }
+
+ public static HealthCheckBuilder AddMySqlCheck(this HealthCheckBuilder builder, string name, string connectionString, TimeSpan cacheDuration)
+ {
+ builder.AddCheck($"MySqlCheck({name})", async () =>
+ {
+ try
+ {
+ using (var connection = new MySqlConnection(connectionString))
+ {
+ connection.Open();
+ using (var cmd = new MySqlCommand("SHOW STATUS", connection))
+ {
+ var result = await cmd.ExecuteReaderAsync();
+ if(result.HasRows)
+ {
+ return HealthCheckResult.Healthy($"MySqlCheck({name}): Healthy");
+ }
+ return HealthCheckResult.Unhealthy($"MySqlCheck({name}): Unhealthy");
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ return HealthCheckResult.Unhealthy($"MySqlCheck({name}): Exception during check: {ex.GetType().FullName}");
+ }
+ }, cacheDuration);
+
+ return builder;
+ }
+ }
+}
diff --git a/src/Microsoft.Extensions.HealthChecks.MySql/Microsoft.Extensions.HealthChecks.MySql.csproj b/src/Microsoft.Extensions.HealthChecks.MySql/Microsoft.Extensions.HealthChecks.MySql.csproj
new file mode 100644
index 0000000..2f7134e
--- /dev/null
+++ b/src/Microsoft.Extensions.HealthChecks.MySql/Microsoft.Extensions.HealthChecks.MySql.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netstandard1.3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+