atsd 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0166a8f99dff59d83cfb254463d9bdbacb48281
4
- data.tar.gz: ffd582313131f72cfbdbe783445d2d3dd559f7bc
3
+ metadata.gz: bb6d450775a1e2535c2784af0377e160899f2bc1
4
+ data.tar.gz: a5b7413629c45872b82d571ac0c2608aedf0c525
5
5
  SHA512:
6
- metadata.gz: 7971fd36026b618b11c71648d286fe90b945f66ed50fe86fa7cc22322ebd865dcaebc7067211b0b57a5aedced796908b259a838d040e3aa7b7c20b1924858a53
7
- data.tar.gz: 2e23baf470fc966dc4876716dd9cbacdda922cc2ecc3344b0e9d34caec287c3b2240eeebd34cce58b3a941c03c4bc6107f784e3dc282c5dd4af0babdff651d66
6
+ metadata.gz: 634955edbc7dd7e51050591afac40796d24603be5a41aed533686e605ce466b7294dbfaef955d1e4e38080837e942ea073788befa777be88a3be98c7a57996d9
7
+ data.tar.gz: 4d0b69e1b4961a08cb69004797d6828d4819e2473c65ddaaeba6095d4c6a0698b3105d48e163bb99f70020a088ac479337ed4f2874638ea8d501698fcbf39fda
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  The ATSD Client for Ruby enables Ruby developers
4
4
  to easily read and write statistics and metadata
5
- from Axibase Time-Series Database.
5
+ from Axibase Time Series Database.
6
6
 
7
7
  API documentation: https://github.com/axibase/atsd-docs/blob/master/api/README.md
8
8
 
@@ -251,6 +251,21 @@ Inserting CSV data from file:
251
251
  series_service.csv_insert('sensor-1', File.read('/path/to/data.csv'), { :user => 'beta' })
252
252
  ```
253
253
 
254
+ Retrieving series values CSV and JSON format:
255
+
256
+ ```ruby
257
+ series_service.url_query('json','nurswgvml007','cpu_busy', :startDate => 'previous_minute')
258
+ # => {"series"=>
259
+ # [{"entity"=>"nurswgvml007",
260
+ # "metric"=>"cpu_busy",
261
+ # "tags"=>{},
262
+ # "type"=>"HISTORY",
263
+ # "aggregate"=>{"type"=>"DETAIL"},
264
+ # "data"=>[{"t"=>1464688814000, "v"=>3.03}, {"t"=>1464688830000, "v"=>5}, {"t"=>1464688846000, "v"=>9}, {"t"=>1464688862000, "v"=>4.04}, {"t"=>1464688878000, "v"=>5.05}]}]}
265
+ series_service.url_query('csv','nurswgvml007','cpu_busy', :startDate => 'previous_minute')
266
+ => "time,entity,metric,value\r\n1464688862000,nurswgvml007,cpu_busy,4.04\r\n1464688878000,nurswgvml007,cpu_busy,5.05\r\n1464688894000,nurswgvml007,cpu_busy,10.2\r\n1464688910000,nurswgvml007,cpu_busy,45.95\r\n1464688926000,nurswgvml007,cpu_busy,21.36\r\n1464688942000,nurswgvml007,cpu_busy,4.04\r\n"
267
+ ```
268
+
254
269
  #### Properties Service
255
270
 
256
271
  ```ruby
@@ -268,8 +283,22 @@ properties_service.query('sensor-1', 'sensor_type', :start_date => "2015-11-17T1
268
283
  # :key=>{"id"=>"ch-15"}}]
269
284
 
270
285
  properties_service.delete(property)
271
- properties_service.query('sensor-1', 'sensor_type', :start_date => "2015-11-17T17:00:00Z").execute
286
+ properties_service.query('sensor-1', 'sensor_type', :start_date => '2015-11-17T17:00:00Z').execute
272
287
  # => []
288
+
289
+ properties_service.type_query('sensor-1')
290
+ # => ["com.axibase.config",
291
+ # "configuration",
292
+ # "cpu",
293
+ # "disk",
294
+ # "sw.vmw.vm",
295
+ # "system",
296
+
297
+ properties_service.url_query('nurswgvml007','network')
298
+ # => [{"type"=>"network", "entity"=>"nurswgvml007", "key"=>{"id"=>"eth1"}, "tags"=>{"network_i/o.read-kb/s"=>"261.9", "network_i/o.write-kb/s"=>"209.9", "network_packets.read/s"=>"354.4", "network_packets.write/s"=>"339.4"}, "timestamp"=>1464680627000},
299
+ # {"type"=>"network", "entity"=>"nurswgvml007", "key"=>{"id"=>"lo"}, "tags"=>{"network_i/o.read-kb/s"=>"2.7", "network_i/o.write-kb/s"=>"2.7", "network_packets.read/s"=>"6.7", "network_packets.write/s"=>"6.7"}, "timestamp"=>1464680627000}]
300
+
301
+
273
302
  ```
274
303
 
275
304
  #### Alerts Service
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ['Axibase Corporation']
11
11
  spec.email = ['atsd-api@axibase.com']
12
12
 
13
- spec.summary = %q{Axibase Time-Series Database Client for Ruby.}
14
- spec.description = %q{Axibase Time-Series Database Client for Ruby is an easy-to-use client for interfacing with ATSD metadata and data REST API services.}
13
+ spec.summary = %q{Axibase Time Series Database Client for Ruby.}
14
+ spec.description = %q{Axibase Time Series Database Client for Ruby is an easy-to-use client for interfacing with ATSD metadata and data REST API services.}
15
15
  spec.homepage = 'https://github.com/axibase/atsd-api-ruby/'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -3,7 +3,7 @@ require 'active_support/core_ext/hash/keys'
3
3
 
4
4
  module ATSD
5
5
 
6
- # HTTP(S) Client for Axibase Time-Series Database. Implements all REST methods
6
+ # HTTP(S) Client for Axibase Time Series Database. Implements all REST methods
7
7
  # of the API in a straightforward manner.
8
8
  class Client
9
9
 
@@ -47,6 +47,21 @@ module ATSD
47
47
  response.body
48
48
  end
49
49
 
50
+ # Retrieve series values for the specified entity, metric, and optional series tags in CSV and JSON format
51
+ #
52
+ # @param [String] format
53
+ # @param [String] entity
54
+ # @param [String] metric
55
+ # @param [Hash] parameters other query parameters
56
+ # @return [Array<Hash>] time series
57
+ # @raise [APIError]
58
+ def series_url_query(format, entity, metric, parameters)
59
+ url = "series/#{format}/#{entity}/#{metric}?"
60
+ parameters.each { |k, v| url << "&#{k}=#{v}" }
61
+ response = @connection.get url
62
+ response.body
63
+ end
64
+
50
65
  # Insert time series
51
66
  #
52
67
  # @param [Hash, Array<Hash>] series series or array of series
@@ -95,37 +110,27 @@ module ATSD
95
110
  # @return [Array<Hash>] array of properties
96
111
  # @raise [APIError]
97
112
  def properties_for_entity_and_type(entity, type)
98
- response = @connection.get "properties/query/#{entity}/types#{type}"
113
+ response = @connection.get "properties/#{entity}/types/#{type}"
99
114
  response.body
100
115
  end
101
116
 
102
- # Insert properties
117
+ # Returns array of property types for the entity.
103
118
  #
104
- # @param [Hash, Array<Hash>] properties property or array of properties
105
- # @return true
119
+ # @param [String] type
120
+ # @return [Array<Hash>] array of properties
106
121
  # @raise [APIError]
107
- def properties_insert(properties)
108
- @connection.post 'properties/insert', Utils.ensure_array(properties)
109
- true
122
+ def properties_for_entity(entity)
123
+ response = @connection.get "properties/#{entity}/types"
124
+ response.body
110
125
  end
111
126
 
112
- # Insert keys and delete keys by id or by partial key match in one request.
127
+ # Insert properties
113
128
  #
114
- # @param [Hash, Array<Hash>] insert properties to insert
115
- # @param [Hash, Array<Hash>] delete delete an array of properties for entity,
116
- # type, and optionally for specified keys
117
- # @param [Hash, Array<Hash>] delete_matchers delete rows that partially match the specified key.
118
- # 'createdBeforeTime’ specifies an optional time condition. The server should delete all keys
119
- # that have been created before the specified time. 'createdBeforeTime’ is specified in unix
120
- # milliseconds.
129
+ # @param [Hash, Array<Hash>] properties property or array of properties
121
130
  # @return true
122
131
  # @raise [APIError]
123
- def properties_batch(insert, delete, delete_matchers)
124
- @connection.patch 'properties', [
125
- { :action => 'insert', :properties => Utils.ensure_array(insert) },
126
- { :action => 'delete', :properties => Utils.ensure_array(delete) },
127
- { :action => 'delete-match', :matchers => Utils.ensure_array(delete_matchers) }
128
- ].select { |action| (action[:properties] || action[:matchers]).count > 0 }
132
+ def properties_insert(properties)
133
+ @connection.post 'properties/insert', Utils.ensure_array(properties)
129
134
  true
130
135
  end
131
136
 
@@ -135,16 +140,7 @@ module ATSD
135
140
  # @return true
136
141
  # @raise [APIError]
137
142
  def properties_delete(properties)
138
- properties_batch [], properties, []
139
- end
140
-
141
- # Delete rows that partially match the specified key
142
- #
143
- # @param [Hash, Array<Hash>] matchers
144
- # @return true
145
- # @raise [APIError]
146
- def properties_delete_match(matchers)
147
- properties_batch [], [], matchers
143
+ @connection.post 'properties/delete', Utils.ensure_array(properties)
148
144
  end
149
145
 
150
146
  # Query alerts
@@ -157,13 +153,23 @@ module ATSD
157
153
  response.body
158
154
  end
159
155
 
160
- # (De-)acknowledge and delete alerts
156
+ # (De-)acknowledge alerts
161
157
  #
162
158
  # @param [Hash, Array<Hash>] actions action or array of actions
163
159
  # @return [true]
164
160
  # @raise [APIError]
165
161
  def alerts_update(actions)
166
- @connection.patch 'alerts', Utils.ensure_array(actions)
162
+ @connection.post 'alerts/update', Utils.ensure_array(actions)
163
+ true
164
+ end
165
+
166
+ # Delete alerts
167
+ #
168
+ # @param [Hash, Array<Hash>] actions action or array of actions
169
+ # @return [true]
170
+ # @raise [APIError]
171
+ def alerts_delete(actions)
172
+ @connection.post 'alerts/delete', Utils.ensure_array(actions)
167
173
  true
168
174
  end
169
175
 
@@ -16,24 +16,6 @@ module ATSD
16
16
  query
17
17
  end
18
18
 
19
- # Acknowledge alerts
20
- #
21
- # @param [Array<Hash, Alert, Integer>, Hash, Alert, Integer] alerts
22
- # @return [self]
23
- # @raise [APIError]
24
- def acknowledge(alerts)
25
- alerts_acknowledge alerts, true
26
- end
27
-
28
- # De-acknowledge alerts
29
- #
30
- # @param [Array<Hash, Alert, Integer>, Hash, Alert, Integer] alerts
31
- # @return [self]
32
- # @raise [APIError]
33
- def de_acknowledge(alerts)
34
- alerts_acknowledge alerts, false
35
- end
36
-
37
19
  # Delete alerts
38
20
  #
39
21
  # @param [Array<Hash, Alert>, Hash, Alert] alerts
@@ -44,8 +26,7 @@ module ATSD
44
26
  { :id => id_for_alert(alert) }
45
27
  end
46
28
  return if alerts.count == 0
47
- @client.alerts_update :action => 'delete',
48
- :alerts => alerts
29
+ @client.alerts_delete alerts
49
30
  end
50
31
 
51
32
  # Create query builder for alert history.
@@ -60,18 +41,6 @@ module ATSD
60
41
 
61
42
  private
62
43
 
63
- def alerts_acknowledge(alerts, acknowledge)
64
- alerts = Utils.ensure_array(alerts).map do |alert|
65
- alert[:acknowledged] = acknowledge if alert.is_a? Hash
66
- { :id => id_for_alert(alert) }
67
- end
68
- return if alerts.count == 0
69
- @client.alerts_update :action => 'update',
70
- :fields => {:acknowledge => acknowledge},
71
- :alerts => alerts
72
- self
73
- end
74
-
75
44
  def id_for_alert(alert)
76
45
  case alert
77
46
  when Integer
@@ -33,6 +33,25 @@ module ATSD
33
33
  self
34
34
  end
35
35
 
36
+ # Returns an array of property types for the entity.
37
+ #
38
+ # @param [String] entity
39
+ # @return [self]
40
+ # @raise [APIError]
41
+ def type_query(entity)
42
+ @client.properties_for_entity(entity)
43
+ end
44
+
45
+ # Retrieve property records for the specified entity and type.
46
+ #
47
+ # @param [String] entity
48
+ # @param [String] type
49
+ # @return [self]
50
+ # @raise [APIError]
51
+ def url_query(entity, type)
52
+ @client.properties_for_entity_and_type(entity,type)
53
+ end
54
+
36
55
  # Delete properties.
37
56
  #
38
57
  # @param [Array<Property, Hash>, Property, Hash] properties
@@ -46,18 +65,5 @@ module ATSD
46
65
  @client.properties_delete(properties)
47
66
  self
48
67
  end
49
-
50
- # Delete rows that partially match the specified key
51
- #
52
- # @param [Hash, Array<Hash>] matchers
53
- # @return [self]
54
- # @raise [APIError]
55
- def delete_match(matchers)
56
- matchers = Utils.ensure_array(matchers).map do |m|
57
- m.camelize_keys
58
- end
59
- @client.properties_delete_match matchers
60
- self
61
- end
62
68
  end
63
69
  end
@@ -23,6 +23,17 @@ module ATSD
23
23
  query
24
24
  end
25
25
 
26
+ # Retrieve series values for the specified entity, metric, and optional series tags in CSV and JSON format.
27
+ #
28
+ # @param [String] format. Supported formats are csv and json
29
+ # @param [String] entity
30
+ # @param [String] metric
31
+ # @param [Hash] parameters other query parameters
32
+ # @return [Array<Hash>] time series
33
+ def url_query(format, entity, metric, parameters={})
34
+ @client.series_url_query(format, entity, metric, parameters)
35
+ end
36
+
26
37
  # Insert time series.
27
38
  #
28
39
  # @param [Array<Series, Hash>, Series, Hash] series
@@ -59,9 +70,9 @@ module ATSD
59
70
  # @param [String] payload Body - ready to be parsed by ATSD server
60
71
  # @return [Faraday::Response]
61
72
  # @raise [APIError]
62
- def self.post_payload(config,payload)
73
+ def self.post_payload(config, payload)
63
74
  url = config[:url]
64
- login, password = config[:login],config[:password]
75
+ login, password = config[:login], config[:password]
65
76
 
66
77
  @connection = Faraday.new url do |builder|
67
78
  builder.headers['User-Agent'] = "ATSD Ruby Client v#{VERSION}"
@@ -1,3 +1,3 @@
1
1
  module ATSD
2
- VERSION = '1.0.6'
2
+ VERSION = '1.0.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Axibase Corporation
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-30 00:00:00.000000000 Z
11
+ date: 2016-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -192,7 +192,7 @@ dependencies:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
194
  version: '4.0'
195
- description: Axibase Time-Series Database Client for Ruby is an easy-to-use client
195
+ description: Axibase Time Series Database Client for Ruby is an easy-to-use client
196
196
  for interfacing with ATSD metadata and data REST API services.
197
197
  email:
198
198
  - atsd-api@axibase.com
@@ -259,6 +259,6 @@ rubyforge_project:
259
259
  rubygems_version: 2.6.4
260
260
  signing_key:
261
261
  specification_version: 4
262
- summary: Axibase Time-Series Database Client for Ruby.
262
+ summary: Axibase Time Series Database Client for Ruby.
263
263
  test_files: []
264
264
  has_rdoc: