logjam_agent 0.10.2 → 0.11.0

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: 85dbd1e17f5976041db6945c0b146d462a65bdb9
4
- data.tar.gz: 7138bb521e856d3ea1ec8c3b95c393b02d5d5bf0
3
+ metadata.gz: c30b74711dc78c0beb70361f01b1bf9ea0b12445
4
+ data.tar.gz: f43e5841691c3c66b0be5a7ef57bd69c97ef6eb6
5
5
  SHA512:
6
- metadata.gz: 6cae11da795df8e5a3af5239a019db5a84fbbda5c61b2ce9bdd2e010eb10480148c5f91c072b6d80b87ed0bc3af3f4e751c7a679d2e474e348904c90d393964d
7
- data.tar.gz: 747623a913bb64e627b710dafb0b893b1704ed941462ce7a68b56f9ac92798f32f47063a95c962f9a9b64b9851ef2f4b3df5e308a125d7337d74704e9a891210
6
+ metadata.gz: c7dcfd56d0d814e70368f0b1c4012fed93c7c327ce9b798f76490c06ab38fa878b0ed7b2498ac001b120482f0a65bd64a2a9e3b48b52a2e3611d30ef97fd4011
7
+ data.tar.gz: 79382ec2f801f546bcbc9f9b0c95c77e0700b10b96b4fa1bec0d2f61093563d1beb780662d7e4ba4c1760c2a7552ad9dbb1bcde1e76fa69885c913f113e46245
@@ -5,12 +5,15 @@ module LogjamAgent
5
5
 
6
6
  attr_reader :app, :env
7
7
 
8
+ include LogjamAgent::Util
9
+
8
10
  def initialize(*args)
9
11
  opts = args.extract_options!
10
12
  @app = args[0] || LogjamAgent.application_name
11
13
  @env = args[1] || LogjamAgent.environment_name
12
14
  @config = default_options(@app, @env).merge!(opts)
13
15
  @exchange = @bunny = nil
16
+ @sequence = 0
14
17
  ensure_bunny_gem_is_available
15
18
  end
16
19
 
@@ -33,10 +36,11 @@ module LogjamAgent
33
36
  if engine = options[:engine]
34
37
  key += ".#{engine}"
35
38
  end
36
- exchange.publish(msg, :key => key, :persistent => false)
37
- rescue Exception => exception
39
+ info = pack_info(@sequence = next_fixnum(@sequence))
40
+ exchange.publish(msg, :key => key, :persistent => false, :headers => {:info => info})
41
+ rescue => error
38
42
  reraise_expectation_errors!
39
- pause(exception)
43
+ pause(error)
40
44
  end
41
45
  end
42
46
 
@@ -48,7 +52,7 @@ module LogjamAgent
48
52
  else
49
53
  @bunny.stop
50
54
  end
51
- rescue Exception
55
+ rescue
52
56
  # if bunny throws an exception here, its not usable anymore anyway
53
57
  ensure
54
58
  @exchange = @bunny = nil
@@ -0,0 +1,55 @@
1
+ module LogjamAgent
2
+ module Util
3
+ # copied from amqp protocol gem (slightly modified)
4
+ BIG_ENDIAN = ([1].pack("s") == "\x00\x01")
5
+
6
+ UINT64 = "Q"
7
+
8
+ # we assume we're running on MRI ruby
9
+ FIXNUM_MAX = 2 ** (1.size * 8 - 2) - 1
10
+
11
+ if BIG_ENDIAN
12
+
13
+ def pack_uint64_big_endian(uint64)
14
+ [uint64].pack(UINT64)
15
+ end
16
+
17
+ def unpack_uint64_big_endian(string)
18
+ string.unpack(UINT64)
19
+ end
20
+
21
+ else
22
+
23
+ def pack_uint64_big_endian(uint64)
24
+ [uint64].pack(UINT64).bytes.map(&:chr).reverse.join
25
+ end
26
+
27
+ def unpack_uint64_big_endian(string)
28
+ string.bytes.map(&:chr).reverse.join.unpack(UINT64)[0]
29
+ end
30
+
31
+ end
32
+
33
+ def zclock_time(t = Time.now)
34
+ t.tv_sec*1000 + t.tv_usec/1000
35
+ end
36
+
37
+ def next_fixnum(i)
38
+ (i+=1) > FIXNUM_MAX ? 0 : i
39
+ end
40
+
41
+ def pack_info(n)
42
+ info = pack_uint64_big_endian(zclock_time)
43
+ info << pack_uint64_big_endian(n)
44
+ end
45
+
46
+ def unpack_info(info)
47
+ zclock = unpack_uint64_big_endian(info[0..7])
48
+ secs = zclock / 1000
49
+ msecs = zclock % 1000
50
+ sent = Time.at(secs) + 1000.0/msecs
51
+ sequence = unpack_uint64_big_endian(info[8..15])
52
+ [sent, sequence]
53
+ end
54
+ end
55
+ end
@@ -1,3 +1,3 @@
1
1
  module LogjamAgent
2
- VERSION = "0.10.2"
2
+ VERSION = "0.11.0"
3
3
  end
@@ -2,6 +2,8 @@ module LogjamAgent
2
2
  class ZMQForwarder
3
3
  attr_reader :app, :env
4
4
 
5
+ include Util
6
+
5
7
  def initialize(*args)
6
8
  opts = args.extract_options!
7
9
  @app = args[0] || LogjamAgent.application_name
@@ -10,6 +12,7 @@ module LogjamAgent
10
12
  @app_env = "#{@app}-#{@env}"
11
13
  @zmq_hosts = Array(@config[:host])
12
14
  @zmq_port = @config[:port]
15
+ @sequence = 0
13
16
  end
14
17
 
15
18
  def default_options(app, env)
@@ -71,7 +74,8 @@ module LogjamAgent
71
74
  end
72
75
 
73
76
  def publish(key, data)
74
- parts = [@app_env, key, data]
77
+ info = pack_info(@sequence = next_fixnum(@sequence))
78
+ parts = [@app_env, key, data, info]
75
79
  if socket.send_strings(parts, ZMQ::DONTWAIT) < 0
76
80
  raise "ZMQ error: #{ZMQ::Util.error_string}"
77
81
  end
data/lib/logjam_agent.rb CHANGED
@@ -29,6 +29,7 @@ module LogjamAgent
29
29
  end
30
30
 
31
31
  require "logjam_agent/version"
32
+ require "logjam_agent/util"
32
33
  require "logjam_agent/amqp_forwarder"
33
34
  require "logjam_agent/zmq_forwarder"
34
35
  require "logjam_agent/forwarders"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logjam_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Kaes
@@ -86,6 +86,7 @@ files:
86
86
  - lib/logjam_agent/railtie.rb
87
87
  - lib/logjam_agent/request.rb
88
88
  - lib/logjam_agent/syslog_like_formatter.rb
89
+ - lib/logjam_agent/util.rb
89
90
  - lib/logjam_agent/version.rb
90
91
  - lib/logjam_agent/zmq_forwarder.rb
91
92
  - logjam_agent.gemspec