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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZGJhY2FjMDA3YzIwYWY2ZGVjN2IwNTliNmJjMWNjZTZjYmU3NGU0Nw==
5
- data.tar.gz: !binary |-
6
- NmE2MzU3Mzk2NWJiZjk2ZTkxOWRhYzk4ZWE4OWM0NmM4MWVlNTE0Zg==
7
- !binary "U0hBNTEy":
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
@@ -2,3 +2,4 @@ source 'http://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in xcal-parktronic.gemspec
4
4
  gemspec
5
+ gem 'dalli'
data/README.md CHANGED
@@ -27,26 +27,28 @@ http://rubydoc.info/gems/xcal-parktronic/frames
27
27
 
28
28
  ## Usage
29
29
 
30
- # Initialization:
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
- # Alarms:
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
- # Outages:
45
+ ### Outages:
44
46
  ```ruby
45
47
  api.outages
46
48
  api.outages(page: 2, per_page: 5)
47
49
  ```
48
50
 
49
- # Stack changes
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
- # Events history
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
- # Command notifications (remote commands)
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
- # Events
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
- # Alarm Actions
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
- # Custom Queries
91
+ ### Custom Queries
90
92
  ```ruby
91
93
  api.get_custom_queries
92
94
  api.post_custom_query
@@ -30,3 +30,7 @@ require 'xcal/parktronic/exceptions'
30
30
  # response and client
31
31
  require 'xcal/parktronic/generic_response'
32
32
  require 'xcal/parktronic/api_client'
33
+
34
+ # shortcut
35
+ ParkClient = Xcal::Parktronic::ApiClient
36
+
@@ -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 = http.get("/#{api_version}/alarms?#{URI.encode_www_form(args)}")
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
- # TODO Add caching
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 = http.get("/#{api_version}/alarms/#{id}?access_token=#{access_token}")
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 = http.get("/#{api_version}/alarms/#{id}/tags?#{URI.encode_www_form(access_token: access_token)}")
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, custom_extends).to_json)
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 = http.get("/#{api_version}/alarms/search?page=#{page}&per_page=#{per_page}&scopes=#{scopes}&search=#{search}&extends=#{extends}&filter=#{filter}&access_token=#{access_token}")
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 = http.get("/#{api_version}/command_notifications?#{URI.encode_www_form(args)}")
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 = http.get("/#{api_version}/custom_queries?#{URI.encode_www_form(:access_token => access_token)}")
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 = http.get("/#{api_version}/custom_queries/find/#{referencable_id}/#{referencable_type}?#{URI.encode_www_form(:access_token => access_token)}")
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 = http.get("/#{api_version}/events_history?#{URI.encode_www_form(args)}")
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 = http.get("/#{api_version}/events/#{id}?access_token=#{access_token}")
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 = http.get("/#{api_version}/events/#{id}/tags?#{URI.encode_www_form(access_token: access_token)}")
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 = http.get("/#{api_version}/metrics?#{URI.encode_www_form(args)}")
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 = http.get("/#{api_version}/metrics/#{id}?access_token=#{access_token}")
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
- # Posts new metric
51
- #
52
- # Alarm argument should be a hash of Alarm + Events data.
46
+ # Fetches metric with specific name
53
47
  #
54
- # Example of metric data:
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, timestamp: (Time.now - 240)}
88
- # metric_value_2 = { value: 4, timestamp: (Time.now - 120)}
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.http.get("/#{client.api_version}/alarms/#{id}/alarm_actions?#{URI.encode_www_form(access_token: client.access_token)}")
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.http.get("/#{client.api_version}/alarms/#{id}/alarm_actions/#{alarm_action_id}?access_token=#{client.access_token}")
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.http.get("/#{client.api_version}/metrics/#{id}/device_errors?#{URI.encode_www_form(args)}")
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.http.get("/#{client.api_version}/alarms/#{id}/events?#{URI.encode_www_form(args)}")
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.http.get("/#{client.api_version}/alarms/#{id}/events?#{URI.encode_www_form(access_token: client.access_token)}")
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.http.get("/#{client.api_version}/metrics/#{id}/metric_values?#{URI.encode_www_form(args)}")
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 = http.get("/#{api_version}/outages?#{URI.encode_www_form(args)}")
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
- response = http.get("/#{api_version}/stack_changes?#{URI.encode_www_form(args)}")
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
 
@@ -1,5 +1,5 @@
1
1
  module Xcal
2
2
  module Parktronic
3
- VERSION = '1.0.0'
3
+ VERSION = '1.0.1'
4
4
  end
5
5
  end
@@ -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
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = '>=1.9.2'
22
22
 
23
23
  spec.add_dependency 'hashie'
24
+ spec.add_dependency 'dalli'
24
25
 
25
26
  spec.add_development_dependency 'bundler', '~> 1.3'
26
27
  spec.add_development_dependency 'rb-readline'
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.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-01-29 00:00:00.000000000 Z
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.0.3
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