my_stuff-fb303 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
1
+ # Copyright 2011-present Fred Emmott. All Rights Reserved.
2
+
3
+ module MyStuff
4
+ module Fb303
5
+ class ProxyHandler
6
+ def initialize server
7
+ @s = server
8
+ end
9
+
10
+ def method_missing meth, *args
11
+ @s.increment_counter "#{meth}.called"
12
+ begin
13
+ result = @s.send(meth, *args)
14
+ @s.increment_counter "#{meth}.success"
15
+ result
16
+ rescue => e
17
+ @s.increment_counter "#{meth}.exception"
18
+ @s.increment_counter "#{meth}.exception.#{e.class.name}"
19
+ raise
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,82 @@
1
+ # Copyright 2011-present Fred Emmott. All Rights Reserved.
2
+
3
+ require 'my_stuff/fb303/proxy_handler'
4
+
5
+ # Code used for MyStuff.ws
6
+ module MyStuff
7
+ module Fb303
8
+ class Server
9
+ def initialize interface, name, version = ''
10
+ @name = name
11
+ @version = version
12
+ @interface = interface
13
+
14
+ @status = Fb_status::STARTING
15
+ @status_details = ''
16
+ @started_at = Time.new.to_i
17
+ @counters = Hash.new(0)
18
+
19
+ start_fb303_server
20
+ end
21
+
22
+ def run!
23
+ @status = Fb_status::ALIVE
24
+ @server_thread.join
25
+ end
26
+
27
+ ##### fb303 implementation #####
28
+
29
+ def getName; @name; end
30
+ def getVersion; @version; end
31
+ def getStatus; @status; end
32
+ def getStatusDetails; @status_details; end
33
+ def aliveSince; @started_at; end
34
+ def getCounters; @counters; end
35
+ def getCounter key; @counters[key]; end
36
+ def getOption key; ''; end
37
+ def getOptions; {}; end
38
+ def getCpuProfile duration; ''; end
39
+ def setOption key, value; end
40
+ def reinitialize; raise NotImplementedError.new; end
41
+
42
+ def shutdown
43
+ @status = Fb_status::STOPPING
44
+ @status_details = 'Shutdown requested via fb303'
45
+ @fb303_thread.kill
46
+ @status = Fb_status::STOPPED
47
+ end
48
+
49
+ def increment_counter name
50
+ @counters[name] += 1
51
+ end
52
+
53
+ def method_missing *args
54
+ if self.handler != self
55
+ self.handler.send *args
56
+ else
57
+ super *args
58
+ end
59
+ end
60
+
61
+ def handler
62
+ self
63
+ end
64
+
65
+ protected
66
+
67
+ def server_for processor
68
+ raise NotImplementedError.new
69
+ end
70
+
71
+ def start_fb303_server
72
+ handler = MyStuff::Fb303::ProxyHandler.new(self)
73
+ processor = @interface.const_get(:Processor).new(handler)
74
+ @server = server_for(processor)
75
+
76
+ @server_thread = Thread.new do
77
+ @server.serve
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: my_stuff-fb303
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Fred Emmott
@@ -24,6 +24,8 @@ extra_rdoc_files: []
24
24
 
25
25
  files:
26
26
  - lib/my_stuff/fb303_server.rb
27
+ - lib/my_stuff/fb303/proxy_handler.rb
28
+ - lib/my_stuff/fb303/server.rb
27
29
  homepage: https://github.com/fredemmott/my_stuff-fb303
28
30
  licenses: []
29
31