LoginSignup
0
0

More than 3 years have passed since last update.

Rails に LivenessProbe 用のコントローラーを作る

Posted at

ハラ 二 シボウ ガ タマッテキマシタネー

定期健康診断をうけさせられる

とある会社のクラウドシステムにはヘルスチェック機能がついて、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/ 以下に上記のコードを打ち込む。

動作確認

Screenshot from 2020-05-07 07-52-51.png
とこんな感じになって良さそう。

テストを書く

コントローラーにテストを書く

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

二点測定をテストを書くのって、こんな感じでよかったかな?

おわりに

計算機科学ノ進歩、発展ノタメニハ、犠牲ガツキモノナノデース.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0