Module: Stackify
- Includes:
- Authorizable
- Defined in:
- lib/stackify/error.rb,
lib/stackify/engine.rb,
lib/stackify/version.rb,
lib/stackify-api-ruby.rb,
lib/stackify/scheduler.rb,
lib/stackify/msgs_queue.rb,
lib/stackify/env_details.rb,
lib/stackify/http_client.rb,
lib/stackify/logs_sender.rb,
lib/stackify/logger_proxy.rb,
lib/stackify/logger_client.rb,
lib/stackify/schedule_task.rb,
lib/stackify/workers/worker.rb,
lib/stackify/errors_governor.rb,
lib/stackify/metrics/metrics.rb,
lib/stackify/utils/msg_object.rb,
lib/stackify/rack/errors_catcher.rb,
lib/stackify/utils/configuration.rb,
lib/stackify/workers/auth_worker.rb,
lib/stackify/workers/add_msg_worker.rb,
lib/stackify/workers/logs_sender_worker.rb
Defined Under Namespace
Modules: Authorizable, Backtrace, Metrics, Utils
Classes: AddMsgWorker, AuthWorker, Configuration, Engine, EnvDetails, ErrorsCatcher, ErrorsGovernor, HttpClient, LoggerClient, LoggerProxy, LogsSender, LogsSenderWorker, MsgObject, MsgsQueue, ScheduleTask, Scheduler, StackifiedError, Worker
Constant Summary
collapse
- VERSION =
'1.0.1'
- INTERNAL_LOG_PREFIX =
'[Stackify]'.freeze
- STATUSES =
{ working: 'working', terminating: 'terminating', terminated: 'terminated'}
- MODES =
{ logging: :logging, metrics: :metrics, both: :both }
Class Attribute Summary collapse
Class Method Summary
collapse
included
Class Attribute Details
.config=(value) ⇒ Object
Sets the attribute config
35
36
37
|
# File 'lib/stackify-api-ruby.rb', line 35
def config=(value)
@config = value
end
|
Class Method Details
.add_dependant_worker(worker) ⇒ Object
87
88
89
|
# File 'lib/stackify-api-ruby.rb', line 87
def add_dependant_worker worker
@workers << worker
end
|
.alive_adding_msg_workers ⇒ Object
79
80
81
|
# File 'lib/stackify-api-ruby.rb', line 79
def alive_adding_msg_workers
@workers.select{ |w| w.alive? && w.type == :add_msg }
end
|
.delete_worker(worker) ⇒ Object
83
84
85
|
# File 'lib/stackify-api-ruby.rb', line 83
def delete_worker worker
@workers.delete worker
end
|
.internal_log(level, msg) ⇒ Object
.is_valid? ⇒ Boolean
142
143
144
|
# File 'lib/stackify-api-ruby.rb', line 142
def is_valid?
configuration.is_valid?
end
|
.log_internal_error(msg) ⇒ Object
68
69
70
|
# File 'lib/stackify-api-ruby.rb', line 68
def logger
self.configuration.logger
end
|
.logs_sender ⇒ Object
64
65
66
|
# File 'lib/stackify-api-ruby.rb', line 64
def logs_sender
@logs_sender ||= Stackify::LogsSender.new
end
|
.make_remained_job ⇒ Object
137
138
139
140
|
# File 'lib/stackify-api-ruby.rb', line 137
def make_remained_job
@status = STATUSES[:terminating]
Stackify.msgs_queue.push_remained_msgs
end
|
.msgs_queue ⇒ Object
56
57
58
|
# File 'lib/stackify-api-ruby.rb', line 56
def msgs_queue
@msgs_queue ||= Stackify::MsgsQueue.new
end
|
.run(async = true) ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/stackify-api-ruby.rb', line 103
def run async = true
if Stackify.is_valid?
at_exit { make_remained_job }
t1 = Thread.new { Stackify.authorize }
case Stackify.configuration.mode
when MODES[:both]
t2 = start_logging
t3 = start_metrics
when MODES[:logging]
t2 = start_logging
when MODES[:metrics]
t3 = start_metrics
end
unless async
t1.join
t2.join if t2
end
else
Stackify.log_internal_error "Stackify is not properly configured! Errors: #{Stackify.configuration.errors}"
end
end
|
.setup {|configuration| ... } ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/stackify-api-ruby.rb', line 41
def setup
@workers = []
yield(configuration) if block_given?
if configuration.is_valid?
@status = STATUSES[:working]
else
msg = "Stackify's configuration is not valid!"
configuration.errors.each do |error_msg|
msg += "\n" + error_msg
end
raise msg
end
end
|
.shutdown_all(caller_obj = nil) ⇒ Object
72
73
74
75
76
77
|
# File 'lib/stackify-api-ruby.rb', line 72
def shutdown_all caller_obj=nil
Stackify.status = Stackify::STATUSES[:terminating]
@workers.each do |worker|
worker.shutdown! unless worker.equal? caller_obj
end
end
|
.start_logging ⇒ Object
125
126
127
|
# File 'lib/stackify-api-ruby.rb', line 125
def start_logging
Thread.new { Stackify.logs_sender.start}
end
|
91
92
93
|
# File 'lib/stackify-api-ruby.rb', line 91
def status
@status
end
|
.status=(status) ⇒ Object
158
159
160
161
162
163
164
|
# File 'lib/stackify-api-ruby.rb', line 158
def status= status
if STATUSES.has_value? status
@status = status
else
raise "method 'status=' should get one of arguments #{STATUSES.values}, not a #{status}"
end
end
|
.terminated? ⇒ Boolean
150
151
152
|
# File 'lib/stackify-api-ruby.rb', line 150
def terminated?
@status == STATUSES[:terminated]
end
|
.terminating? ⇒ Boolean
146
147
148
|
# File 'lib/stackify-api-ruby.rb', line 146
def terminating?
@status == STATUSES[:terminating]
end
|
133
134
135
|
# File 'lib/stackify-api-ruby.rb', line 133
def workers
@workers
end
|
.working? ⇒ Boolean
154
155
156
|
# File 'lib/stackify-api-ruby.rb', line 154
def working?
@status == STATUSES[:working]
end
|