nfagent 0.9.27 → 0.9.28
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.
- data/Rakefile +1 -1
- data/bin/squid_log_writer +2 -0
- data/lib/nfagent.rb +1 -1
- data/lib/nfagent/chunk.rb +9 -5
- data/lib/nfagent/chunk_handler.rb +3 -3
- data/lib/nfagent/client.rb +3 -0
- data/lib/nfagent/event.rb +1 -1
- data/lib/nfagent/payload.rb +7 -5
- data/lib/nfagent/submitter.rb +1 -0
- data/nfagent.conf +4 -4
- data/test/test_chunk.rb +1 -1
- data/test/test_chunk_handler.rb +28 -4
- data/test/test_payload.rb +51 -0
- metadata +22 -8
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ $hoe = Hoe.spec 'nfagent' do
|
|
15
15
|
self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
|
16
16
|
self.rubyforge_name = self.name # TODO this is default value
|
17
17
|
self.extra_deps = [
|
18
|
-
['svutil','>= 0.1.
|
18
|
+
['svutil','>= 0.1.3'], ['eventmachine', '>= 0.12.8'], ['squiggle', '>= 0.0.8']
|
19
19
|
]
|
20
20
|
|
21
21
|
end
|
data/bin/squid_log_writer
CHANGED
data/lib/nfagent.rb
CHANGED
data/lib/nfagent/chunk.rb
CHANGED
@@ -34,7 +34,7 @@ module NFAgent
|
|
34
34
|
|
35
35
|
def dump(key = nil)
|
36
36
|
Payload.new do |payload|
|
37
|
-
Log.info("Dumping payload from chunk (#{self.size} lines
|
37
|
+
Log.info("Dumping payload from chunk (#{self.size || 0} lines #{'due to expiry' if expired?}")
|
38
38
|
payload.line_count = self.size
|
39
39
|
payload.chunk_expired = expired?
|
40
40
|
payload.key = key
|
@@ -44,11 +44,15 @@ module NFAgent
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def submit(key = nil)
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
Log.info("Submitting...")
|
48
|
+
# TODO God knows why EM Deferrable isn't working - defer here is OK
|
49
|
+
EM.defer {
|
50
|
+
submitter = Submitter.new(self.dump(key))
|
51
|
+
submitter.errback { |payload|
|
52
|
+
payload.write_to_disk(Config.dump_dir)
|
53
|
+
}
|
54
|
+
submitter.perform
|
50
55
|
}
|
51
|
-
submitter.perform
|
52
56
|
# Callback and remove from chunk group
|
53
57
|
end
|
54
58
|
end
|
@@ -39,6 +39,7 @@ module NFAgent
|
|
39
39
|
chunk = @chunk_group.fetch!(key, Chunk.new(@chunk_size))
|
40
40
|
chunk << line
|
41
41
|
rescue ChunkExpired, ChunkFull
|
42
|
+
Log.info("Chunk full or expired, cannot add lines")
|
42
43
|
reset_chunk(key)
|
43
44
|
end
|
44
45
|
end
|
@@ -57,9 +58,8 @@ module NFAgent
|
|
57
58
|
|
58
59
|
private
|
59
60
|
def reset_chunk(key = nil)
|
60
|
-
key
|
61
|
-
chunk
|
62
|
-
chunk.submit
|
61
|
+
chunk = @chunk_group.delete(key || 'all')
|
62
|
+
chunk.submit(key == 'all' ? nil : key)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
data/lib/nfagent/client.rb
CHANGED
@@ -8,14 +8,17 @@ module NFAgent
|
|
8
8
|
proxy_class.start(SERVICE_HOST, 80) do |http|
|
9
9
|
http.read_timeout = 120 # 2 minutes TODO: Make this a config option with 120 as default
|
10
10
|
req = Net::HTTP::Post.new("/#{end_point}")
|
11
|
+
p({"key" => Config.client_key}.merge(data_hash).delete('data'))
|
11
12
|
req.set_form_data({"key" => Config.client_key}.merge(data_hash))
|
12
13
|
ClientResponse.new do |resp|
|
13
14
|
resp.response, resp.message = http.request(req)
|
15
|
+
Log.info("Client Returned with '#{resp.message}'")
|
14
16
|
end
|
15
17
|
end
|
16
18
|
rescue Exception => e
|
17
19
|
# Trap Exception class here to ensure we catch Timeout
|
18
20
|
ClientResponse.new do |resp|
|
21
|
+
Log.info("Client Error: #{$!}")
|
19
22
|
resp.message = $!
|
20
23
|
end
|
21
24
|
end
|
data/lib/nfagent/event.rb
CHANGED
data/lib/nfagent/payload.rb
CHANGED
@@ -34,7 +34,8 @@ module NFAgent
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def write_to_disk(directory)
|
37
|
-
|
37
|
+
filename = [ self.checksum, self.attempt, self.key ].compact.join("-")
|
38
|
+
File.open(File.join(directory, filename), "w") do |file|
|
38
39
|
file << self.data
|
39
40
|
end
|
40
41
|
end
|
@@ -50,14 +51,14 @@ module NFAgent
|
|
50
51
|
filename && File.exists?(lockfile)
|
51
52
|
end
|
52
53
|
|
53
|
-
def self.read_from_file(filename)
|
54
|
+
def self.read_from_file(filename, dir = Config.dump_dir)
|
54
55
|
# Ensure the file is only relative
|
55
56
|
filename = File.basename(filename)
|
56
57
|
self.new do |payload|
|
57
58
|
payload.filename = filename
|
58
|
-
payload.checksum, payload.attempt = filename.split("-")
|
59
|
+
payload.checksum, payload.attempt, payload.key = filename.split("-")
|
59
60
|
payload.data = ""
|
60
|
-
ref = File.join(
|
61
|
+
ref = File.join(dir, filename)
|
61
62
|
File.open(ref, "r") do |file|
|
62
63
|
payload.data << file.read
|
63
64
|
end
|
@@ -70,7 +71,8 @@ module NFAgent
|
|
70
71
|
|
71
72
|
def try_again_later
|
72
73
|
# TODO: Move the file to a new name with a later timetamp
|
73
|
-
|
74
|
+
new_filename = [ self.checksum, self.attempt, self.key ].compact.join("-")
|
75
|
+
FileUtils.mv(File.join(Config.dump_dir, self.filename), File.join(Config.dump_dir, new_filename))
|
74
76
|
end
|
75
77
|
|
76
78
|
private
|
data/lib/nfagent/submitter.rb
CHANGED
data/nfagent.conf
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
client_key =
|
2
|
-
dump_dir = /
|
3
|
-
log_file = /
|
4
|
-
pid_file = /
|
1
|
+
client_key = FNX3tyOkG6J7nk2uC3QX
|
2
|
+
dump_dir = sandbox/dumps
|
3
|
+
log_file = sandbox/debug
|
4
|
+
pid_file = sandbox/nfagent.pid
|
data/test/test_chunk.rb
CHANGED
data/test/test_chunk_handler.rb
CHANGED
@@ -41,11 +41,11 @@ class TestChunkHandler < ActiveSupport::TestCase
|
|
41
41
|
assert_equal 1, chunk_handler.chunk_group['jetson'].size
|
42
42
|
end
|
43
43
|
|
44
|
-
test "reset chunk after expiry" do
|
44
|
+
test "reset chunk after expiry in multi mode" do
|
45
45
|
NFAgent::Config.parse = 'locally'
|
46
46
|
NFAgent::Config.mode = 'multi'
|
47
47
|
NFAgent::Config.mapper = 'MyMapper'
|
48
|
-
NFAgent::
|
48
|
+
NFAgent::Chunk.any_instance.expects(:submit).at_least_once
|
49
49
|
chunk_handler = NFAgent::ChunkHandler.new
|
50
50
|
chunk_handler.append(@logline)
|
51
51
|
Timecop.travel(30) do
|
@@ -67,11 +67,11 @@ class TestChunkHandler < ActiveSupport::TestCase
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
test "reset chunk after full
|
70
|
+
test "reset chunk after full with check_full_or_expired in multi mode" do
|
71
71
|
NFAgent::Config.parse = 'locally'
|
72
72
|
NFAgent::Config.mode = 'multi'
|
73
73
|
NFAgent::Config.mapper = 'MyMapper'
|
74
|
-
|
74
|
+
EM.expects(:defer).times(2)
|
75
75
|
chunk_handler = NFAgent::ChunkHandler.new(:chunk_size => 10)
|
76
76
|
9.times { chunk_handler.append(@logline) }
|
77
77
|
9.times { chunk_handler.append(@logline2) }
|
@@ -91,4 +91,28 @@ class TestChunkHandler < ActiveSupport::TestCase
|
|
91
91
|
chunk_handler.append("") # Invalid logline
|
92
92
|
assert chunk_handler.chunk_group['all'].nil?
|
93
93
|
end
|
94
|
+
|
95
|
+
test "reset chunk is passed appropriate key in multi mode" do
|
96
|
+
NFAgent::Config.parse = 'locally'
|
97
|
+
NFAgent::Config.mode = 'multi'
|
98
|
+
NFAgent::Config.mapper = 'MyMapper'
|
99
|
+
NFAgent::Chunk.any_instance.expects(:submit).with('acme')
|
100
|
+
chunk_handler = NFAgent::ChunkHandler.new
|
101
|
+
chunk_handler.append(@logline)
|
102
|
+
Timecop.travel(61) do
|
103
|
+
chunk_handler.check_full_or_expired
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
test "reset chunk is passed nil key in normal mode" do
|
108
|
+
NFAgent::Config.parse = 'remotely'
|
109
|
+
NFAgent::Config.mode = 'normal'
|
110
|
+
NFAgent::Chunk.any_instance.expects(:submit).with(nil)
|
111
|
+
chunk_handler = NFAgent::ChunkHandler.new
|
112
|
+
chunk_handler.append(@logline)
|
113
|
+
Timecop.travel(61) do
|
114
|
+
chunk_handler.check_full_or_expired
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
94
118
|
end
|
data/test/test_payload.rb
CHANGED
@@ -3,6 +3,7 @@ require 'test/test_helper'
|
|
3
3
|
|
4
4
|
class TestPayload < ActiveSupport::TestCase
|
5
5
|
setup do
|
6
|
+
FileUtils.rm_f(Dir.glob("test/sandbox/dumps/*"))
|
6
7
|
end
|
7
8
|
|
8
9
|
test "to_hash" do
|
@@ -23,4 +24,54 @@ class TestPayload < ActiveSupport::TestCase
|
|
23
24
|
end
|
24
25
|
assert_equal({ 'payload' => 'data', 'checksum' => 'checksum', 'line_count' => 10, 'chunk_expired' => false, 'key' => '1234' }, payload.to_hash)
|
25
26
|
end
|
27
|
+
|
28
|
+
test "write-to-disk" do
|
29
|
+
payload = NFAgent::Payload.new do |p|
|
30
|
+
p.data = "data"
|
31
|
+
p.checksum = "checksum"
|
32
|
+
p.line_count = 10
|
33
|
+
p.chunk_expired = false
|
34
|
+
end
|
35
|
+
payload.write_to_disk("test/sandbox/dumps")
|
36
|
+
assert File.exists?("test/sandbox/dumps/checksum-0")
|
37
|
+
# And read back in
|
38
|
+
payload = NFAgent::Payload.read_from_file("checksum-0", "test/sandbox/dumps/")
|
39
|
+
assert_equal "data", payload.data
|
40
|
+
assert_equal 0, payload.attempt
|
41
|
+
assert !payload.key
|
42
|
+
end
|
43
|
+
|
44
|
+
test "write-to-disk with non-zero attempt number" do
|
45
|
+
payload = NFAgent::Payload.new do |p|
|
46
|
+
p.data = "data"
|
47
|
+
p.checksum = "checksum"
|
48
|
+
p.line_count = 10
|
49
|
+
p.chunk_expired = false
|
50
|
+
p.attempt = 10
|
51
|
+
end
|
52
|
+
payload.write_to_disk("test/sandbox/dumps")
|
53
|
+
assert File.exists?("test/sandbox/dumps/checksum-10")
|
54
|
+
# And read back in
|
55
|
+
payload = NFAgent::Payload.read_from_file("checksum-10", "test/sandbox/dumps/")
|
56
|
+
assert_equal "data", payload.data
|
57
|
+
assert_equal 10, payload.attempt
|
58
|
+
end
|
59
|
+
|
60
|
+
test "write-to-disk with key" do
|
61
|
+
payload = NFAgent::Payload.new do |p|
|
62
|
+
p.data = "data"
|
63
|
+
p.checksum = "checksum"
|
64
|
+
p.line_count = 10
|
65
|
+
p.chunk_expired = false
|
66
|
+
p.key = '1234'
|
67
|
+
end
|
68
|
+
payload.write_to_disk("test/sandbox/dumps")
|
69
|
+
assert File.exists?("test/sandbox/dumps/checksum-0-1234")
|
70
|
+
# And read back in
|
71
|
+
payload = NFAgent::Payload.read_from_file("checksum-0-1234", "test/sandbox/dumps/")
|
72
|
+
assert_equal "data", payload.data
|
73
|
+
assert_equal 0, payload.attempt
|
74
|
+
assert_equal '1234', payload.key
|
75
|
+
end
|
76
|
+
|
26
77
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 9
|
8
|
-
-
|
9
|
-
version: 0.9.
|
8
|
+
- 28
|
9
|
+
version: 0.9.28
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Daniel Draper
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-02-
|
17
|
+
date: 2011-02-09 00:00:00 +10:30
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -27,8 +27,8 @@ dependencies:
|
|
27
27
|
segments:
|
28
28
|
- 0
|
29
29
|
- 1
|
30
|
-
-
|
31
|
-
version: 0.1.
|
30
|
+
- 3
|
31
|
+
version: 0.1.3
|
32
32
|
type: :runtime
|
33
33
|
version_requirements: *id001
|
34
34
|
- !ruby/object:Gem::Dependency
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
type: :runtime
|
61
61
|
version_requirements: *id003
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: rubyforge
|
64
64
|
prerelease: false
|
65
65
|
requirement: &id004 !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
@@ -68,11 +68,25 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
segments:
|
70
70
|
- 2
|
71
|
-
- 4
|
72
71
|
- 0
|
73
|
-
|
72
|
+
- 4
|
73
|
+
version: 2.0.4
|
74
74
|
type: :development
|
75
75
|
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: hoe
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 2
|
85
|
+
- 6
|
86
|
+
- 0
|
87
|
+
version: 2.6.0
|
88
|
+
type: :development
|
89
|
+
version_requirements: *id005
|
76
90
|
description: Logging Agent for NetFox Online
|
77
91
|
email:
|
78
92
|
- daniel@netfox.com
|