Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

バックエンドサーバーのヘルスチェック用APIを追加する #543

Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
8566924
ヘルスチェック用APIの追加。
Oct 20, 2023
57c88fa
Merge branch 'main' into feature/バックエンドサーバーのヘルスチェック用APIを追加する
tsuna-can-se Oct 25, 2023
6734fc8
ヘルスチェック機能を正しいプロジェクトに配置。
Oct 26, 2023
cf7e9ec
不要なファイルを削除し、IApiDescriptionProviderを実装したクラスを追加。
Oct 27, 2023
0bf7b11
IHealthChecksBuilderの拡張メソッドを追加。
Oct 27, 2023
90c6c28
HealthCheckDescriptionProviderを修正。
Oct 27, 2023
5f9a358
HealthChecksBuilderExtensions.AddDresscaDbContextCheckに例外時のログ出力処理を追加。
Oct 30, 2023
60e21d7
HealthChecksBuilderExtensions.AddDresscaDbContextCheck()のログ出力処理を修正。
Oct 31, 2023
35f105e
不要な編集内容をロールバック。
Oct 31, 2023
67ef417
不要な処理を削除。
Oct 31, 2023
57275d9
HealthChecksBuilderExtensionsを修正。
Oct 31, 2023
ddee987
ヘルスチェックAPIの結合テストを追加。
Nov 1, 2023
7c9a370
結合テスト実行用処理をパイプラインに追加。
Nov 2, 2023
4820a7c
workingdirectoryを修正。
Nov 2, 2023
054b9f7
EF Core ツールインストールタスクを追加。
Nov 2, 2023
8ca6e1a
SQL Serverのインストールタスクを追加。
Nov 2, 2023
178882c
接続文字列の修正。
Nov 2, 2023
da39ac4
結合テストからDressca.EfInfrastructureを参照。
Nov 2, 2023
beb5523
接続文字列の動作確認。
Nov 2, 2023
3c640df
接続文字列の動作確認。
Nov 2, 2023
3c03f78
テスト実行直前にデータベースの存在を確認する処理を追加。
Nov 2, 2023
5caf13a
Merge branch 'feature/バックエンドサーバーのヘルスチェック用APIを追加する' of https://github.…
Nov 2, 2023
dee00ae
テスト実行直前にデータベースの存在を確認する処理を追加。
Nov 2, 2023
072a31e
テスト用WebAPに差し替え。
Nov 2, 2023
fca4ec9
データベースの確認処理を削除。
Nov 2, 2023
2bcf8db
不要な編集内容をロールバック。
Nov 2, 2023
fff1eba
結合テストのDB接続確認。(PostgreSQL)
Nov 6, 2023
94b3872
インデントを修正。
Nov 6, 2023
cfead2d
EF Core経由でDBの存在確認処理を追加。
Nov 6, 2023
1475480
postgresのログインユーザー名を追加。
Nov 6, 2023
9712700
PostgreSQLのユーザー設定。
Nov 6, 2023
9622a9d
パイプラインにデータベース作成処理を追加。
Nov 6, 2023
d15d0fd
結合テストのDB接続確認。(MySQL)
Nov 6, 2023
3e4f2a3
MySQLログイン処理の修正。
Nov 6, 2023
89395a6
DB作成処理を修正。
Nov 6, 2023
843c77f
ビルドマシン上のSQL Serverを確認。
Nov 6, 2023
6629ac1
SQL Server動作確認。
Nov 6, 2023
baefafc
Dockerイメージをキャッシュする処理を追加。
Nov 6, 2023
fe830c2
Dockerイメージのキャッシュ保存先のパスを修正。
Nov 6, 2023
9094425
Dockerイメージをロードするパスを修正。
Nov 6, 2023
79621d7
SQL Serverのセットアップタスクを修正。
Nov 6, 2023
e913176
セットアップ処理を修正。
Nov 6, 2023
a81a929
セットアップ処理を修正。
Nov 6, 2023
9ba5b47
サーバー名を修正。
Nov 6, 2023
fa4cc56
ログインパスワードを修正。
Nov 6, 2023
f19af61
キャッシュの保存先を修正。
Nov 7, 2023
ba5575f
Dockerイメージの実行処理を修正。
Nov 7, 2023
0b08856
コマンド実行ユーザを指定。
Nov 7, 2023
8f64ff2
コマンド実行ユーザを指定。
Nov 7, 2023
497fb97
sqlcmdのオプションを追加。
Nov 7, 2023
7f2ca33
Docker実行コマンドを修正。
Nov 7, 2023
c56373e
キャッシュしない場合の動作確認。
Nov 7, 2023
ab9a32e
コマンドのオプションを修正。
Nov 7, 2023
5550490
テスト用データベース名修正。
Nov 7, 2023
c388ffa
Dockerをキャッシュし、dbContext.Database.EnsureCreated()でDB接続確認。
Nov 7, 2023
e5349ea
runsettingsファイルの動作確認。
Nov 7, 2023
5ce3a13
runsettingsファイルのパス修正。
Nov 7, 2023
1c38126
runsettingsファイルのパス修正。
Nov 7, 2023
8ebcc14
appsettingsファイルのディレクトリを修正。
Nov 7, 2023
5f798f4
パイプラインにデータベース作成クエリを追加。
Nov 8, 2023
a8b263d
パイプライン上のデータベース作成クエリを修正。
Nov 8, 2023
2071d8c
テスト用データベース名を修正。
Nov 8, 2023
7228f7a
runsettingsファイルの出力設定を変更。
Nov 8, 2023
fe8442e
テスト実行時の--nobuildオプションを削除。
Nov 8, 2023
0d96b98
ローカルでrunsettingsファイルを自動検出するよう設定変更。
Nov 8, 2023
61e92cf
DresscaDbContextのサービス登録削除処理をEfInfrastructureに移動。
Nov 8, 2023
6da0930
Dockerイメージのキャッシュ処理を追加。
Nov 9, 2023
5d2eba5
キャッシュのキーを修正。
Nov 9, 2023
acf7933
クエリ部分をコメントアウトして動作確認。
Nov 9, 2023
01d2ebf
クエリのサーバー名を変更。
Nov 9, 2023
508fb40
キャッシュ保存の処理を追加。
Nov 9, 2023
efb5e78
データベース作成クエリを実行してからキャッシュ保存。
Nov 9, 2023
d413499
コマンドを修正。
Nov 9, 2023
5c8bcca
SQL Serverセットアップ処理を修正。
Nov 9, 2023
0c8a0d6
SQL Serverのセットアップ処理を修正。
Nov 9, 2023
902d0ae
環境変数が有効か確認。
Nov 9, 2023
194397e
動作確認用に不要な記載をコメントアウト。
Nov 9, 2023
684c19a
環境変数の設定位置を変更。
Nov 9, 2023
fd7d054
適当な環境変数名で動作確認。
Nov 9, 2023
ac4014d
bashで環境変数を設定。
Nov 9, 2023
2766fef
コマンドを修正。
Nov 9, 2023
8096921
マイグレーション適用のタスクを追加。
Nov 10, 2023
302e9b9
接続文字列をappsettingsファイルから取得。
Nov 10, 2023
22e4459
appsettingsファイルのビルドアクションを変更。
Nov 10, 2023
b4b3897
appsettingsファイルのパス修正。
Nov 10, 2023
33eaf8e
ファイルパスを修正。
Nov 10, 2023
a68eadb
接続文字列を取得する処理を別タスクに分離。
Nov 10, 2023
779cdae
ファイルパスを修正。
Nov 10, 2023
c44aed9
環境変数名をASPNETCORE_ENVIRONMENTに変更。
Nov 10, 2023
27d58fc
環境変数名を修正し、不要な処理を削除。
Nov 10, 2023
0c89b66
Merge branch 'main' into feature/バックエンドサーバーのヘルスチェック用APIを追加する
fkoyama Nov 10, 2023
bd66727
結合テストで利用するappsettingsファイルの名前を変更。
Nov 10, 2023
542e307
Merge branch 'feature/バックエンドサーバーのヘルスチェック用APIを追加する' of https://github.…
Nov 10, 2023
737fe38
ローカルでのテスト環境のappsettingsファイルを削除。
Nov 10, 2023
278a894
参照する環境変数を変更。
Nov 10, 2023
61515de
ビルドマシン上で設定する環境変数名を修正。
Nov 10, 2023
ef6d8af
appsettingsファイル名を変更。
Nov 10, 2023
e7c3026
構成ファイル追加の条件を修正。
Nov 10, 2023
46c1f09
テスト実行コマンドの引数を追加。
Nov 10, 2023
62a3d49
条件の確認。
Nov 10, 2023
04590e3
条件の動作確認。
Nov 10, 2023
59b9b7b
環境変数を修正。
Nov 10, 2023
7df240f
環境変数名等を修正。
Nov 10, 2023
970ed78
名前空間の調整。
Nov 10, 2023
ac9c61d
HealthCheckDescriptorにGET/HEADメソッドそれぞれの説明を追加。
Nov 10, 2023
3669991
appSettingsファイルを構成に追加する際の条件式を修正。
Nov 10, 2023
f67af85
EF Core ツールのインストールを別タスクに分離。
Nov 10, 2023
ab4e663
SQL Serverのセットアップ処理を分割。
Nov 10, 2023
563841a
インデント等の警告に対応。
Nov 10, 2023
28ce917
HEAD/GETメソッドそれぞれのApiResponseTypeを定義。
Nov 10, 2023
7e925f4
コメントを修正。
Nov 13, 2023
b9abba1
テスト用WebApplicationFactoryクラスの名前を修正。
Nov 13, 2023
81fd4ca
StyleCop.Analyzers のパッケージを追加。
Nov 13, 2023
5908e7b
Dressca.IntegrationTest.csprojから不要な設定を削除。
Nov 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Diagnostics.HealthChecks;

namespace Dressca.Web.Controllers;

/// <summary>
/// ヘルスチェック用のコントローラー。
/// </summary>
[Route("api/health")]
[ApiController]
public class HealthController : ControllerBase
{
private readonly HealthCheckService healthCheckService;

/// <summary>
/// コンストラクター。
/// </summary>
/// <param name="healthCheckService">ヘルスチェックサービス。</param>
public HealthController(HealthCheckService healthCheckService)
{
this.healthCheckService = healthCheckService;
}

/// <summary>
/// ヘルスチェックの結果を返します。
/// </summary>
/// <returns>ヘルスチェックの結果。</returns>
[HttpGet]
public async Task<ActionResult> Get()
{
HealthReport report = await this.healthCheckService.CheckHealthAsync();

var result = new
{
status = report.Status.ToString(),
result = report.Entries
.Select(entry => new
{
name = entry.Key,
status = entry.Value.Status.ToString(),
description = entry.Value.Description?.ToString(),
data = entry.Value.Data,
exception = new
{
source = entry.Value.Exception?.Source,
message = entry.Value.Exception?.Message,
stackTrace = entry.Value.Exception?.StackTrace,
},
}),
};
return report.Status == HealthStatus.Healthy ? this.Ok(result) : this.StatusCode((int)HttpStatusCode.ServiceUnavailable, result);
}

/// <summary>
/// ヘルスチェックの結果を返します。
/// </summary>
/// <returns>ヘルスチェックの結果。</returns>
[HttpHead]
public async Task<ActionResult> Head()
{
HealthReport report = await this.healthCheckService.CheckHealthAsync();
return report.Status == HealthStatus.Healthy ? this.Ok() : this.StatusCode((int)HttpStatusCode.ServiceUnavailable);
}
}
41 changes: 41 additions & 0 deletions samples/Dressca/dressca-backend/src/Dressca.Web/DbHealthCheck.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System.Data.Common;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Diagnostics.HealthChecks;

namespace Dressca.Web;

/// <summary>
/// データベースのヘルスチェックを行うクラスです。
/// </summary>
public class DbHealthCheck : IHealthCheck
{
private string connectionString = @"Server=(localdb)\mssqllocaldb;Database=Dressca.Eshop;Integrated Security=True";

/// <summary>
/// データベースへの接続を確認します。
/// </summary>
/// <param name="context">ヘルスチェックコンテキスト。</param>
/// <param name="cancellationToken">キャンセルトークン。</param>
/// <returns>ヘルスチェックの結果。</returns>
public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
{
using (var connection = new SqlConnection(this.connectionString))
{
try
{
await connection.OpenAsync(cancellationToken);

var command = connection.CreateCommand();
command.CommandText = "SELECT 1";

await command.ExecuteNonQueryAsync(cancellationToken);
}
catch (DbException ex)
{
return new HealthCheckResult(status: context.Registration.FailureStatus, exception: ex);
}
}

return HealthCheckResult.Healthy();
}
}
4 changes: 4 additions & 0 deletions samples/Dressca/dressca-backend/src/Dressca.Web/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Dressca.ApplicationCore;
using Dressca.EfInfrastructure;
using Dressca.Store.Assets.StaticFiles;
using Dressca.Web;
using Dressca.Web.Baskets;
using Dressca.Web.Controllers;
using Dressca.Web.Mapper;
Expand Down Expand Up @@ -67,6 +68,9 @@
});
}

builder.Services.AddHealthChecks()
.AddCheck<DbHealthCheck>("DbHealthCheck");

var app = builder.Build();

if (app.Environment.IsDevelopment())
Expand Down
47 changes: 44 additions & 3 deletions samples/Dressca/dressca-backend/src/Dressca.Web/dressca-api.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"x-generator": "NSwag v13.18.2.0 (NJsonSchema v10.8.0.0 (Newtonsoft.Json v13.0.0.0))",
"x-generator": "NSwag v13.19.0.0 (NJsonSchema v10.9.0.0 (Newtonsoft.Json v13.0.0.0))",
"openapi": "3.0.0",
"info": {
"title": "Dressca Web API",
Expand All @@ -26,8 +26,7 @@
"required": true,
"description": "アセットコード。",
"schema": {
"type": "string",
"nullable": true
"type": "string"
},
"x-position": 1
}
Expand Down Expand Up @@ -332,6 +331,48 @@
}
}
},
"/api/health": {
"get": {
"tags": [
"Health"
],
"summary": "ヘルスチェックの結果を返します。",
"operationId": "Health_Get",
"responses": {
"200": {
"description": "ヘルスチェックの結果。",
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
}
}
}
},
"head": {
"tags": [
"Health"
],
"summary": "ヘルスチェックの結果を返します。",
"operationId": "Health_Head",
"responses": {
"200": {
"description": "ヘルスチェックの結果。",
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
}
}
}
}
},
"/api/orders/{orderId}": {
"get": {
"tags": [
Expand Down