atsd 1.0.2 → 1.0.3

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: 743f931e95108681d4b1a2406db3501c14b78a66
4
- data.tar.gz: 19f72e28217eecfa35c64c5dc6abb067467d6f4c
3
+ metadata.gz: 6966f668083fa1ddfc4447cfd12ab2c187d9c149
4
+ data.tar.gz: 2a2195ada45085173516415e97b427453e36da42
5
5
  SHA512:
6
- metadata.gz: 6ba9b9e316ee783810bab3ac05f38b46e42aa98d76d73ee923e7d4637762ca988cc0c98c2516dbebc66d67c0c0064819a5f8f5df77b0826029687c59baade927
7
- data.tar.gz: 8f9ea0a7a2f5ffd1dfa5c806f335b3ddbd2a80e376c5538189320d83ba1596f6e4f253da80e1f09eaf16462f01d1506896899a1c2f093ed0f0ba29b11e8985ee
6
+ metadata.gz: db845e86a01054d31b0d49e7a1a85e775ecc678ff937de85b73452b83824469805dda3b00662436718a08b1bb73aacfa7332563500ae51b334ef50f84079fc4e
7
+ data.tar.gz: c5560702a4400b30c6f2eec42373757160a93e0d46fc5bb1b9506c5447b63b764497006cc3b0dc0b74b309fd0e3459af9e479cba41e7faf41ccd376fdd8392d5
data/README.md CHANGED
@@ -18,7 +18,7 @@ Then execute:
18
18
 
19
19
  $ bundle
20
20
 
21
- Or install manually:
21
+ Alternatively, you can install atsd gem manually:
22
22
 
23
23
  $ gem install atsd
24
24
 
@@ -65,7 +65,7 @@ Or install manually:
65
65
 
66
66
  ## Usage
67
67
 
68
- To start using the gem you need to create an ATSD instance:
68
+ To start using the gem you need to create an `ATSD` class instance:
69
69
 
70
70
  ```ruby
71
71
  require 'atsd'
@@ -79,70 +79,63 @@ atsd = ATSD.new :url => "#{API_ENDPOINT}/api/v1",
79
79
 
80
80
  #### Authorization
81
81
  In order to use the API you need to specify `:basic_auth` option in one
82
- of the following forms:
82
+ of the following ways:
83
83
 
84
84
  - `"login:password"`
85
85
  - `{ :login => 'login', :password => 'password' }`
86
86
 
87
87
  #### SSL
88
- ATSD requires a little extra configuration for users who want to use SSL/HTTPS.
89
- See [Faraday Wiki](https://github.com/lostisland/faraday/wiki/Setting-up-SSL-certificates) on how
90
- to setup SSL. As a quickfix you can specify `ssl: { verify: false }` option in the client.
88
+ Connecting to ATSD via SSL requires extra configuration if your ATSD instance runs on a self-signed SSL certificate.
89
+ See [Faraday Wiki](https://github.com/lostisland/faraday/wiki/Setting-up-SSL-certificates) on how to setup SSL.
90
+ As a workaround you can specify `ssl: { verify: false }` option in the client.
91
+
91
92
 
92
93
  #### Logging
93
94
 
94
95
  - To use a custom logger specify it in the `:logger` option.
95
- - To use default STDOUT logger set `:logger` option to `true`.
96
-
97
- #### Faraday Middleware
98
-
99
- ```ruby
100
- ATSD.new url: end_point, basic_auth: basic_auth do |builder|
101
- builder.insert_after(FaradayMiddleware::ParseJson, VCR::Middleware::Faraday)
102
- # ...
103
- end
104
- ```
96
+ - To use the default STDOUT logger set `:logger` option to `true`.
105
97
 
106
98
  ### Services
107
99
  Once you instantiated the ATSD class, you can use different services.
108
- Each service represents a particular entity in Axibase Time Series Database.
109
- There are 6 services: series, properties, alerts, metrics, entities and
110
- entity groups.
100
+ Each service represents a particular object type in Axibase Time Series Database.
101
+ The following services are currently implemented:
111
102
 
112
- See documentation for all available methods.
103
+ - series_service,
104
+ - properties_service,
105
+ - alerts_service,
106
+ - metrics_service,
107
+ - entities_service,
108
+ - entity_groups_service.
113
109
 
114
110
  #### Query builders
115
- Query objects created by some services (e.g. Series) provide convenient methods to build complex queries.
111
+ Query objects created by services provide convenient methods to build complex queries.
116
112
  They support method chaining and automatically translate snake_styled properties
117
113
  to CamelCase used in the API. For example, `end_time` property in ruby code becomes `endTime` in json request.
118
114
 
119
115
  #### Series Service
120
116
 
121
- Simple query:
117
+ Basic query:
122
118
 
123
119
  ```ruby
120
+ require 'time'
124
121
  series_service = atsd.series_service
125
122
  # => #<ATSD::SeriesService:0x007f82a4446c08
126
-
127
- query = series_service.query('ubuntu', 'meminfo.memfree')
128
- # => {:entity=>"ubuntu", :metric=>"meminfo.memfree"}
123
+ query = series_service.query('sensor-1', 'temperature', Time.parse("2015-11-17T12:00:00Z"), Time.parse("2015-11-17T19:00:00Z"))
124
+ # => {:entity=>"sensor-1", :metric=>"temperature", :start_time=>1447750800000, :end_time=>1447776000000}
129
125
 
130
126
  query.class
131
127
  # => ATSD::SeriesQuery
132
128
 
133
- query.end_time(Time.now)
134
- # => {:entity=>"ubuntu", :metric=>"meminfo.memfree", :end_time=>1428303004000}
135
-
136
129
  query.execute
137
- # => [{:entity=>"ubuntu",
138
- # :metric=>"meminfo.memfree",
130
+ # => [{:entity=>"sensor-1",
131
+ # :metric=>"temperature",
139
132
  # :tags=>{},
140
133
  # :type=>"HISTORY",
141
134
  # :aggregate=>{"type"=>"DETAIL"},
142
135
  # :data=>
143
- # [{"t"=>1428301869000, "v"=>78728.0},
144
- # {"t"=>1428301884000, "v"=>68676.0},
145
- # {"t"=>1428301899000, "v"=>66716.0},
136
+ # [{"t"=>1428301869000, "v"=>24.0},
137
+ # {"t"=>1428301884000, "v"=>23.0},
138
+ # {"t"=>1428301899000, "v"=>23.5},
146
139
  # ...
147
140
 
148
141
  query.result
@@ -150,50 +143,89 @@ query.result
150
143
 
151
144
  s = query.result.first
152
145
  s.entity
153
- # => "ubuntu"
146
+ # => "sensor-1"
154
147
  ```
155
148
 
156
- Complex query:
149
+ Aggregated query:
157
150
 
158
151
  ```ruby
159
152
  query.aggregate(types:[SeriesQuery::AggregateType::AVG], interval:{count:1, unit:SeriesQuery::Interval::HOUR})
160
- # => {:entity=>"ubuntu",
161
- # :metric=>"meminfo.memfree",
153
+ # => {:entity=>"sensor-1",
154
+ # :metric=>"temperature",
162
155
  # :end_time=>1428303004000,
163
156
  # :aggregate=>{:types=>["AVG"], :interval=>{:count=>1, :unit=>"HOUR"}}}
164
157
 
165
158
  query.execute
166
- # => [{:entity=>"ubuntu",
167
- # :metric=>"meminfo.memfree",
159
+ # => [{:entity=>"sensor-1",
160
+ # :metric=>"temperature",
168
161
  # :tags=>{},
169
162
  # :type=>"HISTORY",
170
163
  # :aggregate=>{"type"=>"AVG", "interval"=>{"count"=>1, "unit"=>"HOUR"}},
171
- # :data=>[{"t"=>1428300000000, "v"=>82615.05263157895}]}]
164
+ # :data=>[{"t"=>1428300000000, "v"=>23.57}]}]
172
165
  ```
173
166
 
174
167
  Query with Versions:
175
168
 
176
169
  ```ruby
177
- query = atsd.series_service.query("sensor-1", "temperature", Time.new(2015, 11, 17, 12, 0, 0), Time.new(2015, 11, 17, 19, 0, 0), {:versioned => true})
170
+ query = atsd.series_service.query("sensor-2", "pressure", Time.parse("2015-11-17T12:00:00Z"), Time.parse("2015-11-17T19:00:00Z"), {:versioned => true})
178
171
  query.execute
172
+ template = "%23s, %13s, %23s, %17s, %17s\n"
173
+ output = sprintf(template, "sample_time", "sample_value", "version_time", "version_source", "version_status")
174
+ query.result.each do |data|
175
+ samples = data.data.sort_by{|sample| sample["version"]["t"]}
176
+ samples.each {|sample| output << sprintf(template, Time.at(sample["t"]/1000).strftime("%Y-%m-%dT%H:%M:%SZ"), sample["v"], Time.at(sample["version"]["t"]/1000).strftime("%Y-%m-%dT%H:%M:%SZ"), sample["version"]["source"], sample["version"]["status"]) }
177
+ end
178
+ puts output
179
+ sample_time, sample_value, version_time, version_source, version_status
180
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-18T19:19:57Z, gateway-1, normal
181
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-18T19:19:57Z, gateway-1, error
182
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-18T19:22:05Z, gateway-1, normal
183
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-18T19:22:05Z, gateway-1, error
184
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-18T19:23:28Z, gateway-1, normal
185
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-18T19:23:28Z, gateway-1, error
186
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-18T19:36:18Z, gateway-1, normal
187
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-18T19:36:18Z, gateway-1, error
188
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-18T19:37:02Z, gateway-1, normal
189
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-18T19:37:02Z, gateway-1, error
190
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-18T20:41:10Z, gateway-1, normal
191
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-18T20:41:10Z, gateway-1, error
192
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-18T20:45:57Z, gateway-1, normal
193
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-18T20:45:57Z, gateway-1, error
194
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-19T11:25:40Z, gateway-1, normal
195
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-19T11:25:40Z, gateway-1, error
196
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-19T11:29:36Z, gateway-1, normal
197
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-19T11:29:36Z, gateway-1, error
198
+ 2015-11-17T17:00:00Z, 7.0, 2015-11-19T11:32:35Z, gateway-1, normal
199
+ 2015-11-17T18:00:00Z, 17.0, 2015-11-19T11:32:35Z, gateway-1, error
179
200
  ```
180
201
 
181
- Data Insertion:
202
+ Inserting series:
182
203
 
183
204
  ```ruby
184
205
  s = Series.new
185
- s.entity = 'ubuntu'
186
- s.metric = 'meminfo.memfree'
187
- s.data = [ {t: 100000000, v: 512} ]
206
+ s.entity = 'sensor-1'
207
+ s.metric = 'temperature'
208
+ s.data = [ {t: Time.now.to_i*1000, v: 22} ]
209
+ series_service.insert(s)
210
+ ```
211
+
212
+ Inserting series using Sample class:
213
+
214
+ ```ruby
215
+ s = Series.new
216
+ s.entity = 'sensor-1'
217
+ s.metric = 'pressure'
218
+ sample = Sample.new :t => Time.parse("2015-11-17T17:00:00Z"), :v => 7, :version => {:status => "normal", :source => "gateway-1"}
219
+ s.data = [ sample ]
188
220
  series_service.insert(s)
189
221
  ```
190
222
 
191
223
  Inserting Series with Versions:
192
224
 
193
225
  ```ruby
194
- sample_1 = Sample.new :t => Time.new(2015, 11, 17, 17, 0, 0), :v => 7, :version => {:status => "normal", :source => "gateway-1"}
195
- sample_2 = Sample.new :t => Time.new(2015, 11, 17, 18, 0, 0), :v => 17, :version => {:status => "error", :source => "gateway-1"}
196
- series = Series.new :entity => "sensor-1", :metric => "temperature", :data => [sample_1, sample_2]
226
+ sample_1 = Sample.new :t => Time.parse("2015-11-17T17:00:00Z"), :v => 7, :version => {:status => "normal", :source => "gateway-1"}
227
+ sample_2 = Sample.new :t => Time.parse("2015-11-17T18:00:00Z"), :v => 17, :version => {:status => "error", :source => "gateway-1"}
228
+ series = Series.new :entity => "sensor-1", :metric => "pressure", :data => [sample_1, sample_2]
197
229
  atsd.series_service.insert(series)
198
230
  ```
199
231
 
@@ -201,22 +233,22 @@ atsd.series_service.insert(series)
201
233
 
202
234
  data.csv contents:
203
235
  ```plain
204
- time, mem.info.memfree, meminfo.memused
205
- 1414789200000, 0.8, 0.0
206
- 1414789230000, 1.6, 1.0
207
- 1414789800000, 2.4, -3.0
208
- 1414800000000, 3.2, 23.0
209
- 1414861200000, 4.0, 7.0
210
- 1415134800000, 0.0, 0.8
211
- 1415800800000, 1.0, 1.6
212
- 1417244400000, -3.0, 2.4
213
- 1433106000000, 23.0, 3.2
214
- 1446238800000, 7.0, 4.0
236
+ time, pressure, temperature
237
+ 1447228800000, 39, 29.23
238
+ 1447315200000, 32, 29.24
239
+ 1447401600000, 40, 29.23
240
+ 1447488000000, 37, 29.25
241
+ 1447574400000, 39, 29.26
242
+ 1447660800000, 37, 29.21
243
+ 1447747200000, 38, 29.20
244
+ 1447833600000, 36, 29.23
245
+ 1447920000000, 37, 29.25
246
+ 1448006400000, 38, 29.25
215
247
  ```
216
248
 
217
- Inserting csv data example:
249
+ Inserting CSV data from file:
218
250
  ```ruby
219
- series_service.csv_insert('ubuntu', File.read('/path/to/data.csv'), { :user => 'beta' })
251
+ series_service.csv_insert('sensor-1', File.read('/path/to/data.csv'), { :user => 'beta' })
220
252
  ```
221
253
 
222
254
  #### Properties Service
@@ -226,21 +258,21 @@ properties_service = atsd.properties_service
226
258
  # => #<ATSD::PropertiesService:0x007f82a456e6f8
227
259
 
228
260
  property = Property.new
229
- property.entity = 'ubuntu'
230
- property.type = 'system'
231
- property.key = {"server_name":"server","user_name":"system"}
232
- property.tags = {"name.1": "value.1"}
261
+ property.entity = 'sensor-1'
262
+ property.type = 'sensor_type'
263
+ property.tags = {"location":"NUR","site":"building-1"}
264
+ property.keys = {"id": "ch-15"}
233
265
  properties_service.insert(property)
234
266
 
235
- properties_service.query('ubuntu', 'system').execute
236
- # => [{:type=>"system",
237
- # :entity=>"ubuntu",
238
- # :key=>{"server_name"=>"server", "user_name"=>"system"},
267
+ properties_service.query('sensor-1', 'sensor_type').execute
268
+ # => [{:type=>"sensor_type",
269
+ # :entity=>"sensor-1",
270
+ # :tags=>{"location"=>"NUR", "site"=>"building-1"},
239
271
  # :timestamp=>1428304255068,
240
- # :tags=>{"name.1"=>"value.1"}}]
272
+ # :keys=>{"id"=>"ch-15"}}]
241
273
 
242
274
  properties_service.delete(property)
243
- properties_service.query('ubuntu', 'system').execute
275
+ properties_service.query('sensor-1', 'sensor_type').execute
244
276
  # => []
245
277
  ```
246
278
 
@@ -256,7 +288,7 @@ alerts_service.query.execute
256
288
  # :text_value=>"447660",
257
289
  # :tags=>{},
258
290
  # :metric=>"meminfo.active",
259
- # :entity=>"ubuntu",
291
+ # :entity=>"sensor-1",
260
292
  # :severity=>3,
261
293
  # :rule=>"My rule!",
262
294
  # :repeat_count=>5,
@@ -269,7 +301,7 @@ alerts_service.query.execute
269
301
  # :text_value=>"447660",
270
302
  # :tags=>{},
271
303
  # :metric=>"meminfo.active",
272
- # :entity=>"ubuntu",
304
+ # :entity=>"sensor-1",
273
305
  # :severity=>3,
274
306
  # ...
275
307
  ```
@@ -298,25 +330,23 @@ metrics_service.list
298
330
  # ...
299
331
 
300
332
  metrics_service.entity_and_tags('df.disk_size')
301
- # => [{:entity=>"ubuntu", :tags=>{"file_system"=>"/dev/sda1", "mount_point"=>"/"}, :last_insert_time=>1428328928000},
302
- # {:entity=>"ubuntu",
303
- # :tags=>{"file_system"=>"none", "mount_point"=>"/sys/fs/cgroup"},
304
- # :last_insert_time=>1428328928000},
305
- # {:entity=>"ubuntu", :tags=>{"file_system"=>"none", "mount_point"=>"/run/lock"}, :last_insert_time=>1428328928000},
306
- # {:entity=>"ubuntu", :tags=>{"file_system"=>"none", "mount_point"=>"/run/shm"}, :last_insert_time=>1428328928000},
307
- # {:entity=>"ubuntu", :tags=>{"file_system"=>"none", "mount_point"=>"/run/user"}, :last_insert_time=>1428328928000},
308
- # {:entity=>"ubuntu", :tags=>{"file_system"=>"udev", "mount_point"=>"/dev"}, :last_insert_time=>1428328928000},
309
- # {:entity=>"ubuntu", :tags=>{"file_system"=>"tmpfs", "mount_point"=>"/run"}, :last_insert_time=>1428328928000}]
333
+ # => [{:entity=>"server-1", :tags=>{"file_system"=>"/dev/sda1", "mount_point"=>"/"}, :last_insert_time=>1428328928000},
334
+ # {:entity=>"server-1", :tags=>{"file_system"=>"none", "mount_point"=>"/sys/fs/cgroup"}, :last_insert_time=>1428328928000},
335
+ # {:entity=>"server-1", :tags=>{"file_system"=>"none", "mount_point"=>"/run/lock"}, :last_insert_time=>1428328928000},
336
+ # {:entity=>"server-1", :tags=>{"file_system"=>"none", "mount_point"=>"/run/shm"}, :last_insert_time=>1428328928000},
337
+ # {:entity=>"server-2", :tags=>{"file_system"=>"none", "mount_point"=>"/run/user"}, :last_insert_time=>1428328928000},
338
+ # {:entity=>"server-2", :tags=>{"file_system"=>"udev", "mount_point"=>"/dev"}, :last_insert_time=>1428328928000},
339
+ # {:entity=>"server-2", :tags=>{"file_system"=>"tmpfs", "mount_point"=>"/run"}, :last_insert_time=>1428328928000}]
310
340
 
311
341
  metric = Metric.new
312
342
  # => {}
313
- metric.name = "cpu_count"
314
- # => "cpu_count"
343
+ metric.name = "energy_usage"
344
+ # => "energy_usaget"
315
345
  metric.versioned = true
316
346
  # => true
317
347
  metrics_service.create_or_replace(metric)
318
- metrics_service.get("cpu_count")
319
- # => {:name=>"cpu_count", :enabled=>true, :data_type=>"FLOAT", :counter=>false, :persistent=>true, :tags=>{}, :time_precision=>"MILLISECONDS", :retention_interval=>0, :invalid_action=>"NONE", :versioned=>true}
348
+ metrics_service.get("energy_usage")
349
+ # => {:name=>"energy_usage", :enabled=>true, :data_type=>"FLOAT", :counter=>false, :persistent=>true, :tags=>{}, :time_precision=>"MILLISECONDS", :retention_interval=>0, :invalid_action=>"NONE", :versioned=>true}
320
350
 
321
351
  ```
322
352
 
@@ -326,16 +356,16 @@ metrics_service.get("cpu_count")
326
356
  entities_service = atsd.entities_service
327
357
  # => #<ATSD::EntitiesService:0x007f82a45b40b8
328
358
 
329
- entities_service.list
359
+ entities_service.list(:limit => 10)
330
360
  # => [{:name=>"atsd", :enabled=>true, :last_insert_time=>1428304482631},
331
361
  # {:name=>"mine", :enabled=>true},
332
- # {:name=>"test_entity", :enabled=>true, :last_insert_time=>1000000000},
333
- # {:name=>"ubuntu", :enabled=>true, :last_insert_time=>1428304489000}]
362
+ # {:name=>"test_entity", :enabled=>true, :last_insert_time=>1428304489000},
363
+ # {:name=>"sensor-1", :enabled=>true, :last_insert_time=>1428304489000}]
334
364
 
335
- entities_service.get('ubuntu')
336
- # => {:name=>"ubuntu", :enabled=>true, :last_insert_time=>1428304499000, :tags=>{}}
365
+ entities_service.get('sensor-1')
366
+ # => {:name=>"sensor-1", :enabled=>true, :last_insert_time=>1428304499000, :tags=>{}}
337
367
 
338
- entities_service.metrics('ubuntu')
368
+ entities_service.metrics('server-1')
339
369
  # => [{:name=>"df.disk_size",
340
370
  # :enabled=>true,
341
371
  # :data_type=>"FLOAT",
@@ -349,11 +379,11 @@ entities_service.metrics('ubuntu')
349
379
  # :enabled=>true,
350
380
  # ...
351
381
 
352
- entities_service.delete(entities_service.get('mine')) # or entities_service.delete('mine')
382
+ entities_service.delete(entities_service.get('server-1')) # or entities_service.delete('server-1')
353
383
  entities_service.list
354
384
  # => [{:name=>"atsd", :enabled=>true, :last_insert_time=>1428304482631},
355
385
  # {:name=>"test_entity", :enabled=>true, :last_insert_time=>1000000000},
356
- # {:name=>"ubuntu", :enabled=>true, :last_insert_time=>1428304489000}]
386
+ # {:name=>"sensor-1", :enabled=>true, :last_insert_time=>1428304489000}]
357
387
  ```
358
388
  #### Entity Groups Service
359
389
 
@@ -382,14 +412,12 @@ fields.
382
412
  Gem also provides an `ATSD::Client` class. It is a simple API wrapper
383
413
  which uses [Faraday](https://github.com/lostisland/faraday) to handle HTTP-related routines.
384
414
  All services are built on top of it.
385
- Client has 1-to-1 mapping for all REST methods specified on https://axibase.com/atsd/api.
386
415
 
387
416
  You can access `Faraday::Connection` object using the `connection` field of the client if necessary.
388
417
 
389
418
  ## Development
390
419
 
391
420
  After checking out the repository, run `bin/setup` to install dependencies.
392
- Then run `bin/console` for an interactive prompt that will allow you to experiment.
421
+ Then run `bin/console` for an interactive prompt that will allow you to experiment with the client.
393
422
 
394
423
  To install this gem onto your local machine, run `bundle exec rake install`.
395
-
@@ -20,19 +20,6 @@ module ATSD
20
20
  end
21
21
  hash
22
22
  end
23
-
24
- # def method_missing(meth, *args, &block)
25
- # action = meth[0, 3]
26
- # field = meth[4..-1]
27
- # case action
28
- # when "get"
29
- # return self.send(field)
30
- # when "set"
31
- # return self[field]=args[0]
32
- # else
33
- # super
34
- # end
35
- # end
36
23
  end
37
24
  end
38
25
 
@@ -119,10 +119,6 @@ module ATSD
119
119
  Time.at(self.send("last_insert_time")/1000)
120
120
  end
121
121
 
122
- # def set_last_insert_date(last_insert_date)
123
- # self["last_insert_date"] = last_insert_date
124
- # end
125
-
126
122
  def set_versioned(versioned)
127
123
  self["versioned"] = versioned
128
124
  end
@@ -161,45 +157,6 @@ module ATSD
161
157
  RAISE_ERROR = 'RAISE_ERROR'
162
158
  end
163
159
 
164
- # class Enum
165
- # def self.keys
166
- # constants
167
- # end
168
- #
169
- # def self.values
170
- # @values ||= constants.map { |const| const_get(const) }
171
- # end
172
- # end
173
- # class Enum
174
- # def self.keys
175
- # constants
176
- # end
177
- #
178
- # def self.values
179
- # @values ||= constants.map { |const| const_get(const) }
180
- # end
181
- # end
182
- #
183
- # class Data_Type < Enum
184
- # SHORT='SHORT'
185
- # INTEGER='INTEGER'
186
- # FLOAT='FLOAT'
187
- # LONG='LONG'
188
- # DOUBLE='DOUBLE'
189
- # end
190
- #
191
- # class Time_Precision < Enum
192
- # SECONDS='SECONDS'
193
- # MILLISECONDS='MILLISECONDS'
194
- # end
195
- #
196
- # class Invalid_Action < Enum
197
- # NONE='NONE'
198
- # DISCARD='DISCARD'
199
- # TRANSFORM='TRANSFORM'
200
- # RAISE_ERROR='RAISE_ERROR'
201
- # end
202
-
203
160
  end
204
161
 
205
162
 
@@ -53,5 +53,30 @@ module ATSD
53
53
  entity = entity.name if entity.is_a? Entity
54
54
  @client.series_csv_insert(entity, data, tags)
55
55
  end
56
+
57
+ # Post json
58
+ # @param [Hash] config - Hash containing url, login and password keys, e.g. {:url => "http://www.example.com:8088/api/v1", :login => "login", :password => "password"}
59
+ # @param [String] payload Body - ready to be parsed by ATSD server
60
+ # @return server response body
61
+ # @raise [APIError]
62
+ def self.post_payload(config,payload)
63
+ url = config[:url]
64
+ login, password = config[:login],config[:password]
65
+
66
+ @connection = Faraday.new url do |builder|
67
+ builder.headers['User-Agent'] = "ATSD Ruby Client v#{VERSION}"
68
+ builder.basic_auth login, password
69
+ builder.request :json
70
+
71
+ builder.response :errors_handler
72
+ builder.response :json, :content_type => 'application/json'
73
+
74
+ builder.adapter Faraday.default_adapter
75
+ end
76
+ response = @connection.post do |req|
77
+ req.body = payload
78
+ end
79
+ response
80
+ end
56
81
  end
57
82
  end
@@ -1,3 +1,3 @@
1
1
  module ATSD
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.3'
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.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Axibase Corporation
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-18 00:00:00.000000000 Z
11
+ date: 2015-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler