tailstrom 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/tailstrom +2 -46
- data/lib/tailstrom/command/stat.rb +3 -4
- data/lib/tailstrom/option_parser.rb +93 -0
- data/lib/tailstrom/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f926cdcaa4991ec047200693a400944e4923e26
|
4
|
+
data.tar.gz: 1739fde8a212c22dee1a2c2fb11c5dbbe4d5a67f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30e6c199b116df31de4235e51b689879e00ec01f3951eb754589250c534c4034a75ea14250eefda4bd4c790f9e4fef6508144db45c31e29a7e5c6cd716c2f43a
|
7
|
+
data.tar.gz: ecbe7d88dede8e5cfd9f217883da8125c0ed796c2f0cad64949b62d9d75ec06896a6f9ed3deb8ad1cb0f5976f6faf05ea865cd8d234d268f3a31f8b2db450afe
|
data/bin/tailstrom
CHANGED
@@ -1,52 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
$: << File.expand_path('../../lib', __FILE__)
|
3
|
-
require '
|
3
|
+
require 'tailstrom/option_parser'
|
4
4
|
|
5
|
-
|
6
|
-
File.exist?(value) ? File.read(value) : value
|
7
|
-
end
|
8
|
-
|
9
|
-
options = {
|
10
|
-
:delimiter => "\t",
|
11
|
-
:interval => 1,
|
12
|
-
:mode => :stat,
|
13
|
-
:order => :desc
|
14
|
-
}
|
15
|
-
OptionParser.new(ARGV) {|opt|
|
16
|
-
opt.banner = <<-END
|
17
|
-
tail -f access.log | #{$0} [OPTIONS]
|
18
|
-
#{$0} [OPTIONS] [file]
|
19
|
-
END
|
20
|
-
opt.on('-f num', Integer, 'value field') {|v| options[:field] = v }
|
21
|
-
opt.on('-k num', Integer, 'key field') {|v| options[:key] = v }
|
22
|
-
opt.on('-d delimiter', String, 'delimiter') {|v| options[:delimiter] = v }
|
23
|
-
opt.on('-i interval', Integer, 'interval for stat mode') {|v| options[:interval] = v }
|
24
|
-
opt.on('-e file_or_string', '--in-filter file_or_string', String, 'input filtering') do |v|
|
25
|
-
options[:in_filter] = file_or_string v
|
26
|
-
end
|
27
|
-
opt.on('--map file_or_string', String, 'input mapping') do |v|
|
28
|
-
options[:map] = file_or_string v
|
29
|
-
end
|
30
|
-
opt.on('--out-filter file_or_string', String, 'output filtering') do |v|
|
31
|
-
options[:out_filter] = file_or_string v
|
32
|
-
end
|
33
|
-
opt.on('--sort file_or_string', String, 'output sorting') do |v|
|
34
|
-
options[:sort] = file_or_string v
|
35
|
-
end
|
36
|
-
opt.on('--order desc|asc', String, 'sorting order (default=desc)') do |v|
|
37
|
-
options[:order] = v.to_s.downcase == 'asc' ? :asc : :desc
|
38
|
-
end
|
39
|
-
opt.on('--stat', 'statistics mode (default)') { options[:mode] = :stat }
|
40
|
-
opt.on('--print', 'print line mode') { options[:mode] = :print }
|
41
|
-
opt.on('--version', 'show version') do
|
42
|
-
require 'tailstrom/version'
|
43
|
-
puts Tailstrom::VERSION
|
44
|
-
exit 0
|
45
|
-
end
|
46
|
-
}.order!
|
47
|
-
if infile = ARGV.shift
|
48
|
-
options[:static_infile] = open(infile, 'r')
|
49
|
-
end
|
5
|
+
options = Tailstrom::OptionParser.new.parse ARGV
|
50
6
|
|
51
7
|
require "tailstrom/command/#{options[:mode]}"
|
52
8
|
cls = Tailstrom::Command.const_get options[:mode].to_s.capitalize
|
@@ -40,10 +40,6 @@ module Tailstrom
|
|
40
40
|
|
41
41
|
print_counters
|
42
42
|
|
43
|
-
if @counters.size > 1
|
44
|
-
@table.puts
|
45
|
-
end
|
46
|
-
|
47
43
|
@counters.clear
|
48
44
|
i = i + 1
|
49
45
|
end while !reader.eof?
|
@@ -62,6 +58,7 @@ module Tailstrom
|
|
62
58
|
end
|
63
59
|
|
64
60
|
def print_counters
|
61
|
+
printed_lines = 0
|
65
62
|
sorted_counters.each do |key, c|
|
66
63
|
key = (key == :nil ? nil : key)
|
67
64
|
next unless out_filter(key, c)
|
@@ -71,7 +68,9 @@ module Tailstrom
|
|
71
68
|
else
|
72
69
|
@table.print_row c.count, c.min, c.max, c.avg, key
|
73
70
|
end
|
71
|
+
printed_lines += 1
|
74
72
|
end
|
73
|
+
@table.puts if printed_lines > 1
|
75
74
|
end
|
76
75
|
|
77
76
|
def sorted_counters
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Tailstrom
|
4
|
+
class OptionParser
|
5
|
+
DEFAULTS = {
|
6
|
+
:delimiter => "\t",
|
7
|
+
:interval => 1,
|
8
|
+
:mode => :stat,
|
9
|
+
:order => :desc
|
10
|
+
}.freeze
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@options = {}
|
14
|
+
@options_from_file = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def parse(argv)
|
18
|
+
parser.order! argv
|
19
|
+
if infile = argv.shift
|
20
|
+
@options[:static_infile] = open(infile, 'r')
|
21
|
+
end
|
22
|
+
@options = @options_from_file.merge @options
|
23
|
+
DEFAULTS.merge @options
|
24
|
+
end
|
25
|
+
|
26
|
+
def parser
|
27
|
+
::OptionParser.new do |opt|
|
28
|
+
opt.banner = <<-END
|
29
|
+
tail -f access.log | #{$0} [OPTIONS]
|
30
|
+
#{$0} [OPTIONS] [file]
|
31
|
+
END
|
32
|
+
opt.on('-c file', '--config file', String, 'config file') do |v|
|
33
|
+
require 'tailstrom/config_loader'
|
34
|
+
@options_from_file = load_config v
|
35
|
+
end
|
36
|
+
opt.on('-f num', Integer, 'value field') do |v|
|
37
|
+
@options[:field] = v
|
38
|
+
end
|
39
|
+
opt.on('-k num', Integer, 'key field') do |v|
|
40
|
+
@options[:key] = v
|
41
|
+
end
|
42
|
+
opt.on('-d delimiter', String, 'delimiter') do |v|
|
43
|
+
@options[:delimiter] = v
|
44
|
+
end
|
45
|
+
opt.on('-i interval', Integer, 'interval for stat mode') do |v|
|
46
|
+
@options[:interval] = v
|
47
|
+
end
|
48
|
+
opt.on('-e file_or_string', '--in-filter file_or_string', String, 'input filtering') do |v|
|
49
|
+
@options[:in_filter] = file_or_string v
|
50
|
+
end
|
51
|
+
opt.on('--map file_or_string', String, 'input mapping') do |v|
|
52
|
+
@options[:map] = file_or_string v
|
53
|
+
end
|
54
|
+
opt.on('--out-filter file_or_string', String, 'output filtering') do |v|
|
55
|
+
@options[:out_filter] = file_or_string v
|
56
|
+
end
|
57
|
+
opt.on('--sort file_or_string', String, 'output sorting') do |v|
|
58
|
+
@options[:sort] = file_or_string v
|
59
|
+
end
|
60
|
+
opt.on('--order desc|asc', String, 'sorting order (default=desc)') do |v|
|
61
|
+
@options[:order] = v.to_s.downcase == 'asc' ? :asc : :desc
|
62
|
+
end
|
63
|
+
opt.on('--stat', 'statistics mode (default)') do
|
64
|
+
@options[:mode] = :stat
|
65
|
+
end
|
66
|
+
opt.on('--print', 'print line mode') do
|
67
|
+
@options[:mode] = :print
|
68
|
+
end
|
69
|
+
opt.on('--version', 'show version') do
|
70
|
+
require 'tailstrom/version'
|
71
|
+
puts Tailstrom::VERSION
|
72
|
+
exit 0
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
def file_or_string(value)
|
79
|
+
File.exist?(value) ? File.read(value) : value
|
80
|
+
end
|
81
|
+
|
82
|
+
def load_config(file)
|
83
|
+
argv = []
|
84
|
+
hash = YAML.load File.read(file)
|
85
|
+
hash.each do |k, v|
|
86
|
+
argv << (k.length > 1 ? "--#{k}" : "-#{k}")
|
87
|
+
argv << (v unless v.is_a? TrueClass)
|
88
|
+
end
|
89
|
+
parser = Tailstrom::OptionParser.new
|
90
|
+
parser.parse argv
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/lib/tailstrom/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tailstrom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Issei Naruta
|
@@ -31,6 +31,7 @@ files:
|
|
31
31
|
- lib/tailstrom/command/stat.rb
|
32
32
|
- lib/tailstrom/counter.rb
|
33
33
|
- lib/tailstrom/counter_collection.rb
|
34
|
+
- lib/tailstrom/option_parser.rb
|
34
35
|
- lib/tailstrom/table.rb
|
35
36
|
- lib/tailstrom/tail_reader.rb
|
36
37
|
- lib/tailstrom/version.rb
|