PagerDutyは障害検知などの用途で利用されるプロダクトですが、拡張を作成したりできるように複数のAPIが用意されています。
また、そのAPIのラッパーが様々な言語で用意されています。
今回はRubyラッパーである https://github.com/technicalpickles/pager_duty-connection を利用し、現在のオンコール当番を列挙する簡単なプログラムを作成してみます。
APIトークンの作成
PagerDutyにログイン後、自身のプロフィールページに行き、user Setting
タブをクリックすると、API Access
の項目にCreate API User Token
のボタンがあるのでそこをクリックします。
クリックすると下記のようなモーダルが出るので、Descriptionを埋めてCreate Tokenで作成します。
作成後表示されるトークンはその時しか表示されないため、どこかに保存しておきましょう。
プログラムの作成
まずはGemの準備をします。pager_duty-connection
の他に、APIトークンを扱うためdotenv
も利用します。
gem 'pager_duty-connection', github: 'technicalpickles/pager_duty-connection'
gem 'dotenv'
次に、.env
に先ほど発行したトークンをPAGERDUTY_TOKEN
に入れてください。
最後にメインプログラムを作成していきます。
今回はoncallに関するAPIを利用するので、下記のList all of the on-calls
APIを使います。
require 'dotenv'
require "pager_duty/connection"
Dotenv.load
pagerduty = PagerDuty::Connection.new(ENV['PAGERDUTY_TOKEN'], url: 'https://api.pagerduty.com/')
response = pagerduty.get('oncalls')
response.oncalls.each do |oncall|
p oncall.user.summary
end
responseはhashie objectでoncallsという配列にオンコールに関する情報が入っているため、そこから各要素の.user.summary
と辿ることでユーザー名を取得することができます。
また、.escalation_policy
や.escalation_level
を利用して、下記のように書くことで簡単な絞り込みをすることもできます。
response.oncalls.each do |oncall|
- p oncall.user.summary
+ p oncall.user.summary if oncall.escalation_policy.id == ENV['ONCALL_ID'] && oncall.escalation_level == 1
end
まとめ
今回はAPIを使って簡単にPagerDutyのオンコール当番を抽出してみました。
オンコール以外にも様々なAPIががあるので、気になった方は公式ドキュメントを確認してみてください。
REF
https://github.com/Umekawa/pagerduty_connection_test (今回実装したプログラム)