ix-cli 0.0.17 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
data/bin/ix-matrioshka ADDED
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+
5
+ options = {}
6
+ options[:style] = :round
7
+
8
+ OptionParser.new do |opts|
9
+
10
+ opts.banner = "Usage: #{$0} [OPTIONS]"
11
+
12
+ opts.on('-s', '--style [STRING]', 'One of [round, square, mysql, double].') do |value|
13
+ options[:style] = value.to_sym
14
+ end
15
+
16
+ end.parse!
17
+
18
+ required_options = [:style]
19
+ required_options.each do |option|
20
+ unless options[option]
21
+ $stderr.puts "Can not run #{option.to_s} was not given."
22
+ exit 1
23
+ end
24
+ end
25
+
26
+ def box(string, style = :round)
27
+ styles = {
28
+ round: {
29
+ top: '╭╮',
30
+ bottom: '╰╯',
31
+ side: '│',
32
+ horizontal: '─'
33
+ },
34
+ square: {
35
+ top: '┌┐',
36
+ bottom: '└┘',
37
+ side: '│',
38
+ horizontal: '─'
39
+ },
40
+ double: {
41
+ top: '╔╗',
42
+ bottom: '╚╝',
43
+ side: '║',
44
+ horizontal: '═'
45
+ },
46
+ mysql: {
47
+ top: '++',
48
+ bottom: '++',
49
+ side: '|',
50
+ horizontal: '-'
51
+ }
52
+ }
53
+ if styles[style].nil?
54
+ $stderr.puts "Unknown style #{style}"
55
+ exit 1
56
+ end
57
+ s = styles[style]
58
+ lines = []
59
+ string.each_line do |line|
60
+ lines.push(line.chomp)
61
+ end
62
+ result = ''
63
+ max = lines.map { |line| line.size }.sort.last
64
+ line = (s[:horizontal] * (max + 2))
65
+ result << "#{s[:top][0]}#{line}#{s[:top][1]}\n"
66
+ lines.each do |line|
67
+ line = line.ljust(max)
68
+ padding_left = ' ' * ((max - line.size) / 2)
69
+ padding_right = ' ' * (max - line.size - padding_left.size)
70
+ result << "#{s[:side]} #{padding_left}#{line}#{padding_right} #{s[:side]}\n"
71
+ end
72
+ result << "#{s[:bottom][0]}#{line}#{s[:bottom][1]}\n"
73
+ result
74
+ end
75
+
76
+ puts box(STDIN.read, options[:style])
@@ -0,0 +1,120 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # ai did not cut it, I had to write this myself..
4
+ # cat file.sql | ruby parse.rb
5
+
6
+ require 'json'
7
+
8
+ class Buffer
9
+ def initialize
10
+ @buffer = []
11
+ end
12
+ def add(line)
13
+ @buffer << line
14
+ end
15
+ def flush
16
+ @buffer.join("\n")
17
+ end
18
+ def reset
19
+ @buffer = []
20
+ end
21
+ def to_s
22
+ flush
23
+ end
24
+ end
25
+
26
+ class Database
27
+ attr_accessor :name
28
+ attr_accessor :tables
29
+ def initialize(name)
30
+ @name = name
31
+ @tables = []
32
+ end
33
+ end
34
+
35
+ class Table
36
+ attr_accessor :name
37
+ attr_accessor :columns
38
+ def initialize(name)
39
+ @name = name
40
+ @columns = []
41
+ end
42
+ end
43
+
44
+ class Column
45
+ attr_accessor :name
46
+ attr_accessor :type
47
+ def initialize(name, type)
48
+ @name = name
49
+ @type = type
50
+ end
51
+ end
52
+ # -- Host: localhost Database: empowerkit_DBnew
53
+ REGEX_DATABASE_1 = /(^USE `)([^`]+)(`;)|(-- Host: [^\s]+Database: )(\w+)(\n)/
54
+ REGEX_DATABASE_2 = /(-- Host: [^\s]+\s+Database: )(\w+)($)/
55
+ REGEX_TABLE_START = /(^CREATE TABLE `)([^`]+)(` \()/
56
+ REGEX_TABLE_END = /(^\)( ENGINE.)(\w+))/
57
+ REGEX_COLUMN = /(^ `)([^`]+)(` )(\w+)([^\n]+)/
58
+
59
+ database = nil
60
+ parsing_table = false
61
+ buffer = Buffer.new
62
+
63
+ def get_table_object(string)
64
+ table_name = string.match(REGEX_TABLE_START)[2]
65
+ table_columns = []
66
+ string.scan(REGEX_COLUMN) do |column|
67
+ table_columns << Column.new(column[1], column[3])
68
+ end
69
+ table = Table.new(table_name)
70
+ table.columns = table_columns
71
+ table
72
+ end
73
+
74
+ STDIN.each_line do |line|
75
+ # line = line.force_encoding('UTF-8')
76
+ line = line.force_encoding('ISO-8859-1').encode('UTF-8')
77
+
78
+ if line =~ REGEX_DATABASE_1
79
+ database = Database.new($2)
80
+ next
81
+ end
82
+
83
+ if line =~ REGEX_DATABASE_2
84
+ database = Database.new($2)
85
+ next
86
+ end
87
+
88
+ next unless database
89
+
90
+ if line =~ REGEX_TABLE_START
91
+ buffer.reset
92
+ buffer.add(line.chomp)
93
+ parsing_table = true
94
+ next
95
+ end
96
+
97
+ if parsing_table
98
+ buffer.add(line.chomp)
99
+ if line =~ REGEX_TABLE_END
100
+ parsing_table = false
101
+ get_table_object(buffer.flush).tap do |table|
102
+ database.tables << table
103
+ end
104
+ end
105
+ end
106
+
107
+ end
108
+
109
+ database.tables.each do |table|
110
+ table.columns.each do |column|
111
+ object = {
112
+ :database => database.name,
113
+ :table => table.name,
114
+ :column => column.name,
115
+ :type => column.type
116
+ }
117
+ puts object.to_json
118
+ end
119
+ end
120
+
data/bin/ix-pad ADDED
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+
5
+ options = {}
6
+ options[:size] = 2
7
+
8
+ OptionParser.new do |opts|
9
+
10
+ opts.banner = "Usage: #{$0} [OPTIONS]"
11
+
12
+ opts.on('-s', '--size [NUMBER]', 'Size.') do |value|
13
+ options[:size] = value.to_i
14
+ end
15
+
16
+ end.parse!
17
+
18
+ required_options = [:size]
19
+ required_options.each do |option|
20
+ unless options[option]
21
+ $stderr.puts "Can not run #{option.to_s} was not given."
22
+ exit 1
23
+ end
24
+ end
25
+
26
+ options[:size].times do |i|
27
+ puts ''
28
+ end
29
+
30
+ STDIN.each_line do |line|
31
+ puts (' ' * options[:size]) + line.chomp + (' ' * options[:size])
32
+ end
33
+
34
+ options[:size].times do |i|
35
+ puts ''
36
+ end
data/bin/ix-percentage CHANGED
@@ -44,12 +44,21 @@ class Percentage
44
44
  bars = bars.to_ansi.red.to_s
45
45
  end
46
46
  end
47
+
48
+ output_percentage = (to_f.round(2).to_s.rjust(5, ' ') + '%')
49
+ output_divisor = @divisor.round(2).to_s.rjust(10, ' ')
50
+
51
+ if color
52
+ output_percentage = output_percentage.to_ansi.pink.to_s
53
+ output_divisor = output_divisor.to_ansi.cyan.to_s
54
+ end
55
+
47
56
  bindings = {
48
57
  :open => '[',
49
58
  :close => ']',
50
59
  :bars => bars,
51
- :percentage => (to_f.round(2).to_s.rjust(5, ' ') + '%').to_ansi.pink.to_s,
52
- :divisor => @divisor.round(2).to_s.rjust(10, ' ').to_ansi.cyan.to_s,
60
+ :percentage => output_percentage,
61
+ :divisor => output_divisor,
53
62
  :label => label
54
63
  }
55
64
  format("%<open>s%<bars>s%<close>s %<percentage>s %<divisor>s %<label>s", bindings)
@@ -165,7 +174,13 @@ end.reverse.each do |key|
165
174
  p = Percentage.new(total, array.product, options[:width])
166
175
 
167
176
  template = "%s %s"
168
- bindings = [p.to_bar(options[:color], options[:char], options[:label]), key.to_ansi.yellow.to_s]
177
+
178
+ if options[:color]
179
+ bindings = [p.to_bar(options[:color], options[:char], options[:label]), key.to_ansi.yellow.to_s]
180
+ else
181
+ bindings = [p.to_bar(options[:color], options[:char], options[:label]), key]
182
+ end
183
+
169
184
  puts template % bindings
170
185
  end
171
186
 
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json'
4
+
5
+ STDIN.each_line do |line|
6
+ line.chomp.split('&').map do |pair|
7
+ a, b = pair.split('=')
8
+ puts a
9
+ end
10
+ end
data/bin/ix-remove ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'isna'
5
+
6
+ options = {}
7
+
8
+ OptionParser.new do |opts|
9
+
10
+ opts.banner = "Usage: #{$0} [OPTIONS]"
11
+
12
+ opts.on('-f', '--file []', 'File with entries to be removed.') do |value|
13
+ options[:file] = value
14
+ end
15
+
16
+ end.parse!
17
+
18
+ required_options = [:file]
19
+ required_options.each do |option|
20
+ unless options[option]
21
+ $stderr.puts "Can not run #{option.to_s} was not given."
22
+ exit 1
23
+ end
24
+ end
25
+
26
+ unless File.exist?(options[:file])
27
+ $stderr.puts "File #{options[:file]} does not exist."
28
+ exit 1
29
+ end
30
+
31
+ inputs = []
32
+ entries = []
33
+
34
+
35
+ File.read(options[:file]).each_line do |line|
36
+ entries << line
37
+ end
38
+
39
+ STDIN.each_line do |line|
40
+ inputs << line
41
+ end
42
+
43
+ (inputs - entries).each do |item|
44
+ puts item.chomp
45
+ end
46
+
data/bin/ix-rjust ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ STDIN.each_line do |line|
4
+ puts line.chomp.rjust(ARGV[0].to_i)
5
+ end
data/bin/ix-rulers ADDED
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+
5
+ options = {}
6
+ options[:padding] = 5
7
+ options[:count] = 0
8
+
9
+ OptionParser.new do |opts|
10
+
11
+ opts.banner = "Usage: #{$0} [OPTIONS]"
12
+
13
+ opts.on('-w', '--width [NUMBER]', 'Width of the horizontal ruler (custom).') do |value|
14
+ options[:width] = value.to_i
15
+ end
16
+
17
+ opts.on('-p', '--padding [NUMBER]', 'Padding for numbers on the left.') do |value|
18
+ options[:padding] = value.to_i
19
+ end
20
+
21
+ opts.on('-c', '--count [NUMBER]', 'Count lines starting from.') do |value|
22
+ options[:count] = value.to_i
23
+ end
24
+
25
+ end.parse!
26
+
27
+ required_options = [:padding, :count]
28
+ required_options.each do |option|
29
+ unless options[option]
30
+ $stderr.puts "Can not run #{option.to_s} was not given."
31
+ exit 1
32
+ end
33
+ end
34
+
35
+ class Ruler
36
+ attr_accessor :length
37
+ def initialize(length)
38
+ @length = length
39
+ end
40
+
41
+ # we print the number of the column
42
+ # in various rows:
43
+ # for example first row will print:
44
+ # 00000000000
45
+ # 00000000011
46
+ # 12345678901
47
+ def to_s
48
+ items = (@length + 1).times.map do |item|
49
+ item.to_s.rjust(5, '0').chars
50
+ end
51
+ items.transpose.map(&:join).join("\n")
52
+ end
53
+
54
+ end
55
+
56
+ if options[:width]
57
+ Ruler.new(options[:width].to_i).to_s.lines.each do |line|
58
+ puts (' ' * (options[:padding] + 2)) + line
59
+ end
60
+ STDIN.each_line do |line|
61
+ puts "#{options[:count].to_s.rjust(options[:padding], '0')} | #{line}"
62
+ options[:count] += 1
63
+ end
64
+ else
65
+ lines = []
66
+ STDIN.each_line do |line|
67
+ lines << line
68
+ end
69
+ exit 0 if lines.empty?
70
+ options[:width] = lines.map(&:length).max
71
+ Ruler.new(options[:width].to_i).to_s.lines.each do |line|
72
+ puts (' ' * (options[:padding] + 2)) + line
73
+ end
74
+ lines.each do |line|
75
+ puts "#{options[:count].to_s.rjust(options[:padding], '0')} |#{line}"
76
+ options[:count] += 1
77
+ end
78
+ end
79
+
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'time'
4
+ require 'json'
5
+
6
+ def parse_s3_log_line(line)
7
+
8
+ # Split the log line by spaces, respecting quoted strings
9
+ parts = line.scan(/"([^"]+)"|(\S+)/).flatten.compact
10
+
11
+ {
12
+ bucket_owner: parts[0],
13
+ bucket: parts[1],
14
+ time: parts[2] + parts[3], # Remove the brackets around the time
15
+ remote_ip: parts[4],
16
+ requester: parts[5],
17
+ request_id: parts[6],
18
+ operation: parts[7],
19
+ key: parts[8],
20
+ request_uri: parts[9],
21
+ http_status: parts[10].to_i,
22
+ error_code: parts[11],
23
+ bytes_sent: parts[12].to_i,
24
+ object_size: parts[13],
25
+ total_time: parts[14].to_i,
26
+ turnaround_time: parts[15].to_i,
27
+ referer: parts[16],
28
+ user_agent: parts[17],
29
+ version_id: parts[18]
30
+ }
31
+ end
32
+
33
+ # Read from standard input
34
+ ARGF.each_line do |line|
35
+ parsed_log = parse_s3_log_line(line)
36
+ puts parsed_log.to_json
37
+ end
38
+
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json'
4
+
5
+ require 'optparse'
6
+
7
+ options = {}
8
+
9
+ OptionParser.new do |opts|
10
+
11
+ opts.banner = "Usage: #{$0} [OPTIONS]"
12
+
13
+ opts.on('-k', '--key [NAME]', 'Key in json to look for a timestamp.') do |value|
14
+ options[:key] = value
15
+ end
16
+
17
+ end.parse!
18
+
19
+ required_options = [:key]
20
+ required_options.each do |option|
21
+ unless options[option]
22
+ $stderr.puts "Can not run #{option.to_s} was not given."
23
+ exit 1
24
+ end
25
+ end
26
+
27
+ times = []
28
+ distances = []
29
+ previous = nil
30
+
31
+ STDIN.each_line do |line|
32
+ object = JSON.parse(line)
33
+ times << object[options[:key]]
34
+ end
35
+
36
+ times.sort do |a, b|
37
+ a <=> b
38
+ end.each do |time|
39
+ if previous
40
+ distances << time - previous
41
+ end
42
+ previous = time
43
+ end
44
+
45
+ distances.each do |distance|
46
+ puts "distance #{distance}"
47
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json'
4
+ require 'yaml'
5
+
6
+ puts YAML.load(STDIN.read).to_json
7
+