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