bernard 0.1.0 → 0.2.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 +4 -4
- data/Gemfile.lock +6 -6
- data/README.md +56 -0
- data/bernard.gemspec +1 -1
- data/lib/bernard/connection.rb +21 -0
- data/lib/bernard/exception.rb +2 -1
- data/lib/bernard/keen/client.rb +93 -0
- data/lib/bernard/schema.rb +1 -2
- data/lib/bernard/version.rb +2 -2
- data/lib/bernard.rb +3 -50
- metadata +5 -3
- /data/{test → lib/bernard/keen}/.keep +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1960eb4876f61e949ae9a22b0ee62b0122033ed1
|
4
|
+
data.tar.gz: e1062af9819a7ccd7ddaadbde2b8c49b606cd6e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01787a42c7823b47fcd35b8d43cf3eb032f6c91d69cb2ceaa65b51433b118c2228b7bd425153ac147d1292e2d0c9ce634c842b67a4a5cd6156c141e04f0e7069
|
7
|
+
data.tar.gz: 94fe2d382009a6bf7cecfd2bbfc313b92678da488bbe81cedd0e8e5b3d9ef3c667798e812c6cce1542f5f191f518f0ae60799220fac4105e0107fdd4c273e28b
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bernard (0.
|
4
|
+
bernard (0.1.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -43,10 +43,10 @@ PLATFORMS
|
|
43
43
|
|
44
44
|
DEPENDENCIES
|
45
45
|
bernard!
|
46
|
-
pry
|
47
|
-
rake
|
48
|
-
rspec
|
49
|
-
webmock
|
46
|
+
pry (= 0.10.3)
|
47
|
+
rake (= 11.1.2)
|
48
|
+
rspec (= 3.4.0)
|
49
|
+
webmock (= 1.24.2)
|
50
50
|
|
51
51
|
BUNDLED WITH
|
52
|
-
1.12.
|
52
|
+
1.12.3
|
data/README.md
CHANGED
@@ -4,6 +4,62 @@ Sends event data to visualisation services.
|
|
4
4
|
|
5
5
|

|
6
6
|
|
7
|
+
|
8
|
+
## Install
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
```ruby
|
12
|
+
gem 'bernard', '~> 0.2.0'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
```sh
|
17
|
+
$ bundle
|
18
|
+
```
|
19
|
+
|
20
|
+
## Setup
|
21
|
+
To use Bernard you can either create an initializer or construct it as you need it.
|
22
|
+
|
23
|
+
Create a new initializer `config/bernard.rb` in your application
|
24
|
+
```ruby
|
25
|
+
Bernard::Keen::Client.configure do |client|
|
26
|
+
client.config = {
|
27
|
+
uri: URI('https://api.keen.io'),
|
28
|
+
project_id: '<YOUR PROJECT ID>',
|
29
|
+
write_key: '<YOUR WRITE KEY>',
|
30
|
+
read_key: '<YOUR READ KEY>'
|
31
|
+
}
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
OR
|
36
|
+
|
37
|
+
Create a new client on the fly:
|
38
|
+
```ruby
|
39
|
+
client = Bernard::Keen::Client.new(
|
40
|
+
uri: URI('https://api.keen.io')
|
41
|
+
project_id: '<YOUR PROJECT ID>'
|
42
|
+
write_key: '<YOUR WRITE KEY>'
|
43
|
+
ready_key: '<YOUR READ KEY>'
|
44
|
+
)
|
45
|
+
```
|
46
|
+
|
47
|
+
## Usage
|
48
|
+
|
49
|
+
### Tick
|
50
|
+
|
51
|
+
Increment an event that has occurred by 1.
|
52
|
+
```ruby
|
53
|
+
client.tick('foo')
|
54
|
+
```
|
55
|
+
|
56
|
+
### Gauge
|
57
|
+
|
58
|
+
Update an event to a new value.
|
59
|
+
```ruby
|
60
|
+
client.gauge('office_noise_level', '43')
|
61
|
+
```
|
62
|
+
|
7
63
|
## License
|
8
64
|
|
9
65
|
(c) 2016 The Dextrous Web Ltd. Released under the MIT license.
|
data/bernard.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'bernard/version'
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = 'bernard'
|
7
7
|
gem.version = Bernard::VERSION
|
8
|
-
gem.date = '2016-05-
|
8
|
+
gem.date = '2016-05-17'
|
9
9
|
gem.summary = 'Sends event data to visualisation services'
|
10
10
|
gem.description = 'Sends event data to visualisation services.'
|
11
11
|
gem.authors = ['Tom Hipkin', 'Robert Lee-Cann']
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Bernard
|
2
|
+
class Connection
|
3
|
+
def initialize(uri)
|
4
|
+
unless uri && uri.kind_of?(URI)
|
5
|
+
raise(Bernard::ArgumentError, 'could not parse URI')
|
6
|
+
end
|
7
|
+
@uri = uri
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
12
|
+
http.open_timeout = 5
|
13
|
+
http.read_timeout = 5
|
14
|
+
http.use_ssl = true
|
15
|
+
http
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
attr_reader :uri
|
20
|
+
end
|
21
|
+
end
|
data/lib/bernard/exception.rb
CHANGED
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'bernard/connection'
|
2
|
+
|
3
|
+
module Bernard
|
4
|
+
module Keen
|
5
|
+
class Client
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_reader :config
|
9
|
+
|
10
|
+
def configure
|
11
|
+
yield self
|
12
|
+
end
|
13
|
+
|
14
|
+
def config=(args)
|
15
|
+
@config = {
|
16
|
+
uri: args[:uri],
|
17
|
+
project_id: args[:project_id],
|
18
|
+
write_key: args[:write_key],
|
19
|
+
read_key: args[:read_key]
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_reader :uri, :project_id, :write_key, :read_key
|
25
|
+
|
26
|
+
def initialize(args = {})
|
27
|
+
config = config_from(args)
|
28
|
+
|
29
|
+
@uri = config.fetch(:uri, nil)
|
30
|
+
@project_id = config.fetch(:project_id, nil)
|
31
|
+
@write_key = config.fetch(:write_key, nil)
|
32
|
+
@read_key = config.fetch(:read_key, nil)
|
33
|
+
end
|
34
|
+
|
35
|
+
private def config_from(args)
|
36
|
+
if !args.empty?
|
37
|
+
args
|
38
|
+
elsif Bernard::Keen::Client.config
|
39
|
+
Bernard::Keen::Client.config
|
40
|
+
else
|
41
|
+
{}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def uri=(value)
|
46
|
+
raise(Bernard::ArgumentError, 'Missing URI') unless value
|
47
|
+
raise(Bernard::ArgumentError, 'Invalid URI') unless value.kind_of?(URI)
|
48
|
+
@uri = value
|
49
|
+
end
|
50
|
+
|
51
|
+
def project_id=(value)
|
52
|
+
raise(Bernard::ArgumentError, 'Missing project_id') unless value
|
53
|
+
@project_id = value
|
54
|
+
end
|
55
|
+
|
56
|
+
def write_key=(value)
|
57
|
+
raise(Bernard::ArgumentError, 'Missing write_key') unless value
|
58
|
+
@write_key = value
|
59
|
+
end
|
60
|
+
|
61
|
+
def read_key=(value)
|
62
|
+
@read_key = value
|
63
|
+
end
|
64
|
+
|
65
|
+
def tick(event)
|
66
|
+
write(:tick, type: event, count: 1)
|
67
|
+
end
|
68
|
+
|
69
|
+
def gauge(event, value)
|
70
|
+
write(:gauge, type: event, value: Float(value))
|
71
|
+
end
|
72
|
+
|
73
|
+
def write(event, metadata)
|
74
|
+
|
75
|
+
event = String(event).strip.downcase
|
76
|
+
uri.path = "/3.0/projects/#{project_id}/events/#{event}"
|
77
|
+
|
78
|
+
request = Net::HTTP::Post.new(uri.path)
|
79
|
+
request['Authorization'] = write_key
|
80
|
+
request['Content-Type'] = 'application/json'
|
81
|
+
request.body = metadata.to_json
|
82
|
+
|
83
|
+
begin
|
84
|
+
connection = Bernard::Connection.new(uri).call
|
85
|
+
response = connection.request(request)
|
86
|
+
# puts "Bernards #{event} response was #{response.code}"
|
87
|
+
rescue Timeout::Error
|
88
|
+
return false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/lib/bernard/schema.rb
CHANGED
data/lib/bernard/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = '0.
|
1
|
+
module Bernard
|
2
|
+
VERSION = '0.2.0'.freeze
|
3
3
|
end
|
data/lib/bernard.rb
CHANGED
@@ -1,59 +1,12 @@
|
|
1
1
|
require 'bernard/exception'
|
2
2
|
require 'bernard/schema'
|
3
3
|
require 'bernard/version'
|
4
|
+
require 'bernard/connection'
|
5
|
+
require 'bernard/keen/client'
|
4
6
|
|
5
7
|
require 'json'
|
6
8
|
require 'net/https'
|
7
9
|
require 'uri'
|
8
10
|
|
9
|
-
|
10
|
-
BASE_URI = 'https://api.keen.io'
|
11
|
-
|
12
|
-
attr_reader :project_id, :write_key
|
13
|
-
|
14
|
-
def project_id=(id)
|
15
|
-
project_id = String(id).strip.downcase
|
16
|
-
raise Bernard::Exception unless !!(project_id =~ /\A[0-9a-f]{24}\Z/)
|
17
|
-
|
18
|
-
@project_id = project_id
|
19
|
-
end
|
20
|
-
|
21
|
-
def write_key=(key)
|
22
|
-
write_key = String(key).strip.downcase
|
23
|
-
raise Bernard::Exception unless !!(write_key =~ /\A[0-9a-f]{192}\Z/)
|
24
|
-
|
25
|
-
@write_key = write_key
|
26
|
-
end
|
27
|
-
|
28
|
-
def publish(event, metadata)
|
29
|
-
event = String(event).strip.downcase
|
30
|
-
|
31
|
-
uri = URI.parse(BASE_URI)
|
32
|
-
|
33
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
34
|
-
http.open_timeout = 5
|
35
|
-
http.read_timeout = 5
|
36
|
-
http.use_ssl = true
|
37
|
-
|
38
|
-
request = Net::HTTP::Post.new("/3.0/projects/#{project_id}/events/#{event}")
|
39
|
-
request['Authorization'] = write_key
|
40
|
-
request['Content-Type'] = 'application/json'
|
41
|
-
request.body = metadata.to_json
|
42
|
-
|
43
|
-
begin
|
44
|
-
response = http.request(request)
|
45
|
-
rescue Timeout::Error
|
46
|
-
return false
|
47
|
-
end
|
48
|
-
|
49
|
-
response.code == '201'
|
50
|
-
end
|
51
|
-
|
52
|
-
def tick(event)
|
53
|
-
publish(:tick, type: event, count: 1)
|
54
|
-
end
|
55
|
-
|
56
|
-
def gauge(event, value)
|
57
|
-
publish(:gauge, type: event, value: Float(value))
|
58
|
-
end
|
11
|
+
module Bernard
|
59
12
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bernard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Hipkin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-05-
|
12
|
+
date: 2016-05-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -87,10 +87,12 @@ files:
|
|
87
87
|
- bin/.keep
|
88
88
|
- lib/bernard.rb
|
89
89
|
- lib/bernard/.keep
|
90
|
+
- lib/bernard/connection.rb
|
90
91
|
- lib/bernard/exception.rb
|
92
|
+
- lib/bernard/keen/.keep
|
93
|
+
- lib/bernard/keen/client.rb
|
91
94
|
- lib/bernard/schema.rb
|
92
95
|
- lib/bernard/version.rb
|
93
|
-
- test/.keep
|
94
96
|
homepage: http://rubygems.org/gems/bernard
|
95
97
|
licenses:
|
96
98
|
- MIT
|
File without changes
|