releaseable 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/VERSION +1 -1
  2. data/lib/releaseable/extensions.rb +66 -39
  3. metadata +2 -2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.14
1
+ 0.0.15
@@ -1,6 +1,7 @@
1
1
  require 'logger'
2
2
  require 'logglier'
3
3
  require 'stringio'
4
+ require 'timeout'
4
5
  require 'java'
5
6
 
6
7
  # Selectively silence verbose JRuby warnings
@@ -43,23 +44,34 @@ class Logger
43
44
  self.class.sound_alarm beeps
44
45
  end
45
46
 
47
+ # Execute with timeout and protection from exceptions
48
+ def with_timeout out=5
49
+ Timeout::timeout(out) { yield }
50
+ rescue => e
51
+ nil
52
+ end
53
+
46
54
  # Trace errors in json format
47
55
  def trace error
48
- if @fatalities
49
- hash = error.is_a?(Hash) ? error : {:msg => error}
50
- @fatalities.add(hash[:severity] || Logger::UNKNOWN) do
51
- hash.merge :tag => @config[:tag]
56
+ if handler
57
+ with_timeout do
58
+ hash = error.is_a?(Hash) ? error : {:msg => error}
59
+ handler.add(hash[:severity] || Logger::UNKNOWN) do
60
+ hash.merge :tag => @config[:tag]
61
+ end
52
62
  end
53
63
  end
54
64
  end
55
65
 
56
66
  # Finalize logger
57
67
  def finalize
58
- if @fatalities
59
- trace :failsafe => @config[:failsafe].string if @config[:failsafe].respond_to? :string
60
- sound_alarm
61
- sleep 2
62
- @fatalities.logdev.dev.deliverer.kill
68
+ if handler
69
+ with_timeout do
70
+ trace :failsafe => @config[:failsafe].string if @config[:failsafe].respond_to? :string
71
+ sound_alarm
72
+ sleep 2
73
+ handler.logdev.dev.deliverer.kill
74
+ end
63
75
  end
64
76
  close
65
77
  end
@@ -67,51 +79,66 @@ class Logger
67
79
  alias old_fatal fatal
68
80
 
69
81
  def fatal *args
70
- if @fatalities
71
- entry = args.first
72
- case entry
73
- when Exception
74
- trace :severity => Logger::FATAL,
75
- :error => entry.class,
76
- :msg => entry.message,
77
- :backtrace => (entry.backtrace || []).join(', ')
78
- else
79
- trace :severity => Logger::INFO, :msg => "#{args.join(', ')}"
80
- old_fatal *args
82
+ if handler
83
+ with_timeout do
84
+ entry = args.first
85
+ case entry
86
+ when Exception
87
+ trace :severity => Logger::FATAL,
88
+ :error => entry.class,
89
+ :msg => entry.message,
90
+ :backtrace => (entry.backtrace || []).join(', ')
91
+ else
92
+ trace :severity => Logger::INFO, :msg => "#{args.join(', ')}"
93
+ old_fatal *args
94
+ end
81
95
  end
82
96
  else
83
97
  old_fatal *args
84
98
  end
85
99
  end
86
100
 
87
- # Extended configuration for Logger
101
+ # Extended handler for fatal errors
102
+ def handler
103
+ return @handler if @handler
104
+
105
+ if @handle_fatal_errors
106
+ with_timeout do
107
+ # Something that should be interrupted if it takes too much time...
108
+ @handler = Logglier.new "#{@config[:domain]}/inputs/#{@config[:input]}",
109
+ :failsafe => @config[:failsafe],
110
+ :read_timeout => 10, # defaults to 120
111
+ :open_timeout => 10, # defaults to 120
112
+ :threaded => true,
113
+ :format => :json
114
+ end
115
+ end
116
+ end
117
+
118
+ # Extended configuration for Logger
88
119
  def configure config={}, &formatter
89
120
  @config = (config[:log] || config).dup
90
121
  @config[:beeps] ||= 0
91
- @config[:time_format] ||= @config[:time] || '%M:%S.%N'
122
+ @config[:time_format] ||= @config[:time] || '%H:%M:%S.%N'
123
+
124
+ @handle_fatal_errors = @config[:ignore] ? false : true
125
+
126
+ if @handle_fatal_errors
92
127
 
93
- unless @config[:ignore] # fatal errors
94
128
  @config[:tag] = config[:tag] || config[:name] || !config[:connection] ? "Tag#{rand(10000)}" :
95
129
  "#{config[:env]}-#{config[:connection][:client_id]}-#{config[:connection][:account]}"
96
- input = case @config[:input]
97
- when Symbol
98
- INPUTS[@config[:input]]
99
- when nil
100
- INPUTS[:opts]
101
- else
102
- @config[:input]
103
- end
104
- domain ||= @config[:domain] || 'https://logs.loggly.com'
130
+ @config[:domain] ||= 'https://logs.loggly.com'
105
131
  @config[:failsafe] ||= StringIO.new("") # $stderr
106
132
 
107
- @fatalities ||= Logglier.new "#{domain}/inputs/#{input}",
108
- :failsafe => @config[:failsafe],
109
- :read_timeout => 10, # defaults to 120
110
- :open_timeout => 10, # defaults to 120
111
- :threaded => true,
112
- :format => :json
133
+ @config[:input] = case @config[:input]
134
+ when Symbol
135
+ INPUTS[@config[:input]]
136
+ when nil
137
+ INPUTS[:opts]
138
+ else
139
+ @config[:input]
140
+ end
113
141
  end
114
-
115
142
  self.level = @config[:level] || Logger::INFO
116
143
  self.formatter = formatter || proc do |level, time, prog, msg|
117
144
  "#{time.strftime(@config[:time_format])} #{msg}\n"
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: releaseable
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.14
5
+ version: 0.0.15
6
6
  platform: ruby
7
7
  authors:
8
8
  - arvicco
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-02-14 00:00:00 Z
13
+ date: 2012-02-16 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler