tailstrom 0.0.6 → 0.0.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.
- 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
|