pushyd 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 838aaf0ca927c20acf4d53714ff5eaa11499716a
4
- data.tar.gz: e481c674723737cf9b8b6f84b38e57c8e6b39804
3
+ metadata.gz: c969ee7254c157dc251ed7e2a8608d35ddef72de
4
+ data.tar.gz: 746e6b66dcbbecf7c46c11aa89a4e552708d820a
5
5
  SHA512:
6
- metadata.gz: e7cad3480998b54851e30573b0e1f8229c9c2ccd50359436b11b236ccccbd6fc2817e7a7bcecbcedbff0538366efa5814c61aeefccedc3d1d2408c2e07104fcb
7
- data.tar.gz: 37cc4b0233a4da19f28d3c2a52cce679e4e12129b282bdb3d514ceee0a1ee5dac3a40b051bb5f783f20aee425eab2a0fa4b06003234030ad037e16dec4fe9813
6
+ metadata.gz: ab2bb5a1eb46ae1b30b29c76c031331dec347bb54ee028d9d27ffa7d0abe4007baa6ff3e3861f4ef4e6c2fdb05aa287c26292739c6331808d5e22bfb5dfc455e
7
+ data.tar.gz: 0b5b868b6315988e49b41b0e52c7fb593d0d7716c396f1aa65edd72920124bc4fb41f7207c4332f03f084a1dc798d578f0f057fe969e0d70f55674a39ea2998d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pushyd (0.1.1)
4
+ pushyd (0.2.0)
5
5
  bunny
6
6
  chamber
7
7
  daemons
@@ -64,13 +64,7 @@ Daemons.run_proc('pushy-daemon', run_options) do
64
64
  puts "--- loading code and logger"
65
65
  require_relative "../lib/pushyd"
66
66
 
67
- # Prepare logger
68
- if Config[:log]
69
- logger = Logger.new(Config[:log])
70
- logger.info('Daemon starting')
71
- end
72
-
73
67
  # Start daemon
74
68
  puts "--- starting"
75
- PushyDaemon::Daemon.run(logger)
69
+ PushyDaemon::Daemon.run
76
70
  end
@@ -10,4 +10,14 @@ PROXY_USE_ACK = false
10
10
  PROXY_SCOPE = "dev"
11
11
 
12
12
 
13
+ # Constants: logger
14
+ LOG_COL_ID = 6
15
+ LOG_TRIM_LINE = 200
16
+ LOG_FORMAT_TIME = "%Y-%m-%d %H:%M:%S"
17
+ LOG_FORMAT_MESSAGE = "%-6s"
18
+ LOG_NEWLINE = "\n"
19
+ LOG_INDENT = "\t"
20
+ LOG_ROTATION = "daily"
21
+
22
+
13
23
  # Constants: shouter
data/lib/pushyd/daemon.rb CHANGED
@@ -1,18 +1,27 @@
1
1
  module PushyDaemon
2
2
  class Daemon
3
3
 
4
- def self.run(logger)
4
+ def self.run
5
5
  # Create a new proxy
6
- p = Proxy.new(logger)
6
+ p = Proxy.new
7
7
 
8
8
  # Dump config table
9
9
  puts p.table.to_s
10
10
 
11
11
  # Create a new shouter
12
- s = Shouter.new(logger)
12
+ s = Shouter.new
13
13
 
14
14
  # Start infinite loop
15
15
  s.shout
16
+
17
+ rescue Errno::EACCES => e
18
+ #logger.error "ABORT #{e.class}: #{e.message}"
19
+ abort "ABORT #{e.class}: #{e.message}"
20
+
21
+ rescue Exception => e
22
+ #logger.error "ABORT #{e.class}: #{e.message}"
23
+ abort "ABORT #{e.class}: #{e.message}"
24
+
16
25
  end
17
26
 
18
27
  end
@@ -10,27 +10,33 @@ module PushyDaemon
10
10
 
11
11
  class Endpoint
12
12
 
13
- def initialize(logger)
14
- @logger = logger
13
+ def initialize
14
+ # Prepare logger (may be NIL > won't output anything)
15
+ logfile = Config[:log]
16
+
17
+ # Create the logger
18
+ @logger = PushyLogger.new(logfile, LOG_ROTATION)
19
+ @logger.add Logger::INFO, "starting #{self.class.name.to_s}"
15
20
  end
16
21
 
17
22
  protected
18
23
 
19
- def abort message
20
- @logger.error "ABORT #{self.class}: #{message}"
21
- raise "ABORT #{self.class}: #{message}"
24
+ def error message
25
+ @logger.add Logger::ERROR, "#{self.class}: #{message}"
26
+ #raise "ABORT #{self.class}: #{message}"
22
27
  end
23
28
 
24
29
  def info message
25
- @logger.info "#{self.class}: #{message}"
30
+ @logger.add Logger::INFO, "#{self.class}: #{message}"
26
31
  end
27
32
 
28
33
  def message params = {}
29
34
  # Indenting
30
- indent = " " * (params[:way].length)
35
+ #indent = " " * (params[:way].length)
36
+ lines = []
31
37
 
32
38
  # Header
33
- @logger.info sprintf(
39
+ message = sprintf(
34
40
  "%3s %-15s %s",
35
41
  params[:way],
36
42
  params[:exchange],
@@ -39,17 +45,22 @@ module PushyDaemon
39
45
 
40
46
  # Attributes
41
47
  if (params[:attrs].is_a? Hash)
48
+ # lines.merge params[:attrs]
42
49
  params[:attrs].each do |name, value|
43
- @logger.info sprintf("%s %-15s %s", indent, name, value)
50
+ lines << sprintf("%-15s %s", name, value)
44
51
  end
45
52
  end
46
53
 
47
54
  # Body (split in lines to log them separately)
48
55
  unless (params[:body].nil? || params[:body].empty?)
49
56
  JSON.pretty_generate(params[:body]).each_line do |line|
50
- @logger.info sprintf("%s %s", indent, line.rstrip)
57
+ lines << line.rstrip
51
58
  end
52
59
  end
60
+
61
+ # Send the info
62
+ @logger.add Logger::INFO, message, lines
63
+ # @logger.log_info message, lines
53
64
  end
54
65
 
55
66
  # Start connexion to RabbitMQ
data/lib/pushyd/proxy.rb CHANGED
@@ -11,10 +11,10 @@ module PushyDaemon
11
11
 
12
12
  attr_accessor :table
13
13
 
14
- def initialize(logger)
14
+ def initialize
15
15
  # Init
16
+ super
16
17
  @exchanges = {}
17
- @logger = logger
18
18
 
19
19
  # Init ASCII table
20
20
  @table = Terminal::Table.new
@@ -30,7 +30,7 @@ module PushyDaemon
30
30
  # Check config
31
31
  config_rules = Config[:rules]
32
32
  unless (config_rules.is_a? Enumerable) && !config_rules.empty?
33
- abort "prepare: empty [rules] section"
33
+ error "prepare: empty [rules] section"
34
34
  end
35
35
  info "found rules: #{config_rules.keys.join(', ')}"
36
36
 
@@ -45,7 +45,7 @@ module PushyDaemon
45
45
  info "dumping configuration\n#{@table.to_s}"
46
46
 
47
47
  rescue Bunny::TCPConnectionFailedForAllHosts => e
48
- abort "ERROR: cannot connect to RabbitMQ hosts (#{e.inspect})"
48
+ error "ERROR: cannot connect to RabbitMQ hosts (#{e.inspect})"
49
49
  end
50
50
 
51
51
  private
@@ -102,7 +102,7 @@ module PushyDaemon
102
102
  info "#{id}: #{response.body}"
103
103
 
104
104
  rescue Exception => e
105
- abort "propagate: #{e.message}"
105
+ error "propagate: #{e.message}"
106
106
 
107
107
  end
108
108
 
@@ -128,7 +128,7 @@ module PushyDaemon
128
128
 
129
129
  # Handle body parse errors
130
130
  rescue Encoding::UndefinedConversionError => e
131
- abort "parse: JSON PARSE ERROR: #{e.inspect}"
131
+ error "parse: JSON PARSE ERROR: #{e.inspect}"
132
132
  return {}
133
133
  end
134
134
 
@@ -0,0 +1,61 @@
1
+ require "logger"
2
+
3
+ class PushyLogger < Logger
4
+
5
+ def initialize logfile, rotation = nil
6
+ # Call my parent's initializer
7
+ super
8
+
9
+ # And the formatter
10
+ self.formatter = proc do |severity, datetime, progname, messages|
11
+ # Build common line prefix
12
+ prefix = "%s %s\t" % [
13
+ datetime.strftime(LOG_FORMAT_TIME),
14
+ severity ]
15
+
16
+ # If we have a bunch of lines, prefix them and send them together
17
+ if messages.is_a? Array
18
+ messages.map { |line| prefix + line + LOG_NEWLINE}.join
19
+ else
20
+ prefix + messages.to_s + LOG_NEWLINE
21
+ end
22
+ end
23
+ end
24
+
25
+ def add level, message, lines = {}
26
+ level ||= Logger::DEBUG
27
+
28
+ prefix = " | "
29
+
30
+ if lines.is_a? Hash
31
+ output = build_from_hash prefix, lines
32
+ elsif lines.is_a? Array
33
+ output = build_from_array prefix, lines
34
+ else
35
+ output = []
36
+ end
37
+
38
+ # Prepend plain message to output
39
+ output.unshift message.force_encoding(Encoding::UTF_8)
40
+
41
+ # Send all this to logger
42
+ super level, output
43
+ end
44
+
45
+ protected
46
+
47
+ def build_from_array prefix, lines
48
+ lines.map do |value|
49
+ text = value.to_s[0..LOG_TRIM_LINE]
50
+ "#{prefix}#{text}"
51
+ end
52
+ end
53
+
54
+ def build_from_hash prefix, lines
55
+ lines.map do |name, value|
56
+ text = value.to_s.strip[0..LOG_TRIM_LINE]
57
+ "#{prefix}#{name}: #{text}"
58
+ end
59
+ end
60
+
61
+ end
@@ -13,9 +13,9 @@ module PushyDaemon
13
13
 
14
14
  attr_accessor :table
15
15
 
16
- def initialize(logger)
16
+ def initialize
17
17
  # Init
18
- @logger = logger
18
+ super
19
19
  @keys = []
20
20
 
21
21
  # Start connexion to RabbitMQ and create channel
@@ -32,7 +32,7 @@ module PushyDaemon
32
32
  info "found topic: #{@topic}"
33
33
  info "found keys: #{@keys.join(', ')}"
34
34
  else
35
- abort "prepare: empty [shout] section"
35
+ error "prepare: empty [shout] section"
36
36
  end
37
37
 
38
38
  # Create exchange
@@ -44,7 +44,7 @@ module PushyDaemon
44
44
  # end
45
45
 
46
46
  rescue Bunny::TCPConnectionFailedForAllHosts => e
47
- abort "ERROR: cannot connect to RabbitMQ hosts (#{e.inspect})"
47
+ error "ERROR: cannot connect to RabbitMQ hosts (#{e.inspect})"
48
48
  end
49
49
 
50
50
  def shout
@@ -66,7 +66,6 @@ module PushyDaemon
66
66
 
67
67
  rescue Interrupt => e
68
68
  @channel.close
69
- # conn.close
70
69
  raise PushyDaemon::ShouterInterrupted, "#{e.class} (#{e.inspect})"
71
70
  end
72
71
 
data/lib/pushyd.rb CHANGED
@@ -8,6 +8,7 @@ require "singleton"
8
8
  # Project libs
9
9
  require_relative "pushyd/config"
10
10
  require_relative "pushyd/constants"
11
+ require_relative "pushyd/pushy_logger"
11
12
  require_relative "pushyd/endpoint"
12
13
  require_relative "pushyd/proxy"
13
14
  require_relative "pushyd/shouter"
data/pushyd.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  Gem::Specification.new do |spec|
3
3
  # Project version
4
- spec.version = "0.1.1"
4
+ spec.version = "0.2.0"
5
5
 
6
6
  # Project description
7
7
  spec.name = "pushyd"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pushyd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno MEDICI
@@ -167,7 +167,7 @@ dependencies:
167
167
  description: "(description to be written)"
168
168
  email: pushyd@bmconseil.com
169
169
  executables:
170
- - pushyd.rb
170
+ - pushyd
171
171
  extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
@@ -176,7 +176,7 @@ files:
176
176
  - Gemfile.lock
177
177
  - README.md
178
178
  - Rakefile
179
- - bin/pushyd.rb
179
+ - bin/pushyd
180
180
  - defaults.yml
181
181
  - lib/pushyd.rb
182
182
  - lib/pushyd/config.rb
@@ -184,6 +184,7 @@ files:
184
184
  - lib/pushyd/daemon.rb
185
185
  - lib/pushyd/endpoint.rb
186
186
  - lib/pushyd/proxy.rb
187
+ - lib/pushyd/pushy_logger.rb
187
188
  - lib/pushyd/shouter.rb
188
189
  - pushyd.gemspec
189
190
  homepage: http://github.com/bmedici/pushyd