ocean-rails 1.29.1 → 1.29.2
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/config/initializers/zeromq_logger.rb +0 -9
- data/lib/generators/ocean_setup/ocean_setup_generator.rb +6 -11
- data/lib/ocean/version.rb +1 -1
- data/lib/ocean/zero_log.rb +24 -20
- data/lib/ocean/zeromq_logger.rb +7 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ae893fab5ff15b722a770f78dc3a8cc5c3e2a85
|
4
|
+
data.tar.gz: 41be8d155e026f08656b3e9eec974c04d3e93522
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dc70080114ec6aa9ec9812c1f6c7c3de720bbe1b3f265d2d9bb0367a5e6cc15720709bf5f8b3b7bd14fdca053a17b7a3df8952bb17752e51ca054008e01f7e3
|
7
|
+
data.tar.gz: 585963133384bc06788fb2fd5ee61646d98767c414bcc97f8ef33ec99ad4b3e675779baf1fbe625f7835b24231e7f9177dc84f7409034f15940ac1584382b83c
|
@@ -1,14 +1,5 @@
|
|
1
|
-
# If we're running in production, assign another ZMQ logger here.
|
2
|
-
# Another one is assigned in the app's config/application.rb - for some
|
3
|
-
# reason, assigning one in config/environments/production.rb won't work.
|
4
|
-
# Why this is so is an irritating mystery.
|
5
|
-
|
6
1
|
if Rails.env == 'production' && ENV['NO_ZEROMQ_LOGGING'].blank?
|
7
2
|
|
8
|
-
# Use a different logger for distributed setups
|
9
|
-
Rails.logger = ZeromqLogger.new
|
10
|
-
Rails.logger.level = Logger::INFO
|
11
|
-
|
12
3
|
# Announce us
|
13
4
|
Rails.logger.info "Initialising Rails process"
|
14
5
|
|
@@ -90,21 +90,16 @@ class OceanSetupGenerator < Rails::Generators::NamedBase #:nodoc: all
|
|
90
90
|
git :init
|
91
91
|
end
|
92
92
|
|
93
|
-
def
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
# Why this has to be done in two distinct places is an irritating mystery.
|
98
|
-
Rails.logger = ZeromqLogger.new if Rails.env == "production"
|
99
|
-
|
100
|
-
RUBY
|
101
|
-
end
|
102
|
-
end
|
93
|
+
def add_zeromq_logging_in_production
|
94
|
+
prepend_to_file 'config/environments/production.rb',
|
95
|
+
"Rails.logger = ZeromqLogger.new\n\n"
|
96
|
+
end
|
103
97
|
|
104
98
|
def turn_off_view_logging_in_production
|
105
99
|
application(nil, env: "production") do
|
106
100
|
"# We don't want to see view render lines in production.
|
107
|
-
config.action_view.logger = nil
|
101
|
+
config.action_view.logger = nil
|
102
|
+
"
|
108
103
|
end
|
109
104
|
end
|
110
105
|
|
data/lib/ocean/version.rb
CHANGED
data/lib/ocean/zero_log.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'ffi-rzmq'
|
2
2
|
|
3
|
-
|
4
3
|
#
|
5
4
|
# This is the class that provides the interface to ZeroMQ, both for sending log
|
6
5
|
# data to a cluster of log servers, and for receiving it.
|
@@ -24,8 +23,8 @@ class ZeroLog
|
|
24
23
|
# set up for the use of all threads in the process. A process exit
|
25
24
|
# handler will be set up to terminate the context on exit.
|
26
25
|
#
|
27
|
-
def initialize
|
28
|
-
super
|
26
|
+
def initialize(sub_push, log_hosts)
|
27
|
+
super()
|
29
28
|
unless @@context
|
30
29
|
#puts "Creating context"
|
31
30
|
@@context = ZMQ::Context.new(1)
|
@@ -33,15 +32,18 @@ class ZeroLog
|
|
33
32
|
at_exit { @@context.terminate
|
34
33
|
#puts "Context terminated"
|
35
34
|
}
|
35
|
+
#puts "Initialising the log data sender thread"
|
36
|
+
setup_sub_server(sub_push, log_hosts)
|
36
37
|
end
|
37
|
-
|
38
|
+
connect_to_sub_server(sub_push)
|
39
|
+
end
|
38
40
|
|
39
41
|
|
40
42
|
#
|
41
43
|
# This method returns the ZeroMQ Context object.
|
42
44
|
#
|
43
45
|
def context
|
44
|
-
|
46
|
+
@@context
|
45
47
|
end
|
46
48
|
|
47
49
|
|
@@ -75,7 +77,7 @@ class ZeroLog
|
|
75
77
|
# all available +LOG_HOSTS+. ZeroMQ handles buffering, re-connection and multiplexing
|
76
78
|
# (round-robin) to the +LOG_HOSTS+ +PULL+ servers.
|
77
79
|
#
|
78
|
-
def
|
80
|
+
def setup_sub_server(sub_push="sub_push", log_hosts=[])
|
79
81
|
# First create the server and let it bind, as this is required
|
80
82
|
# when using inproc: bind must precede any connects.
|
81
83
|
Thread.new(context) do |c|
|
@@ -87,7 +89,7 @@ class ZeroLog
|
|
87
89
|
subscriber.setsockopt(ZMQ::SUBSCRIBE, "")
|
88
90
|
# Set up the PUSH socket
|
89
91
|
loggers = context.socket(ZMQ::PUSH)
|
90
|
-
|
92
|
+
log_hosts.each do |host|
|
91
93
|
#puts "Connecting to the PULL server #{host}"
|
92
94
|
loggers.connect("tcp://#{host}:10000")
|
93
95
|
end
|
@@ -100,9 +102,11 @@ class ZeroLog
|
|
100
102
|
loggers.close
|
101
103
|
#puts "Closed sockets in other thread"
|
102
104
|
end
|
103
|
-
|
104
105
|
sleep 0.1 # Brute force and primitive, but it works
|
106
|
+
end
|
107
|
+
|
105
108
|
|
109
|
+
def connect_to_sub_server(sub_push="sub_push")
|
106
110
|
# Next create the PUB socket and connect it to the other thread
|
107
111
|
#puts "Creating the PUB socket"
|
108
112
|
$log_publisher = context.socket(ZMQ::PUB)
|
@@ -146,10 +150,10 @@ class ZeroLog
|
|
146
150
|
# round-robin fashion to each PULL log worker on the machine.
|
147
151
|
#
|
148
152
|
def pull_server(address=PUSH_ADDRESS)
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
+
#puts "Starting PULL server"
|
154
|
+
puller = context.socket(ZMQ::PULL)
|
155
|
+
#puts "Binding to the PULL socket"
|
156
|
+
puller.bind("tcp://*:10000")
|
153
157
|
# Set up the PUSH socket
|
154
158
|
pusher = context.socket(ZMQ::PUSH)
|
155
159
|
#puts "Binding to the PUSH socket"
|
@@ -167,17 +171,17 @@ class ZeroLog
|
|
167
171
|
# processing (such as storing received log info in a database).
|
168
172
|
#
|
169
173
|
def pull_worker(address=PUSH_ADDRESS)
|
170
|
-
|
171
|
-
|
172
|
-
|
174
|
+
#puts "Starting PULL worker"
|
175
|
+
puller = context.socket(ZMQ::PULL)
|
176
|
+
#puts "Connect to the PUSH socket"
|
173
177
|
puller.connect(address)
|
174
178
|
trap_int(puller)
|
175
179
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
180
|
+
while true do
|
181
|
+
s = ''
|
182
|
+
puller.recv_string(s)
|
183
|
+
puts "Received: #{s}"
|
184
|
+
end
|
181
185
|
end
|
182
186
|
|
183
187
|
|
data/lib/ocean/zeromq_logger.rb
CHANGED
@@ -9,7 +9,6 @@ require 'socket'
|
|
9
9
|
class ZeromqLogger
|
10
10
|
|
11
11
|
attr_accessor :level, :log_tags
|
12
|
-
attr_accessor :formatter
|
13
12
|
|
14
13
|
#
|
15
14
|
# Obtains the IP of the current process, initialises the @logger object
|
@@ -20,10 +19,12 @@ class ZeromqLogger
|
|
20
19
|
super
|
21
20
|
# Get info about our environment
|
22
21
|
@ip = Socket.ip_address_list.detect{|intf| intf.ipv4_private?}.getnameinfo[0]
|
22
|
+
# Find the log hosts
|
23
|
+
f = File.join(Rails.root, "config/config.yml")
|
24
|
+
cfg = YAML.load(ERB.new(File.read(f)).result)
|
25
|
+
@log_hosts = cfg['LOG_HOSTS'].blank? ? cfg['production']['LOG_HOSTS'] : cfg['LOG_HOSTS']
|
23
26
|
# Set up the logger
|
24
|
-
@logger = ZeroLog.new
|
25
|
-
@logger.init_log_data_sender "/tmp/sub_push_#{Process.pid}"
|
26
|
-
@formatter = ::Logger::Formatter.new
|
27
|
+
@logger = ZeroLog.new "/tmp/sub_push_#{Process.pid}", @log_hosts
|
27
28
|
end
|
28
29
|
|
29
30
|
#
|
@@ -70,11 +71,10 @@ class ZeromqLogger
|
|
70
71
|
#
|
71
72
|
# +msg+: The log message itself.
|
72
73
|
#
|
73
|
-
def add(level, msg
|
74
|
+
def add(level, msg)
|
74
75
|
return true if level < @level
|
75
|
-
msg = progname if msg.blank?
|
76
76
|
return true if msg.blank? # Don't send
|
77
|
-
#puts "Adding #{level} #{msg}
|
77
|
+
#puts "Adding #{level} #{msg}"
|
78
78
|
milliseconds = (Time.now.utc.to_f * 1000).to_i
|
79
79
|
data = { timestamp: milliseconds,
|
80
80
|
ip: @ip,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocean-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.29.
|
4
|
+
version: 1.29.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Bengtson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|