xcal-parktronic 1.0.0 → 1.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 +6 -14
- data/Gemfile +1 -0
- data/README.md +11 -9
- data/lib/xcal/parktronic.rb +4 -0
- data/lib/xcal/parktronic/api_client.rb +19 -0
- data/lib/xcal/parktronic/routes/alarms.rb +12 -15
- data/lib/xcal/parktronic/routes/command_notifications.rb +1 -3
- data/lib/xcal/parktronic/routes/custom_queries.rb +2 -4
- data/lib/xcal/parktronic/routes/event_history_items.rb +1 -3
- data/lib/xcal/parktronic/routes/events.rb +2 -4
- data/lib/xcal/parktronic/routes/metrics.rb +17 -34
- data/lib/xcal/parktronic/routes/nested/alarm_actions.rb +2 -5
- data/lib/xcal/parktronic/routes/nested/device_errors.rb +1 -1
- data/lib/xcal/parktronic/routes/nested/events.rb +2 -2
- data/lib/xcal/parktronic/routes/nested/metric_values.rb +1 -1
- data/lib/xcal/parktronic/routes/outages.rb +1 -3
- data/lib/xcal/parktronic/routes/stack_changes.rb +3 -4
- data/lib/xcal/parktronic/version.rb +1 -1
- data/spec/lib/xcal/parktronic/routes/metrics_routes_spec.rb +8 -1
- data/spec/lib/xcal/parktronic/routes/nested/alarm_actions_spec.rb +1 -0
- data/spec/lib/xcal/parktronic/routes/nested/events_spec.rb +1 -0
- data/xcal-parktronic.gemspec +1 -0
- metadata +35 -21
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZDAxMzYyMTk1ZDM0MTg3MzkwNDVjNjg4YjMwYTA0M2UzNzhkZWJkM2Q1MTVj
|
10
|
-
ZWExNWZmNmZkYWU0YzJiNmYyZTI3ODk5ZjViOTE1YzI3OTFlNDkxY2RlOWM0
|
11
|
-
Mzg0YmJlZGRkYWE5YjkyMzZmNmRjNzE1YzBlYWZmMDY1YjJlZGU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NjU4MTI5YTliN2RiM2QzZGQxZTVmMDg0MzE3M2JmNDc1NDFlMWRkMDkyNDk5
|
14
|
-
NTIxYzdhMDVlZmMyMWYyNTJiOWVkOTE1NDM2Y2U5YmY4ZGI2MjA3YzkwYTU0
|
15
|
-
YjFkZjY2ODFkZWVjYjE4MDViNDc4ODQyYjMzMzBmZDlkNzg5ODU=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 898fd311009a1d5e486cddc2a8f45c63c421b51b
|
4
|
+
data.tar.gz: 2b9f9b5938830b48e60e394ff8e94103f616598a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9c8f772186c54d466ab10ff635726385e038690a4489fb9b6f62f7f9337c26780dc9a57e33ad5cc57570619a6dbd8184508f148ba47af3cb514e07db380d1b67
|
7
|
+
data.tar.gz: ba689c71cf39006e4b536b8675abd357ab092d7a3e75ca45b6e2980247f81e3b6fcc180691484c6e47bc10218bbaf9cfaff6abe3b2c4eb89c84e5510b83ba01f
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -27,26 +27,28 @@ http://rubydoc.info/gems/xcal-parktronic/frames
|
|
27
27
|
|
28
28
|
## Usage
|
29
29
|
|
30
|
-
|
30
|
+
### Initialization:
|
31
31
|
|
32
32
|
```ruby
|
33
|
+
api = ParkClient.new(access_token: 'your_access_token', endpoint: 'http://api_host')
|
33
34
|
api = Xcal::Parktronic::ApiClient.new(access_token: 'your_access_token', endpoint: 'http://api_host')
|
35
|
+
api = Xcal::Parktronic::ApiClient.new(access_token: 'your_access_token', endpoint: 'http://api_host', memcached_host: 'localhost:11211')
|
34
36
|
```
|
35
37
|
|
36
|
-
|
38
|
+
### Alarms:
|
37
39
|
```ruby
|
38
40
|
api.alarms
|
39
41
|
api.alarm_tags(1)
|
40
42
|
api.search_alarm(name: 'test', tagged_with: 'test', time_range: 24, originating_system: 'Splunk', page: 1, per_page: 20)
|
41
43
|
```
|
42
44
|
|
43
|
-
|
45
|
+
### Outages:
|
44
46
|
```ruby
|
45
47
|
api.outages
|
46
48
|
api.outages(page: 2, per_page: 5)
|
47
49
|
```
|
48
50
|
|
49
|
-
|
51
|
+
### Stack changes
|
50
52
|
```ruby
|
51
53
|
api.stack_changes
|
52
54
|
api.stack_changes(page: 2, per_page: 5)
|
@@ -54,21 +56,21 @@ api.stack_changes(page: 2, per_page: 5, element: 'XBO')
|
|
54
56
|
api.stack_changes(time_range: {time_offset: -1, start_date: 0, start_time: 1440, end_time: 0}, element: 'XBO')
|
55
57
|
```
|
56
58
|
|
57
|
-
|
59
|
+
### Events history
|
58
60
|
```ruby
|
59
61
|
api.events_history
|
60
62
|
api.events_history(page: 2, per_page: 5)
|
61
63
|
api.events_history(host_impacted: 'xre-host-1', service_impacted: 'xre')
|
62
64
|
```
|
63
65
|
|
64
|
-
|
66
|
+
### Command notifications (remote commands)
|
65
67
|
```ruby
|
66
68
|
api.command_notifications
|
67
69
|
api.command_notifications(page: 1, per_page: 2)
|
68
70
|
api.update_command_notification(10)
|
69
71
|
```
|
70
72
|
|
71
|
-
|
73
|
+
### Events
|
72
74
|
```ruby
|
73
75
|
api.add_event
|
74
76
|
api.update_event
|
@@ -77,7 +79,7 @@ api.alarm(3).get_all_events
|
|
77
79
|
api.alarm(3).post_event(data)
|
78
80
|
```
|
79
81
|
|
80
|
-
|
82
|
+
### Alarm Actions
|
81
83
|
```ruby
|
82
84
|
api.alarm(3).get_alarm_actions
|
83
85
|
api.alarm(3).get_alarm_action(alarm_action_id)
|
@@ -86,7 +88,7 @@ api.alarm(3).update_alarm_action
|
|
86
88
|
api.alarm(3).set_position
|
87
89
|
```
|
88
90
|
|
89
|
-
|
91
|
+
### Custom Queries
|
90
92
|
```ruby
|
91
93
|
api.get_custom_queries
|
92
94
|
api.post_custom_query
|
data/lib/xcal/parktronic.rb
CHANGED
@@ -11,6 +11,8 @@ module Xcal
|
|
11
11
|
# * +endpoint+ - OIV endpoint
|
12
12
|
# * +proxy+ - enables proxy if proxy url is passed
|
13
13
|
# * +access_token+ - access key to application
|
14
|
+
# * +memcached_host+ - memcached host:port if you want enable caching
|
15
|
+
# * +memcached_ttl+ - cache time to live (seconds), 60 seconds by default
|
14
16
|
# * +version+ - api version. defaults to v1
|
15
17
|
# ==== Examples
|
16
18
|
# api = Xcal::Parktronic::ApiClient.new(access_token: 'your_access_token', endpoint: 'http://api-host.com')
|
@@ -19,6 +21,11 @@ module Xcal
|
|
19
21
|
@args.default_proc = proc{|h, k| h.key?(k.to_s) ? h[k.to_s] : nil}
|
20
22
|
end
|
21
23
|
|
24
|
+
def cache
|
25
|
+
return nil if @args[:memcached_host].nil?
|
26
|
+
@cache ||= Dalli::Client.new(@args[:memcached_host], :expires_in => (@args[:memcached_ttl] || 60), :namespace => "xcal_parktronic", :compress => true)
|
27
|
+
end
|
28
|
+
|
22
29
|
def host
|
23
30
|
uri.host
|
24
31
|
end
|
@@ -57,6 +64,18 @@ module Xcal
|
|
57
64
|
|
58
65
|
@http
|
59
66
|
end
|
67
|
+
|
68
|
+
def get_response(url)
|
69
|
+
# Try to find response in cache
|
70
|
+
cache_key = Digest::SHA1.hexdigest(url)
|
71
|
+
return cache.get(cache_key) if cache && !cache.get(cache_key).nil?
|
72
|
+
|
73
|
+
# Get response and save to cache (if cacing enabled)
|
74
|
+
responce = http.get url
|
75
|
+
cache.set(cache_key, responce) if cache
|
76
|
+
|
77
|
+
responce
|
78
|
+
end
|
60
79
|
end
|
61
80
|
|
62
81
|
end
|
@@ -17,16 +17,12 @@ module Xcal
|
|
17
17
|
# api.alarms(page: 2, per_page: 5)
|
18
18
|
def get_paged_alarms(args = {})
|
19
19
|
args.merge!(:access_token => access_token)
|
20
|
-
response =
|
20
|
+
response = get_response("/#{api_version}/alarms?#{URI.encode_www_form(args)}")
|
21
21
|
|
22
22
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
23
|
-
if response.code == '200'
|
24
|
-
generic_response.alarms.map { |alarm| Xcal::Parktronic::GenericResponse.new(alarm.alarm, self) }
|
25
|
-
else
|
26
|
-
generic_response
|
27
|
-
end
|
28
23
|
|
29
|
-
|
24
|
+
response.code == '200' && generic_response.has_key?(:alarms) ?
|
25
|
+
generic_response.alarms.map { |alarm| Xcal::Parktronic::GenericResponse.new(alarm.alarm, self) } : generic_response
|
30
26
|
end
|
31
27
|
alias :alarms :get_paged_alarms
|
32
28
|
|
@@ -38,12 +34,10 @@ module Xcal
|
|
38
34
|
# ==== Examples
|
39
35
|
# api.get_alarm(2)
|
40
36
|
def get_alarm(id)
|
41
|
-
response =
|
37
|
+
response = get_response("/#{api_version}/alarms/#{id}?access_token=#{access_token}")
|
42
38
|
|
43
39
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
44
40
|
response.code == '200' ? Xcal::Parktronic::GenericResponse.new(generic_response.alarm, self) : generic_response
|
45
|
-
|
46
|
-
# TODO Add caching
|
47
41
|
end
|
48
42
|
alias :alarm :get_alarm
|
49
43
|
|
@@ -102,7 +96,7 @@ module Xcal
|
|
102
96
|
# api.get_alarm_tags(2)
|
103
97
|
# api.alarm_tags(2)
|
104
98
|
def get_alarm_tags(id)
|
105
|
-
response =
|
99
|
+
response = get_response("/#{api_version}/alarms/#{id}/tags?#{URI.encode_www_form(access_token: access_token)}")
|
106
100
|
|
107
101
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body, self)
|
108
102
|
response.code == '200' && generic_response.has_key?(:tags) ? generic_response.tags.map(&:tag) : generic_response
|
@@ -118,13 +112,15 @@ module Xcal
|
|
118
112
|
# * +originating_system+ string or array, originating system name(s), blank by default (example: 'Op5_Nagios' or 'Op5_Nagios Splunk' or ['Op5_Nagios', 'Splunk'])
|
119
113
|
# * +page+ integer, page number, defaults to 1
|
120
114
|
# * +per_page+ integer, per page value, defaults to 100
|
115
|
+
# * +where+ 'where' hash of conditions for searching
|
116
|
+
# * +extends+ array, may include: latest_event, latest_unclosed_event, with_unclosed_events, with_most_recent_events, top_alarms, select_brouha_open
|
121
117
|
#
|
122
118
|
# ==== Examples
|
123
119
|
# api.search_alarm(name: 'test alarm')
|
124
120
|
# api.search_alarm(tagged_with: 'test alarm', time_range: 120)
|
125
|
-
|
121
|
+
# api.search_alarm(where: {impact_level: 'Unknown', originating_system: 'test'}, time_range: 120)
|
122
|
+
# api.search_alarm(extends: ['latest_event', 'with_most_recent_events'], time_range: 120)
|
126
123
|
def search_alarm(args = {})
|
127
|
-
custom_extends = [ 'latest_event', 'latest_unclosed_event' ]
|
128
124
|
custom_scopes = { with_most_recent_events: [] }
|
129
125
|
|
130
126
|
#Filter
|
@@ -142,12 +138,13 @@ module Xcal
|
|
142
138
|
# Params for request
|
143
139
|
scopes = URI.escape(custom_scopes.to_json)
|
144
140
|
search = URI.escape({name: args.fetch(:name, '')}.to_json)
|
145
|
-
extends = URI.escape(args.fetch(:extends,
|
141
|
+
extends = URI.escape(args.fetch(:extends, []).to_json)
|
146
142
|
filter = URI.escape(args.fetch(:filter, filter).to_json)
|
143
|
+
where = URI.escape(args.fetch(:where, '').to_json)
|
147
144
|
page = args.fetch(:page, 1)
|
148
145
|
per_page = args.fetch(:per_page, 100)
|
149
146
|
|
150
|
-
response =
|
147
|
+
response = get_response("/#{api_version}/alarms/search?page=#{page}&per_page=#{per_page}&scopes=#{scopes}&search=#{search}&extends=#{extends}&filter=#{filter}&where=#{where}&access_token=#{access_token}")
|
151
148
|
|
152
149
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
153
150
|
response.code == '200' && generic_response.has_key?(:alarms) ? generic_response.alarms.map(&:alarm) : generic_response
|
@@ -15,7 +15,7 @@ module Xcal
|
|
15
15
|
# api.command_notifications
|
16
16
|
def get_paged_command_notifications(args = {})
|
17
17
|
args.merge!(access_token: access_token)
|
18
|
-
response =
|
18
|
+
response = get_response("/#{api_version}/command_notifications?#{URI.encode_www_form(args)}")
|
19
19
|
|
20
20
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
21
21
|
if response.code == '200' && generic_response.has_key?(:remote_commands)
|
@@ -23,8 +23,6 @@ module Xcal
|
|
23
23
|
else
|
24
24
|
generic_response
|
25
25
|
end
|
26
|
-
|
27
|
-
# TODO Add caching
|
28
26
|
end
|
29
27
|
alias :command_notifications :get_paged_command_notifications
|
30
28
|
|
@@ -10,7 +10,7 @@ module Xcal
|
|
10
10
|
# api.get_custom_queries
|
11
11
|
# api.custom_queries
|
12
12
|
def get_custom_queries
|
13
|
-
response =
|
13
|
+
response = get_response("/#{api_version}/custom_queries?#{URI.encode_www_form(:access_token => access_token)}")
|
14
14
|
|
15
15
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
16
16
|
if response.code == '200'
|
@@ -18,8 +18,6 @@ module Xcal
|
|
18
18
|
else
|
19
19
|
generic_response
|
20
20
|
end
|
21
|
-
|
22
|
-
# TODO Add caching
|
23
21
|
end
|
24
22
|
alias :custom_queries :get_custom_queries
|
25
23
|
|
@@ -67,7 +65,7 @@ module Xcal
|
|
67
65
|
# ==== Examples
|
68
66
|
# api.find_custom_query(3, 'ChartSeries')
|
69
67
|
def find_custom_query(referencable_id, referencable_type)
|
70
|
-
response =
|
68
|
+
response = get_response("/#{api_version}/custom_queries/find/#{referencable_id}/#{referencable_type}?#{URI.encode_www_form(:access_token => access_token)}")
|
71
69
|
|
72
70
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
73
71
|
response.code == '200' ? Xcal::Parktronic::GenericResponse.new(generic_response.custom_query, self) : generic_response
|
@@ -17,7 +17,7 @@ module Xcal
|
|
17
17
|
# api.events_history(host_impacted: 'google.com', service_impacted: 'http')
|
18
18
|
def get_paged_event_history_items(args = {})
|
19
19
|
args.merge!(access_token: access_token)
|
20
|
-
response =
|
20
|
+
response = get_response("/#{api_version}/events_history?#{URI.encode_www_form(args)}")
|
21
21
|
|
22
22
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
23
23
|
if response.code == '200' && generic_response.has_key?(:event_history_items)
|
@@ -25,8 +25,6 @@ module Xcal
|
|
25
25
|
else
|
26
26
|
generic_response
|
27
27
|
end
|
28
|
-
|
29
|
-
# TODO Add caching
|
30
28
|
end
|
31
29
|
alias :events_history :get_paged_event_history_items
|
32
30
|
end
|
@@ -13,12 +13,10 @@ module Xcal
|
|
13
13
|
# api.get_event(1)
|
14
14
|
# api.event(1)
|
15
15
|
def get_event(id)
|
16
|
-
response =
|
16
|
+
response = get_response("/#{api_version}/events/#{id}?access_token=#{access_token}")
|
17
17
|
|
18
18
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
19
19
|
response.code == '200' ? Xcal::Parktronic::GenericResponse.new(generic_response.event, self) : generic_response
|
20
|
-
|
21
|
-
# TODO Add caching
|
22
20
|
end
|
23
21
|
alias :event :get_event
|
24
22
|
|
@@ -53,7 +51,7 @@ module Xcal
|
|
53
51
|
# api.get_event_tags(2)
|
54
52
|
# api.event_tags(2)
|
55
53
|
def get_event_tags(id)
|
56
|
-
response =
|
54
|
+
response = get_response("/#{api_version}/events/#{id}/tags?#{URI.encode_www_form(access_token: access_token)}")
|
57
55
|
|
58
56
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body, self)
|
59
57
|
response.code == '200' && generic_response.has_key?(:tags) ? generic_response.tags.map(&:tag) : generic_response
|
@@ -16,7 +16,7 @@ module Xcal
|
|
16
16
|
# api.metrics(page: 2, per_page: 5)
|
17
17
|
def get_paged_metrics(args = {})
|
18
18
|
args.merge!(:access_token => access_token)
|
19
|
-
response =
|
19
|
+
response = get_response("/#{api_version}/metrics?#{URI.encode_www_form(args)}")
|
20
20
|
|
21
21
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
22
22
|
if response.code == '200'
|
@@ -24,8 +24,6 @@ module Xcal
|
|
24
24
|
else
|
25
25
|
generic_response
|
26
26
|
end
|
27
|
-
|
28
|
-
# TODO Add caching
|
29
27
|
end
|
30
28
|
alias :metrics :get_paged_metrics
|
31
29
|
|
@@ -38,42 +36,28 @@ module Xcal
|
|
38
36
|
# ==== Examples
|
39
37
|
# api.get_metric(2)
|
40
38
|
def get_metric(id)
|
41
|
-
response =
|
39
|
+
response = get_response("/#{api_version}/metrics/#{id}?access_token=#{access_token}")
|
42
40
|
|
43
41
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
44
42
|
response.code == '200' ? Xcal::Parktronic::GenericResponse.new(generic_response.metric, self) : generic_response
|
45
|
-
|
46
|
-
# TODO Add caching
|
47
43
|
end
|
48
44
|
alias :metric :get_metric
|
49
45
|
|
50
|
-
#
|
51
|
-
#
|
52
|
-
# Alarm argument should be a hash of Alarm + Events data.
|
46
|
+
# Fetches metric with specific name
|
53
47
|
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
# +metric+ :
|
57
|
-
# {
|
58
|
-
# :name => 'metric name',
|
59
|
-
# :originating_system => 'Source System',
|
60
|
-
# :impact_level => 'low',
|
61
|
-
# :tag_list => %w(taga tagb)
|
62
|
-
# }
|
63
|
-
#
|
64
|
-
# Example of events array:
|
65
|
-
# +events+ :
|
66
|
-
# [
|
67
|
-
# {
|
68
|
-
# :subject => 'EventSubj',
|
69
|
-
# :description => 'EventDesc',
|
70
|
-
# :host_impacted => 'host',
|
71
|
-
# :initiated_at => '2013-11-22T01:00:24Z',
|
72
|
-
# :service_impacted => 'EventSvc',
|
73
|
-
# :incident_status => 'CRITICAL'
|
74
|
-
# }
|
75
|
-
# ]
|
48
|
+
# ==== Parameters
|
49
|
+
# * +name+ metric name
|
76
50
|
#
|
51
|
+
# ==== Examples
|
52
|
+
# api.get_metric_by_name('Errors Summary')
|
53
|
+
def get_metric_by_name(name)
|
54
|
+
response = get_response("/#{api_version}/metrics/by_name?#{URI.encode_www_form(access_token: access_token, name: name)}")
|
55
|
+
|
56
|
+
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
57
|
+
response.code == '200' ? Xcal::Parktronic::GenericResponse.new(generic_response.metric, self) : generic_response
|
58
|
+
end
|
59
|
+
alias :metric_by_name :get_metric_by_name
|
60
|
+
|
77
61
|
|
78
62
|
# Posts new metric
|
79
63
|
#
|
@@ -84,11 +68,10 @@ module Xcal
|
|
84
68
|
#
|
85
69
|
# ==== Examples
|
86
70
|
# metric_params = { name: 'metric name', description: 'metric description', created_at: Time.now }
|
87
|
-
# metric_value_1 = { value: 2,
|
88
|
-
# metric_value_2 = { value: 4,
|
71
|
+
# metric_value_1 = { value: 2, custom_timestamp: (Time.now - 240)}
|
72
|
+
# metric_value_2 = { value: 4, custom_timestamp: (Time.now - 120)}
|
89
73
|
# device_error_1 = { timestamp: (Time.now() - 120), value: 5}
|
90
74
|
# api.post_metric( metric: metric_params, metric_values: [metric_value_1, metric_value_2], device_error: [device_error_1] )
|
91
|
-
# TODO check this method!
|
92
75
|
def post_metric(args = {})
|
93
76
|
request = Net::HTTP::Post.new("/#{api_version}/metrics", 'Content-Type' => 'application/json')
|
94
77
|
request.body = { access_token: access_token, metric: args[:metric], metric_values: args[:metric_values], device_errors: [args[:device_errors]] }.to_json
|
@@ -11,7 +11,7 @@ module Xcal
|
|
11
11
|
# Call example:
|
12
12
|
# alarm(3).get_alarm_actions
|
13
13
|
def get_alarm_actions
|
14
|
-
response = client.
|
14
|
+
response = client.get_response("/#{client.api_version}/alarms/#{id}/alarm_actions?#{URI.encode_www_form(access_token: client.access_token)}")
|
15
15
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body, client)
|
16
16
|
|
17
17
|
if response.code == '200' && generic_response.has_key?(:alarm_actions)
|
@@ -26,17 +26,14 @@ module Xcal
|
|
26
26
|
# Accepted attributes:
|
27
27
|
# +id+ alarm_action ID
|
28
28
|
def get_alarm_action(alarm_action_id)
|
29
|
-
response = client.
|
29
|
+
response = client.get_response("/#{client.api_version}/alarms/#{id}/alarm_actions/#{alarm_action_id}?access_token=#{client.access_token}")
|
30
30
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body, client)
|
31
31
|
|
32
32
|
if response.code == '200' && generic_response.has_key?(:alarm_action)
|
33
33
|
generic_response.alarm_action
|
34
34
|
else
|
35
|
-
#TODO think, maybe return false or nil or 'Record not found?'
|
36
35
|
generic_response
|
37
36
|
end
|
38
|
-
|
39
|
-
# TODO Add caching
|
40
37
|
end
|
41
38
|
|
42
39
|
# Posts new alarm
|
@@ -16,7 +16,7 @@ module Xcal
|
|
16
16
|
# +per_page+ per page value, defaults to 100
|
17
17
|
def get_paged_device_errors(args = {})
|
18
18
|
args.merge!(:access_token => client.access_token)
|
19
|
-
response = client.
|
19
|
+
response = client.get_response("/#{client.api_version}/metrics/#{id}/device_errors?#{URI.encode_www_form(args)}")
|
20
20
|
|
21
21
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body, client)
|
22
22
|
if response.code == '200' && generic_response.has_key?(:device_errors)
|
@@ -16,7 +16,7 @@ module Xcal
|
|
16
16
|
# +per_page+ per page value, defaults to 100
|
17
17
|
def get_paged_events(args = {})
|
18
18
|
args.merge!(:access_token => client.access_token)
|
19
|
-
response = client.
|
19
|
+
response = client.get_response("/#{client.api_version}/alarms/#{id}/events?#{URI.encode_www_form(args)}")
|
20
20
|
|
21
21
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body, client)
|
22
22
|
response.code == '200' && generic_response.has_key?(:events) ? generic_response.events.map(&:event) : generic_response
|
@@ -29,7 +29,7 @@ module Xcal
|
|
29
29
|
# Call example:
|
30
30
|
# alarm(id).get_all_events
|
31
31
|
def get_all_events
|
32
|
-
response = client.
|
32
|
+
response = client.get_response("/#{client.api_version}/alarms/#{id}/events?#{URI.encode_www_form(access_token: client.access_token)}")
|
33
33
|
|
34
34
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body, client)
|
35
35
|
response.code == '200' && generic_response.has_key?(:events) ? generic_response.events.map(&:event) : generic_response
|
@@ -16,7 +16,7 @@ module Xcal
|
|
16
16
|
# +per_page+ per page value, defaults to 100
|
17
17
|
def get_paged_metric_values(args = {})
|
18
18
|
args.merge!(:access_token => client.access_token)
|
19
|
-
response = client.
|
19
|
+
response = client.get_response("/#{client.api_version}/metrics/#{id}/metric_values?#{URI.encode_www_form(args)}")
|
20
20
|
|
21
21
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body, client)
|
22
22
|
if response.code == '200' && generic_response.has_key?(:metric_values)
|
@@ -15,7 +15,7 @@ module Xcal
|
|
15
15
|
# api.outages
|
16
16
|
def get_paged_outages(args = {})
|
17
17
|
args.merge!(access_token: access_token)
|
18
|
-
response =
|
18
|
+
response = get_response("/#{api_version}/outages?#{URI.encode_www_form(args)}")
|
19
19
|
|
20
20
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
21
21
|
if response.code == '200' && generic_response.has_key?(:high_impact_incidents)
|
@@ -23,8 +23,6 @@ module Xcal
|
|
23
23
|
else
|
24
24
|
generic_response
|
25
25
|
end
|
26
|
-
|
27
|
-
# TODO Add caching
|
28
26
|
end
|
29
27
|
alias :outages :get_paged_outages
|
30
28
|
end
|
@@ -15,10 +15,11 @@ module Xcal
|
|
15
15
|
# ==== Examples
|
16
16
|
# api.get_paged_stack_changes
|
17
17
|
# api.stack_changes(element: 'TEST', page: 1, per_page: 5)
|
18
|
-
# TODO FIX time_range param, need pass it as json
|
19
18
|
def get_paged_stack_changes(args = {})
|
20
19
|
args.merge!(access_token: access_token)
|
21
|
-
|
20
|
+
args[:time_range] = args[:time_range].to_json if args[:time_range]
|
21
|
+
|
22
|
+
response = get_response("/#{api_version}/stack_changes?#{URI.encode_www_form(args)}")
|
22
23
|
|
23
24
|
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
24
25
|
if response.code == '200' && generic_response.has_key?(:stack_changes)
|
@@ -26,8 +27,6 @@ module Xcal
|
|
26
27
|
else
|
27
28
|
generic_response
|
28
29
|
end
|
29
|
-
|
30
|
-
# TODO Add caching
|
31
30
|
end
|
32
31
|
alias :stack_changes :get_paged_stack_changes
|
33
32
|
|
@@ -30,6 +30,13 @@ describe Xcal::Parktronic::ApiClient do
|
|
30
30
|
|
31
31
|
expect(metric.id.to_s).to eql('7')
|
32
32
|
end
|
33
|
+
|
34
|
+
it 'should find metric by name' do
|
35
|
+
metric = nil
|
36
|
+
expect { metric = api_http_client.get_metric_by_name('Metric Name') }.not_to raise_error
|
37
|
+
|
38
|
+
expect(metric.id.to_s).to eql('7')
|
39
|
+
end
|
33
40
|
end
|
34
41
|
|
35
42
|
context 'posting' do
|
@@ -89,4 +96,4 @@ describe Xcal::Parktronic::ApiClient do
|
|
89
96
|
end
|
90
97
|
|
91
98
|
end
|
92
|
-
end
|
99
|
+
end
|
@@ -6,6 +6,7 @@ describe Xcal::Parktronic::ApiClient do
|
|
6
6
|
let(:api_invalid_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://api.mock') }
|
7
7
|
|
8
8
|
context 'alarms route' do
|
9
|
+
|
9
10
|
describe '#get_alarm_actions' do
|
10
11
|
it 'should return alarm_actions for alarm' do
|
11
12
|
expect{ api_http_client.get_alarm(2).get_alarm_actions}.not_to raise_error
|
@@ -6,6 +6,7 @@ describe Xcal::Parktronic::ApiClient do
|
|
6
6
|
let(:api_invalid_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://api.mock') }
|
7
7
|
|
8
8
|
context 'alarms route' do
|
9
|
+
|
9
10
|
describe '#get_all_events' do
|
10
11
|
it 'should return events for alarm' do
|
11
12
|
expect{ api_http_client.alarm(2).get_all_events }.not_to raise_error
|
data/xcal-parktronic.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcal-parktronic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vitaliy Omelchenko
|
@@ -10,104 +10,118 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-08-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hashie
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: dalli
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
27
41
|
- !ruby/object:Gem::Version
|
28
42
|
version: '0'
|
29
43
|
- !ruby/object:Gem::Dependency
|
30
44
|
name: bundler
|
31
45
|
requirement: !ruby/object:Gem::Requirement
|
32
46
|
requirements:
|
33
|
-
- - ~>
|
47
|
+
- - "~>"
|
34
48
|
- !ruby/object:Gem::Version
|
35
49
|
version: '1.3'
|
36
50
|
type: :development
|
37
51
|
prerelease: false
|
38
52
|
version_requirements: !ruby/object:Gem::Requirement
|
39
53
|
requirements:
|
40
|
-
- - ~>
|
54
|
+
- - "~>"
|
41
55
|
- !ruby/object:Gem::Version
|
42
56
|
version: '1.3'
|
43
57
|
- !ruby/object:Gem::Dependency
|
44
58
|
name: rb-readline
|
45
59
|
requirement: !ruby/object:Gem::Requirement
|
46
60
|
requirements:
|
47
|
-
- -
|
61
|
+
- - ">="
|
48
62
|
- !ruby/object:Gem::Version
|
49
63
|
version: '0'
|
50
64
|
type: :development
|
51
65
|
prerelease: false
|
52
66
|
version_requirements: !ruby/object:Gem::Requirement
|
53
67
|
requirements:
|
54
|
-
- -
|
68
|
+
- - ">="
|
55
69
|
- !ruby/object:Gem::Version
|
56
70
|
version: '0'
|
57
71
|
- !ruby/object:Gem::Dependency
|
58
72
|
name: rake
|
59
73
|
requirement: !ruby/object:Gem::Requirement
|
60
74
|
requirements:
|
61
|
-
- -
|
75
|
+
- - ">="
|
62
76
|
- !ruby/object:Gem::Version
|
63
77
|
version: '0'
|
64
78
|
type: :development
|
65
79
|
prerelease: false
|
66
80
|
version_requirements: !ruby/object:Gem::Requirement
|
67
81
|
requirements:
|
68
|
-
- -
|
82
|
+
- - ">="
|
69
83
|
- !ruby/object:Gem::Version
|
70
84
|
version: '0'
|
71
85
|
- !ruby/object:Gem::Dependency
|
72
86
|
name: rspec
|
73
87
|
requirement: !ruby/object:Gem::Requirement
|
74
88
|
requirements:
|
75
|
-
- -
|
89
|
+
- - ">="
|
76
90
|
- !ruby/object:Gem::Version
|
77
91
|
version: '0'
|
78
92
|
type: :development
|
79
93
|
prerelease: false
|
80
94
|
version_requirements: !ruby/object:Gem::Requirement
|
81
95
|
requirements:
|
82
|
-
- -
|
96
|
+
- - ">="
|
83
97
|
- !ruby/object:Gem::Version
|
84
98
|
version: '0'
|
85
99
|
- !ruby/object:Gem::Dependency
|
86
100
|
name: webmock
|
87
101
|
requirement: !ruby/object:Gem::Requirement
|
88
102
|
requirements:
|
89
|
-
- -
|
103
|
+
- - ">="
|
90
104
|
- !ruby/object:Gem::Version
|
91
105
|
version: '0'
|
92
106
|
type: :development
|
93
107
|
prerelease: false
|
94
108
|
version_requirements: !ruby/object:Gem::Requirement
|
95
109
|
requirements:
|
96
|
-
- -
|
110
|
+
- - ">="
|
97
111
|
- !ruby/object:Gem::Version
|
98
112
|
version: '0'
|
99
113
|
- !ruby/object:Gem::Dependency
|
100
114
|
name: sinatra
|
101
115
|
requirement: !ruby/object:Gem::Requirement
|
102
116
|
requirements:
|
103
|
-
- -
|
117
|
+
- - ">="
|
104
118
|
- !ruby/object:Gem::Version
|
105
119
|
version: '0'
|
106
120
|
type: :development
|
107
121
|
prerelease: false
|
108
122
|
version_requirements: !ruby/object:Gem::Requirement
|
109
123
|
requirements:
|
110
|
-
- -
|
124
|
+
- - ">="
|
111
125
|
- !ruby/object:Gem::Version
|
112
126
|
version: '0'
|
113
127
|
description: OIV API gem
|
@@ -117,8 +131,8 @@ executables: []
|
|
117
131
|
extensions: []
|
118
132
|
extra_rdoc_files: []
|
119
133
|
files:
|
120
|
-
- .gitignore
|
121
|
-
- .travis.yml
|
134
|
+
- ".gitignore"
|
135
|
+
- ".travis.yml"
|
122
136
|
- Gemfile
|
123
137
|
- LICENSE.txt
|
124
138
|
- README.md
|
@@ -193,17 +207,17 @@ require_paths:
|
|
193
207
|
- lib
|
194
208
|
required_ruby_version: !ruby/object:Gem::Requirement
|
195
209
|
requirements:
|
196
|
-
- -
|
210
|
+
- - ">="
|
197
211
|
- !ruby/object:Gem::Version
|
198
212
|
version: 1.9.2
|
199
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
214
|
requirements:
|
201
|
-
- -
|
215
|
+
- - ">="
|
202
216
|
- !ruby/object:Gem::Version
|
203
217
|
version: '0'
|
204
218
|
requirements: []
|
205
219
|
rubyforge_project:
|
206
|
-
rubygems_version: 2.
|
220
|
+
rubygems_version: 2.2.2
|
207
221
|
signing_key:
|
208
222
|
specification_version: 4
|
209
223
|
summary: Get easy access to the most OIV data
|