app_monit 0.0.8 → 0.0.9
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/appmonit_gem.gemspec +0 -1
- data/lib/app_monit.rb +13 -0
- data/lib/app_monit/config.rb +13 -1
- data/lib/app_monit/event.rb +11 -2
- data/lib/app_monit/version.rb +1 -1
- data/lib/app_monit/worker.rb +83 -0
- data/spec/app_monit/query_spec.rb +1 -1
- data/test.rb +13 -0
- metadata +5 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3cc611bcf7f462c54bb7a498370acb4eb8ed495c
|
4
|
+
data.tar.gz: ba61adecdc84d5b64fe4675e3beef81bb195c6e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa91ce5ad4f39c717b8605867ecd0dc183af99e63755367b85d0c613be299dc4e2d0414bb70d239226573f86e4a1294c07f66b8e4871b8376dd8e7a559947351
|
7
|
+
data.tar.gz: b3101a5aa3e7e942811a4ac9d82eb8fd26e3ca1f68544296e8f81c0d472f9308921208cfba47db076dfecc0881eba96fbf1fd1680e280699139424c0fe2a4530
|
data/appmonit_gem.gemspec
CHANGED
@@ -23,5 +23,4 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "minitest", ">= 5.2.2"
|
24
24
|
spec.add_development_dependency "minitest-reporters"
|
25
25
|
spec.add_development_dependency "webmock", ">= 1.17.1"
|
26
|
-
spec.add_development_dependency "guard-minitest" if RUBY_PLATFORM =~ /darwin/
|
27
26
|
end
|
data/lib/app_monit.rb
CHANGED
@@ -4,7 +4,20 @@ require "app_monit/config"
|
|
4
4
|
require "app_monit/http"
|
5
5
|
require "app_monit/event"
|
6
6
|
require "app_monit/query"
|
7
|
+
require "app_monit/worker"
|
7
8
|
require "net/https"
|
9
|
+
require "logger"
|
8
10
|
|
9
11
|
module AppMonit
|
12
|
+
MUTEX = Mutex.new
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def logger
|
16
|
+
return @logger if @logger
|
17
|
+
AppMonit::MUTEX.synchronize do
|
18
|
+
return @logger if @logger
|
19
|
+
@logger = ::Logger.new(STDOUT)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
10
23
|
end
|
data/lib/app_monit/config.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module AppMonit
|
2
2
|
class Config
|
3
3
|
class << self
|
4
|
-
attr_writer :api_key, :env, :end_point, :fail_silent, :enabled, :timeout, :version
|
4
|
+
attr_writer :api_key, :env, :end_point, :fail_silent, :enabled, :timeout, :version, :async, :log_level, :flush_rate
|
5
5
|
|
6
6
|
def api_key
|
7
7
|
@api_key || raise(ApiKeyNotSetError.new("Please set your API key"))
|
@@ -27,6 +27,18 @@ module AppMonit
|
|
27
27
|
@enabled.nil? ? env != "test" : @enabled
|
28
28
|
end
|
29
29
|
|
30
|
+
def log_level
|
31
|
+
@log_level || Logger::DEBUG
|
32
|
+
end
|
33
|
+
|
34
|
+
def async?
|
35
|
+
@async
|
36
|
+
end
|
37
|
+
|
38
|
+
def flush_rate
|
39
|
+
@flush_rate || 60
|
40
|
+
end
|
41
|
+
|
30
42
|
def timeout
|
31
43
|
@timeout || 1
|
32
44
|
end
|
data/lib/app_monit/event.rb
CHANGED
@@ -7,7 +7,7 @@ module AppMonit
|
|
7
7
|
rescue Http::Error
|
8
8
|
false
|
9
9
|
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse,
|
10
|
-
Net::HTTPHeaderSyntaxError, Net::ProtocolError => error
|
10
|
+
Net::HTTPHeaderSyntaxError, Net::ProtocolError, Errno::ETIMEDOUT => error
|
11
11
|
raise error unless AppMonit::Config.fail_silent
|
12
12
|
false
|
13
13
|
end
|
@@ -23,7 +23,16 @@ module AppMonit
|
|
23
23
|
|
24
24
|
message[:payload] = data_hash
|
25
25
|
|
26
|
-
|
26
|
+
post(message)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.post(message)
|
30
|
+
if AppMonit::Config.async?
|
31
|
+
AppMonit.logger.debug("[Event] push: #{message}")
|
32
|
+
AppMonit::Worker.instance.push(message)
|
33
|
+
else
|
34
|
+
client.post('/v1/events', message)
|
35
|
+
end
|
27
36
|
end
|
28
37
|
|
29
38
|
def self.client
|
data/lib/app_monit/version.rb
CHANGED
@@ -0,0 +1,83 @@
|
|
1
|
+
module AppMonit
|
2
|
+
class Worker
|
3
|
+
MUTEX = Mutex.new
|
4
|
+
MAX_MULTIPLIER = 5
|
5
|
+
|
6
|
+
attr_accessor :events
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def instance
|
10
|
+
return @instance if @instance
|
11
|
+
MUTEX.synchronize do
|
12
|
+
return @instance if @instance
|
13
|
+
@instance = new.start
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@queue = Queue.new
|
20
|
+
@multiplier = 1
|
21
|
+
@flush_rate = AppMonit::Config.flush_rate
|
22
|
+
reset
|
23
|
+
end
|
24
|
+
|
25
|
+
def reset
|
26
|
+
@events = []
|
27
|
+
@allow_flush = true
|
28
|
+
end
|
29
|
+
|
30
|
+
def start
|
31
|
+
logger.debug('Start collecting')
|
32
|
+
Thread.new do
|
33
|
+
AppMonit.logger.debug('Waiting for queue')
|
34
|
+
while (event = @queue.pop)
|
35
|
+
begin
|
36
|
+
case event
|
37
|
+
when :flush
|
38
|
+
@allow_flush = true
|
39
|
+
send_to_collector
|
40
|
+
else
|
41
|
+
logger.debug 'Received event'
|
42
|
+
events << event
|
43
|
+
if @allow_flush && events.count > 10
|
44
|
+
send_to_collector
|
45
|
+
end
|
46
|
+
end
|
47
|
+
rescue Exception => e
|
48
|
+
logger.debug ['Event error:', event.inspect, e.message]
|
49
|
+
@allow_flush = false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
start_flusher
|
54
|
+
|
55
|
+
self
|
56
|
+
end
|
57
|
+
|
58
|
+
def start_flusher
|
59
|
+
Thread.new do
|
60
|
+
loop do
|
61
|
+
sleep @multiplier * @flush_rate
|
62
|
+
push(:flush)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def push(event)
|
68
|
+
@queue << event
|
69
|
+
end
|
70
|
+
|
71
|
+
def logger
|
72
|
+
AppMonit.logger
|
73
|
+
end
|
74
|
+
|
75
|
+
def send_to_collector
|
76
|
+
if @events.any?
|
77
|
+
logger.debug 'Sending to collector'
|
78
|
+
AppMonit::Http.post('/v1/events', event: events)
|
79
|
+
end
|
80
|
+
reset
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -12,7 +12,7 @@ describe AppMonit::Query do
|
|
12
12
|
%w(count count_unique minimum maximum average sum funnel).each do |method_name|
|
13
13
|
describe method_name do
|
14
14
|
it 'gets the results with the given params' do
|
15
|
-
stub_request(:get, /api.appmon.it\/v1\/queries\/#{method_name}/).to_return(
|
15
|
+
stub_request(:get, /api.appmon.it\/v1\/queries\/#{method_name}/).to_return(body: {result: '0'}.to_json)
|
16
16
|
|
17
17
|
params = { valid: 'params' }
|
18
18
|
subject.send(method_name, 'collection_name', params)
|
data/test.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
$:<<'lib'
|
2
|
+
require 'app_monit'
|
3
|
+
|
4
|
+
AppMonit::Config.end_point = 'http://localhost:3000'
|
5
|
+
AppMonit::Config.api_key = 'SOMEKEY'
|
6
|
+
AppMonit::Config.enabled = true
|
7
|
+
AppMonit::Config.async = true
|
8
|
+
AppMonit::Config.flush_rate = 1
|
9
|
+
|
10
|
+
AppMonit::Event.create('test', with: 'payload')
|
11
|
+
|
12
|
+
AppMonit.logger.debug 'Press enter to exit'
|
13
|
+
gets
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app_monit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Redmar Kerkhoff
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -81,20 +81,6 @@ dependencies:
|
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: 1.17.1
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: guard-minitest
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '0'
|
91
|
-
type: :development
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '0'
|
98
84
|
description: Client gem for pushing events from ruby to the appmon.it service
|
99
85
|
email:
|
100
86
|
- redmar@appmon.it
|
@@ -120,10 +106,12 @@ files:
|
|
120
106
|
- lib/app_monit/http.rb
|
121
107
|
- lib/app_monit/query.rb
|
122
108
|
- lib/app_monit/version.rb
|
109
|
+
- lib/app_monit/worker.rb
|
123
110
|
- spec/app_monit/event_spec.rb
|
124
111
|
- spec/app_monit/http_spec.rb
|
125
112
|
- spec/app_monit/query_spec.rb
|
126
113
|
- spec/spec_helper.rb
|
114
|
+
- test.rb
|
127
115
|
homepage: https://appmon.it
|
128
116
|
licenses:
|
129
117
|
- MIT
|
@@ -144,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
132
|
version: '0'
|
145
133
|
requirements: []
|
146
134
|
rubyforge_project:
|
147
|
-
rubygems_version: 2.
|
135
|
+
rubygems_version: 2.4.5
|
148
136
|
signing_key:
|
149
137
|
specification_version: 4
|
150
138
|
summary: Client gem for pushing events from ruby to the appmon.it service
|