ipcad2squid 1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ output.txt
data/Gemfile ADDED
@@ -0,0 +1 @@
1
+ gem 'rspec'
data/Gemfile.lock ADDED
@@ -0,0 +1,17 @@
1
+ GEM
2
+ specs:
3
+ diff-lcs (1.1.3)
4
+ rspec (2.12.0)
5
+ rspec-core (~> 2.12.0)
6
+ rspec-expectations (~> 2.12.0)
7
+ rspec-mocks (~> 2.12.0)
8
+ rspec-core (2.12.1)
9
+ rspec-expectations (2.12.0)
10
+ diff-lcs (~> 1.1.3)
11
+ rspec-mocks (2.12.0)
12
+
13
+ PLATFORMS
14
+ ruby
15
+
16
+ DEPENDENCIES
17
+ rspec
data/bin/ipcad2squid ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ipcad2squid'
4
+ require 'optparse'
5
+
6
+ options = {}
7
+
8
+ optparse = OptionParser.new do|opts|
9
+ opts.banner = "Usage: #{__FILE__} [-1] [-2] [-n] [-o] [-h]"
10
+ opts.separator "Options"
11
+
12
+ # Define the options, and what they do
13
+ opts.on( '-1', '--cmd1 COMMAND', 'Command to show accounting information') { |value| options[:cmd1] = value }
14
+ opts.on( '-2', '--cmd2 COMMAND', 'Command to show accounting checkpoint information') { |value| options[:cmd2] = value }
15
+ opts.on( '-n', '--network SUBNET', 'Subnet for filtering (like 192.168.0)') { |value| options[:net] = value }
16
+ opts.on( '-o', '--output COMMAND', 'Log file to append output') { |value| options[:filename] = value }
17
+
18
+ opts.on( '-h', '--help', 'Display this screen' ) do
19
+ print opts
20
+ exit
21
+ end
22
+ end
23
+
24
+ optparse.parse!
25
+
26
+ ipcad2squid = Ipcad2squid.new(options)
27
+ ipcad2squid.clear
28
+ ipcad2squid.write_to_file
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class Ipcad2squid
4
+ attr_reader :cmd1, :cmd2, :net, :ttime, :filename
5
+
6
+ def initialize(options={})
7
+ @cmd1 = options[:cmd1] || 'netkit-rsh localhost sh ip accounting'
8
+ @cmd2 = options[:cmd2] || 'netkit-rsh localhost show ip accounting checkpoint'
9
+ @net = options[:net] || '192.168.0'
10
+ @filename = options[:filename] || '/var/log/squid/access.log'
11
+ @ttime = `#{@cmd1}`.split("\n").grep(/saved/) { |saved| saved.split.last }.first rescue '0'
12
+ end
13
+
14
+ def output
15
+ # get all data for subnet
16
+ accounting_data = `#{@cmd2}`.split("\n").grep(/#{@net}/)
17
+
18
+ # parse and output data
19
+ accounting_data.map do |raw_data|
20
+ data = raw_data.split
21
+ "#{@ttime}.000 1 #{data[1]} TCP_MISS/200 #{data[3]} CONNECT #{data[0]}:#{data[4]} - DIRECT/#{data[1]} -"
22
+ end.join("\n")
23
+ end
24
+
25
+ def write_to_file
26
+ File.open(@filename, "w") { |file| file.write(output) }
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'ipcad2squid'
3
+ s.version = '1.0'
4
+ s.date = '2013-01-03'
5
+ s.summary = "Convert ipcad logs to squid logs"
6
+ s.description = "Simple gem for converting and appending output from ipcad to squid logs formats"
7
+ s.authors = ["drakmail", "xPadla"]
8
+ s.email = 'drakmail@delta.pm'
9
+
10
+ s.files = `git ls-files`.split($\)
11
+ s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
12
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
13
+ s.require_paths = ["lib"]
14
+
15
+ s.homepage = 'https://github.com/drakmail/ipcad2squid'
16
+
17
+ s.add_development_dependency 'rspec'
18
+ end
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class Ipcad2squid
4
+ attr_reader :cmd1, :cmd2, :net, :ttime, :filename
5
+
6
+ def initialize(options={})
7
+ @cmd1 = options[:cmd1] || 'netkit-rsh localhost sh ip accounting'
8
+ @cmd2 = options[:cmd2] || 'netkit-rsh localhost show ip accounting checkpoint'
9
+ @net = options[:net] || '192.168.0'
10
+ @filename = options[:filename] || '/var/log/squid/access.log'
11
+ @ttime = `#{@cmd1}`.split("\n").grep(/saved/) { |saved| saved.split.last }.first rescue '0'
12
+ end
13
+
14
+ def output
15
+ # get all data for subnet
16
+ accounting_data = `#{@cmd2}`.split("\n").grep(/#{@net}/)
17
+
18
+ # parse and output data
19
+ accounting_data.map do |raw_data|
20
+ data = raw_data.split
21
+ "#{@ttime}.000 1 #{data[1]} TCP_MISS/200 #{data[3]} CONNECT #{data[0]}:#{data[4]} - DIRECT/#{data[1]} -"
22
+ end.join("\n")
23
+ end
24
+
25
+ def clear
26
+ # move statistics to checkpoint and clear
27
+ `netkit-rsh localhost clear ip accounting` rescue puts "Couldn't clear ip accounting"
28
+ end
29
+
30
+ def write_to_file
31
+ File.open(@filename, "a") { |file| file.write(output) }
32
+ end
33
+ end
data/spec/input1.txt ADDED
@@ -0,0 +1,35 @@
1
+ Source Destination Packets Bytes
2
+ 46.164.195.254 192.168.0.4 6 482
3
+ 46.211.50.159 192.168.0.4 8 982
4
+ 37.79.42.154 192.168.0.4 8 833
5
+ 2.60.65.237 192.168.0.4 3036 138029
6
+ 46.72.241.99 192.168.0.4 1952 87998
7
+ 109.163.216.19 192.168.0.4 15647 820192
8
+ 89.151.133.15 192.168.0.4 2476 107309
9
+ 217.77.210.254 192.168.0.4 6297 349723
10
+ 178.234.136.81 192.168.0.4 4201 190600
11
+ 95.84.27.95 192.168.0.4 3133 177640
12
+ 80.237.79.145 192.168.0.4 4514 207135
13
+ 2.95.65.135 192.168.0.4 2713 124989
14
+ 95.26.194.158 192.168.0.4 1929 105813
15
+ 46.63.33.34 192.168.0.4 1907 85985
16
+ 78.106.82.110 192.168.0.4 787 42540
17
+ 213.242.8.251 192.168.0.4 2976 137730
18
+ 193.169.220.4 192.168.0.4 2983 178493
19
+ 46.119.234.141 192.168.0.4 1077 48768
20
+ 212.41.32.108 192.168.0.4 6485 299184
21
+ 94.240.217.90 192.168.0.4 1301 56842
22
+ 91.209.51.219 192.168.0.4 3105 137373
23
+ 46.63.188.28 192.168.0.4 1456 82986
24
+ 46.36.27.18 192.168.0.4 5125 277574
25
+ 95.106.233.58 192.168.0.4 4890 258475
26
+
27
+ Accounting data age is 4
28
+ Accounting data age exact 271
29
+ Accounting data saved 1357223673
30
+ Interface u1: received ??, 5 m average 47888 bytes/sec, 934 pkts/sec, dropped ??
31
+ Flow entries made: 452
32
+ Memory usage: 0% (61472 from 10485760)
33
+ Free slots for rsh clients: 9
34
+ IPCAD uptime is 6:18
35
+ shell-12 uptime is 1 day 3:26
data/spec/input2.txt ADDED
@@ -0,0 +1,17 @@
1
+ Source Destination Packets Bytes
2
+ 37.112.138.228 192.168.0.4 1 345
3
+ 46.211.100.123 192.168.0.4 3 200
4
+ 185.2.107.224 192.168.0.4 1 77
5
+ 89.187.33.17 192.168.0.4 2 112
6
+ 193.169.220.4 192.168.0.4 3496 209636
7
+ 46.119.234.141 192.168.0.4 1225 55490
8
+ 212.41.32.108 192.168.0.4 6973 321808
9
+ 94.240.217.90 192.168.0.4 1568 68301
10
+ 91.209.51.219 192.168.0.4 3106 137413
11
+ 46.63.188.28 192.168.0.4 1456 82986
12
+ 46.36.27.18 192.168.0.4 5631 305248
13
+ 95.106.233.58 192.168.0.4 5372 284271
14
+
15
+ Accounting data age is 5
16
+ Accounting data age exact 335
17
+ Accounting data saved 1357223737
@@ -0,0 +1,38 @@
1
+ require 'ipcad2squid'
2
+
3
+ CMD1 = 'cat spec/input1.txt'
4
+ CMD2 = 'cat spec/input2.txt'
5
+
6
+ describe Ipcad2squid do
7
+ subject(:script) {Ipcad2squid.new(:cmd1 => CMD1, :cmd2 => CMD2)}
8
+
9
+ context 'Passing commands' do
10
+ subject(:script) {Ipcad2squid.new(:cmd1 => CMD1, :cmd2 => CMD2, :filename => 'output.txt')}
11
+ its(:cmd1) { should == CMD1 }
12
+ its(:cmd2) { should == CMD2 }
13
+ its(:filename) { should == 'output.txt' }
14
+ end
15
+
16
+ context 'Default commands' do
17
+ subject(:script) {Ipcad2squid.new}
18
+ its(:cmd1) { should == 'netkit-rsh localhost sh ip accounting' }
19
+ its(:cmd2) { should == 'netkit-rsh localhost show ip accounting checkpoint' }
20
+ its(:filename) { should == '/var/log/squid/access.log' }
21
+ end
22
+
23
+ context 'Integration testing' do
24
+ its(:ttime) { should == '1357223673' }
25
+ its(:output) { should include('1357223673.000 1 192.168.0.4 TCP_MISS/200 77 CONNECT 185.2.107.224: - DIRECT/192.168.0.4 -') }
26
+ its(:output) { should include('1357223673.000 1 192.168.0.4 TCP_MISS/200 55490 CONNECT 46.119.234.141: - DIRECT/192.168.0.4 -') }
27
+ end
28
+
29
+ context 'File IO' do
30
+ it 'shoud write output to file' do
31
+ file = mock('file')
32
+ File.should_receive(:open).with("/var/log/squid/access.log", "a").and_yield(file)
33
+ file.should_receive(:write).with(script.output)
34
+ script.write_to_file
35
+ end
36
+ end
37
+
38
+ end
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ipcad2squid
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - drakmail
9
+ - xPadla
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-01-03 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ description: Simple gem for converting and appending output from ipcad to squid logs
32
+ formats
33
+ email: drakmail@delta.pm
34
+ executables:
35
+ - ipcad2squid
36
+ - ipcad2squid.rb
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - .gitignore
41
+ - Gemfile
42
+ - Gemfile.lock
43
+ - bin/ipcad2squid
44
+ - bin/ipcad2squid.rb
45
+ - ipcad2squid.gemspec
46
+ - lib/ipcad2squid.rb
47
+ - spec/input1.txt
48
+ - spec/input2.txt
49
+ - spec/ipcad2squid_spec.rb
50
+ homepage: https://github.com/drakmail/ipcad2squid
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 1.8.23
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: Convert ipcad logs to squid logs
74
+ test_files:
75
+ - spec/input1.txt
76
+ - spec/input2.txt
77
+ - spec/ipcad2squid_spec.rb