ocean-rails 1.29.1 → 1.29.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|