memoir 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +46 -0
- data/Gemfile +4 -0
- data/LICENSE +13 -0
- data/README.md +56 -0
- data/Rakefile +6 -0
- data/lib/memoir/aggregator.rb +29 -0
- data/lib/memoir/client.rb +44 -0
- data/lib/memoir/data_set.rb +19 -0
- data/lib/memoir/downsample.rb +16 -0
- data/lib/memoir/errors/argument_error.rb +1 -0
- data/lib/memoir/errors/request_error.rb +1 -0
- data/lib/memoir/errors/standard_error.rb +1 -0
- data/lib/memoir/errors.rb +5 -0
- data/lib/memoir/fill_policy.rb +5 -0
- data/lib/memoir/filter.rb +19 -0
- data/lib/memoir/filter_type.rb +9 -0
- data/lib/memoir/query.rb +43 -0
- data/lib/memoir/request.rb +66 -0
- data/lib/memoir/response.rb +23 -0
- data/lib/memoir/time_period.rb +12 -0
- data/lib/memoir/units.rb +10 -0
- data/lib/memoir/version.rb +3 -0
- data/lib/memoir.rb +21 -0
- data/memoir.gemspec +28 -0
- metadata +195 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 684b447befdf0b8cdaf05389e5e0dc60e6e803d2
|
4
|
+
data.tar.gz: 1a1b49ac8e00ed1a69f848f007dc95bfbf49bd0b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0c18b10cea866bc3f156698e1ae97a60d3450f17537c41abe1c7dabe182e7e4448c7a8cace2c8e9c60f9d33c9005aa9df79121d3eb5bbf8c979d0b0c650e002d
|
7
|
+
data.tar.gz: 8e457a5b1625ed73d13bb6794da504c5ffce7f02773ca827fc9fcd2e9b430df40f4205aa20886a66b61933da03eaedab277e5eb9f75bacb416c898fef9eae85c
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
language: ruby
|
2
|
+
|
3
|
+
rvm:
|
4
|
+
- 1.9.3
|
5
|
+
- 2.0.0
|
6
|
+
- 2.1
|
7
|
+
- 2.2.1
|
8
|
+
- ruby-head
|
9
|
+
- jruby-19mode
|
10
|
+
- jruby-head
|
11
|
+
|
12
|
+
jdk:
|
13
|
+
- openjdk7
|
14
|
+
- oraclejdk7
|
15
|
+
- openjdk6
|
16
|
+
|
17
|
+
matrix:
|
18
|
+
allow_failures:
|
19
|
+
- rvm: ruby-head
|
20
|
+
- rvm: jruby-head
|
21
|
+
exclude:
|
22
|
+
- rvm: 1.9.3
|
23
|
+
jdk: openjdk7
|
24
|
+
- rvm: 1.9.3
|
25
|
+
jdk: oraclejdk7
|
26
|
+
- rvm: 2.0.0
|
27
|
+
jdk: openjdk7
|
28
|
+
- rvm: 2.0.0
|
29
|
+
jdk: oraclejdk7
|
30
|
+
- rvm: 2.1
|
31
|
+
jdk: openjdk7
|
32
|
+
- rvm: 2.1
|
33
|
+
jdk: oraclejdk7
|
34
|
+
- rvm: 2.2.1
|
35
|
+
jdk: openjdk7
|
36
|
+
- rvm: 2.2.1
|
37
|
+
jdk: oraclejdk7
|
38
|
+
- rvm: ruby-head
|
39
|
+
jdk: openjdk7
|
40
|
+
- rvm: ruby-head
|
41
|
+
jdk: oraclejdk7
|
42
|
+
fast_finish: true
|
43
|
+
|
44
|
+
branches:
|
45
|
+
only:
|
46
|
+
- master
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright 2016 Michal Kimle
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# Memoir
|
2
|
+
Ruby client library for easy communication with OpenTSDB v2.2+
|
3
|
+
|
4
|
+
[](http://travis-ci.org/Misenko/memoir)
|
5
|
+
[](https://gemnasium.com/Misenko/memoir)
|
6
|
+
[](https://badge.fury.io/rb/memoir)
|
7
|
+
[](https://codeclimate.com/github/Misenko/memoir)
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem 'memoir'
|
14
|
+
```
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
```bash
|
18
|
+
$ bundle
|
19
|
+
```
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
```bash
|
23
|
+
$ gem install memoir
|
24
|
+
```
|
25
|
+
|
26
|
+
## Usage example
|
27
|
+
Memoir classes and attributes loosely follow the OpenTSDB query api described here:
|
28
|
+
[http://opentsdb.net/docs/build/html/api_http/query/index.html](http://opentsdb.net/docs/build/html/api_http/query/index.html)
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
# Create a 'literal_or' filter for tag 'hostname' matching any of values 'some.host1', 'some.host2' and 'some.host3' without grouping
|
32
|
+
filter = Memoir::Filter.new Memoir::FilterType::LITERAL_OR, 'hostname', 'some.host1|some.host2|some.host3', false
|
33
|
+
# Create a query for metric 'some.important.metric' with aggregator 'sum'
|
34
|
+
query = Memoir::Query.new Memoir::Aggregator::SUM, 'some.important.metric'
|
35
|
+
# Create a downsample per one day with aggregator 'avg'
|
36
|
+
downsample = Memoir::Downsample.new Memoir::TimePeriod.new(1, Memoir::Units::DAYS), Memoir::Aggregator::AVG
|
37
|
+
query.downsample = downsample
|
38
|
+
# Add filter to the query
|
39
|
+
query << filter
|
40
|
+
# Create a request for data from one month ago till now (default value for no end time)
|
41
|
+
request = Memoir::Request.new Memoir::TimePeriod.new(1, Memoir::Units::MONTHS)
|
42
|
+
# Add query to the request
|
43
|
+
request << query
|
44
|
+
# Initialize client
|
45
|
+
client = Memoir::Client.new 'http://opentsdb.host.org', 4242
|
46
|
+
# Dry running a request will print a request body in JSON format
|
47
|
+
client.dry_run request
|
48
|
+
# Run request
|
49
|
+
response = client.run request
|
50
|
+
|
51
|
+
puts response.status
|
52
|
+
puts response.data_sets.first.dps unless response.data_sets.empty?
|
53
|
+
```
|
54
|
+
|
55
|
+
## Contributing
|
56
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/Misenko/memoir.
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
class Memoir::Aggregator
|
2
|
+
AVG = 'avg'.freeze
|
3
|
+
COUNT = 'count'.freeze
|
4
|
+
DEV = 'dev'.freeze
|
5
|
+
EP50R3 = 'ep50r3'.freeze
|
6
|
+
EP50R7 = 'ep50r7'.freeze
|
7
|
+
EP75R3 = 'ep75r3'.freeze
|
8
|
+
EP75R7 = 'ep75r7'.freeze
|
9
|
+
EP90R3 = 'ep90r3'.freeze
|
10
|
+
EP90R7 = 'ep90r7'.freeze
|
11
|
+
EP95R3 = 'ep95r3'.freeze
|
12
|
+
EP95R7 = 'ep95r7'.freeze
|
13
|
+
EP99R3 = 'ep99r3'.freeze
|
14
|
+
EP99R7 = 'ep99r7'.freeze
|
15
|
+
EP999R3 = 'ep999r3'.freeze
|
16
|
+
EP999R7 = 'ep999r7'.freeze
|
17
|
+
MIMMIN = 'mimmin'.freeze
|
18
|
+
MIMMAX = 'mimmax'.freeze
|
19
|
+
MIN = 'min'.freeze
|
20
|
+
MAX = 'max'.freeze
|
21
|
+
P50 = 'p50'.freeze
|
22
|
+
P75 = 'p75'.freeze
|
23
|
+
P90 = 'p90'.freeze
|
24
|
+
P95 = 'p95'.freeze
|
25
|
+
P99 = 'p99'.freeze
|
26
|
+
P999 = 'p999'.freeze
|
27
|
+
SUM = 'sum'.freeze
|
28
|
+
ZIMSUM = 'zimsum'.freeze
|
29
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class Memoir::Client
|
2
|
+
attr_accessor :host, :port, :connection, :logger
|
3
|
+
|
4
|
+
API_QUERY_URL = '/api/query'.freeze
|
5
|
+
|
6
|
+
def initialize(host, port, logger = nil)
|
7
|
+
@host = host
|
8
|
+
@port = port
|
9
|
+
@logger = logger
|
10
|
+
prepare_connection
|
11
|
+
end
|
12
|
+
|
13
|
+
def host=(host)
|
14
|
+
@host = host
|
15
|
+
prepare_connection
|
16
|
+
end
|
17
|
+
|
18
|
+
def port=(port)
|
19
|
+
@port = port
|
20
|
+
prepare_connection
|
21
|
+
end
|
22
|
+
|
23
|
+
def run(request)
|
24
|
+
Memoir::Response.new(connection.post API_QUERY_URL, request.to_h)
|
25
|
+
end
|
26
|
+
|
27
|
+
def dry_run(request)
|
28
|
+
if logger
|
29
|
+
logger.info request.to_json
|
30
|
+
else
|
31
|
+
puts request.to_json
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def prepare_connection
|
38
|
+
@connection = Faraday.new(url: "#{host}:#{port}") do |builder|
|
39
|
+
builder.request :json
|
40
|
+
builder.response :json
|
41
|
+
builder.adapter Faraday.default_adapter
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Class representing individual results in response
|
2
|
+
class Memoir::DataSet
|
3
|
+
attr_accessor :metric, :tags, :aggregated_tags, :dps, :annotations, :global_annotations, :tsuids, :query
|
4
|
+
|
5
|
+
def initialize(data_set)
|
6
|
+
@metric = data_set['metric']
|
7
|
+
@tags = data_set['tags'] || {}
|
8
|
+
@aggregated_tags = data_set['aggregatedTags'] || []
|
9
|
+
@annotations = data_set['annotations'] || []
|
10
|
+
@global_annotations = data_set['globalAnnotations'] || []
|
11
|
+
@tsuids = data_set['tsuids'] || []
|
12
|
+
@query = query || {}
|
13
|
+
self.dps = data_set['dps'] || {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def dps=(dps_object)
|
17
|
+
@dps = dps_object.instance_of?(Array) ? dps_object.to_h : dps_object
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Memoir::Downsample
|
2
|
+
attr_accessor :time_period, :aggregator, :fill_policy
|
3
|
+
|
4
|
+
def initialize(time_period, aggregator, fill_policy = nil)
|
5
|
+
@time_period = time_period
|
6
|
+
@aggregator = aggregator
|
7
|
+
@fill_policy = fill_policy
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
downsample = "#{time_period}-#{aggregator}"
|
12
|
+
downsample = "#{downsample}-#{fill_policy}" if fill_policy
|
13
|
+
|
14
|
+
downsample
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
class Memoir::Errors::ArgumentError < Memoir::Errors::StandardError; end
|
@@ -0,0 +1 @@
|
|
1
|
+
class Memoir::Errors::RequestError < Memoir::Errors::StandardError; end
|
@@ -0,0 +1 @@
|
|
1
|
+
class Memoir::Errors::StandardError < ::StandardError; end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
module Memoir::Errors
|
2
|
+
require File.join(File.dirname(__FILE__), 'errors', 'standard_error')
|
3
|
+
require File.join(File.dirname(__FILE__), 'errors', 'argument_error')
|
4
|
+
Dir.glob(File.join(File.dirname(__FILE__), name.demodulize.underscore, '*.rb')) { |error_file| require error_file.chomp('.rb') }
|
5
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Memoir::Filter
|
2
|
+
attr_accessor :type, :tagk, :filter, :group_by
|
3
|
+
|
4
|
+
def initialize(type, tagk, filter, group_by = false)
|
5
|
+
@type = type
|
6
|
+
@tagk = tagk
|
7
|
+
@filter = filter
|
8
|
+
@group_by = group_by
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_h
|
12
|
+
{
|
13
|
+
'type' => type,
|
14
|
+
'tagk' => tagk,
|
15
|
+
'filter' => filter,
|
16
|
+
'groupBy' => group_by
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Memoir::FilterType
|
2
|
+
LITERAL_OR = 'literal_or'.freeze
|
3
|
+
ILITERAL_OR = 'iliteral_or'.freeze
|
4
|
+
NOT_LITERAL_OR = 'not_literal_or'.freeze
|
5
|
+
NOT_ILITERAL_OR = 'not_iliteral_or'.freeze
|
6
|
+
WILDCARD = 'wildcard'.freeze
|
7
|
+
IWILDCARD = 'iwildcard'.freeze
|
8
|
+
REGEXP = 'regexp'.freeze
|
9
|
+
end
|
data/lib/memoir/query.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
class Memoir::Query
|
2
|
+
attr_accessor :aggregator, :metric, :rate, :rate_options, :downsample, :filters
|
3
|
+
|
4
|
+
def initialize(aggregator, metric, downsample = nil, rate = false, rate_options = {})
|
5
|
+
@aggregator = aggregator
|
6
|
+
@metric = metric
|
7
|
+
@downsample = downsample
|
8
|
+
@rate = rate
|
9
|
+
@rate_options = rate_options
|
10
|
+
@tags = {}
|
11
|
+
@filters = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def <<(filter)
|
15
|
+
add_filter(filter)
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_filter(filter)
|
19
|
+
filters << filter
|
20
|
+
end
|
21
|
+
|
22
|
+
def remove_filter(filter)
|
23
|
+
filters.delete filter
|
24
|
+
end
|
25
|
+
|
26
|
+
def clear_filters
|
27
|
+
filters.clear
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_h
|
31
|
+
hash = {
|
32
|
+
'aggregator' => aggregator,
|
33
|
+
'metric' => metric,
|
34
|
+
'rate' => rate
|
35
|
+
}
|
36
|
+
|
37
|
+
hash['rateOptions'] = rate_options unless rate_options.empty?
|
38
|
+
hash['downsample'] = downsample.to_s if downsample
|
39
|
+
hash['filters'] = filters.map(&:to_h) unless filters.empty?
|
40
|
+
|
41
|
+
hash
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
class Memoir::Request
|
2
|
+
attr_accessor :start_time, :end_time, :queries, :options
|
3
|
+
|
4
|
+
VALID_OPTIONS = {
|
5
|
+
no_annotations: 'noAnnotations',
|
6
|
+
global_annotations: 'globalAnnotations',
|
7
|
+
ms_resolution: 'msResolution',
|
8
|
+
show_tsuids: 'showTSUIDs',
|
9
|
+
show_summary: 'showSummary',
|
10
|
+
show_query: 'showQuery',
|
11
|
+
delete: 'delete'
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
def initialize(start_time, end_time = nil, **options)
|
15
|
+
fail Memoir::Errors::ArgumentError, 'start_time cannot be nil' unless start_time
|
16
|
+
|
17
|
+
@start_time = start_time
|
18
|
+
@end_time = end_time
|
19
|
+
@queries = []
|
20
|
+
@options = options
|
21
|
+
end
|
22
|
+
|
23
|
+
def <<(query)
|
24
|
+
add_query(query)
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_query(query)
|
28
|
+
queries << query
|
29
|
+
end
|
30
|
+
|
31
|
+
def remove_query(query)
|
32
|
+
queries.delete query
|
33
|
+
end
|
34
|
+
|
35
|
+
def clear_queries
|
36
|
+
queries.clear
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_json
|
40
|
+
JSON.pretty_generate(to_h)
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_h
|
44
|
+
validate!
|
45
|
+
|
46
|
+
hash = {
|
47
|
+
'start' => start_time.instance_of?(Memoir::TimePeriod) ? "#{start_time}-ago" : start_time.to_i,
|
48
|
+
'queries' => queries.map(&:to_h)
|
49
|
+
}
|
50
|
+
|
51
|
+
hash['end'] = end_time.to_i if end_time
|
52
|
+
options.each_pair { |key, value| hash[VALID_OPTIONS[key]] = value }
|
53
|
+
|
54
|
+
hash
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def validate!
|
60
|
+
fail Memoir::Errors::RequestError, 'Request has to contain at least one query' if queries.empty?
|
61
|
+
|
62
|
+
options.keys.each do |key|
|
63
|
+
fail Memoir::Errors::RequestError, "Unknown option #{key.inspect}" unless VALID_OPTIONS.keys.include? key
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Memoir::Response
|
2
|
+
attr_accessor :data_sets, :stats_summary, :status, :raw
|
3
|
+
|
4
|
+
def initialize(faraday_response)
|
5
|
+
@data_sets = []
|
6
|
+
@status = faraday_response.status
|
7
|
+
@raw = faraday_response.body
|
8
|
+
parse_response(raw)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def parse_response(response)
|
14
|
+
response.each do |field|
|
15
|
+
if field.include? 'statsSummary'
|
16
|
+
@stats_summary = field['statsSummary']
|
17
|
+
next
|
18
|
+
end
|
19
|
+
|
20
|
+
data_sets << Memoir::DataSet.new(field)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/memoir/units.rb
ADDED
data/lib/memoir.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'active_support/all'
|
2
|
+
require 'json'
|
3
|
+
require 'faraday'
|
4
|
+
require 'faraday_middleware'
|
5
|
+
|
6
|
+
module Memoir
|
7
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'version')
|
8
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'errors')
|
9
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'aggregator')
|
10
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'fill_policy')
|
11
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'filter_type')
|
12
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'time_period')
|
13
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'units')
|
14
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'downsample')
|
15
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'filter')
|
16
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'query')
|
17
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'request')
|
18
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'data_set')
|
19
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'response')
|
20
|
+
require File.join(File.dirname(__FILE__), 'memoir', 'client')
|
21
|
+
end
|
data/memoir.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'memoir/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'memoir'
|
8
|
+
spec.version = Memoir::VERSION
|
9
|
+
spec.authors = ['Michal Kimle']
|
10
|
+
spec.email = ['kimle.michal@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'Client library for easy communication with OpenTSDB'
|
13
|
+
spec.homepage = 'https://github.com/Misenko/memoir'
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
spec.require_paths = ['lib']
|
17
|
+
|
18
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
19
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
20
|
+
spec.add_development_dependency 'rspec'
|
21
|
+
spec.add_development_dependency 'simplecov', '~> 0.11'
|
22
|
+
spec.add_development_dependency 'rubocop', '~> 0.36'
|
23
|
+
|
24
|
+
spec.add_runtime_dependency 'faraday', '~> 0.9'
|
25
|
+
spec.add_runtime_dependency 'faraday_middleware', '~> 0.10'
|
26
|
+
spec.add_runtime_dependency 'yell', '~> 2.0'
|
27
|
+
spec.add_runtime_dependency 'activesupport', '~> 4.2'
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: memoir
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michal Kimle
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.11'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.11'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.36'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.36'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: faraday
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.9'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: faraday_middleware
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.10'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.10'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yell
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: activesupport
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '4.2'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '4.2'
|
139
|
+
description:
|
140
|
+
email:
|
141
|
+
- kimle.michal@gmail.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- ".gitignore"
|
147
|
+
- ".rspec"
|
148
|
+
- ".travis.yml"
|
149
|
+
- Gemfile
|
150
|
+
- LICENSE
|
151
|
+
- README.md
|
152
|
+
- Rakefile
|
153
|
+
- lib/memoir.rb
|
154
|
+
- lib/memoir/aggregator.rb
|
155
|
+
- lib/memoir/client.rb
|
156
|
+
- lib/memoir/data_set.rb
|
157
|
+
- lib/memoir/downsample.rb
|
158
|
+
- lib/memoir/errors.rb
|
159
|
+
- lib/memoir/errors/argument_error.rb
|
160
|
+
- lib/memoir/errors/request_error.rb
|
161
|
+
- lib/memoir/errors/standard_error.rb
|
162
|
+
- lib/memoir/fill_policy.rb
|
163
|
+
- lib/memoir/filter.rb
|
164
|
+
- lib/memoir/filter_type.rb
|
165
|
+
- lib/memoir/query.rb
|
166
|
+
- lib/memoir/request.rb
|
167
|
+
- lib/memoir/response.rb
|
168
|
+
- lib/memoir/time_period.rb
|
169
|
+
- lib/memoir/units.rb
|
170
|
+
- lib/memoir/version.rb
|
171
|
+
- memoir.gemspec
|
172
|
+
homepage: https://github.com/Misenko/memoir
|
173
|
+
licenses: []
|
174
|
+
metadata: {}
|
175
|
+
post_install_message:
|
176
|
+
rdoc_options: []
|
177
|
+
require_paths:
|
178
|
+
- lib
|
179
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - ">="
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: '0'
|
184
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
requirements: []
|
190
|
+
rubyforge_project:
|
191
|
+
rubygems_version: 2.4.8
|
192
|
+
signing_key:
|
193
|
+
specification_version: 4
|
194
|
+
summary: Client library for easy communication with OpenTSDB
|
195
|
+
test_files: []
|