typhon 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b0f620a55bca225c8a321096fa493007e100bce1
4
+ data.tar.gz: 69c947a4ee7252d849af62550cf7b21d8bf27f8e
5
+ SHA512:
6
+ metadata.gz: 444add8afafed466bf126d238256c34de2c8be811d8b081ac9d7704f972780cbb71c15789a369441f2afead0db8683cda86c3cc155580c5ccd13c5f60febaa19
7
+ data.tar.gz: 428c51446717bb049dddfcf5081cab70ec40fbd0cdc2f0ee42d01534c608744f0bbaec249ed5f31bbed27e4768c3f1c2628f4fe5806959e885d640321901405a
data/bin/typhon CHANGED
File without changes
@@ -7,6 +7,7 @@ class Typhon
7
7
  require 'typhon/log'
8
8
  require 'typhon/config'
9
9
  require 'typhon/stompclient'
10
+ require 'typhon/natsclient'
10
11
  require 'typhon/ratelimit'
11
12
  require 'typhon/head'
12
13
 
@@ -26,6 +27,14 @@ class Typhon
26
27
  Heads.register_head(options[:name], options[:files], blk)
27
28
  end
28
29
 
30
+ def nats=(nats)
31
+ @nats = nats
32
+ end
33
+
34
+ def nats
35
+ @nats
36
+ end
37
+
29
38
  def stomp=(stomp)
30
39
  @stomp = stomp
31
40
  end
@@ -58,17 +67,26 @@ class Typhon
58
67
 
59
68
  @heads = Heads.new
60
69
  @stomp = nil
70
+ @nats = nil
71
+ end
72
+
73
+ def start_nats
74
+ @nats = Typhon::NatsClient.new(Config[:nats])
75
+ Typhon.nats = @nats
76
+ end
77
+
78
+ def start_stomp
79
+ Log.debug("Connecting to Stomp Server %s:%d" % [ Config[:stomp][:server], Config[:stomp][:port] ])
80
+ @stomp = EM.connect Config[:stomp][:server], Config[:stomp][:port], Typhon::StompClient, {:auto_reconnect => true, :timeout => 2}
81
+ Typhon.stomp = @stomp
61
82
  end
62
83
 
63
84
  def tail
64
85
  EM.run do
65
86
  @heads.loadheads
66
87
 
67
- if Config[:stomp]
68
- Log.debug("Connecting to Stomp Server %s:%d" % [ Config[:stomp][:server], Config[:stomp][:port] ])
69
- @stomp = EM.connect Config[:stomp][:server], Config[:stomp][:port], Typhon::StompClient, {:auto_reconnect => true, :timeout => 2}
70
- Typhon.stomp = @stomp
71
- end
88
+ start_stomp if Config[:stomp]
89
+ start_nats if Config[:nats]
72
90
 
73
91
  EM.add_periodic_timer(10) do
74
92
  @heads.loadheads
@@ -2,7 +2,7 @@ class Typhon
2
2
  class Config
3
3
  include Enumerable
4
4
 
5
- @settings = {:loglevel => :info, :stomp => false, :stat_log_frequency => 3600}
5
+ @settings = {:loglevel => :info, :stomp => false, :nats => false, :stat_log_frequency => 3600}
6
6
 
7
7
  class << self
8
8
  attr_reader :settings
@@ -14,6 +14,10 @@ class Typhon
14
14
  @limiters[name] ||= RateLimit.new(time)
15
15
  end
16
16
 
17
+ def nats
18
+ Typhon.nats
19
+ end
20
+
17
21
  def stomp
18
22
  Typhon.stomp
19
23
  end
@@ -0,0 +1,87 @@
1
+ require "nats/client"
2
+
3
+ class Typhon
4
+ class NatsClient
5
+ def initialize(options={})
6
+ @options = {
7
+ :max_reconnect_attempts => -1,
8
+ :reconnect_time_wait => 1,
9
+ :dont_randomize_servers => true,
10
+ :name => "typhon"
11
+ }.merge(options)
12
+
13
+ start
14
+ end
15
+
16
+ def publish(subject, message)
17
+ NATS.publish(subject, message)
18
+ end
19
+
20
+ def has_client?
21
+ !!NATS.client
22
+ end
23
+
24
+ def start
25
+ NATS.on_error do |e|
26
+ Log.error("Error in NATS connection: %s: %s" % [e.class, e.to_s])
27
+
28
+ backoff_sleep
29
+
30
+ raise(e)
31
+ end
32
+
33
+ NATS.start(@options) do |c|
34
+ Log.info("NATS is connected to %s" % c.connected_server)
35
+ log_nats_pool
36
+
37
+ c.on_reconnect do |connection|
38
+ Log.warn("Reconnected after connection failure: %s" % connection.connected_server)
39
+ log_nats_pool
40
+ @backoffcount = 1
41
+ end
42
+
43
+ c.on_disconnect do |reason|
44
+ Log.warn("Disconnected from NATS: %s" % reason)
45
+ end
46
+
47
+ c.on_close do
48
+ Log.info("Connection to NATS server closed")
49
+ end
50
+ end
51
+
52
+ sleep(0.01) until has_client?
53
+ rescue
54
+ Log.error("Error during initial NATS setup: %s: %s" % [$!.class, $!.message])
55
+ Log.debug($!.backtrace.join("\n\t"))
56
+
57
+ sleep 1
58
+
59
+ Log.error("Retrying NATS initial setup")
60
+
61
+ retry
62
+ end
63
+
64
+ def backoff_sleep
65
+ @backoffcount ||= 1
66
+
67
+ if @backoffcount >= 50
68
+ sleep(2)
69
+ else
70
+ sleep(0.04 * @backoffcount)
71
+ end
72
+
73
+ @backoffcount += 1
74
+ end
75
+
76
+ def log_nats_pool
77
+ return unless NATS.client
78
+
79
+ servers = NATS.client.server_pool.map do |server|
80
+ server[:uri].to_s
81
+ end
82
+
83
+ Log.info("Current server pool: %s" % servers.join(", "))
84
+ rescue
85
+ end
86
+ end
87
+ end
metadata CHANGED
@@ -1,74 +1,81 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: typhon
3
- version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - R.I.Pienaar
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-03-04 00:00:00 +00:00
19
- default_executable: typhon
20
- dependencies: []
21
-
22
- description: Single daemon that tails many files and route lines through your own logic
11
+ date: 2016-09-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nats
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: eventmachine-tail
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.6'
41
+ description: Single daemon that tails many files and route lines through your own
42
+ logic
23
43
  email: rip@devco.net
24
- executables:
44
+ executables:
25
45
  - typhon
26
46
  extensions: []
27
-
28
47
  extra_rdoc_files: []
29
-
30
- files:
48
+ files:
31
49
  - bin/typhon
50
+ - lib/typhon.rb
32
51
  - lib/typhon/config.rb
33
- - lib/typhon/log.rb
52
+ - lib/typhon/head.rb
34
53
  - lib/typhon/heads.rb
54
+ - lib/typhon/log.rb
55
+ - lib/typhon/natsclient.rb
35
56
  - lib/typhon/ratelimit.rb
36
- - lib/typhon/head.rb
37
57
  - lib/typhon/stompclient.rb
38
- - lib/typhon.rb
39
- has_rdoc: true
40
58
  homepage: https://github.com/ripienaar/typhon/
41
59
  licenses: []
42
-
60
+ metadata: {}
43
61
  post_install_message:
44
62
  rdoc_options: []
45
-
46
- require_paths:
63
+ require_paths:
47
64
  - lib
48
- required_ruby_version: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- hash: 3
54
- segments:
55
- - 0
56
- version: "0"
57
- required_rubygems_version: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- hash: 3
63
- segments:
64
- - 0
65
- version: "0"
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
66
75
  requirements: []
67
-
68
76
  rubyforge_project:
69
- rubygems_version: 1.3.7
77
+ rubygems_version: 2.0.14
70
78
  signing_key:
71
- specification_version: 3
79
+ specification_version: 4
72
80
  summary: Wrapper around eventmachine-tail to make writing custom logtailers easy
73
81
  test_files: []
74
-