Class: Readiness::Pagerduty::Schedules

Inherits:
Client
  • Object
show all
Defined in:
lib/support_readiness/pagerduty/schedules.rb

Overview

TODO:

Create a schedule

TODO:

List audit records for a schedule

TODO:

List users on call

TODO:

Preview a schedule

Defines the class Schedules within the module Readiness::Pagerduty.

Author:

  • Jason Colyer

Since:

  • 1.0.0

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Client

auth_error, bad_request_error, convert_actions, convert_conditions, convert_standard_names_to_ids, convert_ticket_form_agent_conditions, convert_ticket_form_brands, convert_ticket_form_end_user_conditions, convert_ticket_form_names_to_ids, convert_view_names_to_ids, convert_view_restrictions, covert_ticket_form_field_ids, create_package!, erb_renderer, handle_request_error, not_found_error, not_processible_error, put_into_archive, recursively_deflate_directory, timestamp_filename, to_clean_json, to_clean_json_with_key, to_hash, to_nearly_clean_json, to_nearly_clean_json_with_key, to_param_string, write_entries

Constructor Details

#initialize(object = {}) ⇒ Schedules

Creates a new Readiness::Pagerduty::Schedules instance

Examples:

require 'support_readiness'
Readiness::Pagerduty::Schedules.new

Parameters:

Author:

  • Jason Colyer

Since:

  • 1.0.0



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/support_readiness/pagerduty/schedules.rb', line 28

def initialize(object = {})
  @description = object['description']
  @escalation_policies = object['escalation_policies']
  @final_schedule = object['final_schedule']
  @html_url = object['html_url']
  @id = object['id']
  @name = object['name']
  @overrides_subschedule = object['overrides_subschedule']
  @schedule_layers = object['schedule_layers']
  @self = object['self']
  @summary = object['summary']
  @teams = object['teams']
  @time_zone = object['time_zone']
  @type = object['type']
  @users = object['users']
end

Instance Attribute Details

#descriptionObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def description
  @description
end

#escalation_policiesObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def escalation_policies
  @escalation_policies
end

#final_scheduleObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def final_schedule
  @final_schedule
end

#html_urlObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def html_url
  @html_url
end

#idObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def id
  @id
end

#nameObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def name
  @name
end

#overrides_subscheduleObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def overrides_subschedule
  @overrides_subschedule
end

#schedule_layersObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def schedule_layers
  @schedule_layers
end

#selfObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def self
  @self
end

#summaryObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def summary
  @summary
end

#teamsObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def teams
  @teams
end

#time_zoneObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def time_zone
  @time_zone
end

#typeObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def type
  @type
end

#usersObject

Since:

  • 1.0.0



17
18
19
# File 'lib/support_readiness/pagerduty/schedules.rb', line 17

def users
  @users
end

Class Method Details

.create_overrides(client, schedule, list) ⇒ Array

Create overrides on a schedule within Pagerduty. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::Pagerduty::Configuration.new
config.token = 'test123abc'
client = Readiness::Pagerduty::Client.new(config)
schedule = Readiness::Pagerduty::Schedules.find(client, 'PI7DH85')
overrides = [
  {
    start: '2012-07-01T00:00:00-04:00',
    end: '2012-07-02T00:00:00-04:00',
    user: {
      id: 'PEYSGVA',
      type: 'user_reference' 
    },
    time_zone: 'UTC'
  },
  {
    start: '2012-07-03T00:00:00-04:00',
    end: '2012-07-04T00:00:00-04:00',
    user: {
      id: 'PEYSGVF',
      type: 'user_reference' 
    },
    time_zone: 'UTC'
  }
]
created_overrides = Readiness::Pagerduty::Schedules.create_overrides(client, schedule, overrides)
pp created_overrides.map { |c| c['status'] }
# => [201, 201]

Parameters:

Returns:

  • (Array)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



190
191
192
193
194
# File 'lib/support_readiness/pagerduty/schedules.rb', line 190

def self.create_overrides(client, schedule, list)
  response = client.connection.post "schedules/#{schedule.id}/overrides", { overrides: list }.to_json
  handle_request_error(1, 'Pagerduty', response.status, { action: 'Create overrides', id: schedule.id }) unless response.status == 201
  Oj.load(response.body)
end

.delete_override!(client, schedule, oid) ⇒ Boolean

Delete an override on a schedule within Pagerduty. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::Pagerduty::Configuration.new
config.token = 'test123abc'
client = Readiness::Pagerduty::Client.new(config)
schedule = Readiness::Pagerduty::Schedules.find(client, 'PI7DH85')
delete = Readiness::Pagerduty::Schedules.delete_override!(client, schedule, 'Q3X6MJ1LUKD6QW')
pp delete
# => true

Parameters:

Returns:

  • (Boolean)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



215
216
217
218
219
# File 'lib/support_readiness/pagerduty/schedules.rb', line 215

def self.delete_override!(client, schedule, oid)
  response = client.connection.delete "schedules/#{schedule.id}/overrides/#{oid}"
  handle_request_error(1, 'Pagerduty', response.status, { action: 'Delete an override', id: schedule.id }) unless [200, 204].include?(response.status)
  true
end

.find(client, sid) ⇒ Hash

Locates a schedule within Pagerduty. This will not exit on error (except Authentication errors)

Examples:

require 'support_readiness'
config = Readiness::Pagerduty::Configuration.new
config.token = 'test123abc'
client = Readiness::Pagerduty::Client.new(config)
schedule = Readiness::Pagerduty::Schedules.find(client, 'PI7DH85')
pp schedule.name
# => "Daily Engineering Rotation"

Parameters:

  • client (Object)

    An instance of Client

  • sid (String)

    The schedule ID to find

Returns:

  • (Hash)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



93
94
95
96
97
98
99
# File 'lib/support_readiness/pagerduty/schedules.rb', line 93

def self.find(client, sid)
  response = client.connection.get("schedules/#{sid}")
  handle_request_error(0, 'Pagerduty', response.status,  { action: 'get', id: sid }) unless response.status == 200
  return Schedules.new(Oj.load(response.body)['schedule']) if response.status == 200

  Oj.load(response.body)
end

.find!(client, sid) ⇒ Object

Locates a schedule within Pagerduty. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::Pagerduty::Configuration.new
config.token = 'test123abc'
client = Readiness::Pagerduty::Client.new(config)
schedule = Readiness::Pagerduty::Schedules.find!(client, 'PI7DH85')
pp schedule.name
# => "Daily Engineering Rotation"

Parameters:

  • client (Object)

    An instance of Client

  • sid (String)

    The schedule ID to find

Returns:

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



118
119
120
121
122
# File 'lib/support_readiness/pagerduty/schedules.rb', line 118

def self.find!(client, sid)
  response = client.connection.get("schedules/#{sid}")
  handle_request_error(1, 'Pagerduty', response.status, { action: 'Find schedule', id: sid }) unless response.status == 200
  Schedules.new(Oj.load(response.body)['schedule'])
end

.list(client) ⇒ Array

Lists schedules

Examples:

require 'support_readiness'
config = Readiness::Pagerduty::Configuration.new
config.token = 'test123abc'
client = Readiness::Pagerduty::Client.new(config)
schedules = Readiness::Pagerduty::Schedules.list(client)
pp schedules.first.name
# => "Daily Engineering Rotation"

Parameters:

  • client (Object)

    An instance of Client

Returns:

  • (Array)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/support_readiness/pagerduty/schedules.rb', line 61

def self.list(client)
  array = []
  offset = 0
  loop do
    response = client.connection.get "schedules?limit=100&offset=#{offset}"
    handle_request_error(0, 'Pagerduty', response.status) unless response.status == 200
    body = Oj.load(response.body)
    array += body['schedules'].map { |e| Schedules.new(e) }
    break unless body['more']

    offset += 100
  end
  array.uniq
end

.overrides(client, schedule, start_time = Time.now.utc.iso8601, end_time = (Time.now.utc + 1.hours).iso8601, editable = true) ⇒ Array

Lists overrides for a schedule within Pagerduty. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::Pagerduty::Configuration.new
config.token = 'test123abc'
client = Readiness::Pagerduty::Client.new(config)
schedule = Readiness::Pagerduty::Schedules.find(client, 'PI7DH85')
overrides = Readiness::Pagerduty::Schedules.overrides(client, schedule)
pp overrides.first['user']['summary']
# => "Aurelio Rice"

Parameters:

  • client (Object)

    An instance of Client

  • schedule (Object)
  • start_time (Time) (defaults to: Time.now.utc.iso8601)

    The start time to use (must be ISO format)

  • end_time (Time) (defaults to: (Time.now.utc + 1.hours).iso8601)

    The end time to use (must be ISO format)

  • editable (Boolean) (defaults to: true)

    Only show overrides that can be edited (ones in the future)

Returns:

  • (Array)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



145
146
147
148
149
# File 'lib/support_readiness/pagerduty/schedules.rb', line 145

def self.overrides(client, schedule, start_time = Time.now.utc.iso8601, end_time = (Time.now.utc + 1.hours).iso8601, editable = true)
  response = client.connection.get "schedules/#{schedule.id}/overrides?editable=#{editable}&since=#{start_time}&until=#{end_time}"
  handle_request_error(1, 'Pagerduty', response.status, { action: 'List overrides', id: schedule.id }) unless response.status == 201
  Oj.load(response.body)['overrides']
end

.update!(client, schedule) ⇒ Object

Updates a schedule within Pagerduty. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::Pagerduty::Configuration.new
config.token = 'test123abc'
client = Readiness::Pagerduty::Client.new(config)
schedule = Readiness::Pagerduty::Schedules.find(client, 'PI7DH85')
schedule.name = 'Updated name'
update = Readiness::Pagerduty::Schedules.update!(client, schedule)
pp update.name
# => "Updated name"

Parameters:

Returns:

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.12



240
241
242
243
244
# File 'lib/support_readiness/pagerduty/schedules.rb', line 240

def self.update!(client, schedule)
  response = client.connection.put "schedules/#{schedule.id}", to_clean_json_with_key(schedule, 'schedule')
  handle_request_error(1, 'Pagerduty', response.status, { action: 'Update schedule', id: schedule.id, message: Oj.load(response.body)}) unless response.status == 200
  Schedules.new(Oj.load(response.body)['schedule'])
end