11
0

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 1 year has passed since last update.

PagerDutyAdvent Calendar 2023

Day 9

PagerDutyのOnCall当番をAPIで取得してみる

Posted at

PagerDutyは障害検知などの用途で利用されるプロダクトですが、拡張を作成したりできるように複数のAPIが用意されています。
また、そのAPIのラッパーが様々な言語で用意されています。
今回はRubyラッパーである https://github.com/technicalpickles/pager_duty-connection を利用し、現在のオンコール当番を列挙する簡単なプログラムを作成してみます。

APIトークンの作成

PagerDutyにログイン後、自身のプロフィールページに行き、user Settingタブをクリックすると、API Access の項目にCreate API User Tokenのボタンがあるのでそこをクリックします。

クリックすると下記のようなモーダルが出るので、Descriptionを埋めてCreate Tokenで作成します。
スクリーンショット 2023-11-30 18.57.06.png
作成後表示されるトークンはその時しか表示されないため、どこかに保存しておきましょう。

プログラムの作成

まずはGemの準備をします。pager_duty-connectionの他に、APIトークンを扱うためdotenvも利用します。

Gemfile
gem 'pager_duty-connection', github: 'technicalpickles/pager_duty-connection'
gem 'dotenv'

次に、.envに先ほど発行したトークンをPAGERDUTY_TOKENに入れてください。

最後にメインプログラムを作成していきます。
今回はoncallに関するAPIを利用するので、下記のList all of the on-callsAPIを使います。

main.rb
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を利用して、下記のように書くことで簡単な絞り込みをすることもできます。

main.rb
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 (今回実装したプログラム)

11
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
11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?