my_stuff-fb303 0.0.6 → 0.0.7

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.
@@ -16,6 +16,23 @@ module MyStuff
16
16
  rescue => e
17
17
  @s.increment_counter "#{meth}.exception"
18
18
  @s.increment_counter "#{meth}.exception.#{e.class.name}"
19
+
20
+ if e.is_a? Thrift::Exception
21
+ # Presumably defined in the Thrift interface file
22
+ level = :warn
23
+ else
24
+ # Definitely not :(
25
+ level = :error
26
+ end
27
+
28
+ begin
29
+ # MyStuff::Logger exception, allowing us to specify the
30
+ # backtrace.
31
+ @s.logger.raw_log e.backtrace, level, e
32
+ rescue NoMethoderror
33
+ @s.logger.send level, e
34
+ end
35
+
19
36
  raise
20
37
  end
21
38
  end
@@ -0,0 +1,63 @@
1
+ # Copyright 2011-present Fred Emmott. See COPYING file.
2
+
3
+ # Monkey-patch Thrift::Processor to not completely bail on undefined
4
+ # exceptions.
5
+
6
+ module MyStuff
7
+ module Fb303
8
+ module ResilientProcessor
9
+ class SpyIProt
10
+ def initialize iprot
11
+ @iprot = iprot
12
+ @mode = :capture
13
+ end
14
+
15
+ def read_message_begin
16
+ case @mode
17
+ when :capture
18
+ @header = @iprot.read_message_begin
19
+ @mode = :replay
20
+ @header
21
+ when :replay
22
+ @mode = :normal
23
+ @header
24
+ when :normal
25
+ @iprot.read_message_begin
26
+ else
27
+ raise "Reached a bad state: %s" % @mode
28
+ end
29
+ end
30
+
31
+ def method_missing *args
32
+ @iprot.send *args
33
+ end
34
+ end
35
+
36
+ def resilient_process iprot, oprot
37
+ spy = SpyIProt.new(iprot)
38
+ name, type, seqid = spy.read_message_begin
39
+
40
+ begin
41
+ unresilient_process(spy, oprot)
42
+ rescue => e
43
+ ae = Thrift::ApplicationException.new(
44
+ Thrift::ApplicationException::UNKNOWN,
45
+ e.inspect
46
+ )
47
+ oprot.write_message_begin(name, Thrift::MessageTypes::EXCEPTION, seqid)
48
+ ae.write oprot
49
+ oprot.write_message_end
50
+ oprot.trans.flush
51
+ false
52
+ end
53
+ end
54
+
55
+ def self.extended other
56
+ class <<other
57
+ alias :unresilient_process :process
58
+ alias :process :resilient_process
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -57,8 +57,12 @@ module MyStuff
57
57
  end
58
58
 
59
59
  def method_missing *args
60
+ unless self.getStatus == Fb_status::ALIVE
61
+ raise 'Handler unavailable in current status.'
62
+ end
63
+
60
64
  if self.handler != self
61
- self.handler.send *args
65
+ self.handler.send *args
62
66
  else
63
67
  super *args
64
68
  end
metadata CHANGED
@@ -1,62 +1,79 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: my_stuff-fb303
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 7
9
+ version: 0.0.7
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Fred Emmott
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2011-09-04 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
16
+
17
+ date: 2011-09-04 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: thrift
16
- requirement: &70167224791480 !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: *70167224791480
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
25
32
  description: Basic implementation of fb303 for Ruby services
26
- email:
33
+ email:
27
34
  - mail@fredemmott.co.uk
28
35
  executables: []
36
+
29
37
  extensions: []
38
+
30
39
  extra_rdoc_files: []
31
- files:
40
+
41
+ files:
32
42
  - COPYING
33
43
  - README.rdoc
34
44
  - lib/my_stuff/fb303/proxy_handler.rb
45
+ - lib/my_stuff/fb303/resilient_processor.rb
35
46
  - lib/my_stuff/fb303/server.rb
36
47
  - lib/my_stuff/fb303_server.rb
48
+ has_rdoc: true
37
49
  homepage: https://github.com/fredemmott/my_stuff-fb303
38
- licenses:
50
+ licenses:
39
51
  - ISC
40
52
  post_install_message:
41
53
  rdoc_options: []
42
- require_paths:
54
+
55
+ require_paths:
43
56
  - lib
44
- required_ruby_version: !ruby/object:Gem::Requirement
45
- none: false
46
- requirements:
47
- - - ! '>='
48
- - !ruby/object:Gem::Version
49
- version: '0'
50
- required_rubygems_version: !ruby/object:Gem::Requirement
51
- none: false
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
56
71
  requirements: []
72
+
57
73
  rubyforge_project:
58
- rubygems_version: 1.8.6
74
+ rubygems_version: 1.3.6
59
75
  signing_key:
60
76
  specification_version: 3
61
77
  summary: MyStuff.ws's Ruby fb303 implementation
62
78
  test_files: []
79
+