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.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +30 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +157 -0
  7. data/Rakefile +2 -0
  8. data/lib/generators/stackify/stackify_generator.rb +13 -0
  9. data/lib/generators/stackify/templates/stackify.rb +17 -0
  10. data/lib/stackify-api-ruby.rb +166 -0
  11. data/lib/stackify/authorization/authorizable.rb +61 -0
  12. data/lib/stackify/authorization/authorization_client.rb +31 -0
  13. data/lib/stackify/engine.rb +21 -0
  14. data/lib/stackify/env_details.rb +108 -0
  15. data/lib/stackify/error.rb +56 -0
  16. data/lib/stackify/errors_governor.rb +65 -0
  17. data/lib/stackify/http_client.rb +50 -0
  18. data/lib/stackify/logger_client.rb +71 -0
  19. data/lib/stackify/logger_proxy.rb +35 -0
  20. data/lib/stackify/logs_sender.rb +78 -0
  21. data/lib/stackify/metrics/metric.rb +68 -0
  22. data/lib/stackify/metrics/metric_aggregate.rb +52 -0
  23. data/lib/stackify/metrics/metrics.rb +88 -0
  24. data/lib/stackify/metrics/metrics_client.rb +238 -0
  25. data/lib/stackify/metrics/metrics_queue.rb +26 -0
  26. data/lib/stackify/metrics/metrics_sender.rb +32 -0
  27. data/lib/stackify/metrics/monitor.rb +34 -0
  28. data/lib/stackify/msgs_queue.rb +78 -0
  29. data/lib/stackify/rack/errors_catcher.rb +17 -0
  30. data/lib/stackify/schedule_task.rb +23 -0
  31. data/lib/stackify/scheduler.rb +79 -0
  32. data/lib/stackify/utils/backtrace.rb +36 -0
  33. data/lib/stackify/utils/configuration.rb +78 -0
  34. data/lib/stackify/utils/methods.rb +27 -0
  35. data/lib/stackify/utils/msg_object.rb +22 -0
  36. data/lib/stackify/version.rb +3 -0
  37. data/lib/stackify/workers/add_msg_worker.rb +9 -0
  38. data/lib/stackify/workers/auth_worker.rb +18 -0
  39. data/lib/stackify/workers/logs_sender_worker.rb +17 -0
  40. data/lib/stackify/workers/worker.rb +65 -0
  41. data/spec/spec_helper.rb +17 -0
  42. data/stackify-api-ruby.gemspec +25 -0
  43. 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,3 @@
1
+ module Stackify
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,9 @@
1
+ module Stackify
2
+ class AddMsgWorker < Worker
3
+
4
+ def initialize name = 'AddMessage worker'
5
+ super
6
+ @type = :add_msg
7
+ end
8
+ end
9
+ 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
@@ -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