2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mackerelの通知設定の切り替えを行うrake taskを定義した

Posted at

課題

システムのメンテナンスを行う前に、Mackerelの通知をOFFにしたい、終わったらONにしたいという要望がチームから上がっていた。

解決策

MackerelはAPIが公開されているので、それを使えばできるが、簡単にやりたかったのでgem mackerel-clientを使うことにして、rake taskを作った。

実装

gemのインストール

Gemfileに以下を追加する。

Gemfile
gem 'mackerel-client'

そしてbundle installを実行。

rake taskの設定

  • MackerelのAPI KEYは環境変数に持つ
  • monitor_idはrake taskの引数、もしくは環境変数に持つ

という方向で実装した。

lib/tasks/mackerel.rake
require 'mackerel/client'

namespace :mackerel do
  namespace :notification do

    # Mackerelで指定されたmonitor_idの通知を変更する
    # @param [String] monitor_id Mackerelで設定されているmonitor_id
    # @param [Boolean] is_mute 通知を切る場合はtrue、行う場合はfalseを指定する
    def change_mute(monitor_id:, is_mute:)
      client = Mackerel::Client.new(mackerel_api_key: ENV['MACKEREL_API_KEY'])
      monitor = client.get_monitors.find { |monitor| monitor.id == monitor_id}
      if monitor.nil?
        puts 'Please set existing monitor_id.'
      else
        monitor.isMute = is_mute
        client.update_monitor(monitor.id, monitor)
      end
    end

    desc "Mute notification from mackerel by monitor_id"
    task :mute, 'monitor_id'
    task mute: :environment do |x, args|
      monitor_id = args.monitor_id || ENV['MACKEREL_MONITOR_ID']
      if monitor_id.nil?
        puts 'Please set monitor_id.'
      else
        change_mute(monitor_id: monitor_id, is_mute: true)
      end
    end

    desc "Unmute notification from mackerel by monitor_id"
    task :unmute, 'monitor_id'
    task unmute: :environment do |x, args|
      monitor_id = args.monitor_id || ENV['MACKEREL_MONITOR_ID']
      if monitor_id.nil?
        puts 'Please set monitor_id.'
      else
        change_mute(monitor_id: monitor_id, is_mute: false)
      end
    end
  end
end

実行する

dot_envを使っている場合は、.envファイルに追加すると指定が楽になる。

MACKEREL_API_KEY="PLEASE_INPUT_MACKEREL_API_KEY"
MACKEREL_MONITOR_ID="PLEASE_INPUT_MACKEREL_MONITOR_ID"

通知をオフにする場合

$ bin/rake mackerel:notification:mute

通知をオンにする場合

$ bin/rake mackerel:notification:unmute
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?