wavefront-sdk 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.codeclimate.yml +20 -0
- data/.gitignore +4 -0
- data/.rubocop.yml +1157 -0
- data/.travis.yml +16 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +58 -0
- data/LICENSE.txt +27 -0
- data/README.md +103 -0
- data/Rakefile +18 -0
- data/lib/wavefront-sdk/alert.rb +195 -0
- data/lib/wavefront-sdk/base.rb +251 -0
- data/lib/wavefront-sdk/cloudintegration.rb +88 -0
- data/lib/wavefront-sdk/credentials.rb +79 -0
- data/lib/wavefront-sdk/dashboard.rb +157 -0
- data/lib/wavefront-sdk/event.rb +173 -0
- data/lib/wavefront-sdk/exception.rb +39 -0
- data/lib/wavefront-sdk/externallink.rb +77 -0
- data/lib/wavefront-sdk/maintenancewindow.rb +75 -0
- data/lib/wavefront-sdk/message.rb +36 -0
- data/lib/wavefront-sdk/metric.rb +52 -0
- data/lib/wavefront-sdk/mixins.rb +60 -0
- data/lib/wavefront-sdk/proxy.rb +95 -0
- data/lib/wavefront-sdk/query.rb +96 -0
- data/lib/wavefront-sdk/response.rb +56 -0
- data/lib/wavefront-sdk/savedsearch.rb +88 -0
- data/lib/wavefront-sdk/search.rb +58 -0
- data/lib/wavefront-sdk/source.rb +131 -0
- data/lib/wavefront-sdk/user.rb +108 -0
- data/lib/wavefront-sdk/validators.rb +395 -0
- data/lib/wavefront-sdk/version.rb +1 -0
- data/lib/wavefront-sdk/webhook.rb +73 -0
- data/lib/wavefront-sdk/write.rb +225 -0
- data/pkg/wavefront-client-3.5.0.gem +0 -0
- data/spec/.rubocop.yml +14 -0
- data/spec/spec_helper.rb +157 -0
- data/spec/wavefront-sdk/alert_spec.rb +83 -0
- data/spec/wavefront-sdk/base_spec.rb +88 -0
- data/spec/wavefront-sdk/cloudintegration_spec.rb +54 -0
- data/spec/wavefront-sdk/credentials_spec.rb +55 -0
- data/spec/wavefront-sdk/dashboard_spec.rb +74 -0
- data/spec/wavefront-sdk/event_spec.rb +83 -0
- data/spec/wavefront-sdk/externallink_spec.rb +65 -0
- data/spec/wavefront-sdk/maintenancewindow_spec.rb +48 -0
- data/spec/wavefront-sdk/message_spec.rb +19 -0
- data/spec/wavefront-sdk/metric_spec.rb +21 -0
- data/spec/wavefront-sdk/mixins_spec.rb +27 -0
- data/spec/wavefront-sdk/proxy_spec.rb +41 -0
- data/spec/wavefront-sdk/query_spec.rb +51 -0
- data/spec/wavefront-sdk/resources/test.conf +10 -0
- data/spec/wavefront-sdk/response_spec.rb +47 -0
- data/spec/wavefront-sdk/savedsearch_spec.rb +54 -0
- data/spec/wavefront-sdk/search_spec.rb +47 -0
- data/spec/wavefront-sdk/source_spec.rb +48 -0
- data/spec/wavefront-sdk/user_spec.rb +56 -0
- data/spec/wavefront-sdk/validators_spec.rb +238 -0
- data/spec/wavefront-sdk/webhook_spec.rb +50 -0
- data/spec/wavefront-sdk/write_spec.rb +167 -0
- data/wavefront-sdk.gemspec +34 -0
- metadata +269 -0
@@ -0,0 +1,88 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
module Wavefront
|
4
|
+
#
|
5
|
+
# View and manage Cloud Integrations. These are identified by
|
6
|
+
# a UUID.
|
7
|
+
#
|
8
|
+
class CloudIntegration < Wavefront::Base
|
9
|
+
|
10
|
+
# GET /api/v2/cloudintegration
|
11
|
+
# Get all cloud integrations for a customer
|
12
|
+
#
|
13
|
+
# @param offset [Int] integration at which the list begins
|
14
|
+
# @param limit [Int] the number of integration to return
|
15
|
+
# @return [Hash]
|
16
|
+
#
|
17
|
+
def list(offset = 0, limit = 100)
|
18
|
+
api_get('', { offset: offset, limit: limit })
|
19
|
+
end
|
20
|
+
|
21
|
+
# POST /api/v2/cloudintegration
|
22
|
+
# Create a cloud integration. Refer to the Swagger API docs for
|
23
|
+
# valid keys.
|
24
|
+
#
|
25
|
+
# @param body [Hash] description of integration
|
26
|
+
# @return [Hash]
|
27
|
+
#
|
28
|
+
def create(body)
|
29
|
+
raise ArgumentError unless body.is_a?(Hash)
|
30
|
+
api_post('', body, 'application/json')
|
31
|
+
end
|
32
|
+
|
33
|
+
# DELETE /api/v2/cloudintegration/{id}
|
34
|
+
# Delete a specific cloud integration
|
35
|
+
#
|
36
|
+
# Deleting an active integration moves it to 'trash', from where
|
37
|
+
# it can be restored with an #undelete operation. Deleting an
|
38
|
+
# integration in 'trash' removes it for ever.
|
39
|
+
#
|
40
|
+
# @param id [String] ID of the integration
|
41
|
+
# @return [Hash]
|
42
|
+
#
|
43
|
+
def delete(id)
|
44
|
+
wf_cloudintegration_id?(id)
|
45
|
+
api_delete(id)
|
46
|
+
end
|
47
|
+
|
48
|
+
# GET /api/v2/cloudintegration/{id}
|
49
|
+
# Get a specific cloud integration
|
50
|
+
#
|
51
|
+
# @param id [String] ID of the integration
|
52
|
+
# @return [Hash]
|
53
|
+
#
|
54
|
+
def describe(id)
|
55
|
+
wf_cloudintegration_id?(id)
|
56
|
+
api_get(id)
|
57
|
+
end
|
58
|
+
|
59
|
+
# PUT /api/v2/cloudintegration/{id}
|
60
|
+
# Update a specific cloud integration
|
61
|
+
#
|
62
|
+
# @param id [String] ID of the integration
|
63
|
+
# @param body [Hash] description of integration
|
64
|
+
#
|
65
|
+
def update(id, body)
|
66
|
+
wf_cloudintegration_id?(id)
|
67
|
+
raise ArgumentError unless body.is_a?(Hash)
|
68
|
+
api_put(id, body)
|
69
|
+
end
|
70
|
+
|
71
|
+
# POST /api/v2/cloudintegration/{id}/undelete
|
72
|
+
# Undelete a specific cloud integration
|
73
|
+
#
|
74
|
+
# @param id [String] ID of the integration
|
75
|
+
# @return [Hash]
|
76
|
+
#
|
77
|
+
def undelete(id)
|
78
|
+
wf_cloudintegration_id?(id)
|
79
|
+
api_post([id, 'undelete'].uri_concat)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# A standard response.
|
84
|
+
#
|
85
|
+
class Response
|
86
|
+
class CloudIntegration < Base; end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'inifile'
|
3
|
+
|
4
|
+
module Wavefront
|
5
|
+
|
6
|
+
# Helper methods to get Wavefront credentials
|
7
|
+
#
|
8
|
+
class Credentials
|
9
|
+
attr_reader :opts, :config, :creds, :proxy
|
10
|
+
|
11
|
+
# Gives you an object of credentials and options for speaking to
|
12
|
+
# Wavefront. It will look in the following places:
|
13
|
+
#
|
14
|
+
# ~/.wavefront
|
15
|
+
# /etc/wavefront/credentials
|
16
|
+
# WAVEFRONT_ENDPOINT and WAVEFRONT_TOKEN environment variables
|
17
|
+
#
|
18
|
+
# @param options [Hash] keys may be 'file', which
|
19
|
+
# specifies a config file which will be loaded and parsed. If
|
20
|
+
# no file is supplied, those listed above will be used.;
|
21
|
+
# and/or 'profile' which select a profile section from 'file'
|
22
|
+
#
|
23
|
+
def initialize(options = {})
|
24
|
+
raw = load_from_file(options)
|
25
|
+
raw = env_override(raw)
|
26
|
+
populate(raw)
|
27
|
+
end
|
28
|
+
|
29
|
+
def env_override(raw)
|
30
|
+
{ endpoint: 'WAVEFRONT_ENDPOINT',
|
31
|
+
token: 'WAVEFRONT_TOKEN',
|
32
|
+
proxy: 'WAVEFRONT_PROXY'
|
33
|
+
}.each { |k, v| raw[k] = ENV[v] if ENV[v] }
|
34
|
+
raw
|
35
|
+
end
|
36
|
+
|
37
|
+
def populate(raw)
|
38
|
+
@config = raw
|
39
|
+
@creds = raw.select { |k, _v| [:endpoint, :token].include?(k) }
|
40
|
+
@proxy = raw.select { |k, _v| [:proxy, :port].include?(k) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def load_from_file(opts)
|
44
|
+
ret = {}
|
45
|
+
|
46
|
+
profile = opts[:profile] || 'default'
|
47
|
+
|
48
|
+
c_file = if opts.key?(:file)
|
49
|
+
Array(Pathname.new(opts[:file]))
|
50
|
+
else
|
51
|
+
[Pathname.new('/etc/wavefront/credentials'),
|
52
|
+
Pathname.new(ENV['HOME']) + '.wavefront']
|
53
|
+
end
|
54
|
+
|
55
|
+
c_file.each do |f|
|
56
|
+
next unless f.exist?
|
57
|
+
ret = load_profile(f, profile)
|
58
|
+
ret[:file] = f
|
59
|
+
end
|
60
|
+
|
61
|
+
ret
|
62
|
+
end
|
63
|
+
|
64
|
+
# Load in configuration (optionally) given section of an
|
65
|
+
# ini-style configuration file not there, we don't consider that
|
66
|
+
# an error.
|
67
|
+
#
|
68
|
+
# @param file [Pathname] the file to read
|
69
|
+
# @param profile [String] the section in the config to read
|
70
|
+
# @return [Hash] options loaded from file. Each key becomes a
|
71
|
+
# symbol
|
72
|
+
#
|
73
|
+
def load_profile(file, profile = 'default')
|
74
|
+
IniFile.load(file)[profile].each_with_object({}) do |(k, v), memo|
|
75
|
+
memo[k.to_sym] = v
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
module Wavefront
|
4
|
+
#
|
5
|
+
# View and manage dashboards.
|
6
|
+
#
|
7
|
+
class Dashboard < Wavefront::Base
|
8
|
+
|
9
|
+
# GET /api/v2/dashboard
|
10
|
+
# Get all dashboards for a customer.
|
11
|
+
#
|
12
|
+
# @param offset [Int] dashboard at which the list begins
|
13
|
+
# @param limit [Int] the number of dashboard to return
|
14
|
+
# @return [Hash]
|
15
|
+
#
|
16
|
+
def list(offset = 0, limit = 100)
|
17
|
+
api_get('', { offset: offset, limit: limit })
|
18
|
+
end
|
19
|
+
|
20
|
+
# POST /api/v2/dashboard
|
21
|
+
# Create a specific dashboard.
|
22
|
+
# Refer to the Swagger API docs for valid keys.
|
23
|
+
#
|
24
|
+
# @param body [Hash] description of dashboard
|
25
|
+
# @return [Hash]
|
26
|
+
#
|
27
|
+
def create(body)
|
28
|
+
raise ArgumentError unless body.is_a?(Hash)
|
29
|
+
api_post('', body, 'application/json')
|
30
|
+
end
|
31
|
+
|
32
|
+
# DELETE /api/v2/dashboard/{id}
|
33
|
+
# Delete a specific dashboard.
|
34
|
+
# Deleting an active dashboard moves it to 'trash', from where it can
|
35
|
+
# be restored with an #undelete operation. Deleting an dashboard in
|
36
|
+
# 'trash' removes it for ever.
|
37
|
+
#
|
38
|
+
# @param id [String] ID of the dashboard
|
39
|
+
# @return [Hash]
|
40
|
+
#
|
41
|
+
def delete(id)
|
42
|
+
wf_dashboard_id?(id)
|
43
|
+
api_delete(id)
|
44
|
+
end
|
45
|
+
|
46
|
+
# GET /api/v2/dashboard/{id}
|
47
|
+
# Get a specific dashboard / Get a specific historical version of a
|
48
|
+
# specific dashboard.
|
49
|
+
#
|
50
|
+
# @param id [String] ID of the dashboard
|
51
|
+
# @param version [Integer] version of dashboard
|
52
|
+
# @return [Hash]
|
53
|
+
#
|
54
|
+
def describe(id, version = nil)
|
55
|
+
wf_dashboard_id?(id)
|
56
|
+
wf_version?(version) if version
|
57
|
+
fragments = [id]
|
58
|
+
fragments += ['history', version] if version
|
59
|
+
api_get(fragments.uri_concat)
|
60
|
+
end
|
61
|
+
|
62
|
+
# PUT /api/v2/dashboard/{id}
|
63
|
+
# Update a specific dashboard.
|
64
|
+
#
|
65
|
+
# Refer to the Swagger API docs for valid keys.
|
66
|
+
#
|
67
|
+
# @param body [Hash] description of dashboard
|
68
|
+
# @return [Hash]
|
69
|
+
#
|
70
|
+
def update(id, body)
|
71
|
+
wf_dashboard_id?(id)
|
72
|
+
raise ArgumentError unless body.is_a?(Hash)
|
73
|
+
api_put(id, body)
|
74
|
+
end
|
75
|
+
|
76
|
+
# GET /api/v2/dashboard/{id}/history
|
77
|
+
# Get the version history of an dashboard.
|
78
|
+
#
|
79
|
+
# @param id [String] ID of the dashboard
|
80
|
+
# @return [Hash]
|
81
|
+
#
|
82
|
+
def history(id)
|
83
|
+
wf_dashboard_id?(id)
|
84
|
+
api_get([id, 'history'].uri_concat)
|
85
|
+
end
|
86
|
+
|
87
|
+
# GET /api/v2/dashboard/{id}/tag
|
88
|
+
# Get all tags associated with a specific dashboard.
|
89
|
+
#
|
90
|
+
# @param id [String] ID of the dashboard
|
91
|
+
# @returns [Hash] object describing the dashboard with status and
|
92
|
+
# response keys
|
93
|
+
#
|
94
|
+
def tags(id)
|
95
|
+
wf_dashboard_id?(id)
|
96
|
+
api_get([id, 'tag'].uri_concat)
|
97
|
+
end
|
98
|
+
|
99
|
+
# POST /api/v2/dashboard/{id}/tag
|
100
|
+
# Set all tags associated with a specific dashboard.
|
101
|
+
#
|
102
|
+
# @param id [String] ID of the dashboard
|
103
|
+
# @param tags [Array] list of tags to set.
|
104
|
+
# @returns [Hash] object describing the dashboard with status and
|
105
|
+
# response keys
|
106
|
+
#
|
107
|
+
def tag_set(id, tags)
|
108
|
+
wf_dashboard_id?(id)
|
109
|
+
tags = Array(tags)
|
110
|
+
tags.each { |t| wf_string?(t) }
|
111
|
+
api_post([id, 'tag'].uri_concat, tags.to_json, 'application/json')
|
112
|
+
end
|
113
|
+
|
114
|
+
# DELETE /api/v2/dashboard/{id}/tag/{tagValue}
|
115
|
+
# Remove a tag from a specific dashboard.
|
116
|
+
#
|
117
|
+
# @param id [String] ID of the dashboard
|
118
|
+
# @param tag [String] tag to delete
|
119
|
+
# @returns [Hash] object with 'status' key and empty 'repsonse'
|
120
|
+
#
|
121
|
+
def tag_delete(id, tag)
|
122
|
+
wf_dashboard_id?(id)
|
123
|
+
wf_string?(tag)
|
124
|
+
api_delete([id, 'tag', tag].uri_concat)
|
125
|
+
end
|
126
|
+
|
127
|
+
# PUT /api/v2/dashboard/{id}/tag/{tagValue}
|
128
|
+
# Add a tag to a specific dashboard.
|
129
|
+
#
|
130
|
+
# @param id [String] ID of the dashboard
|
131
|
+
# @param tag [String] tag to set.
|
132
|
+
# @returns [Hash] object with 'status' key and empty 'repsonse'
|
133
|
+
#
|
134
|
+
def tag_add(id, tag)
|
135
|
+
wf_dashboard_id?(id)
|
136
|
+
wf_string?(tag)
|
137
|
+
api_put([id, 'tag', tag].uri_concat)
|
138
|
+
end
|
139
|
+
|
140
|
+
# POST /api/v2/dashboard/{id}/undelete
|
141
|
+
# Move an dashboard from 'trash' back into active service.
|
142
|
+
#
|
143
|
+
# @param id [String] ID of the dashboard
|
144
|
+
# @return [Hash]
|
145
|
+
#
|
146
|
+
def undelete(id)
|
147
|
+
wf_dashboard_id?(id)
|
148
|
+
api_post([id, 'undelete'].uri_concat)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
# A standard response.
|
153
|
+
#
|
154
|
+
class Response
|
155
|
+
class Dashboard < Base; end
|
156
|
+
end
|
157
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
module Wavefront
|
4
|
+
#
|
5
|
+
# View and manage events. Events are identified by their millisecond
|
6
|
+
# epoch timestamp.
|
7
|
+
#
|
8
|
+
class Event < Wavefront::Base
|
9
|
+
@update_keys = [:startTime, :endTime, :name, :annotations]
|
10
|
+
|
11
|
+
# GET /api/v2/event
|
12
|
+
# List all the events for a customer within a time range.
|
13
|
+
#
|
14
|
+
# @param from [Time, Integer] start of time range. The API
|
15
|
+
# requires this time as epoch milliseconds, but we will also
|
16
|
+
# accept it as a Ruby Time object.
|
17
|
+
# @param to [Time, Integer] end ot time range. Can be epoch
|
18
|
+
# millisecods or a Ruby time. If not supplied, defaults to the
|
19
|
+
# current time.
|
20
|
+
# @cursor [String] I think this is the
|
21
|
+
# must start with a timestamp.
|
22
|
+
# @limit [Integer] the number of events to return
|
23
|
+
# @return [Hash]
|
24
|
+
#
|
25
|
+
def list(from = nil, to = nil, limit = 100, cursor = nil)
|
26
|
+
raise ArgumentError unless from && to
|
27
|
+
from = parse_time(from, true)
|
28
|
+
to = parse_time(to, true)
|
29
|
+
wf_ms_ts?(from)
|
30
|
+
wf_ms_ts?(to)
|
31
|
+
wf_event_id?(cursor) if cursor
|
32
|
+
raise ArgumentError unless limit.is_a?(Integer)
|
33
|
+
|
34
|
+
api_get('', { earliestStartTimeEpochMillis: from,
|
35
|
+
latestStartTimeEpochMillis: to,
|
36
|
+
cursor: cursor,
|
37
|
+
limit: limit }.select { |_k, v| v })
|
38
|
+
end
|
39
|
+
|
40
|
+
# POST /api/v2/event
|
41
|
+
# Create a specific event.
|
42
|
+
#
|
43
|
+
# We used to validate keys and provide helpers for time fields.
|
44
|
+
# Now ensuring a valid hash is entirely left up to the user.
|
45
|
+
# Refer to the Swagger docs for more information.
|
46
|
+
#
|
47
|
+
# @param body [Hash] description of event
|
48
|
+
# @return [Hash]
|
49
|
+
#
|
50
|
+
def create(body)
|
51
|
+
raise ArgumentError unless body.is_a?(Hash)
|
52
|
+
api_post('', body, 'application/json')
|
53
|
+
end
|
54
|
+
|
55
|
+
# DELETE /api/v2/event/{id}
|
56
|
+
# Delete a specific event.
|
57
|
+
#
|
58
|
+
# @param id [String] ID of the alert
|
59
|
+
# @return [Hash]
|
60
|
+
#
|
61
|
+
def delete(id)
|
62
|
+
wf_event_id?(id)
|
63
|
+
api_delete(id)
|
64
|
+
end
|
65
|
+
|
66
|
+
# GET /api/v2/event/{id}
|
67
|
+
# Get a specific event / Get a specific historical version of a
|
68
|
+
# specific event.
|
69
|
+
#
|
70
|
+
# @param id [String] ID of the event
|
71
|
+
# @param version [Integer] version of event
|
72
|
+
# @return [Hash]
|
73
|
+
#
|
74
|
+
def describe(id, version = nil)
|
75
|
+
wf_event_id?(id)
|
76
|
+
wf_version?(version) if version
|
77
|
+
fragments = [id]
|
78
|
+
fragments += ['history', version] if version
|
79
|
+
api_get(fragments.uri_concat)
|
80
|
+
end
|
81
|
+
|
82
|
+
# PUT /api/v2/event/{id}
|
83
|
+
# Update a specific event
|
84
|
+
#
|
85
|
+
# This method helps you update one or more properties of an event.
|
86
|
+
#
|
87
|
+
# @param id [String] a Wavefront Event ID
|
88
|
+
# @param body [Hash] description of event.
|
89
|
+
# @param modify [Bool] if this is true, then the existing event
|
90
|
+
# object will be fetched and merged with the user-supplied body.
|
91
|
+
# The resulting object will be passed to the API. If this is
|
92
|
+
# false, the body will be passed through unmodified.
|
93
|
+
# @return [Hash]
|
94
|
+
#
|
95
|
+
def update(id, body, modify = true)
|
96
|
+
wf_event_id?(id)
|
97
|
+
raise ArgumentError unless body.is_a?(Hash)
|
98
|
+
|
99
|
+
return api_put(id, body, 'application/json') unless modify
|
100
|
+
|
101
|
+
api_put(id, hash_for_update(describe(id), body), 'application/json')
|
102
|
+
end
|
103
|
+
|
104
|
+
# POST /api/v2/event/{id}/close
|
105
|
+
# Close a specific event.
|
106
|
+
#
|
107
|
+
# @param id [String] the ID of the event
|
108
|
+
#
|
109
|
+
def close(id)
|
110
|
+
wf_event_id?(id)
|
111
|
+
api_post([id, 'close'].uri_concat)
|
112
|
+
end
|
113
|
+
|
114
|
+
# GET /api/v2/event/{id}/tag
|
115
|
+
# Get all tags associated with a specific event
|
116
|
+
#
|
117
|
+
# @param id [String] ID of the event
|
118
|
+
# @returns [Hash] object describing the event with status and
|
119
|
+
# response keys
|
120
|
+
#
|
121
|
+
def tags(id)
|
122
|
+
wf_event_id?(id)
|
123
|
+
api_get([id, 'tag'].uri_concat)
|
124
|
+
end
|
125
|
+
|
126
|
+
# POST /api/v2/event/{id}/tag
|
127
|
+
# Set all tags associated with a specific event.
|
128
|
+
#
|
129
|
+
# @param id [String] ID of the event
|
130
|
+
# @param tags [Array] list of tags to set.
|
131
|
+
# @returns [Hash] object describing the event with status and
|
132
|
+
# response keys
|
133
|
+
#
|
134
|
+
def tag_set(id, tags)
|
135
|
+
wf_event_id?(id)
|
136
|
+
tags = Array(tags)
|
137
|
+
tags.each { |t| wf_string?(t) }
|
138
|
+
api_post([id, 'tag'].uri_concat, tags, 'application/json')
|
139
|
+
end
|
140
|
+
|
141
|
+
# DELETE /api/v2/event/{id}/tag/{tagValue}
|
142
|
+
# Remove a tag from a specific event.
|
143
|
+
#
|
144
|
+
# @param id [String] ID of the event
|
145
|
+
# @param tag [String] tag to delete
|
146
|
+
# @returns [Hash] object with 'status' key and empty 'repsonse'
|
147
|
+
#
|
148
|
+
def tag_delete(id, tag)
|
149
|
+
wf_event_id?(id)
|
150
|
+
wf_string?(tag)
|
151
|
+
api_delete([id, 'tag', tag].uri_concat)
|
152
|
+
end
|
153
|
+
|
154
|
+
# PUT /api/v2/event/{id}/tag/{tagValue}
|
155
|
+
# Add a tag to a specific event.
|
156
|
+
#
|
157
|
+
# @param id [String] ID of the event
|
158
|
+
# @param tag [String] tag to set.
|
159
|
+
# @returns [Hash] object with 'status' key and empty 'repsonse'
|
160
|
+
#
|
161
|
+
def tag_add(id, tag)
|
162
|
+
wf_event_id?(id)
|
163
|
+
wf_string?(tag)
|
164
|
+
api_put([id, 'tag', tag].uri_concat)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
# A standard response.
|
169
|
+
#
|
170
|
+
class Response
|
171
|
+
class Event < Base; end
|
172
|
+
end
|
173
|
+
end
|