clarity 0.9.5 → 0.9.7

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.
Binary file
@@ -7,7 +7,7 @@ bin/clarity
7
7
  config/config.yml.sample
8
8
  lib/clarity.rb
9
9
  lib/clarity/cli.rb
10
- lib/clarity/commands/command_builder.rb
10
+ lib/clarity/commands/grep_command_builder.rb
11
11
  lib/clarity/commands/tail_command_builder.rb
12
12
  lib/clarity/grep_renderer.rb
13
13
  lib/clarity/process_tree.rb
@@ -22,12 +22,9 @@ public/stylesheets/app.css
22
22
  script/console
23
23
  script/destroy
24
24
  script/generate
25
- test/commands/command_builder_test.rb
25
+ test/commands/grep_command_builder_test.rb
26
26
  test/commands/tail_command_builder_test.rb
27
27
  test/files/logfile.log
28
- test/parsers/hostname_parser_test.rb
29
- test/parsers/shop_parser_test.rb
30
- test/parsers/time_parser_test.rb
31
28
  test/test_helper.rb
32
29
  test/test_string_scanner.rb
33
30
  views/_header.html.erb
@@ -8,8 +8,8 @@ Clarity - a log search tool
8
8
  By John Tajima & Tobi Lütke
9
9
 
10
10
  Clarity is a Splunk like web interface for your server log files. It supports
11
- searching (using grep) as well as trailing log files. It has been written using
12
- the event based architecture based on EventMachine and so allows real-time search
11
+ searching (using grep) as well as trailing log files in realtime. It has been written
12
+ using the event based architecture based on EventMachine and so allows real-time search
13
13
  of very large log files. If you hit the browser Stop button it will also kill
14
14
  the grep / tail utility.
15
15
 
@@ -20,6 +20,21 @@ big success internally that we decided to release it as open source.
20
20
  == USAGE:
21
21
 
22
22
  clarity --username=admin --password=secret --port=8989 /var/log
23
+
24
+ == COMMANDLINE:
25
+
26
+ Specific options:
27
+ -f, --config=FILE Config file (yml)
28
+ -p, --port=PORT Port to listen on
29
+ -b, --address=ADDRESS Address to bind to (default 0.0.0.0)
30
+ --include=MASK File mask of logs to add (default: **/*.log*)
31
+ --user=USER User to run as
32
+ Password protection:
33
+ --username=USER Enable httpauth username
34
+ --password=PASS Enable httpauth password
35
+ Misc:
36
+ -h, --help Show this message.
37
+
23
38
 
24
39
  == SCREENSHOT:
25
40
 
@@ -29,6 +44,7 @@ http://img.skitch.com/20091104-je9kq1a2gfr586ia8y246bq4n8.png
29
44
 
30
45
  * eventmachine
31
46
  * eventmachine_httpserver
47
+ * json
32
48
 
33
49
  == INSTALL:
34
50
 
data/Rakefile CHANGED
@@ -12,9 +12,11 @@ Hoe.plugin :newgem
12
12
  $hoe = Hoe.spec 'clarity' do
13
13
  self.developer 'Tobias Lütke', 'tobi@shopify.com'
14
14
  self.developer 'John Tajima', 'john@shopify.com'
15
- self.post_install_message = 'PostInstall.txt'
16
- self.extra_deps = [['eventmachine','>= 0.12.10'], ['eventmachine_httpserver','>= 0.2.0']]
17
- self.test_globs = ['test/**/*_test.rb']
15
+ self.summary = 'Web interface for grep and tail -f'
16
+ #self.post_install_message = 'PostInstall.txt'
17
+ self.readme_file = 'README.rdoc'
18
+ self.extra_deps = [['eventmachine','>= 0.12.10'], ['eventmachine_httpserver','>= 0.2.0'], ["json", ">= 1.0.0"]]
19
+ self.test_globs = ['test/**/*_test.rb']
18
20
  end
19
21
 
20
22
  require 'newgem/tasks'
@@ -2,18 +2,16 @@ $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) ||
2
2
 
3
3
  require 'eventmachine'
4
4
  require 'evma_httpserver'
5
+ require 'json'
5
6
  require 'yaml'
6
7
  require 'base64'
7
8
  require 'clarity/server'
8
- require 'clarity/commands/command_builder'
9
+ require 'clarity/commands/grep_command_builder'
9
10
  require 'clarity/commands/tail_command_builder'
10
- require 'clarity/parsers/time_parser'
11
- require 'clarity/parsers/hostname_parser'
12
- require 'clarity/parsers/shop_parser'
13
11
  require 'clarity/renderers/log_renderer'
14
12
 
15
13
  module Clarity
16
- VERSION = '0.9.5'
14
+ VERSION = '0.9.7'
17
15
 
18
16
  Templates = File.dirname(__FILE__) + '/../views'
19
17
  Public = File.dirname(__FILE__) + '/../public'
@@ -69,18 +69,18 @@ module Clarity
69
69
 
70
70
  begin
71
71
  opts.parse!(arguments)
72
+
73
+ options[:log_files] ||= ['**/*.log*']
72
74
 
73
75
  if arguments.first
74
76
  Dir.chdir(arguments.first)
77
+
78
+ ::Clarity::Server.run(options)
79
+
80
+ else
81
+ puts opts
82
+ exit(1)
75
83
  end
76
-
77
- options[:log_files] ||= ['**/*.log*']
78
-
79
- ::Clarity::Server.run(options)
80
-
81
- #rescue
82
- # puts opts
83
- # exit
84
84
  end
85
85
  end
86
86
 
@@ -1,4 +1,4 @@
1
- class CommandBuilder
1
+ class GrepCommandBuilder
2
2
 
3
3
  # parameter names
4
4
  TermParameters = ['term1', 'term2', 'term3']
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Handles tailing of log files
3
3
  #
4
- class TailCommandBuilder < CommandBuilder
4
+ class TailCommandBuilder < GrepCommandBuilder
5
5
 
6
6
  def valid?
7
7
  raise InvalidParameterError, "Log file parameter not supplied or invalid log file" unless filename && !filename.empty? && File.extname(filename) == ".log"
@@ -29,7 +29,7 @@ class LogRenderer
29
29
  private
30
30
 
31
31
  def html_link(url)
32
- uri = URI.parse(url)
32
+ uri = URI.parse(url) rescue url
33
33
  "<a href='#{uri}'>#{url}</a>"
34
34
  end
35
35
 
@@ -28,14 +28,16 @@ module Clarity
28
28
  a.required_password = options[:password]
29
29
  end
30
30
 
31
- STDERR.puts "Listening #{options[:address]}:#{options[:port]}..."
31
+ STDERR.puts "Clarity #{Clarity::VERSION} starting up."
32
+ STDERR.puts " * listening on #{options[:address]}:#{options[:port]}"
32
33
 
33
34
  if options[:user]
34
- STDERR.puts "Running as user #{options[:user]}"
35
+ STDERR.puts " * Running as user #{options[:user]}"
35
36
  EventMachine.set_effective_user(options[:user])
36
37
  end
37
38
 
38
- STDERR.puts "Adding log files: #{options[:log_files].inspect}"
39
+ STDERR.puts " * Log mask(s): #{options[:log_files].join(', ')}"
40
+ STDERR.puts
39
41
  end
40
42
  end
41
43
 
@@ -55,7 +57,7 @@ module Clarity
55
57
  else
56
58
  # get command
57
59
  command = case params['tool']
58
- when 'grep' then CommandBuilder.new(params).command
60
+ when 'grep' then GrepCommandBuilder.new(params).command
59
61
  when 'tail' then TailCommandBuilder.new(params).command
60
62
  else raise InvalidParameterError, "Invalid Tool parameter"
61
63
  end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class CommandBuilderTest < Test::Unit::TestCase
3
+ class GrepCommandBuilderTest < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
6
  @params = {
@@ -10,29 +10,29 @@ class CommandBuilderTest < Test::Unit::TestCase
10
10
  "term2" => nil,
11
11
  "term3" => nil
12
12
  }
13
- @command = CommandBuilder.new(@params)
13
+ @command = GrepCommandBuilder.new(@params)
14
14
  end
15
15
 
16
16
  def test_create_new_builder
17
- assert @command.is_a?(CommandBuilder)
17
+ assert @command.is_a?(GrepCommandBuilder)
18
18
  assert_equal "testfile.log", @command.filename
19
19
  assert_equal 1, @command.terms.size
20
20
  end
21
21
 
22
22
  def test_raises_error_if_no_file
23
- assert_raises CommandBuilder::InvalidParameterError do
24
- command = CommandBuilder.new(@params.merge("file" => nil))
23
+ assert_raises GrepCommandBuilder::InvalidParameterError do
24
+ command = GrepCommandBuilder.new(@params.merge("file" => nil))
25
25
  end
26
26
  end
27
27
 
28
28
  def test_exec_functions_for_log
29
- command = CommandBuilder.new(@params)
29
+ command = GrepCommandBuilder.new(@params)
30
30
  assert_equal 1, command.exec_functions.size
31
31
  assert_match(/^grep/, command.exec_functions.first)
32
32
  end
33
33
 
34
34
  def test_exec_functions_with_multiple_terms_for_log
35
- command = CommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
35
+ command = GrepCommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
36
36
  assert_equal 3, command.exec_functions.size
37
37
  assert_match(/^grep/, command.exec_functions[0])
38
38
  assert_match(/^grep/, command.exec_functions[1])
@@ -40,19 +40,19 @@ class CommandBuilderTest < Test::Unit::TestCase
40
40
  end
41
41
 
42
42
  def test_exec_function_with_no_terms_for_log
43
- command = CommandBuilder.new(@params.merge("term1" => nil))
43
+ command = GrepCommandBuilder.new(@params.merge("term1" => nil))
44
44
  assert_equal 1, command.exec_functions.size
45
45
  assert_match(/^cat/, command.exec_functions[0])
46
46
  end
47
47
 
48
48
  def test_exec_funcations_for_gzip
49
- command = CommandBuilder.new(@params.merge("file" => "testfile.gz"))
49
+ command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz"))
50
50
  assert_equal 1, command.exec_functions.size
51
51
  assert_match(/^zgrep/, command.exec_functions.first)
52
52
  end
53
53
 
54
54
  def test_exec_functions_with_multiple_terms_for_gzip
55
- command = CommandBuilder.new(@params.merge("file" => "testfile.gz", "term2" => "bar", "term3" => "baz"))
55
+ command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz", "term2" => "bar", "term3" => "baz"))
56
56
  assert_equal 3, command.exec_functions.size
57
57
  assert_match(/^zgrep/, command.exec_functions[0])
58
58
  assert_match(/^grep/, command.exec_functions[1])
@@ -60,38 +60,38 @@ class CommandBuilderTest < Test::Unit::TestCase
60
60
  end
61
61
 
62
62
  def test_exec_function_with_no_terms_for_gzip
63
- command = CommandBuilder.new(@params.merge("file" => "testfile.gz", "term1" => nil))
63
+ command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz", "term1" => nil))
64
64
  assert_equal 1, command.exec_functions.size
65
65
  assert_match "gzcat", command.exec_functions[0]
66
66
  end
67
67
 
68
68
  def test_command_for_log
69
- command = CommandBuilder.new(@params)
69
+ command = GrepCommandBuilder.new(@params)
70
70
  assert_equal "sh -c 'grep -e foo testfile.log'", command.command
71
71
  end
72
72
 
73
73
  def test_command_with_no_terms_for_log
74
- command = CommandBuilder.new(@params.merge("term1" => nil))
74
+ command = GrepCommandBuilder.new(@params.merge("term1" => nil))
75
75
  assert_equal "sh -c 'cat testfile.log'", command.command
76
76
  end
77
77
 
78
78
  def test_command_with_multiple_terms_for_log
79
- command = CommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
79
+ command = GrepCommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
80
80
  assert_equal "sh -c 'grep -e foo testfile.log | grep -e bar | grep -e baz'", command.command
81
81
  end
82
82
 
83
83
  def test_command_for_gzip
84
- command = CommandBuilder.new(@params.merge("file" => "testfile.gz"))
84
+ command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz"))
85
85
  assert_equal "sh -c 'zgrep -e foo testfile.gz'", command.command
86
86
  end
87
87
 
88
88
  def test_command_with_no_terms_for_gzip
89
- command = CommandBuilder.new(@params.merge("file" => "testfile.gz","term1" => nil))
89
+ command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz","term1" => nil))
90
90
  assert_equal "sh -c 'gzcat testfile.gz'", command.command
91
91
  end
92
92
 
93
93
  def test_command_with_multiple_terms_for_gzip
94
- command = CommandBuilder.new(@params.merge("file" => "testfile.gz","term2" => "bar", "term3" => "baz"))
94
+ command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz","term2" => "bar", "term3" => "baz"))
95
95
  assert_equal "sh -c 'zgrep -e foo testfile.gz | grep -e bar | grep -e baz'", command.command
96
96
  end
97
97
 
@@ -20,7 +20,7 @@ class TailCommandBuilderTest < Test::Unit::TestCase
20
20
  end
21
21
 
22
22
  def test_raises_error_if_invalid_file
23
- assert_raises CommandBuilder::InvalidParameterError do
23
+ assert_raises GrepCommandBuilder::InvalidParameterError do
24
24
  command = TailCommandBuilder.new(@params.merge("file" => "testfile.gz"))
25
25
  end
26
26
  end
@@ -43,32 +43,6 @@
43
43
  <td>
44
44
  </td>
45
45
  </tr>
46
- <tr id='advanced-options'>
47
- <td></td>
48
- <td>
49
- <span class='small'>
50
- <a href="#" id="enable-advanced" onclick="Search.showAdvanced(); return false;">Enable Advanced Options</a>
51
- <a href="#" id="disable-advanced" onclick="Search.hideAdvanced(); return false;" style='display:none'>Disable Advanced Options</a>
52
- </span>
53
- </td>
54
- <td colspan=2 id='start-time' class='advanced-options' style='display:none'>
55
- <span class='small'>Start Time</span>
56
- <input type='text' name='sh' class='time' id='sh'> :
57
- <input type='text' name='sm' class='time' id='sm'> :
58
- <input type='text' name='ss' class='time' id='ss'>
59
- </td>
60
- <td colspan=2 id='end-time' class='advanced-options' style='display:none'>
61
- <span class='small'>End Time</span>
62
- <input type='text' name='eh' class='time' id='eh'> :
63
- <input type='text' name='em' class='time' id='em'> :
64
- <input type='text' name='es' class='time' id='es'>
65
- </td>
66
- <td class='advanced-options' style='display:none'>
67
- <span class="small">
68
- <a href="#" onclick="Search.clearAdvanced();return false">clear advanced</a>
69
- </span>
70
- </td>
71
- </tr>
72
46
  </table>
73
47
  </form>
74
48
  </div>
@@ -81,9 +55,9 @@
81
55
  </div>
82
56
 
83
57
  <script>
84
- Search.init({ 'grep': <%= logfiles.map {|f| f }.inspect %>,
85
- 'tail': <%= logfiles.map {|f| f if f =~ /log$/ }.compact.inspect %> },
86
- <%= params.empty? ? 'null' : params.inspect %> );
58
+ Search.init({ 'grep': <%= logfiles.map {|f| f }.to_json %>,
59
+ 'tail': <%= logfiles.map {|f| f if f =~ /log$/ }.compact.to_json %> },
60
+ <%= params.empty? ? 'null' : params.to_json %> );
87
61
 
88
62
 
89
63
  </script>
metadata CHANGED
@@ -1,16 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clarity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Tobias L\xC3\xBCtke"
8
8
  - John Tajima
9
9
  autorequire:
10
10
  bindir: bin
11
- cert_chain: []
11
+ cert_chain:
12
+ - |
13
+ -----BEGIN CERTIFICATE-----
14
+ MIIDMDCCAhigAwIBAgIBADANBgkqhkiG9w0BAQUFADA+MQ0wCwYDVQQDDAR0b2Jp
15
+ MRgwFgYKCZImiZPyLGQBGRYIbGVldHNvZnQxEzARBgoJkiaJk/IsZAEZFgNjb20w
16
+ HhcNMDkwNjA4MDAyMjE2WhcNMTAwNjA4MDAyMjE2WjA+MQ0wCwYDVQQDDAR0b2Jp
17
+ MRgwFgYKCZImiZPyLGQBGRYIbGVldHNvZnQxEzARBgoJkiaJk/IsZAEZFgNjb20w
18
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9eY669CSPwqcWqdZR28wy
19
+ LE6lF1RRS9KX2MEwiQML81UiY/yXz53Z082ISzUEcfzMUfVBwBO7y3NJF2th1/zt
20
+ MoEl24Me7ToU1wYfH0TOO6+gT++FmQyaGSuXWgXxEXyvnOP3k2wJ3IIgHvF8AUyW
21
+ i8GKFJKDmV/crocqOKu0A82Ugz0QGJbH+3gRk/BG926VffQUwQhcMV3c8+IWh/Ye
22
+ mx5mc1Wtykj945+G3XuCQFHcOUi4JKfDp5i/tce39ePNiXk74sn7X04O8aPrYRju
23
+ TPJC7yuwM1vOiR2yKutB+cjIG8srZiKN5IgqyECviHIpAOy7nDK5L5CexOYWEFxj
24
+ AgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQkWqDl
25
+ Oe9BDb/KLIhD4wMtnv8zkDANBgkqhkiG9w0BAQUFAAOCAQEAA6xfeq0PIZtUoz5i
26
+ Kr2bYQqgongNY/Mw4NMWN7cYYmIh1BUjWDnuOVffC3w3vnsUGOUUPeeBtQye4Dyy
27
+ zleZjlzOiOA4vFOnItldoElAo+gc5xoEmiE/P8AnCaIHEdgroeW+bZj3U3ReY7iu
28
+ z6rSwN5jLOnP2BmCdP/AgbAV3rW7hhgaz6nGx7O4hehQ/F1SbYhl115B6RpYF+tN
29
+ p9h9ap2kONwGQwBlo6oGQmuatzbfiVQRxhDj7JzyNaYQM4DR0+4vbu59vYFVSFHf
30
+ oz7Ippbls3jwI136whTuoiGZi/LDBc1Hw6iw99GGDR0vDGCLmPHyiJLfD6TbzzNo
31
+ oB0pMQ==
32
+ -----END CERTIFICATE-----
12
33
 
13
- date: 2009-12-04 00:00:00 -05:00
34
+ date: 2009-12-05 00:00:00 -05:00
14
35
  default_executable:
15
36
  dependencies:
16
37
  - !ruby/object:Gem::Dependency
@@ -33,6 +54,16 @@ dependencies:
33
54
  - !ruby/object:Gem::Version
34
55
  version: 0.2.0
35
56
  version:
57
+ - !ruby/object:Gem::Dependency
58
+ name: json
59
+ type: :runtime
60
+ version_requirement:
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 1.0.0
66
+ version:
36
67
  - !ruby/object:Gem::Dependency
37
68
  name: hoe
38
69
  type: :development
@@ -46,8 +77,8 @@ dependencies:
46
77
  description: "Clarity - a log search tool\n\
47
78
  By John Tajima & Tobi L\xC3\xBCtke\n\n\
48
79
  Clarity is a Splunk like web interface for your server log files. It supports \n\
49
- searching (using grep) as well as trailing log files. It has been written using \n\
50
- the event based architecture based on EventMachine and so allows real-time search\n\
80
+ searching (using grep) as well as trailing log files in realtime. It has been written \n\
81
+ using the event based architecture based on EventMachine and so allows real-time search\n\
51
82
  of very large log files. If you hit the browser Stop button it will also kill \n\
52
83
  the grep / tail utility. \n\n\
53
84
  We wrote Clarity to allow our support staff to use a simple interface to look\n\
@@ -74,7 +105,7 @@ files:
74
105
  - config/config.yml.sample
75
106
  - lib/clarity.rb
76
107
  - lib/clarity/cli.rb
77
- - lib/clarity/commands/command_builder.rb
108
+ - lib/clarity/commands/grep_command_builder.rb
78
109
  - lib/clarity/commands/tail_command_builder.rb
79
110
  - lib/clarity/grep_renderer.rb
80
111
  - lib/clarity/process_tree.rb
@@ -89,12 +120,9 @@ files:
89
120
  - script/console
90
121
  - script/destroy
91
122
  - script/generate
92
- - test/commands/command_builder_test.rb
123
+ - test/commands/grep_command_builder_test.rb
93
124
  - test/commands/tail_command_builder_test.rb
94
125
  - test/files/logfile.log
95
- - test/parsers/hostname_parser_test.rb
96
- - test/parsers/shop_parser_test.rb
97
- - test/parsers/time_parser_test.rb
98
126
  - test/test_helper.rb
99
127
  - test/test_string_scanner.rb
100
128
  - views/_header.html.erb
@@ -105,7 +133,7 @@ has_rdoc: true
105
133
  homepage: http://github.com/tobi/clarity
106
134
  licenses: []
107
135
 
108
- post_install_message: PostInstall.txt
136
+ post_install_message:
109
137
  rdoc_options:
110
138
  - --main
111
139
  - README.rdoc
@@ -129,10 +157,7 @@ rubyforge_project: clarity
129
157
  rubygems_version: 1.3.5
130
158
  signing_key:
131
159
  specification_version: 3
132
- summary: "Clarity - a log search tool By John Tajima & Tobi L\xC3\xBCtke Clarity is a Splunk like web interface for your server log files"
160
+ summary: Web interface for grep and tail -f
133
161
  test_files:
134
- - test/commands/command_builder_test.rb
162
+ - test/commands/grep_command_builder_test.rb
135
163
  - test/commands/tail_command_builder_test.rb
136
- - test/parsers/hostname_parser_test.rb
137
- - test/parsers/shop_parser_test.rb
138
- - test/parsers/time_parser_test.rb
@@ -0,0 +1 @@
1
+ �#�3��koh���P k0�����u�*ضC�8E��o�tLZJҩ%PՌBh]׋��C��|8�a�/�LA0�t��\���ơ�HBR~�����Ii֖4#P�t��hw��';�:���Q��ͭz�n�9��jn��\��k��؂3��:7��&/ޛ 䤆�ވ?d�np��07�F C��;�<���h��Vٟ����Yq��|�vC�<#9��T�\j�����N�����G<��.eCaN�o�ޏ
@@ -1,39 +0,0 @@
1
- require 'test_helper'
2
-
3
- class HostnameParserTest < Test::Unit::TestCase
4
-
5
- def setup
6
- @params = { "sh" => "12", "sm" => "00", "ss" => "10", "eh" => "12", "em" => "00", "es" => "59" }
7
- @lines = %|Jul 24 14:58:21 app3 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
8
- Jul 24 12:00:21 192.168.5.1 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
9
- Jul 24 12:00:31 192.168.5.1 rails.shopify[9855]: [test.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
10
- Jul 24 12:00:41 192.168.5.1 rails.shopify[9855]: [test2.myshopify.com] Processing some other line of text
11
- |.split("\n")
12
- @parser = HostnameParser.new(nil)
13
- end
14
-
15
-
16
- def test_parse_strips_out_ip_and_appname
17
- line = @lines[1][16..-1] # strip out first 16 lines
18
- out = @parser.parse(line)
19
-
20
- assert out.has_key?(:line)
21
- assert_equal "[wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", out[:line]
22
- end
23
-
24
- def test_parse_strips_out_host_and_appname
25
- line = @lines.first[16..-1] # strip out first 16 lines
26
- out = @parser.parse(line)
27
-
28
- assert out.has_key?(:line)
29
- assert_equal "[wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", out[:line]
30
- end
31
-
32
- def test_parse_returns_line_if_no_match
33
- line = "in@valid rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]"
34
- out = @parser.parse(line)
35
- assert out.has_key?(:line)
36
- assert_equal line, out[:line]
37
- end
38
-
39
- end
@@ -1,53 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ShopParserTest < Test::Unit::TestCase
4
-
5
- def setup
6
- @parser = ShopParser.new(nil)
7
- @lines = %|[wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
8
- [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
9
- [test.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
10
- [my-shop.myshopify.com] Processing some other line of text
11
- Jul 7 20:12:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
12
- |.split("\n")
13
- end
14
-
15
- def test_parse_shop_name
16
- line = @lines.first
17
- out = @parser.parse(line)
18
-
19
- assert out.has_key?(:shop)
20
- assert out.has_key?(:line)
21
- assert_equal "wadedemt.myshopify.com", out[:shop]
22
- assert_equal "Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", out[:line]
23
- end
24
-
25
- def test_parse_shop_name_with_extra_space
26
- line = @lines[1]
27
- out = @parser.parse(line)
28
-
29
- assert out.has_key?(:shop)
30
- assert out.has_key?(:line)
31
- assert_equal "wadedemt.myshopify.com", out[:shop]
32
- assert_equal "Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", out[:line]
33
- end
34
-
35
- def test_parse_shop_name_with_dashes
36
- line = @lines[3]
37
- out = @parser.parse(line)
38
-
39
- assert out.has_key?(:shop)
40
- assert out.has_key?(:line)
41
- assert_equal "my-shop.myshopify.com", out[:shop]
42
- assert_equal "Processing some other line of text", out[:line]
43
- end
44
-
45
- def test_parse_with_no_shop_returns_line
46
- line = @lines[4]
47
- out = @parser.parse(line)
48
- assert !out.has_key?(:shop)
49
- assert_equal line, out[:line]
50
- end
51
-
52
- end
53
-
@@ -1,83 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TimeParserTest < Test::Unit::TestCase
4
-
5
- def setup
6
- @params = { "sh" => "12", "sm" => "00", "ss" => "10", "eh" => "12", "em" => "00", "es" => "59" }
7
- @lines = %|Jul 24 14:58:21 app3 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
8
- Jul 24 12:00:21 192.168.5.1 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
9
- Jul 24 12:00:31 192.168.5.1 rails.shopify[9855]: [test.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
10
- Jul 24 12:00:41 192.168.5.1 rails.shopify[9855]: [test2.myshopify.com] Processing some other line of text
11
- |.split("\n")
12
- end
13
-
14
- def test_parse_timestamp
15
- @parser = TimeParser.new(nil, {})
16
- line = @lines.first
17
- elements = @parser.parse(line)
18
-
19
- assert elements.has_key?(:timestamp)
20
- assert_equal "Jul 24 14:58:21", elements[:timestamp]
21
- assert_equal "app3 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", elements[:line]
22
- end
23
-
24
- def test_parse_with_start_time_and_early_timestamp
25
- @parser = TimeParser.new(nil, {"sh" => "15", "sm" => "00", "ss" => "10"})
26
- line = @lines.first
27
- elements = @parser.parse(line)
28
-
29
- # does not match - reject line all together
30
- assert elements.empty?
31
- end
32
-
33
- def test_parse_with_start_time_and_later_timestamp
34
- @parser = TimeParser.new(nil, {"sh" => "12", "sm" => "00", "ss" => "10"})
35
- line = @lines[1]
36
- elements = @parser.parse(line)
37
-
38
- assert elements.has_key?(:timestamp)
39
- assert elements.has_key?(:line)
40
- end
41
-
42
- def test_parse_with_end_time_and_early_timestamp
43
- @parser = TimeParser.new(nil, {"eh" => "12", "em" => "00", "es" => "00"})
44
- line = @lines.first
45
- elements = @parser.parse(line)
46
-
47
- assert elements.empty?
48
- end
49
-
50
- def test_parse_with_end_time_and_later_timestamp
51
- @parser = TimeParser.new(nil, {"eh" => "13", "em" => "00", "es" => "00"})
52
- line = @lines[1]
53
- elements = @parser.parse(line)
54
-
55
- assert elements.has_key?(:timestamp)
56
- assert elements.has_key?(:line)
57
- end
58
-
59
- def test_parse_with_entry_between_start_and_end
60
- @parser = TimeParser.new(nil, {"sh" => "14", "sm" => "00", "ss" => "00", "eh" => "15", "em" => "00", "es" => "00"})
61
- line = @lines.first
62
- elements = @parser.parse(line)
63
-
64
- assert elements.has_key?(:timestamp)
65
- assert elements.has_key?(:line)
66
- end
67
-
68
- def test_parse_with_entry_outside_start_and_end
69
- @parser = TimeParser.new(nil, {"sh" => "14", "sm" => "00", "ss" => "00", "eh" => "15", "em" => "00", "es" => "00"})
70
- line = @lines[1]
71
- elements = @parser.parse(line)
72
-
73
- assert elements.empty?
74
- end
75
-
76
- def test_parse_returns_entry_if_doesnt_match_parser
77
- line = "July 24, 1999 12:00:21 192.168.5.1 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET] "
78
- @parser = TimeParser.new(nil)
79
- elements = @parser.parse(line)
80
- assert_equal line, elements[:line]
81
- end
82
-
83
- end