ハラ 二 シボウ ガ タマッテキマシタネー
定期健康診断をうけさせられる
とある会社のクラウドシステムにはヘルスチェック機能がついて、Kubernetes の LivenessProbe に監視させていると、ロードバランサーにアクセスさせないという方法がとれる。しかしながら、その機能を使うにはデフォルトの設定だと URI のルートを参照するので、ホームページに下手に DB や キャッシュなんかを多用している場合は DDoS を受けているのと変わらない状態になってしまう。そんなことにならないように、今回はヘルスチェック専用のコントローラーを作って、動いているのをチェックさせたい。
コード
今回のコードは Github のレポジトリ にアップロードしてあります。
Routing
Rails.application.routes.draw do
resource :health_check_up, only: [:show]
end
DHH が REST を活用しろ、とのことだったので一つだけしか画面がないのに、resource をつかってルーティングを書く。
Controller
# health_check_ups_controller.rb
class HealthCheckUpsController < ApplicationController
def show
render plain: Time.new.strftime('%c [OK]'), status: 200
end
end
今回は Rails のジェネレータを使うといろいろファイルができちゃうので、ベタに /controllers/ 以下に上記のコードを打ち込む。
動作確認
テストを書く
コントローラーにテストを書く
require 'test_helper'
class HealthCheckUpsControllerTest < ActionDispatch::IntegrationTest
test "should get show" do
get health_check_up_url
assert_response 200
end
end
コントローラーにテストを書くのって、どうだっけ?
システムテストを書く
require "application_system_test_case"
class HealthCheckUpsTest < ApplicationSystemTestCase
test "visiting the index" do
visit health_check_up_url
assert_selector "body", text: /\d{1,2}:\d{1,2}:\d{1,2}/
assert_selector "body", text: /OK/i
end
end
二点測定をテストを書くのって、こんな感じでよかったかな?
おわりに
計算機科学ノ進歩、発展ノタメニハ、犠牲ガツキモノナノデース.