clarity 0.9.7 → 0.9.8

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.
@@ -17,6 +17,13 @@ We wrote Clarity to allow our support staff to use a simple interface to look
17
17
  through the various log files in our server farm. The application was such a
18
18
  big success internally that we decided to release it as open source.
19
19
 
20
+ == SECURITY:
21
+
22
+ *Warning*: Clarity takes parameters from URLs and runs them in the shell.
23
+ This is essentially the most insecure thing imaginable. You have to make absolutley sure
24
+ that clarity isn't reachable by the outside world. At the very least use --username and
25
+ --password to put some protection on it.
26
+
20
27
  == USAGE:
21
28
 
22
29
  clarity --username=admin --password=secret --port=8989 /var/log
data/Rakefile CHANGED
@@ -13,7 +13,7 @@ $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
15
  self.summary = 'Web interface for grep and tail -f'
16
- #self.post_install_message = 'PostInstall.txt'
16
+ self.post_install_message = 'PostInstall.txt'
17
17
  self.readme_file = 'README.rdoc'
18
18
  self.extra_deps = [['eventmachine','>= 0.12.10'], ['eventmachine_httpserver','>= 0.2.0'], ["json", ">= 1.0.0"]]
19
19
  self.test_globs = ['test/**/*_test.rb']
File without changes
@@ -1,5 +1,10 @@
1
1
  $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
2
2
 
3
+ begin
4
+ require File.join(File.dirname(__FILE__), *%w[.. vendor gems environment])
5
+ rescue LoadError
6
+ end
7
+
3
8
  require 'eventmachine'
4
9
  require 'evma_httpserver'
5
10
  require 'json'
@@ -11,7 +16,7 @@ require 'clarity/commands/tail_command_builder'
11
16
  require 'clarity/renderers/log_renderer'
12
17
 
13
18
  module Clarity
14
- VERSION = '0.9.7'
19
+ VERSION = '0.9.8'
15
20
 
16
21
  Templates = File.dirname(__FILE__) + '/../views'
17
22
  Public = File.dirname(__FILE__) + '/../public'
@@ -11,7 +11,8 @@ module Clarity
11
11
  :port => 8080,
12
12
  :address => "0.0.0.0",
13
13
  :user => nil,
14
- :group => nil
14
+ :group => nil,
15
+ :relative_root => nil
15
16
  }
16
17
 
17
18
  mandatory_options = %w( )
@@ -37,6 +38,10 @@ module Clarity
37
38
  options[:address] = opt
38
39
  end
39
40
 
41
+ opts.on( "-r", "--relative=ROOT", String, "Run under a relative root" ) do |opt|
42
+ options[:relative_root] = opt
43
+ end
44
+
40
45
  opts.on( "--include=MASK", String, "File mask of logs to add (default: **/*.log*)" ) do |opt|
41
46
  options[:log_files] ||= []
42
47
  options[:log_files] += opt
@@ -39,7 +39,8 @@ class GrepCommandBuilder
39
39
 
40
40
 
41
41
  def gzip_tools
42
- terms.empty? ? ['gzcat filename'] : ['zgrep options -e term filename'] + ['grep options -e term'] * (terms.size-1)
42
+ cat_tool = (ENV["PATH"].split(":").find{|d| File.exists?(File.join(d, "gzcat"))} ? "zcat" : "gzcat")
43
+ terms.empty? ? ["#{cat_tool} filename"] : ['zgrep options -e term filename'] + ['grep options -e term'] * (terms.size-1)
43
44
  end
44
45
 
45
46
  def bzip_tools
@@ -15,7 +15,7 @@ module Clarity
15
15
  include Clarity::BasicAuth
16
16
  include Clarity::ChunkHttp
17
17
 
18
- attr_accessor :required_username, :required_password
18
+ attr_accessor :required_username, :required_password, :relative_root
19
19
  attr_accessor :log_files
20
20
 
21
21
  def self.run(options)
@@ -26,6 +26,7 @@ module Clarity
26
26
  a.log_files = options[:log_files]
27
27
  a.required_username = options[:username]
28
28
  a.required_password = options[:password]
29
+ a.relative_root = options[:relative_root] || ""
29
30
  end
30
31
 
31
32
  STDERR.puts "Clarity #{Clarity::VERSION} starting up."
@@ -37,7 +38,14 @@ module Clarity
37
38
  end
38
39
 
39
40
  STDERR.puts " * Log mask(s): #{options[:log_files].join(', ')}"
41
+
42
+ if options[:username].nil? or options[:password].nil?
43
+ STDERR.puts " * WARNING: No username/password specified. This is VERY insecure."
44
+ end
45
+
40
46
  STDERR.puts
47
+
48
+
41
49
  end
42
50
  end
43
51
 
@@ -73,7 +81,7 @@ module Clarity
73
81
  end
74
82
 
75
83
  when '/test'
76
- response = init_chunk_response
84
+ response = respond_with_chunks
77
85
  EventMachine::add_periodic_timer(1) do
78
86
  response.chunk "Lorem ipsum dolor sit amet<br/>"
79
87
  response.send_chunks
@@ -1,5 +1,5 @@
1
1
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
2
- <title>Clarity ~ A Log Search Tool</title>
3
- <link rel="stylesheet" href="/stylesheets/app.css" type="text/css" media="screen">
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
4
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
5
- <script src="/javascripts/app.js" type="text/javascript"></script>
5
+ <script src="<%= relative_root %>/javascripts/app.js" type="text/javascript"></script>
@@ -3,7 +3,7 @@
3
3
  <h1><a href="/">Clarity</a> <span class='small' style='color:#aaa'>Log Search Tool</span></h1>
4
4
  </div>
5
5
 
6
- <form id='search' method='get' action='/perform'>
6
+ <form id='search' method='get' action='<%= relative_root %>/perform'>
7
7
  <table class='actions'>
8
8
  <tr>
9
9
  <th>Action</th>
@@ -55,6 +55,7 @@
55
55
  </div>
56
56
 
57
57
  <script>
58
+ Search.url = "<%= relative_root %>" + Search.url;
58
59
  Search.init({ 'grep': <%= logfiles.map {|f| f }.to_json %>,
59
60
  'tail': <%= logfiles.map {|f| f if f =~ /log$/ }.compact.to_json %> },
60
61
  <%= params.empty? ? 'null' : params.to_json %> );
metadata CHANGED
@@ -1,37 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clarity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 0.9.8
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:
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-----
11
+ cert_chain: []
33
12
 
34
- date: 2009-12-05 00:00:00 -05:00
13
+ date: 2009-12-21 00:00:00 -05:00
35
14
  default_executable:
36
15
  dependencies:
37
16
  - !ruby/object:Gem::Dependency
@@ -133,7 +112,7 @@ has_rdoc: true
133
112
  homepage: http://github.com/tobi/clarity
134
113
  licenses: []
135
114
 
136
- post_install_message:
115
+ post_install_message: PostInstall.txt
137
116
  rdoc_options:
138
117
  - --main
139
118
  - README.rdoc
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
@@ -1 +0,0 @@
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�ޏ