class PagerDuty::Escalation
Public Class Methods
new(levels=nil, policy = nil)
click to toggle source
# File lib/pagerduty_tools/pagerduty.rb, line 117 def initialize(levels=nil, policy = nil) @levels = levels @policy = policy end
Public Instance Methods
label_for_level(level)
click to toggle source
# File lib/pagerduty_tools/pagerduty.rb, line 165 def label_for_level(level) @results.find {|result| result['level'] == level }['label'] end
label_for_person(person)
click to toggle source
# File lib/pagerduty_tools/pagerduty.rb, line 169 def label_for_person(person) @results.find {|result| result['person'] == person }['label'] end
level_for_person(person)
click to toggle source
# File lib/pagerduty_tools/pagerduty.rb, line 173 def level_for_person(person) @results.find {|result| result['person'] == person }['level'] end
parse(dashboard_body)
click to toggle source
# File lib/pagerduty_tools/pagerduty.rb, line 122 def parse(dashboard_body) # Scrape out the on-call list from the Dashboard HTML. policies = Nokogiri::HTML(dashboard_body).css("div.whois_oncall") oncall = if @policy policies.detect do |policy| policy.css('h4 a').text == @policy end else policies.first end @results = [] oncall.css("div").each do |div| level_text = div.css("span > strong").text level_text =~ /Level (\d+)\:/ level = $1 # PagerDuty sometimes adds a comment saying what the rotation is called # for this level. If it's there, use it, or fall back to a generic label. label_text = div.xpath("span/comment()").text label = label_text[/\(<[^>]+>(.+) on-call<\/a>\)/, 1] || "Level #{level}" person = div.css("span > a") start_time, end_time = div.css("span.time").text.split(" - ").map {|text| text.strip } if @levels == nil or @levels.length == 0 or @levels.include?(level) @results << { 'level' => level, 'label' => label, 'person' => person.text, 'person_path' => person.first['href'], 'start_time' => start_time, 'end_time' => end_time } end end return @results end