kastner-clarity 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.
- data/History.txt +4 -0
- data/Manifest.txt +33 -0
- data/PostInstall.txt +8 -0
- data/README.rdoc +78 -0
- data/Rakefile +24 -0
- data/bin/clarity +10 -0
- data/config/config.yml.sample +7 -0
- data/lib/clarity.rb +23 -0
- data/lib/clarity/cli.rb +94 -0
- data/lib/clarity/commands/grep_command_builder.rb +56 -0
- data/lib/clarity/commands/tail_command_builder.rb +27 -0
- data/lib/clarity/grep_renderer.rb +37 -0
- data/lib/clarity/process_tree.rb +23 -0
- data/lib/clarity/renderers/log_renderer.rb +36 -0
- data/lib/clarity/server.rb +130 -0
- data/lib/clarity/server/basic_auth.rb +24 -0
- data/lib/clarity/server/chunk_http.rb +59 -0
- data/lib/clarity/server/mime_types.rb +23 -0
- data/public/images/spinner_big.gif +0 -0
- data/public/javascripts/app.js +154 -0
- data/public/stylesheets/app.css +54 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/test/commands/grep_command_builder_test.rb +99 -0
- data/test/commands/tail_command_builder_test.rb +42 -0
- data/test/files/logfile.log +17 -0
- data/test/test_helper.rb +4 -0
- data/test/test_string_scanner.rb +16 -0
- data/views/_header.html.erb +5 -0
- data/views/_toolbar.html.erb +64 -0
- data/views/error.html.erb +11 -0
- data/views/index.html.erb +9 -0
- metadata +144 -0
data/script/console
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# File: script/console
|
|
3
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
|
4
|
+
|
|
5
|
+
libs = " -r irb/completion"
|
|
6
|
+
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
|
7
|
+
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
|
8
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/clarity.rb'}"
|
|
9
|
+
puts "Loading clarity gem"
|
|
10
|
+
exec "#{irb} #{libs} --simple-prompt"
|
data/script/destroy
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'rubigen'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
require 'rubygems'
|
|
8
|
+
require 'rubigen'
|
|
9
|
+
end
|
|
10
|
+
require 'rubigen/scripts/destroy'
|
|
11
|
+
|
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
|
14
|
+
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/generate
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'rubigen'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
require 'rubygems'
|
|
8
|
+
require 'rubigen'
|
|
9
|
+
end
|
|
10
|
+
require 'rubigen/scripts/generate'
|
|
11
|
+
|
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
|
14
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class GrepCommandBuilderTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@params = {
|
|
7
|
+
"file" => "testfile.log",
|
|
8
|
+
"tool" => "grep",
|
|
9
|
+
"term1" => "foo",
|
|
10
|
+
"term2" => nil,
|
|
11
|
+
"term3" => nil
|
|
12
|
+
}
|
|
13
|
+
@command = GrepCommandBuilder.new(@params)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_create_new_builder
|
|
17
|
+
assert @command.is_a?(GrepCommandBuilder)
|
|
18
|
+
assert_equal "testfile.log", @command.filename
|
|
19
|
+
assert_equal 1, @command.terms.size
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_raises_error_if_no_file
|
|
23
|
+
assert_raises GrepCommandBuilder::InvalidParameterError do
|
|
24
|
+
command = GrepCommandBuilder.new(@params.merge("file" => nil))
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_exec_functions_for_log
|
|
29
|
+
command = GrepCommandBuilder.new(@params)
|
|
30
|
+
assert_equal 1, command.exec_functions.size
|
|
31
|
+
assert_match(/^grep/, command.exec_functions.first)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_exec_functions_with_multiple_terms_for_log
|
|
35
|
+
command = GrepCommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
|
|
36
|
+
assert_equal 3, command.exec_functions.size
|
|
37
|
+
assert_match(/^grep/, command.exec_functions[0])
|
|
38
|
+
assert_match(/^grep/, command.exec_functions[1])
|
|
39
|
+
assert_match(/^grep/, command.exec_functions[2])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_exec_function_with_no_terms_for_log
|
|
43
|
+
command = GrepCommandBuilder.new(@params.merge("term1" => nil))
|
|
44
|
+
assert_equal 1, command.exec_functions.size
|
|
45
|
+
assert_match(/^cat/, command.exec_functions[0])
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_exec_funcations_for_gzip
|
|
49
|
+
command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz"))
|
|
50
|
+
assert_equal 1, command.exec_functions.size
|
|
51
|
+
assert_match(/^zgrep/, command.exec_functions.first)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_exec_functions_with_multiple_terms_for_gzip
|
|
55
|
+
command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz", "term2" => "bar", "term3" => "baz"))
|
|
56
|
+
assert_equal 3, command.exec_functions.size
|
|
57
|
+
assert_match(/^zgrep/, command.exec_functions[0])
|
|
58
|
+
assert_match(/^grep/, command.exec_functions[1])
|
|
59
|
+
assert_match(/^grep/, command.exec_functions[2])
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_exec_function_with_no_terms_for_gzip
|
|
63
|
+
command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz", "term1" => nil))
|
|
64
|
+
assert_equal 1, command.exec_functions.size
|
|
65
|
+
assert_match "gzcat", command.exec_functions[0]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_command_for_log
|
|
69
|
+
command = GrepCommandBuilder.new(@params)
|
|
70
|
+
assert_equal "sh -c 'grep -e foo testfile.log'", command.command
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_command_with_no_terms_for_log
|
|
74
|
+
command = GrepCommandBuilder.new(@params.merge("term1" => nil))
|
|
75
|
+
assert_equal "sh -c 'cat testfile.log'", command.command
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_command_with_multiple_terms_for_log
|
|
79
|
+
command = GrepCommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
|
|
80
|
+
assert_equal "sh -c 'grep -e foo testfile.log | grep -e bar | grep -e baz'", command.command
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_command_for_gzip
|
|
84
|
+
command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz"))
|
|
85
|
+
assert_equal "sh -c 'zgrep -e foo testfile.gz'", command.command
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_command_with_no_terms_for_gzip
|
|
89
|
+
command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz","term1" => nil))
|
|
90
|
+
assert_equal "sh -c 'gzcat testfile.gz'", command.command
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_command_with_multiple_terms_for_gzip
|
|
94
|
+
command = GrepCommandBuilder.new(@params.merge("file" => "testfile.gz","term2" => "bar", "term3" => "baz"))
|
|
95
|
+
assert_equal "sh -c 'zgrep -e foo testfile.gz | grep -e bar | grep -e baz'", command.command
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TailCommandBuilderTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@params = {
|
|
7
|
+
"file" => "testfile.log",
|
|
8
|
+
"tool" => "tail",
|
|
9
|
+
"term1" => "foo",
|
|
10
|
+
"term2" => nil,
|
|
11
|
+
"term3" => nil
|
|
12
|
+
}
|
|
13
|
+
@command = TailCommandBuilder.new(@params)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_create_new_builder
|
|
17
|
+
assert @command.is_a?(TailCommandBuilder)
|
|
18
|
+
assert_equal "testfile.log", @command.filename
|
|
19
|
+
assert_equal 1, @command.terms.size
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_raises_error_if_invalid_file
|
|
23
|
+
assert_raises GrepCommandBuilder::InvalidParameterError do
|
|
24
|
+
command = TailCommandBuilder.new(@params.merge("file" => "testfile.gz"))
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_command_for_log
|
|
29
|
+
command = TailCommandBuilder.new(@params)
|
|
30
|
+
assert_equal "sh -c 'tail -n 250 -f testfile.log | grep -e foo'", command.command
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_command_with_no_terms_for_log
|
|
34
|
+
command = TailCommandBuilder.new(@params.merge("term1" => nil))
|
|
35
|
+
assert_equal "sh -c 'tail -n 250 -f testfile.log'", command.command
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_command_with_multiple_terms_for_log
|
|
39
|
+
command = TailCommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
|
|
40
|
+
assert_equal "sh -c 'tail -n 250 -f testfile.log | grep -e foo | grep -e bar | grep -e baz'", command.command
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
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]
|
|
2
|
+
Jul 7 20:12:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Parameters: {"action"=>"index", "controller"=>"admin/products"}
|
|
3
|
+
Jul 7 20:12:12 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Shop Load (44.5ms) SELECT shops.* FROM shops JOIN domains ON domains.host = 'jessetesting.staging.shopify.com' AND domains.shop_id = shops.id LIMIT 1
|
|
4
|
+
Jul 7 20:12:12 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Subscription Columns (1.4ms) SHOW FIELDS FROM `subscriptions`
|
|
5
|
+
Jul 7 20:12:12 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Subscription Load (11.3ms) SELECT * FROM `subscriptions` WHERE (`subscriptions`.`id` = 500852)
|
|
6
|
+
Jul 7 20:12:13 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Redirected to http://jessetesting.staging.shopify.com/admin/auth/login
|
|
7
|
+
Jul 7 20:12:13 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Filter chain halted as [:ensure_proper_user] rendered_or_redirected.
|
|
8
|
+
Jul 7 20:12:13 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Completed in 118ms (DB: 57) | 302 Found [http://jessetesting.staging.shopify.com/admin/products]
|
|
9
|
+
Jul 7 20:20:00 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Processing Admin::AuthController#login (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
|
|
10
|
+
Jul 7 20:20:00 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Parameters: {"action"=>"login", "controller"=>"admin/auth"}
|
|
11
|
+
Jul 7 20:30:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Shop Load (0.2ms) SELECT shops.* FROM shops JOIN domains ON domains.host = 'jessetesting.staging.shopify.com' AND domains.shop_id = shops.id LIMIT 1
|
|
12
|
+
Jul 7 20:40:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Rendering template within layouts/admin/auth
|
|
13
|
+
Jul 7 20:50:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Rendering admin/auth/login
|
|
14
|
+
Jul 7 21:00:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Completed in 17ms (View: 10, DB: 0) | 200 OK [http://jessetesting.staging.shopify.com/admin/auth/login]
|
|
15
|
+
Jul 7 22:12:11 10.1.1.1 rails.shopify[27975]: [john.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
|
|
16
|
+
Jul 7 22:12:11 192.168.5.1 rails.shopify[27975]: [john.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
|
|
17
|
+
Jul 7 22:12:11 192.168.5.1 rails.shopify[27975]: [john.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require "strscan"
|
|
3
|
+
|
|
4
|
+
class TestLibraryFileName < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
NewLine = /\n/
|
|
7
|
+
def test_case_name
|
|
8
|
+
s = StringScanner.new('')
|
|
9
|
+
s << "abc\nd"
|
|
10
|
+
assert_equal "abc\n", s.scan_until(NewLine)
|
|
11
|
+
assert_equal nil, s.scan_until(NewLine)
|
|
12
|
+
s << "ef\ng"
|
|
13
|
+
assert_equal "def\n", s.scan_until(NewLine)
|
|
14
|
+
assert_equal nil, s.scan_until(NewLine)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
|
2
|
+
<title>Clarity ~ A Log Search Tool<%= relative_root %></title>
|
|
3
|
+
<link rel="stylesheet" href="<%= relative_root %>/stylesheets/app.css" type="text/css" media="screen">
|
|
4
|
+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
|
|
5
|
+
<script src="<%= relative_root %>/javascripts/app.js" type="text/javascript"></script>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<div id='toolbar'>
|
|
2
|
+
<div id='header'>
|
|
3
|
+
<h1><a href="/">Clarity</a> <span class='small' style='color:#aaa'>Log Search Tool</span></h1>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<form id='search' method='get' action='<%= relative_root %>/perform'>
|
|
7
|
+
<table class='actions'>
|
|
8
|
+
<tr>
|
|
9
|
+
<th>Action</th>
|
|
10
|
+
<th>Log File</th>
|
|
11
|
+
<th colspan=5>
|
|
12
|
+
Search Terms
|
|
13
|
+
<span class='note'><a href='#' onclick='Search.clear(); return false;'>clear</a></span>
|
|
14
|
+
</th>
|
|
15
|
+
<th> </th>
|
|
16
|
+
</tr>
|
|
17
|
+
<tr>
|
|
18
|
+
<td id='tool-selector'>
|
|
19
|
+
<input type='radio' name='tool' value='grep' id='grep-tool' checked='checked'> <span class='label' id='grep-label'>Search</span> <br/>
|
|
20
|
+
<input type='radio' name='tool' value='tail' id='tail-tool'> <span class='label' id='tail-label'>Tail</span> <br/>
|
|
21
|
+
</td>
|
|
22
|
+
<td id='file-selector'>
|
|
23
|
+
<select id='file-list' name='file'>
|
|
24
|
+
<% logfiles.map do |f| %>
|
|
25
|
+
<%= "<option value='#{f}'>#{f}</option>\n" %>
|
|
26
|
+
<% end %>
|
|
27
|
+
</select>
|
|
28
|
+
</td>
|
|
29
|
+
<td>
|
|
30
|
+
<input type='text' id='term1' name='term1' />
|
|
31
|
+
</td>
|
|
32
|
+
<td> <span class='and'>AND</span> </td>
|
|
33
|
+
<td>
|
|
34
|
+
<input type='text' id='term2' name='term2' />
|
|
35
|
+
</td>
|
|
36
|
+
<td> <span class='and'>AND</span> </td>
|
|
37
|
+
<td>
|
|
38
|
+
<input type='text' id='term3' name='term3' />
|
|
39
|
+
</td>
|
|
40
|
+
<td>
|
|
41
|
+
<input type='submit' value='Submit' onclick="Search.submit(); return false;"/>
|
|
42
|
+
</td>
|
|
43
|
+
<td>
|
|
44
|
+
</td>
|
|
45
|
+
</tr>
|
|
46
|
+
</table>
|
|
47
|
+
</form>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
<div id="option-ctrl">
|
|
52
|
+
<ul>
|
|
53
|
+
<li><input type='checkbox' name='enable_scrolling' id='auto-scroll'/><span> Auto scroll?</span></li>
|
|
54
|
+
</ul>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<script>
|
|
58
|
+
Search.url = "<%= relative_root %>" + Search.url;
|
|
59
|
+
Search.init({ 'grep': <%= logfiles.map {|f| f }.to_json %>,
|
|
60
|
+
'tail': <%= logfiles.map {|f| f if f =~ /log$/ }.compact.to_json %> },
|
|
61
|
+
<%= params.empty? ? 'null' : params.to_json %> );
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
</script>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<%= @content_for_header %>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<%= @toolbar %>
|
|
8
|
+
<h1>Error</h1>
|
|
9
|
+
<p><%= @error %></p>
|
|
10
|
+
</body>
|
|
11
|
+
</html>
|
metadata
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: kastner-clarity
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.9.7
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- "Tobias L\xC3\xBCtke"
|
|
8
|
+
- John Tajima
|
|
9
|
+
- Erik Kastner
|
|
10
|
+
autorequire:
|
|
11
|
+
bindir: bin
|
|
12
|
+
cert_chain: []
|
|
13
|
+
|
|
14
|
+
date: 2009-12-10 00:00:00 -05:00
|
|
15
|
+
default_executable:
|
|
16
|
+
dependencies:
|
|
17
|
+
- !ruby/object:Gem::Dependency
|
|
18
|
+
name: eventmachine
|
|
19
|
+
type: :runtime
|
|
20
|
+
version_requirement:
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 0.12.10
|
|
26
|
+
version:
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: eventmachine_httpserver
|
|
29
|
+
type: :runtime
|
|
30
|
+
version_requirement:
|
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
32
|
+
requirements:
|
|
33
|
+
- - ">="
|
|
34
|
+
- !ruby/object:Gem::Version
|
|
35
|
+
version: 0.2.0
|
|
36
|
+
version:
|
|
37
|
+
- !ruby/object:Gem::Dependency
|
|
38
|
+
name: json
|
|
39
|
+
type: :runtime
|
|
40
|
+
version_requirement:
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: 1.0.0
|
|
46
|
+
version:
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: hoe
|
|
49
|
+
type: :development
|
|
50
|
+
version_requirement:
|
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - ">="
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: 2.3.3
|
|
56
|
+
version:
|
|
57
|
+
description: "Clarity - a log search tool\n\
|
|
58
|
+
By John Tajima & Tobi L\xC3\xBCtke\n\n\
|
|
59
|
+
Clarity is a Splunk like web interface for your server log files. It supports \n\
|
|
60
|
+
searching (using grep) as well as trailing log files in realtime. It has been written \n\
|
|
61
|
+
using the event based architecture based on EventMachine and so allows real-time search\n\
|
|
62
|
+
of very large log files. If you hit the browser Stop button it will also kill \n\
|
|
63
|
+
the grep / tail utility. \n\n\
|
|
64
|
+
We wrote Clarity to allow our support staff to use a simple interface to look\n\
|
|
65
|
+
through the various log files in our server farm. The application was such a \n\
|
|
66
|
+
big success internally that we decided to release it as open source."
|
|
67
|
+
email:
|
|
68
|
+
- tobi@shopify.com
|
|
69
|
+
- john@shopify.com
|
|
70
|
+
- kastner@gmail.com
|
|
71
|
+
executables:
|
|
72
|
+
- clarity
|
|
73
|
+
extensions: []
|
|
74
|
+
|
|
75
|
+
extra_rdoc_files:
|
|
76
|
+
- History.txt
|
|
77
|
+
- Manifest.txt
|
|
78
|
+
- PostInstall.txt
|
|
79
|
+
files:
|
|
80
|
+
- History.txt
|
|
81
|
+
- Manifest.txt
|
|
82
|
+
- PostInstall.txt
|
|
83
|
+
- README.rdoc
|
|
84
|
+
- Rakefile
|
|
85
|
+
- bin/clarity
|
|
86
|
+
- config/config.yml.sample
|
|
87
|
+
- lib/clarity.rb
|
|
88
|
+
- lib/clarity/cli.rb
|
|
89
|
+
- lib/clarity/commands/grep_command_builder.rb
|
|
90
|
+
- lib/clarity/commands/tail_command_builder.rb
|
|
91
|
+
- lib/clarity/grep_renderer.rb
|
|
92
|
+
- lib/clarity/process_tree.rb
|
|
93
|
+
- lib/clarity/renderers/log_renderer.rb
|
|
94
|
+
- lib/clarity/server.rb
|
|
95
|
+
- lib/clarity/server/basic_auth.rb
|
|
96
|
+
- lib/clarity/server/chunk_http.rb
|
|
97
|
+
- lib/clarity/server/mime_types.rb
|
|
98
|
+
- public/images/spinner_big.gif
|
|
99
|
+
- public/javascripts/app.js
|
|
100
|
+
- public/stylesheets/app.css
|
|
101
|
+
- script/console
|
|
102
|
+
- script/destroy
|
|
103
|
+
- script/generate
|
|
104
|
+
- test/commands/grep_command_builder_test.rb
|
|
105
|
+
- test/commands/tail_command_builder_test.rb
|
|
106
|
+
- test/files/logfile.log
|
|
107
|
+
- test/test_helper.rb
|
|
108
|
+
- test/test_string_scanner.rb
|
|
109
|
+
- views/_header.html.erb
|
|
110
|
+
- views/_toolbar.html.erb
|
|
111
|
+
- views/error.html.erb
|
|
112
|
+
- views/index.html.erb
|
|
113
|
+
has_rdoc: true
|
|
114
|
+
homepage: http://github.com/tobi/clarity
|
|
115
|
+
licenses: []
|
|
116
|
+
|
|
117
|
+
post_install_message: PostInstall.txt
|
|
118
|
+
rdoc_options:
|
|
119
|
+
- --main
|
|
120
|
+
- README.rdoc
|
|
121
|
+
require_paths:
|
|
122
|
+
- lib
|
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
|
+
requirements:
|
|
125
|
+
- - ">="
|
|
126
|
+
- !ruby/object:Gem::Version
|
|
127
|
+
version: "0"
|
|
128
|
+
version:
|
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
|
+
requirements:
|
|
131
|
+
- - ">="
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: "0"
|
|
134
|
+
version:
|
|
135
|
+
requirements: []
|
|
136
|
+
|
|
137
|
+
rubyforge_project: kastner-clarity
|
|
138
|
+
rubygems_version: 1.3.5
|
|
139
|
+
signing_key:
|
|
140
|
+
specification_version: 3
|
|
141
|
+
summary: Web interface for grep and tail -f
|
|
142
|
+
test_files:
|
|
143
|
+
- test/commands/grep_command_builder_test.rb
|
|
144
|
+
- test/commands/tail_command_builder_test.rb
|