pushyd 0.9.2 → 0.9.4

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: 1a39ea36bef0ba33327db24a6865749ea94ae141
4
- data.tar.gz: ffc5697760f37b0f9ea92078ca9f635569dd0461
3
+ metadata.gz: 0f6680e8b9c8639d2230c50187affeda2816b658
4
+ data.tar.gz: c896cb6178136eb5293a8cf0922b06364bb82f27
5
5
  SHA512:
6
- metadata.gz: 7030ba96dcaf5124298d35834dd9d463fedd294143afc1bdb4e720d62371129f1d76b633266373f971715e1c0d8d1ebaeec09c3ff5d6c497eec62cc746e77efd
7
- data.tar.gz: 7c8c2ae298a9f486e718156b773326556fd83d7951489ceb31a45f35f652df7c47d477f37edf778d755719260d9d0a648e1b41e17df89c78cf2c386024f6c6a0
6
+ metadata.gz: 0d9a4132921a47b2f909bd915213c9bf48606769ba8bd0d854da8c6936fc982e9bb5fb6c9e072be7ad63a0a3fc4172e0eeffc1fbc65cff8e61ecc9f53716d673
7
+ data.tar.gz: 9ecfa2313ed02c2df6c8285b4da4b9adc5905ef10200aad5bb62ec30272fdb71a9b3808c59308de94178848a33e3fe4041897c0556fecbfa32310c56675a3805
data/Gemfile.lock CHANGED
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pushyd (0.9.2)
4
+ pushyd (0.9.4)
5
5
  api-auth
6
+ bmc-daemon-lib (~> 0.2)
6
7
  bunny (~> 2.3)
7
- chamber (~> 2.9)
8
8
  daemons
9
9
  json
10
10
  newrelic_rpm
@@ -18,7 +18,9 @@ GEM
18
18
  amq-protocol (2.0.1)
19
19
  api-auth (2.0.0)
20
20
  ast (2.3.0)
21
- bunny (2.4.0)
21
+ bmc-daemon-lib (0.2.0)
22
+ chamber (~> 2.9)
23
+ bunny (2.5.0)
22
24
  amq-protocol (>= 2.0.1)
23
25
  chamber (2.9.0)
24
26
  hashie (~> 3.3)
data/bin/pushyd CHANGED
@@ -3,13 +3,13 @@
3
3
  # Try to load external libs, helpers and constants
4
4
  begin
5
5
  require "rubygems"
6
+ require 'bmc-daemon-lib'
6
7
  require "optparse"
7
8
  require 'daemons'
8
- require_relative "../lib/shared/conf"
9
9
  rescue LoadError => e
10
10
  raise "EXITING: some basic libs were not found (#{e.message})"
11
11
  end
12
- include Shared
12
+ include BmcDaemonLib
13
13
 
14
14
 
15
15
  # Handle configuration
data/defaults.yml CHANGED
@@ -19,7 +19,7 @@ shout:
19
19
  - crunched
20
20
 
21
21
  # newrelic:
22
- # licence: ""
22
+ # license: ""
23
23
  # platform: "bigbusiness" # app platform name
24
24
  # app_name: "rftpd-bigbusiness-dev" # nickname used for naming app
25
25
  # logfile: null
@@ -2,18 +2,19 @@ require 'bunny'
2
2
  require "securerandom"
3
3
 
4
4
  module PushyDaemon
5
+ # Class exceptions
5
6
  class EndpointConnexionContext < StandardError; end
6
7
  class EndpointConnectionError < StandardError; end
7
8
  class EndpointSubscribeContext < StandardError; end
8
9
  class EndpointSubscribeError < StandardError; end
9
10
 
10
11
  class Endpoint
11
- include Shared::LoggerHelper
12
+ include BmcDaemonLib::LoggerHelper
12
13
  attr_reader :logger
13
14
 
14
15
  def initialize
15
16
  # Prepare logger
16
- init_logger Conf[:logs]
17
+ @logger = BmcDaemonLib::LoggerPool.instance.get :file
17
18
 
18
19
  # Done
19
20
  log_info "endpoint initialized"
@@ -21,42 +22,6 @@ module PushyDaemon
21
22
 
22
23
  protected
23
24
 
24
- def init_logger logconf
25
- # Check structure conformity or set it to an empty hash
26
- logconf = {} unless logconf.is_a? Hash
27
- loglevel = logconf[:level]
28
- me = self.class.name
29
-
30
- # Compute logfile
31
- logfile = logfile(logconf, :file)
32
-
33
- # Prepare logger (may be NIL > won't output anything)
34
- @logger = Logger.new(logfile, LOG_ROTATION)
35
- @logger.formatter = Shared::LoggerFormatter
36
-
37
- # Set progname
38
- @logger.progname = me.split('::').last
39
-
40
- # Set expected level
41
- @logger.level = case loglevel
42
- when "debug"
43
- Logger::DEBUG
44
- when "info"
45
- Logger::INFO
46
- when "warn"
47
- Logger::WARN
48
- else
49
- Logger::INFO
50
- end
51
-
52
- # Announce on STDOUT we're now logging to file
53
- if logfile
54
- puts "#{self.class} logging loglevel [#{loglevel} > #{@logger.level}] to [#{logfile}]"
55
- else
56
- puts "#{self.class} logging disabled"
57
- end
58
- end
59
-
60
25
  def log_message msg_way, msg_exchange, msg_key, msg_body = [], msg_attrs = {}
61
26
  # Message header
62
27
  info sprintf("%3s %-15s %s", msg_way, msg_exchange, msg_key)
data/lib/pushyd/proxy.rb CHANGED
@@ -5,7 +5,9 @@ require 'terminal-table'
5
5
  module PushyDaemon
6
6
  class Proxy < Endpoint
7
7
  include Shared::HmacSignature
8
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
8
9
 
10
+ # Class options
9
11
  attr_accessor :table
10
12
 
11
13
  def initialize
@@ -166,12 +168,8 @@ module PushyDaemon
166
168
  end
167
169
 
168
170
  # NewRelic instrumentation
169
- if Conf.newrelic_enabled?
170
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
171
- add_transaction_tracer :handle_message, category: :task
172
- add_transaction_tracer :propagate, category: :task
173
- end
171
+ add_transaction_tracer :handle_message, category: :task
172
+ add_transaction_tracer :propagate, category: :task
174
173
 
175
174
  end
176
175
  end
177
-
@@ -6,7 +6,9 @@ module PushyDaemon
6
6
  class EndpointTopicContext < StandardError; end
7
7
 
8
8
  class Shouter < Endpoint
9
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
9
10
 
11
+ # Class options
10
12
  attr_accessor :table
11
13
 
12
14
  def initialize
@@ -101,11 +103,8 @@ module PushyDaemon
101
103
  end
102
104
 
103
105
  # NewRelic instrumentation
104
- if Conf.newrelic_enabled?
105
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
106
- add_transaction_tracer :channel_shout, category: :task
107
- add_transaction_tracer :shout, category: :task
108
- end
106
+ add_transaction_tracer :channel_shout, category: :task
107
+ add_transaction_tracer :shout, category: :task
109
108
 
110
109
  end
111
110
  end
data/lib/pushyd.rb CHANGED
@@ -1,17 +1,12 @@
1
1
  # Global libs
2
2
  require "rubygems"
3
+ require 'bmc-daemon-lib'
3
4
  require "yaml"
4
5
  require "json"
5
- #require "thread"
6
- #require "singleton"
7
6
  require "newrelic_rpm"
8
7
 
9
-
10
8
  # Shared libs
11
- require_relative "shared/logger_formatter"
12
- require_relative "shared/logger_helper"
13
9
  require_relative "shared/hmac_signature"
14
- require_relative "shared/conf"
15
10
 
16
11
  # Project libs
17
12
  require_relative "pushyd/constants"
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.9.2"
4
+ spec.version = "0.9.4"
5
5
 
6
6
  # Project description
7
7
  spec.name = "pushyd"
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.files = `git ls-files -z`.split("\x0")
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
- spec.required_ruby_version = ">= 2.2.3"
20
+ spec.required_ruby_version = ">= 2.2"
21
21
 
22
22
  # Development dependencies
23
23
  spec.add_development_dependency "bundler", "~> 1.6"
@@ -28,8 +28,8 @@ Gem::Specification.new do |spec|
28
28
  # spec.add_development_dependency "pry"
29
29
 
30
30
  # Runtime dependencies
31
+ spec.add_runtime_dependency "bmc-daemon-lib", "~> 0.2"
31
32
  spec.add_runtime_dependency "daemons"
32
- spec.add_runtime_dependency "chamber", "~> 2.9"
33
33
  spec.add_runtime_dependency "json"
34
34
  spec.add_runtime_dependency "bunny", "~> 2.3"
35
35
  spec.add_runtime_dependency "rest-client", "~> 1.8"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pushyd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno MEDICI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-08 00:00:00.000000000 Z
11
+ date: 2016-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,33 +81,33 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: daemons
84
+ name: bmc-daemon-lib
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '0.2'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '0.2'
97
97
  - !ruby/object:Gem::Dependency
98
- name: chamber
98
+ name: daemons
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '2.9'
103
+ version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '2.9'
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: json
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -214,10 +214,7 @@ files:
214
214
  - lib/pushyd/endpoint.rb
215
215
  - lib/pushyd/proxy.rb
216
216
  - lib/pushyd/shouter.rb
217
- - lib/shared/conf.rb
218
217
  - lib/shared/hmac_signature.rb
219
- - lib/shared/logger_formatter.rb
220
- - lib/shared/logger_helper.rb
221
218
  - pushyd.gemspec
222
219
  homepage: http://github.com/bmedici/pushyd
223
220
  licenses:
@@ -231,7 +228,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
231
228
  requirements:
232
229
  - - ">="
233
230
  - !ruby/object:Gem::Version
234
- version: 2.2.3
231
+ version: '2.2'
235
232
  required_rubygems_version: !ruby/object:Gem::Requirement
236
233
  requirements:
237
234
  - - ">="
@@ -239,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
239
236
  version: '0'
240
237
  requirements: []
241
238
  rubyforge_project:
242
- rubygems_version: 2.4.5.1
239
+ rubygems_version: 2.6.6
243
240
  signing_key:
244
241
  specification_version: 4
245
242
  summary: A nice proxy listenning to a RabbitMQ bus, repeating selected messages in
data/lib/shared/conf.rb DELETED
@@ -1,201 +0,0 @@
1
- # FIXME: files named with hyphens will not be found by Chamber for now
2
- require "chamber"
3
-
4
- module Shared
5
- class ConfigMissingParameter < StandardError; end
6
- class ConfigOtherError < StandardError; end
7
- class ConfigParseError < StandardError; end
8
- class ConfigMultipleGemspec < StandardError; end
9
- class ConfigMissingGemspec < StandardError; end
10
-
11
- class Conf
12
- extend Chamber
13
- PIDFILE_DIR = "/tmp/"
14
-
15
- class << self
16
- attr_accessor :app_env
17
- attr_reader :app_root
18
- attr_reader :app_libs
19
- attr_reader :app_name
20
- attr_reader :app_ver
21
- attr_reader :app_started
22
- attr_reader :app_spec
23
- attr_reader :files
24
- attr_reader :host
25
- end
26
-
27
- def self.init app_root
28
- # Permanent flags
29
- @initialized = true
30
- @app_started = Time.now
31
-
32
- # Default values
33
- @files ||= []
34
- @app_name ||= "app_name"
35
- @app_env ||= "production"
36
- @host ||= `hostname`.to_s.chomp.split(".").first
37
-
38
- # Store and clean app_root
39
- @app_root = File.expand_path(app_root)
40
-
41
- # Try to find any gemspec file
42
- matches = Dir["#{@app_root}/*.gemspec"]
43
- fail ConfigMissingGemspec, "gemspec file not found: #{gemspec_path}" if matches.size < 1
44
- fail ConfigMultipleGemspec, "gemspec file not found: #{gemspec_path}" if matches.size > 1
45
-
46
- # Load Gemspec (just the only match)
47
- @spec = Gem::Specification::load(matches.first)
48
- @app_name = @spec.name
49
- @app_ver = @spec.version
50
- fail ConfigMissingParameter, "gemspec: missing name" unless @app_name
51
- fail ConfigMissingParameter, "gemspec: missing version" unless @app_ver
52
-
53
- # Now we know app_name, initalize app_libs
54
- @app_libs = File.expand_path("lib/#{@app_name}/", @app_root)
55
-
56
- # Add other config files
57
- #add_default_config
58
- add_config generate(:config_defaults)
59
- add_config generate(:config_etc)
60
-
61
- # Return something
62
- return @app_name
63
- end
64
-
65
- def self.prepare args = {}
66
- ensure_init
67
-
68
- # Add extra config file and load them all
69
- add_config args[:config]
70
- reload!
71
-
72
- # Set Rack env
73
- ENV["RACK_ENV"] = @app_env.to_s
74
-
75
- # Set up encodings
76
- Encoding.default_internal = "utf-8"
77
- Encoding.default_external = "utf-8"
78
-
79
- # Init New Relic
80
- newrelic_logfile = File.expand_path(Conf[:logs][:newrelic].to_s, Conf[:logs][:path].to_s)
81
- prepare_newrelic self[:newrelic], newrelic_logfile
82
-
83
- # Try to access any key to force parsing of the files
84
- self[:dummy]
85
-
86
- rescue Psych::SyntaxError => e
87
- fail ConfigParseError, e.message
88
- rescue StandardError => e
89
- fail ConfigOtherError, "#{e.message} \n #{e.backtrace.to_yaml}"
90
- end
91
-
92
- # Reload files
93
- def self.reload!
94
- ensure_init
95
- load_files
96
- end
97
-
98
- def self.dump
99
- ensure_init
100
- to_hash.to_yaml(indent: 4, useheader: true, useversion: false )
101
- end
102
-
103
- # Direct access to any depth
104
- def self.at *path
105
- ensure_init
106
- path.reduce(Conf) { |m, key| m && m[key.to_s] }
107
- end
108
-
109
- def self.newrelic_enabled?
110
- ensure_init
111
- self[:newrelic] && self[:newrelic][:licence]
112
- end
113
-
114
- # Defaults generators
115
- def self.generate what
116
- ensure_init
117
- return case what
118
-
119
- when :user_agent
120
- "#{@app_name}/#{@app_ver}" if @app_name && @app_ver
121
-
122
- when :config_defaults
123
- "#{@app_root}/defaults.yml" if @app_root
124
-
125
- when :config_etc
126
- "/etc/#{@app_name}.yml" if @app_name
127
-
128
- when :process_name
129
- parts = [@app_name, @app_env]
130
- parts << self[:port] if self[:port]
131
- parts.join('-')
132
-
133
- when :pidfile
134
- process_name = self.generate(:process_name)
135
- File.expand_path "#{process_name}.pid", PIDFILE_DIR
136
-
137
- when :config_message
138
- config_defaults = self.generate(:config_defaults)
139
- config_etc = self.generate(:config_etc)
140
-
141
- "A default configuration is available (#{config_defaults}) and can be copied to the default location (#{config_etc}): \n sudo cp #{config_defaults} #{config_etc}"
142
-
143
- end
144
- end
145
-
146
-
147
- protected
148
-
149
- def self.load_files
150
- load files: @files, namespaces: { environment: @app_env }
151
- end
152
-
153
- def self.add_config path
154
- @files << File.expand_path(path) if path && File.readable?(path)
155
- end
156
-
157
- def self.prepare_newrelic section, logfile
158
- # Disable NewRelic if no config present
159
- unless self.newrelic_enabled?
160
- ENV["NEWRELIC_AGENT_ENABLED"] = "false"
161
- return
162
- end
163
-
164
- # Enable GC profiler
165
- GC::Profiler.enable
166
-
167
- # Enable module
168
- ENV["NEWRELIC_AGENT_ENABLED"] = "true"
169
- ENV["NEW_RELIC_MONITOR_MODE"] = "true"
170
-
171
- # License
172
- ENV["NEW_RELIC_LICENSE_KEY"] = section[:licence].to_s
173
-
174
- # Build NewRelic app_name if not provided as-is
175
- if section[:app_name]
176
- ENV["NEW_RELIC_APP_NAME"] = section[:app_name].to_s
177
- else
178
- stack = []
179
- stack << (section[:prefix] || @app_name)
180
- stack << section[:platform] if section[:platform]
181
- stack << @app_env
182
- text = stack.join('-')
183
- ENV["NEW_RELIC_APP_NAME"] = "#{text}-#{host};#{text}"
184
- end
185
-
186
- # Logfile
187
- ENV["NEW_RELIC_LOG"] = logfile.to_s if logfile
188
- end
189
-
190
- private
191
-
192
- def self.ensure_init
193
- # Skip is already done
194
- return if @initialized
195
-
196
- # Go through init if not already done
197
- self.init
198
- end
199
-
200
- end
201
- end
@@ -1,31 +0,0 @@
1
- module Shared
2
- class LoggerFormatter
3
-
4
- def self.call severity, datetime, progname, payload
5
- # Build common values
6
- timestamp = datetime.strftime(LOG_HEADER_TIME)
7
-
8
- # Build header
9
- header = sprintf LOG_HEADER_FORMAT,
10
- timestamp,
11
- Process.pid,
12
- severity,
13
- progname
14
-
15
- # If we have a bunch of lines, prefix them and send them together
16
- return payload.map do |line|
17
- "#{header}#{trimmed(line)}\n"
18
- end.join if payload.is_a?(Array)
19
-
20
- # Otherwise, just prefix the only line
21
- return "#{header}#{trimmed(payload)}\n"
22
- end
23
-
24
- protected
25
-
26
- def self.trimmed line
27
- line.to_s.rstrip[0..LOG_MESSAGE_TRIM].force_encoding(Encoding::UTF_8)
28
- end
29
-
30
- end
31
- end
@@ -1,93 +0,0 @@
1
- require "logger"
2
-
3
- module Shared
4
- module LoggerHelper
5
- CONFIG_PATH = :path
6
-
7
- def logfile config, pipe
8
- # Disabled if no valid config
9
- return nil unless config.is_a?(Hash)
10
-
11
- # Compute logfile and check if we can write there
12
- logfile = File.expand_path(config[pipe].to_s, config[CONFIG_PATH].to_s)
13
-
14
- # Check that we'll be able to create logfiles
15
- if File.exists?(logfile)
16
- # File is there, is it writable ?
17
- unless File.writable?(logfile)
18
- puts "LoggerHelper [#{pipe}] disabled: file not writable [#{logfile}]"
19
- return nil
20
- end
21
- else
22
- # No file here, can we create it ?
23
- logdir = File.dirname(logfile)
24
- unless File.writable?(logdir)
25
- puts "LoggerHelper [#{pipe}] disabled: directory not writable [#{logdir}]"
26
- return nil
27
- end
28
- end
29
-
30
- # OK, return a clean file path
31
- puts "LoggerHelper [#{pipe}] logging to [#{logfile}]"
32
- return logfile
33
- end
34
-
35
- protected
36
-
37
- def log_info message, details = nil
38
- build_messages Logger::INFO, message, details
39
- end
40
-
41
- def log_error message, details = nil
42
- build_messages Logger::ERROR, message, details
43
- end
44
-
45
- def log_debug message, details = nil
46
- build_messages Logger::DEBUG, message, details
47
- end
48
-
49
- alias info log_info
50
- alias error log_error
51
- alias debug log_debug
52
-
53
- private
54
-
55
- # Builds prefix if LOG_PREFIX_FORMAT defined and caller has log_prefix method to provide values
56
- def build_prefix
57
- # Skip if no values from user class
58
- return unless respond_to?(:log_prefix, true)
59
- values = log_prefix
60
-
61
- # Skip if no format defined
62
- return unless defined?('LOG_PREFIX_FORMAT')
63
- return unless LOG_PREFIX_FORMAT.is_a? String
64
-
65
- # Build prefix string
66
- LOG_PREFIX_FORMAT % values.map(&:to_s)
67
- end
68
-
69
- def build_messages severity, message, details = nil
70
- messages = []
71
-
72
- prefix = build_prefix
73
-
74
- # Add main message
75
- messages << sprintf(LOG_MESSAGE_TEXT, prefix, message) if message
76
-
77
- # Add details from array
78
- details.each do |line|
79
- messages << sprintf(LOG_MESSAGE_ARRAY, prefix, line)
80
- end if details.is_a? Array
81
-
82
- # Add details from hash
83
- details.each do |key, value|
84
- messages << sprintf(LOG_MESSAGE_HASH, prefix, key, value)
85
- end if details.is_a? Hash
86
-
87
- # Return all that stuff
88
- # messages << "\\---------------------------------------"
89
- logger.add severity, messages
90
- end
91
-
92
- end
93
- end