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/schedule_delay.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/msgs_queue_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, MsgsQueueWorker, ScheduleDelay, ScheduleTask, Scheduler, StackifiedError, StringException, Worker

Constant Summary collapse

VERSION =
'1.0.14'
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

Methods included from Authorizable

included

Class Attribute Details

.config=(value) ⇒ Object (writeonly)

Sets the attribute config

Parameters:

  • value

    the value to set the attribute config to.



38
39
40
# File 'lib/stackify-api-ruby.rb', line 38

def config=(value)
  @config = value
end

Class Method Details

.add_dependant_worker(worker) ⇒ Object



90
91
92
# File 'lib/stackify-api-ruby.rb', line 90

def add_dependant_worker worker
  @workers << worker
end

.alive_adding_msg_workersObject



82
83
84
# File 'lib/stackify-api-ruby.rb', line 82

def alive_adding_msg_workers
  @workers.select{ |w| w.alive? && w.type == :add_msg }
end

.configurationObject



40
41
42
# File 'lib/stackify-api-ruby.rb', line 40

def configuration
  @config ||= Stackify::Configuration.new
end

.delete_worker(worker) ⇒ Object



86
87
88
# File 'lib/stackify-api-ruby.rb', line 86

def delete_worker worker
  @workers.delete worker
end

.internal_log(level, msg) ⇒ Object



102
103
104
# File 'lib/stackify-api-ruby.rb', line 102

def internal_log level, msg
  Stackify.logger.send(level.downcase.to_sym, Stackify::INTERNAL_LOG_PREFIX){ msg }
end

.is_valid?Boolean

Returns:

  • (Boolean)


145
146
147
# File 'lib/stackify-api-ruby.rb', line 145

def is_valid?
  configuration.is_valid?
end

.log_internal_error(msg) ⇒ Object



98
99
100
# File 'lib/stackify-api-ruby.rb', line 98

def log_internal_error msg
  Stackify.logger.error (::Stackify::INTERNAL_LOG_PREFIX){ msg }
end

.loggerObject



71
72
73
# File 'lib/stackify-api-ruby.rb', line 71

def logger
  self.configuration.logger
end

.logger_clientObject



63
64
65
# File 'lib/stackify-api-ruby.rb', line 63

def logger_client
  @logger_client ||= Stackify::LoggerClient.new
end

.logs_senderObject



67
68
69
# File 'lib/stackify-api-ruby.rb', line 67

def logs_sender
  @logs_sender ||= Stackify::LogsSender.new
end

.make_remained_jobObject



140
141
142
143
# File 'lib/stackify-api-ruby.rb', line 140

def make_remained_job
  @status = STATUSES[:terminating]
  Stackify.msgs_queue.push_remained_msgs
end

.msgs_queueObject



59
60
61
# File 'lib/stackify-api-ruby.rb', line 59

def msgs_queue
  @msgs_queue ||= Stackify::MsgsQueue.new
end

.run(async = true) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/stackify-api-ruby.rb', line 106

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

Yields:



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/stackify-api-ruby.rb', line 44

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



75
76
77
78
79
80
# File 'lib/stackify-api-ruby.rb', line 75

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_loggingObject



128
129
130
# File 'lib/stackify-api-ruby.rb', line 128

def start_logging
  msgs_queue
end

.start_metricsObject



132
133
134
# File 'lib/stackify-api-ruby.rb', line 132

def start_metrics
  Thread.new { Stackify::Metrics.metrics_client.start }
end

.statusObject



94
95
96
# File 'lib/stackify-api-ruby.rb', line 94

def status
  @status
end

.status=(status) ⇒ Object



161
162
163
164
165
166
167
# File 'lib/stackify-api-ruby.rb', line 161

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

Returns:

  • (Boolean)


153
154
155
# File 'lib/stackify-api-ruby.rb', line 153

def terminated?
  @status == STATUSES[:terminated]
end

.terminating?Boolean

Returns:

  • (Boolean)


149
150
151
# File 'lib/stackify-api-ruby.rb', line 149

def terminating?
  @status == STATUSES[:terminating]
end

.workersObject



136
137
138
# File 'lib/stackify-api-ruby.rb', line 136

def workers
  @workers
end

.working?Boolean

Returns:

  • (Boolean)


157
158
159
# File 'lib/stackify-api-ruby.rb', line 157

def working?
  @status == STATUSES[:working]
end