Class: Wavefront::Alert

Inherits:
CoreApi show all
Includes:
Mixin::Acl, Mixin::Tag
Defined in:
lib/wavefront-sdk/alert.rb

Overview

View and manage alerts. Alerts are identified by their millisecond epoch timestamp. Returns a Wavefront::Response::Alert object.

Instance Attribute Summary

Attributes inherited from CoreApi

#api, #creds, #logger, #opts

Instance Method Summary collapse

Methods included from Mixin::Tag

#tag_add, #tag_delete, #tag_set, #tags

Methods included from Mixin::Acl

#acl_add, #acl_delete, #acl_set, #acls

Methods inherited from CoreApi

#api_base, #api_path, #hash_for_update, #initialize, #setup_api, #time_to_ms

Methods included from Mixins

#log, #parse_relative_time, #parse_time, #relative_time, #time_multiplier, #valid_relative_time?

Methods included from Validators

#uuid?, #wf_alert_id?, #wf_alert_severity?, #wf_apitoken_id?, #wf_cloudintegration_id?, #wf_dashboard_id?, #wf_derivedmetric_id?, #wf_distribution?, #wf_distribution_count?, #wf_distribution_interval?, #wf_distribution_values?, #wf_epoch?, #wf_event_id?, #wf_granularity?, #wf_integration_id?, #wf_link_id?, #wf_link_template?, #wf_maintenance_window_id?, #wf_message_id?, #wf_metric_name?, #wf_ms_ts?, #wf_name?, #wf_notificant_id?, #wf_point?, #wf_point_tag?, #wf_point_tags?, #wf_proxy_id?, #wf_savedsearch_entity?, #wf_savedsearch_id?, #wf_source_id?, #wf_string?, #wf_tag?, #wf_ts?, #wf_user_id?, #wf_usergroup_id?, #wf_value?, #wf_version?, #wf_webhook_id?

Constructor Details

This class inherits a constructor from Wavefront::CoreApi

Instance Method Details

#alerts_in_state(state) ⇒ Wavfront::Response

Use a search to get all alerts in the given state. You would be better to use one of the wrapper methods like #firing, #snoozed etc, but I’ve left this method public in case new states are added before the SDK supports them.

Parameters:

  • state such as :firing, :snoozed etc. See the Alert Swagger documentation for a full list

Returns:



283
284
285
286
287
288
# File 'lib/wavefront-sdk/alert.rb', line 283

def alerts_in_state(state)
  require_relative 'search'
  wfs = Wavefront::Search.new(creds, opts)
  query = { key: 'status', value: state, matchingMethod: 'EXACT' }
  wfs.search(:alert, query, limit: :all, offset: PAGE_SIZE)
end

#allWavefront::Response

Returns all your alerts.

Returns:

  • all your alerts



271
272
273
# File 'lib/wavefront-sdk/alert.rb', line 271

def all
  list(PAGE_SIZE, :all)
end

#checkingWavefront::Response

Returns all alerts being checked.

Returns:

  • all alerts being checked.



253
254
255
# File 'lib/wavefront-sdk/alert.rb', line 253

def checking
  alerts_in_state(:checking)
end

#clone(id, version = nil) ⇒ Wavefront::Response

POST /api/v2/alert/id/clone Clones the specified alert

Parameters:

  • ID of the alert

  • (defaults to: nil)

    version of alert

Returns:



116
117
118
119
120
121
122
123
124
# File 'lib/wavefront-sdk/alert.rb', line 116

def clone(id, version = nil)
  wf_alert_id?(id)
  wf_version?(version) if version

  api.post([id, 'clone'].uri_concat,
           { id:   id,
             name: nil,
             v:    version }, 'application/json')
end

#create(body) ⇒ Wavefront::Response

POST /api/v2/alert Create a specific alert. We used to validate input here, but this couples the SDK too tightly to the API. Now it’s just a generic POST of a hash.

Raises:

Parameters:

  • description of alert

Returns:



39
40
41
42
# File 'lib/wavefront-sdk/alert.rb', line 39

def create(body)
  raise ArgumentError unless body.is_a?(Hash)
  api.post('', body, 'application/json')
end

#delete(id) ⇒ Wavefront::Response

DELETE /api/v2/alert/id Delete a specific alert.

Deleting an active alert moves it to ‘trash’, from where it can be restored with an #undelete operation. Deleting an alert in ‘trash’ removes it for ever.

Parameters:

  • ID of the alert

Returns:



54
55
56
57
# File 'lib/wavefront-sdk/alert.rb', line 54

def delete(id)
  wf_alert_id?(id)
  api.delete(id)
end

#describe(id, version = nil) ⇒ Wavefront::Response

GET /api/v2/alert/id GET /api/v2/alert/id/history/version Get a specific alert / Get a specific historical version of a specific alert.

Parameters:

  • ID of the alert

  • (defaults to: nil)

    version of alert

Returns:



68
69
70
71
72
73
74
# File 'lib/wavefront-sdk/alert.rb', line 68

def describe(id, version = nil)
  wf_alert_id?(id)
  wf_version?(version) if version
  fragments = [id]
  fragments += ['history', version] if version
  api.get(fragments.uri_concat)
end

#firingWavefront::Response Also known as: active

Returns all currently firing alerts.

Returns:

  • all currently firing alerts.



230
231
232
# File 'lib/wavefront-sdk/alert.rb', line 230

def firing
  alerts_in_state(:firing)
end

#history(id, offset = nil, limit = nil) ⇒ Wavefront::Response

GET /api/v2/alert/id/history Get the version history of a specific alert.

Parameters:

  • ID of the alert

Returns:



132
133
134
135
136
137
138
139
# File 'lib/wavefront-sdk/alert.rb', line 132

def history(id, offset = nil, limit = nil)
  wf_alert_id?(id)
  qs = {}
  qs[:offset] = offset if offset
  qs[:limit] = limit if limit

  api.get([id, 'history'].uri_concat, qs)
end

#in_maintenanceWavefront::Response Also known as: affected_by_maintenance

Returns all alerts currently in a maintenance window.

Returns:

  • all alerts currently in a maintenance window.



238
239
240
# File 'lib/wavefront-sdk/alert.rb', line 238

def in_maintenance
  alerts_in_state(:in_maintenance)
end

#install(id) ⇒ Object

POST /api/v2/alert/id/install Unhide a specific integration alert



144
145
146
147
# File 'lib/wavefront-sdk/alert.rb', line 144

def install(id)
  wf_alert_id?(id)
  api.post([id, 'install'].uri_concat, nil)
end

#invalidWavefront::Response

Returns all alerts which have an invalid query.

Returns:

  • all alerts which have an invalid query.



215
216
217
# File 'lib/wavefront-sdk/alert.rb', line 215

def invalid
  alerts_in_state(:invalid)
end

#list(offset = 0, limit = 100) ⇒ Wavefront::Response

GET /api/v2/alert Get all alerts for a customer

Parameters:

  • (defaults to: 0)

    alert at which the list begins

  • (defaults to: 100)

    the number of alerts to return

Returns:



27
28
29
# File 'lib/wavefront-sdk/alert.rb', line 27

def list(offset = 0, limit = 100)
  api.get('', offset: offset, limit: limit)
end

#no_dataWavefront::Response

Returns all alerts reporting NO_DATA.

Returns:

  • all alerts reporting NO_DATA.



265
266
267
# File 'lib/wavefront-sdk/alert.rb', line 265

def no_data
  alerts_in_state(:no_data)
end

#noneWavefront::Response

Returns I honestly don’t know what the NONE state denotes, but this will fetch alerts which have it.

Returns:

  • I honestly don’t know what the NONE state denotes, but this will fetch alerts which have it.



247
248
249
# File 'lib/wavefront-sdk/alert.rb', line 247

def none
  alerts_in_state(:none)
end

#snooze(id, seconds = nil) ⇒ Wavefront::Response

POST /api/v2/alert/id/snooze Snooze a specific alert for some number of seconds.

Parameters:

  • ID of the alert

  • (defaults to: nil)

    how many seconds to snooze for. Nil is indefinite.

Returns:



157
158
159
160
161
# File 'lib/wavefront-sdk/alert.rb', line 157

def snooze(id, seconds = nil)
  wf_alert_id?(id)
  qs = seconds ? "?seconds=#{seconds}" : ''
  api.post([id, "snooze#{qs}"].uri_concat, nil)
end

#snoozedWavefront::Response

Returns all alerts currently snoozed.

Returns:

  • all alerts currently snoozed



224
225
226
# File 'lib/wavefront-sdk/alert.rb', line 224

def snoozed
  alerts_in_state(:snoozed)
end

#summaryWavefront::Response

GET /api/v2/alert/summary Count alerts of various statuses for a customer

Returns:



202
203
204
# File 'lib/wavefront-sdk/alert.rb', line 202

def summary
  api.get('summary')
end

#trashWavefront::Response

Returns all alerts in the trash.

Returns:

  • all alerts in the trash.



259
260
261
# File 'lib/wavefront-sdk/alert.rb', line 259

def trash
  alerts_in_state(:trash)
end

#undelete(id) ⇒ Wavefront::Response

POST /api/v2/alert/id/undelete Undelete a specific alert.

Parameters:

  • ID of the alert

Returns:



173
174
175
176
# File 'lib/wavefront-sdk/alert.rb', line 173

def undelete(id)
  wf_alert_id?(id)
  api.post([id, 'undelete'].uri_concat)
end

#uninstall(id) ⇒ Object

POST /api/v2/alert/id/uninstall Hide a specific integration alert



181
182
183
184
# File 'lib/wavefront-sdk/alert.rb', line 181

def uninstall(id)
  wf_alert_id?(id)
  api.post([id, 'uninstall'].uri_concat, nil)
end

#unsnooze(id) ⇒ Wavefront::Response

POST /api/v2/alert/id/unsnooze Unsnooze a specific alert.

Parameters:

  • ID of the alert

Returns:



192
193
194
195
# File 'lib/wavefront-sdk/alert.rb', line 192

def unsnooze(id)
  wf_alert_id?(id)
  api.post([id, 'unsnooze'].uri_concat)
end

#update(id, body, modify = true) ⇒ Wavefront::Response

PUT /api/v2/alert/id Update a specific alert.

Raises:

Parameters:

  • a Wavefront alert ID

  • key-value hash of the parameters you wish to change

  • (defaults to: true)

    if true, use #describe() to get a hash describing the existing object, and modify that with the new body. If false, pass the new body straight through.

Returns:



100
101
102
103
104
105
106
107
108
# File 'lib/wavefront-sdk/alert.rb', line 100

def update(id, body, modify = true)
  wf_alert_id?(id)
  raise ArgumentError unless body.is_a?(Hash)

  return api.put(id, body, 'application/json') unless modify

  api.put(id, hash_for_update(describe(id).response, body),
          'application/json')
end

#update_keysObject



15
16
17
18
# File 'lib/wavefront-sdk/alert.rb', line 15

def update_keys
  i[id name target condition displayExpression minutes tag
     resolveAfterMinutes severity additionalInformation]
end

#valid_id?(id) ⇒ Boolean

Returns:



163
164
165
# File 'lib/wavefront-sdk/alert.rb', line 163

def valid_id?(id)
  wf_alert_id?(id)
end

#versions(id) ⇒ Object

Gets all the versions of the given alert

Parameters:

  • ID of the alert



80
81
82
83
84
85
86
87
# File 'lib/wavefront-sdk/alert.rb', line 80

def versions(id)
  wf_alert_id?(id)
  resp = api.get([id, 'history'].uri_concat)

  versions = resp.response.items.map(&:version)
  resp.response[:items] = versions
  resp
end