stackify-api-ruby 1.0.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/.rspec +2 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +30 -0
- data/LICENSE.txt +22 -0
- data/README.md +157 -0
- data/Rakefile +2 -0
- data/lib/generators/stackify/stackify_generator.rb +13 -0
- data/lib/generators/stackify/templates/stackify.rb +17 -0
- data/lib/stackify-api-ruby.rb +166 -0
- data/lib/stackify/authorization/authorizable.rb +61 -0
- data/lib/stackify/authorization/authorization_client.rb +31 -0
- data/lib/stackify/engine.rb +21 -0
- data/lib/stackify/env_details.rb +108 -0
- data/lib/stackify/error.rb +56 -0
- data/lib/stackify/errors_governor.rb +65 -0
- data/lib/stackify/http_client.rb +50 -0
- data/lib/stackify/logger_client.rb +71 -0
- data/lib/stackify/logger_proxy.rb +35 -0
- data/lib/stackify/logs_sender.rb +78 -0
- data/lib/stackify/metrics/metric.rb +68 -0
- data/lib/stackify/metrics/metric_aggregate.rb +52 -0
- data/lib/stackify/metrics/metrics.rb +88 -0
- data/lib/stackify/metrics/metrics_client.rb +238 -0
- data/lib/stackify/metrics/metrics_queue.rb +26 -0
- data/lib/stackify/metrics/metrics_sender.rb +32 -0
- data/lib/stackify/metrics/monitor.rb +34 -0
- data/lib/stackify/msgs_queue.rb +78 -0
- data/lib/stackify/rack/errors_catcher.rb +17 -0
- data/lib/stackify/schedule_task.rb +23 -0
- data/lib/stackify/scheduler.rb +79 -0
- data/lib/stackify/utils/backtrace.rb +36 -0
- data/lib/stackify/utils/configuration.rb +78 -0
- data/lib/stackify/utils/methods.rb +27 -0
- data/lib/stackify/utils/msg_object.rb +22 -0
- data/lib/stackify/version.rb +3 -0
- data/lib/stackify/workers/add_msg_worker.rb +9 -0
- data/lib/stackify/workers/auth_worker.rb +18 -0
- data/lib/stackify/workers/logs_sender_worker.rb +17 -0
- data/lib/stackify/workers/worker.rb +65 -0
- data/spec/spec_helper.rb +17 -0
- data/stackify-api-ruby.gemspec +25 -0
- metadata +137 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
module Stackify
|
2
|
+
class MsgObject
|
3
|
+
def initialize level, msg, caller_str, ex=nil
|
4
|
+
@level, @msg, @caller_str, @ex = level, msg, caller_str, ex
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_h
|
8
|
+
{
|
9
|
+
'Msg' => @msg.to_s,
|
10
|
+
'data' => nil,
|
11
|
+
'Ex' => @ex.try(:to_h),
|
12
|
+
'Level' => @level.to_s.upcase!,
|
13
|
+
'Tags' => %w(ruby rails),
|
14
|
+
'EpochMs' => Time.now.to_f * 1000,
|
15
|
+
'Th' => Thread.current.object_id.to_s,
|
16
|
+
'TransID' => Stackify::EnvDetails.instance.request_details.try{ |d| d['uuid'] },
|
17
|
+
'SrcMethod' => Stackify::Backtrace.method_name(@caller_str),
|
18
|
+
'SrcLine' => Stackify::Backtrace.line_number(@caller_str)
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Stackify
|
2
|
+
class AuthWorker < Worker
|
3
|
+
|
4
|
+
def initialize name = 'Authorisation worker'
|
5
|
+
super
|
6
|
+
@type = :auth
|
7
|
+
end
|
8
|
+
|
9
|
+
def after_perform result
|
10
|
+
if result.try(:code) == '200'
|
11
|
+
Stackify.send :authorized!
|
12
|
+
Stackify.successfull_authorisation result
|
13
|
+
else
|
14
|
+
Stackify.unsuccessfull_authorisation result, self
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Stackify
|
2
|
+
class LogsSenderWorker < Worker
|
3
|
+
|
4
|
+
def initialize name = 'LogsSender worker'
|
5
|
+
super
|
6
|
+
@type = :logs_send
|
7
|
+
end
|
8
|
+
|
9
|
+
def after_perform result
|
10
|
+
if result.try(:code) == '200'
|
11
|
+
Stackify.internal_log :info, "#{@name}: Sending batch of msgs is successfully completed"
|
12
|
+
else
|
13
|
+
Stackify.log_internal_error "#{@name}: Sending batch of msgs is failed: #{result.try(:msg)}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'thread'
|
2
|
+
|
3
|
+
module Stackify
|
4
|
+
|
5
|
+
class Worker
|
6
|
+
attr_reader :name, :type
|
7
|
+
|
8
|
+
def initialize name = nil
|
9
|
+
@type = :common
|
10
|
+
@name = name ? name : generate_name
|
11
|
+
@name += " ##{self.id}"
|
12
|
+
@scheduler = Stackify::Scheduler.new
|
13
|
+
Stackify.add_dependant_worker self
|
14
|
+
end
|
15
|
+
|
16
|
+
def async_perform period=1.0, task
|
17
|
+
run_scheduler task, period
|
18
|
+
end
|
19
|
+
|
20
|
+
def perform period=1.0, task
|
21
|
+
run_scheduler task, period, true
|
22
|
+
end
|
23
|
+
|
24
|
+
def shutdown!
|
25
|
+
Stackify.delete_worker self
|
26
|
+
if @worker_thread
|
27
|
+
Stackify.internal_log :info, "Thread with name \"#{@name}\" is terminated!"
|
28
|
+
Thread.kill @worker_thread
|
29
|
+
else
|
30
|
+
Stackify.internal_log :warn, "Thread with name \"#{@name}\" is terminated with exception!"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def status
|
35
|
+
@worker_thread.try(:status)
|
36
|
+
end
|
37
|
+
|
38
|
+
def backtrace
|
39
|
+
@worker_thread.try(:backtrace)
|
40
|
+
end
|
41
|
+
|
42
|
+
def alive?
|
43
|
+
@worker_thread.try(:alive?)
|
44
|
+
end
|
45
|
+
|
46
|
+
def id
|
47
|
+
object_id
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def generate_name
|
52
|
+
'Untitled worker'
|
53
|
+
end
|
54
|
+
|
55
|
+
def run_scheduler task, period, sync = false
|
56
|
+
@worker_thread = Thread.new do
|
57
|
+
@scheduler.run period, task
|
58
|
+
after_perform @scheduler.task_result if respond_to? :after_perform
|
59
|
+
shutdown!
|
60
|
+
end
|
61
|
+
@worker_thread.join if sync && @worker_thread.alive?
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
|
3
|
+
config.filter_run :focus
|
4
|
+
config.run_all_when_everything_filtered = true
|
5
|
+
|
6
|
+
config.order = :random
|
7
|
+
|
8
|
+
config.expect_with :rspec do |expectations|
|
9
|
+
expectations.syntax = :expect
|
10
|
+
end
|
11
|
+
|
12
|
+
config.mock_with :rspec do |mocks|
|
13
|
+
mocks.syntax = :expect
|
14
|
+
mocks.verify_partial_doubles = true
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'stackify/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'stackify-api-ruby'
|
8
|
+
spec.version = '1.0.0'
|
9
|
+
spec.authors = ['Stackify']
|
10
|
+
spec.email = ['support@stackify.com']
|
11
|
+
spec.summary = 'Stackify API for Ruby'
|
12
|
+
spec.description = 'Stackify Logs and Metrics API for Ruby'
|
13
|
+
spec.homepage = 'http://www.stackify.com/'
|
14
|
+
spec.license = 'Apache'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
22
|
+
spec.add_development_dependency 'rake', '~> 0'
|
23
|
+
spec.add_runtime_dependency 'activesupport', '~> 4.1', '>= 4.1.1'
|
24
|
+
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stackify-api-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stackify
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-05 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.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.1'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 4.1.1
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '4.1'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 4.1.1
|
61
|
+
description: Stackify Logs and Metrics API for Ruby
|
62
|
+
email:
|
63
|
+
- support@stackify.com
|
64
|
+
executables: []
|
65
|
+
extensions: []
|
66
|
+
extra_rdoc_files: []
|
67
|
+
files:
|
68
|
+
- ".gitignore"
|
69
|
+
- ".rspec"
|
70
|
+
- ".ruby-gemset"
|
71
|
+
- ".ruby-version"
|
72
|
+
- Gemfile
|
73
|
+
- Gemfile.lock
|
74
|
+
- LICENSE.txt
|
75
|
+
- README.md
|
76
|
+
- Rakefile
|
77
|
+
- lib/generators/stackify/stackify_generator.rb
|
78
|
+
- lib/generators/stackify/templates/stackify.rb
|
79
|
+
- lib/stackify-api-ruby.rb
|
80
|
+
- lib/stackify/authorization/authorizable.rb
|
81
|
+
- lib/stackify/authorization/authorization_client.rb
|
82
|
+
- lib/stackify/engine.rb
|
83
|
+
- lib/stackify/env_details.rb
|
84
|
+
- lib/stackify/error.rb
|
85
|
+
- lib/stackify/errors_governor.rb
|
86
|
+
- lib/stackify/http_client.rb
|
87
|
+
- lib/stackify/logger_client.rb
|
88
|
+
- lib/stackify/logger_proxy.rb
|
89
|
+
- lib/stackify/logs_sender.rb
|
90
|
+
- lib/stackify/metrics/metric.rb
|
91
|
+
- lib/stackify/metrics/metric_aggregate.rb
|
92
|
+
- lib/stackify/metrics/metrics.rb
|
93
|
+
- lib/stackify/metrics/metrics_client.rb
|
94
|
+
- lib/stackify/metrics/metrics_queue.rb
|
95
|
+
- lib/stackify/metrics/metrics_sender.rb
|
96
|
+
- lib/stackify/metrics/monitor.rb
|
97
|
+
- lib/stackify/msgs_queue.rb
|
98
|
+
- lib/stackify/rack/errors_catcher.rb
|
99
|
+
- lib/stackify/schedule_task.rb
|
100
|
+
- lib/stackify/scheduler.rb
|
101
|
+
- lib/stackify/utils/backtrace.rb
|
102
|
+
- lib/stackify/utils/configuration.rb
|
103
|
+
- lib/stackify/utils/methods.rb
|
104
|
+
- lib/stackify/utils/msg_object.rb
|
105
|
+
- lib/stackify/version.rb
|
106
|
+
- lib/stackify/workers/add_msg_worker.rb
|
107
|
+
- lib/stackify/workers/auth_worker.rb
|
108
|
+
- lib/stackify/workers/logs_sender_worker.rb
|
109
|
+
- lib/stackify/workers/worker.rb
|
110
|
+
- spec/spec_helper.rb
|
111
|
+
- stackify-api-ruby.gemspec
|
112
|
+
homepage: http://www.stackify.com/
|
113
|
+
licenses:
|
114
|
+
- Apache
|
115
|
+
metadata: {}
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
require_paths:
|
119
|
+
- lib
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
requirements: []
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 2.2.2
|
133
|
+
signing_key:
|
134
|
+
specification_version: 4
|
135
|
+
summary: Stackify API for Ruby
|
136
|
+
test_files:
|
137
|
+
- spec/spec_helper.rb
|