ix-cli 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/VERSION +1 -0
- data/bin/ix +14 -0
- data/bin/ix-acronym +21 -0
- data/bin/ix-add +8 -0
- data/bin/ix-append +8 -0
- data/bin/ix-arguments +12 -0
- data/bin/ix-array +17 -0
- data/bin/ix-ascii +3 -0
- data/bin/ix-avg +18 -0
- data/bin/ix-aws-pass +17 -0
- data/bin/ix-banner +2 -0
- data/bin/ix-base +24 -0
- data/bin/ix-base64-to-image +6 -0
- data/bin/ix-basename +8 -0
- data/bin/ix-bash-to-md +17 -0
- data/bin/ix-bcat +184 -0
- data/bin/ix-bellgrep +17 -0
- data/bin/ix-bench +9 -0
- data/bin/ix-binary-to-text +8 -0
- data/bin/ix-blackbox +45 -0
- data/bin/ix-blackbox-html-table +86 -0
- data/bin/ix-blamer +23 -0
- data/bin/ix-box +35 -0
- data/bin/ix-box2 +3 -0
- data/bin/ix-box3 +3 -0
- data/bin/ix-camel +17 -0
- data/bin/ix-cat +7 -0
- data/bin/ix-catafter +18 -0
- data/bin/ix-catan +6 -0
- data/bin/ix-chain +13 -0
- data/bin/ix-chars +4 -0
- data/bin/ix-checklist +23 -0
- data/bin/ix-child-math +10 -0
- data/bin/ix-chomp +6 -0
- data/bin/ix-chr +6 -0
- data/bin/ix-class +5 -0
- data/bin/ix-columns +41 -0
- data/bin/ix-combinations +11 -0
- data/bin/ix-command-class +21 -0
- data/bin/ix-commandify +22 -0
- data/bin/ix-commit +9 -0
- data/bin/ix-confirm +47 -0
- data/bin/ix-constants +9 -0
- data/bin/ix-cp +10 -0
- data/bin/ix-crack +163 -0
- data/bin/ix-crap +26 -0
- data/bin/ix-crazy-case +9 -0
- data/bin/ix-create-cluster-nodes +15 -0
- data/bin/ix-csv-to-json +16 -0
- data/bin/ix-day +12 -0
- data/bin/ix-debugging +33 -0
- data/bin/ix-decode-base64 +8 -0
- data/bin/ix-dequote +3 -0
- data/bin/ix-df +15 -0
- data/bin/ix-diagram +47 -0
- data/bin/ix-dirname +5 -0
- data/bin/ix-divide +8 -0
- data/bin/ix-done +11 -0
- data/bin/ix-dot-case +15 -0
- data/bin/ix-downcase +5 -0
- data/bin/ix-dto +39 -0
- data/bin/ix-each +7 -0
- data/bin/ix-edit +21 -0
- data/bin/ix-emails +10 -0
- data/bin/ix-escape +8 -0
- data/bin/ix-extensions +3 -0
- data/bin/ix-file-exists +11 -0
- data/bin/ix-filename +7 -0
- data/bin/ix-files +9 -0
- data/bin/ix-first +6 -0
- data/bin/ix-fish-diagram +47 -0
- data/bin/ix-flip-flop +20 -0
- data/bin/ix-flow +22 -0
- data/bin/ix-format-ruby-hash +61 -0
- data/bin/ix-gauge +86 -0
- data/bin/ix-get-colors +520 -0
- data/bin/ix-gift-exchange +52 -0
- data/bin/ix-glitter +29 -0
- data/bin/ix-grep-join +4 -0
- data/bin/ix-group +21 -0
- data/bin/ix-groups +15 -0
- data/bin/ix-gsub +5 -0
- data/bin/ix-gzip-dir +33 -0
- data/bin/ix-hash +10 -0
- data/bin/ix-hashtag +12 -0
- data/bin/ix-hex2rgb +5 -0
- data/bin/ix-histogram +80 -0
- data/bin/ix-hls +21 -0
- data/bin/ix-html +3 -0
- data/bin/ix-human-time +3 -0
- data/bin/ix-hyphen +9 -0
- data/bin/ix-hypothesis +546 -0
- data/bin/ix-ids +10 -0
- data/bin/ix-image-generate +3 -0
- data/bin/ix-image-to-base64 +9 -0
- data/bin/ix-increments +16 -0
- data/bin/ix-indent +42 -0
- data/bin/ix-indent-to-dot +36 -0
- data/bin/ix-int +5 -0
- data/bin/ix-interpolate +5 -0
- data/bin/ix-ips +4 -0
- data/bin/ix-jd +13 -0
- data/bin/ix-join +15 -0
- data/bin/ix-js-classic-functions +9 -0
- data/bin/ix-json-append +17 -0
- data/bin/ix-json-array-to-records +10 -0
- data/bin/ix-json-format +31 -0
- data/bin/ix-json-grep +16 -0
- data/bin/ix-json-interpolate +17 -0
- data/bin/ix-json-key +40 -0
- data/bin/ix-json-key-value +14 -0
- data/bin/ix-json-keys +12 -0
- data/bin/ix-json-merge +11 -0
- data/bin/ix-json-paths +61 -0
- data/bin/ix-json-paths-pretty +2 -0
- data/bin/ix-json-pp +11 -0
- data/bin/ix-json-query +14 -0
- data/bin/ix-json-records-to-array +13 -0
- data/bin/ix-json-remove-key +15 -0
- data/bin/ix-json-replace-values +35 -0
- data/bin/ix-json-template +267 -0
- data/bin/ix-json-to-csv +19 -0
- data/bin/ix-json-to-dot +5 -0
- data/bin/ix-json-to-html-table +84 -0
- data/bin/ix-json-to-ruby-hash +13 -0
- data/bin/ix-json-to-table +21 -0
- data/bin/ix-json-to-table-2 +22 -0
- data/bin/ix-json-to-xml +1 -0
- data/bin/ix-json-values +13 -0
- data/bin/ix-jsonpp +14 -0
- data/bin/ix-lake +6 -0
- data/bin/ix-lemmatize +17 -0
- data/bin/ix-length +6 -0
- data/bin/ix-linkify +35 -0
- data/bin/ix-linkify-html +70 -0
- data/bin/ix-links +3 -0
- data/bin/ix-llp +247 -0
- data/bin/ix-llp-indent +20 -0
- data/bin/ix-llp2 +224 -0
- data/bin/ix-log +44 -0
- data/bin/ix-make-readable +13 -0
- data/bin/ix-man +14 -0
- data/bin/ix-math +6 -0
- data/bin/ix-maze +3 -0
- data/bin/ix-md5 +7 -0
- data/bin/ix-md5s +3 -0
- data/bin/ix-military +39 -0
- data/bin/ix-morse-to-text +76 -0
- data/bin/ix-mr-robot +13 -0
- data/bin/ix-multiply +8 -0
- data/bin/ix-mv +10 -0
- data/bin/ix-ncsa-date-to-timestamp +27 -0
- data/bin/ix-nested-list +23 -0
- data/bin/ix-nnjj +16 -0
- data/bin/ix-noeol +6 -0
- data/bin/ix-noise +7 -0
- data/bin/ix-normalize +69 -0
- data/bin/ix-numbers +4 -0
- data/bin/ix-numerate +16 -0
- data/bin/ix-occurrence +8 -0
- data/bin/ix-open +9 -0
- data/bin/ix-parse +17 -0
- data/bin/ix-pass +17 -0
- data/bin/ix-path +8 -0
- data/bin/ix-path-stats +21 -0
- data/bin/ix-pbcopy +9 -0
- data/bin/ix-pdf +4 -0
- data/bin/ix-percentage +103 -0
- data/bin/ix-permutations +12 -0
- data/bin/ix-pick +4 -0
- data/bin/ix-planning-tickets +27 -0
- data/bin/ix-prefix +7 -0
- data/bin/ix-pretty +3 -0
- data/bin/ix-print-and-run +15 -0
- data/bin/ix-psd-to-json +16 -0
- data/bin/ix-quote +12 -0
- data/bin/ix-rainbow +21 -0
- data/bin/ix-ramp +15 -0
- data/bin/ix-random-hypothesis +10 -0
- data/bin/ix-range +9 -0
- data/bin/ix-remove-colors +519 -0
- data/bin/ix-remove-empty-lines +12 -0
- data/bin/ix-remove-leading-spaces +11 -0
- data/bin/ix-remove-trailing-spaces +11 -0
- data/bin/ix-replace +6 -0
- data/bin/ix-replay +34 -0
- data/bin/ix-retab +13 -0
- data/bin/ix-reverse +5 -0
- data/bin/ix-right +3 -0
- data/bin/ix-rm +8 -0
- data/bin/ix-rot13 +9 -0
- data/bin/ix-rot3 +9 -0
- data/bin/ix-rps +50 -0
- data/bin/ix-ruby-constructor-arguments +7 -0
- data/bin/ix-ruby-methods +40 -0
- data/bin/ix-ruby-options +189 -0
- data/bin/ix-ruby-procs +40 -0
- data/bin/ix-ruby-put-vars +11 -0
- data/bin/ix-ruby-setter-methods +47 -0
- data/bin/ix-ruby-to-json +9 -0
- data/bin/ix-ruler +13 -0
- data/bin/ix-run +105 -0
- data/bin/ix-saldo +25 -0
- data/bin/ix-sat +10 -0
- data/bin/ix-scan +13 -0
- data/bin/ix-scrum +13 -0
- data/bin/ix-scrum-summary +12 -0
- data/bin/ix-sentence +23 -0
- data/bin/ix-sentencify-comments +12 -0
- data/bin/ix-show-tabs +5 -0
- data/bin/ix-show-trailing-spaces +10 -0
- data/bin/ix-shuffle +11 -0
- data/bin/ix-signature +7 -0
- data/bin/ix-size +9 -0
- data/bin/ix-slider +201 -0
- data/bin/ix-snake +25 -0
- data/bin/ix-split +9 -0
- data/bin/ix-stack +42 -0
- data/bin/ix-stack-2 +31 -0
- data/bin/ix-stamp +5 -0
- data/bin/ix-stats +11 -0
- data/bin/ix-stream +15 -0
- data/bin/ix-string-similarity +152 -0
- data/bin/ix-string-similarity2 +35 -0
- data/bin/ix-strip +6 -0
- data/bin/ix-substract +5 -0
- data/bin/ix-success +2 -0
- data/bin/ix-suffix +7 -0
- data/bin/ix-sum +10 -0
- data/bin/ix-swap +3 -0
- data/bin/ix-symlink +13 -0
- data/bin/ix-tab +6 -0
- data/bin/ix-tabify +7 -0
- data/bin/ix-tac +11 -0
- data/bin/ix-task +20 -0
- data/bin/ix-technical +7 -0
- data/bin/ix-template +48 -0
- data/bin/ix-text-to-binary +7 -0
- data/bin/ix-text-to-dot +22 -0
- data/bin/ix-text-to-json +16 -0
- data/bin/ix-text-to-morse +72 -0
- data/bin/ix-tick +20 -0
- data/bin/ix-time +6 -0
- data/bin/ix-times +10 -0
- data/bin/ix-timestamp +79 -0
- data/bin/ix-timestamp-sort +16 -0
- data/bin/ix-timestamp2 +14 -0
- data/bin/ix-title +2 -0
- data/bin/ix-to-f +6 -0
- data/bin/ix-to-i +6 -0
- data/bin/ix-to-sym +6 -0
- data/bin/ix-to_i +6 -0
- data/bin/ix-todo +11 -0
- data/bin/ix-tokenize-for-template +25 -0
- data/bin/ix-transpose +48 -0
- data/bin/ix-tree +19 -0
- data/bin/ix-trim +5 -0
- data/bin/ix-truncate +22 -0
- data/bin/ix-ts +6 -0
- data/bin/ix-tsv-to-json +15 -0
- data/bin/ix-ucwords +11 -0
- data/bin/ix-unescape +8 -0
- data/bin/ix-unhtml +8 -0
- data/bin/ix-upcase +5 -0
- data/bin/ix-url-check +25 -0
- data/bin/ix-urls +46 -0
- data/bin/ix-vim +9 -0
- data/bin/ix-words +9 -0
- data/bin/ix-wrap +10 -0
- data/bin/ix-xy +81 -0
- data/bin/ix-zebra +122 -0
- metadata +597 -0
data/bin/ix-llp
ADDED
@@ -0,0 +1,247 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# llp - Lithium Log Parser
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'json'
|
7
|
+
require 'time'
|
8
|
+
require 'optparse'
|
9
|
+
require 'isna'
|
10
|
+
|
11
|
+
$options = {}
|
12
|
+
OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: #{$0} [options]"
|
14
|
+
opts.on("-e", "--errors", "Error summary.") do |v|
|
15
|
+
$options[:errors] = v
|
16
|
+
end
|
17
|
+
opts.on("-s", "--summary", "Execution summary.") do |v|
|
18
|
+
$options[:summary] = v
|
19
|
+
end
|
20
|
+
opts.on("-c", "--color", "Use color highligting.") do |v|
|
21
|
+
$options[:use_colors] = v
|
22
|
+
end
|
23
|
+
opts.on("-f", "--fetch-node-info", "Fetch node info.") do |v|
|
24
|
+
$options[:fetch_node_info] = v
|
25
|
+
end
|
26
|
+
end.parse!
|
27
|
+
|
28
|
+
def print(data)
|
29
|
+
unless $options[:errors]
|
30
|
+
puts data
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def translate_timestamp(timestamp_integer)
|
35
|
+
Time.at(timestamp_integer)
|
36
|
+
end
|
37
|
+
|
38
|
+
def translate_timestamp2(timestamp_integer)
|
39
|
+
cst_delta = 21600
|
40
|
+
utc = Time.at(timestamp_integer + cst_delta)
|
41
|
+
cst = Time.at(timestamp_integer)
|
42
|
+
time = utc
|
43
|
+
"new Date(#{time.year}, #{time.month}, #{time.day}, #{time.hour}, #{time.min}, #{time.sec})"
|
44
|
+
end
|
45
|
+
|
46
|
+
def print_summary(log_object, indent, options)
|
47
|
+
colored_action = log_object['action']
|
48
|
+
method_name = log_object['method_name']
|
49
|
+
token = log_object['token']
|
50
|
+
took_time = log_object['took_time']
|
51
|
+
|
52
|
+
if options[:use_colors]
|
53
|
+
if log_object['action'] == 'error'
|
54
|
+
colored_action = log_object['action'].to_ansi.blink.red
|
55
|
+
end
|
56
|
+
if log_object['action'] == 'execute'
|
57
|
+
colored_action = log_object['action'].to_ansi.green
|
58
|
+
end
|
59
|
+
if log_object['action'] == 'executed'
|
60
|
+
colored_action = log_object['action'].to_ansi.green
|
61
|
+
end
|
62
|
+
method_name = log_object['method_name'].to_ansi.red
|
63
|
+
token = log_object['token'][0..10].to_ansi.cyan
|
64
|
+
trace_id = log_object['trace_id'][0..10].to_ansi.green rescue 'n/a'
|
65
|
+
took_time = log_object['took_time'].to_s.to_ansi.blue
|
66
|
+
end
|
67
|
+
|
68
|
+
template = indent + "%s %s %s%s %s %s in %s %s"
|
69
|
+
|
70
|
+
bindings = []
|
71
|
+
bindings.push(indent)
|
72
|
+
bindings.push(colored_action)
|
73
|
+
bindings.push(log_object['class_name'])
|
74
|
+
bindings.push('#' + method_name.to_s)
|
75
|
+
bindings.push(token)
|
76
|
+
bindings.push(trace_id)
|
77
|
+
bindings.push(log_object['pname'])
|
78
|
+
bindings.push(took_time)
|
79
|
+
|
80
|
+
if log_object['action'] == 'error'
|
81
|
+
template << "\n%s %s"
|
82
|
+
bindings.push(indent)
|
83
|
+
if options[:use_colors]
|
84
|
+
bindings.push("[#{log_object['error']['message'].to_ansi.red}]")
|
85
|
+
else
|
86
|
+
bindings.push("[#{log_object['error']['message']}]")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
puts template % bindings
|
91
|
+
end
|
92
|
+
|
93
|
+
def print_detailed(log_object, indent, options)
|
94
|
+
template = "%20s: %s"
|
95
|
+
if log_object['action'] == 'execute'
|
96
|
+
print "{{{{{ #{log_object['action']} #{log_object['class_name']} #{log_object['method_name']} #{log_object['arguments']}"
|
97
|
+
end
|
98
|
+
print '------'
|
99
|
+
log_object.keys.sort.each do |key|
|
100
|
+
next if key == 'error'
|
101
|
+
if key == 'start_time'
|
102
|
+
print indent + template % [key, translate_timestamp(log_object[key])]
|
103
|
+
elsif key == 'end_time'
|
104
|
+
print indent + template % [key, translate_timestamp(log_object[key])]
|
105
|
+
elsif key == 'timestamp'
|
106
|
+
print indent + template % [key, translate_timestamp(log_object[key])]
|
107
|
+
elsif key == '_timestamp'
|
108
|
+
print indent + template % [key, translate_timestamp(log_object[key].to_f / 1000)]
|
109
|
+
elsif key == 'return'
|
110
|
+
if log_object[key].include?("\\n")
|
111
|
+
object = eval(log_object[key].to_s)
|
112
|
+
|
113
|
+
|
114
|
+
if object.is_a?(Array)
|
115
|
+
object.each_with_index do |item, index|
|
116
|
+
item = item.to_s
|
117
|
+
if item.to_s.include? "output"
|
118
|
+
begin
|
119
|
+
json = JSON.parse(item)
|
120
|
+
json['output'].each_line do |json_line|
|
121
|
+
print indent + template % [key, json_line.chomp]
|
122
|
+
end
|
123
|
+
rescue => error
|
124
|
+
print indent + template % [index, item.chomp]
|
125
|
+
end
|
126
|
+
else
|
127
|
+
print indent + template % [index, item.chomp]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
if object.is_a?(String)
|
133
|
+
object.each_line do |line|
|
134
|
+
print indent + template % [key, line.chomp]
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
else
|
139
|
+
print indent + template % [key, log_object[key]]
|
140
|
+
end
|
141
|
+
else
|
142
|
+
print indent + template % [key, log_object[key]]
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
if log_object.keys.include?('deploy')
|
147
|
+
log_object['deploy'].keys.sort.each do |key|
|
148
|
+
print indent + template % [key, log_object['deploy'][key]]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
unless options[:summary]
|
153
|
+
if log_object['action'] == 'executed'
|
154
|
+
print '}}}}}'
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
if log_object.keys.include?('error')
|
159
|
+
if options[:errors]
|
160
|
+
message = log_object['error']['message'][0..100].gsub(/\n/, '')
|
161
|
+
puts "#{log_object['token']} #{translate_timestamp(log_object['start_time'])} #{log_object['pname']} #{log_object['method_name']} #{message}"
|
162
|
+
|
163
|
+
if options[:fetch_node_info]
|
164
|
+
if ['create_task', 'create_document'].include?(log_object['method_name'])
|
165
|
+
puts "node ./script/getDataFromPsdServer.js --server #{log_object['pname'].split('.')[1]} --traceid #{eval(log_object['arguments'])[0]} | grep -i --color error"
|
166
|
+
system "node ./script/getDataFromPsdServer.js --server #{log_object['pname'].split('.')[1]} --traceid #{eval(log_object['arguments'])[0]} | grep -i --color error"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
log_object['error'].keys.sort.each do |key|
|
172
|
+
if key != 'backtrace'
|
173
|
+
print indent + template % [key, log_object['error'][key]]
|
174
|
+
next
|
175
|
+
end
|
176
|
+
end
|
177
|
+
print ''
|
178
|
+
log_object['error']['backtrace'].each do |err_line|
|
179
|
+
print indent + "\t#{err_line}"
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
unless options[:summary]
|
184
|
+
if log_object['action'] == 'error'
|
185
|
+
print '}}}}}'
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
def print_cobalt_summary(log_object)
|
192
|
+
indent = ' ' * log_object['nesting']
|
193
|
+
output = "#{indent} #{log_object['message']}"
|
194
|
+
if log_object['time']
|
195
|
+
output << " #{log_object['time']}"
|
196
|
+
end
|
197
|
+
puts output
|
198
|
+
end
|
199
|
+
|
200
|
+
count = 0
|
201
|
+
indent = ''
|
202
|
+
|
203
|
+
STDIN.each_line do |line|
|
204
|
+
lithium_line = line.include? 'lithium'
|
205
|
+
cobalt_line = line.include? '_cobaltLog'
|
206
|
+
friendly_line = (lithium_line || cobalt_line)
|
207
|
+
next unless friendly_line
|
208
|
+
|
209
|
+
begin
|
210
|
+
log_object = JSON.parse(line)
|
211
|
+
rescue => error
|
212
|
+
$stderr.puts error.message
|
213
|
+
next
|
214
|
+
end
|
215
|
+
|
216
|
+
unless log_object['action'] # different variant of cobalt
|
217
|
+
if $options[:summary]
|
218
|
+
print_cobalt_summary(log_object)
|
219
|
+
next
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
if log_object['action'] == 'execute'
|
224
|
+
count += 1
|
225
|
+
end
|
226
|
+
|
227
|
+
if count < 0
|
228
|
+
count = 0
|
229
|
+
end
|
230
|
+
|
231
|
+
if $options[:summary]
|
232
|
+
indent = ' ' * count
|
233
|
+
print_summary(log_object, indent, $options)
|
234
|
+
else
|
235
|
+
indent = ' ' * count
|
236
|
+
print_detailed(log_object, indent, $options)
|
237
|
+
end
|
238
|
+
|
239
|
+
if log_object['action'] == 'executed'
|
240
|
+
count -= 1
|
241
|
+
end
|
242
|
+
|
243
|
+
if log_object['action'] == 'error'
|
244
|
+
count -= 1
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
data/bin/ix-llp-indent
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
ix-indent 'execute ' executed:error ' '
|
4
|
+
|
5
|
+
# INDENT_REGEX = /execute /
|
6
|
+
# OUTDENT_REGEX = /executed|error/
|
7
|
+
# INDENT_STR = ' '
|
8
|
+
#
|
9
|
+
# multiplier = 0
|
10
|
+
#
|
11
|
+
# STDIN.each_line do |line|
|
12
|
+
# if line =~ OUTDENT_REGEX
|
13
|
+
# multiplier -= 1
|
14
|
+
# end
|
15
|
+
# puts "#{INDENT_STR * multiplier} #{line}"
|
16
|
+
# if line =~ INDENT_REGEX
|
17
|
+
# multiplier += 1
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
#
|
data/bin/ix-llp2
ADDED
@@ -0,0 +1,224 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# llp - Lithium Log Parser
|
4
|
+
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
options = {}
|
8
|
+
|
9
|
+
OptionParser.new do |opts|
|
10
|
+
|
11
|
+
opts.banner = "Usage: #{$0} [OPTIONS]"
|
12
|
+
|
13
|
+
opts.on('-e', '--errors', 'Errors.') do |value|
|
14
|
+
options[:errors] = value
|
15
|
+
end
|
16
|
+
|
17
|
+
opts.on('-s', '--summary', 'Summary.') do |value|
|
18
|
+
options[:summary] = value
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on('-c', '--color', 'Color.') do |value|
|
22
|
+
options[:color] = value
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end.parse!
|
27
|
+
|
28
|
+
required_options = [:errors, :summary, :color]
|
29
|
+
required_options.each do |option|
|
30
|
+
unless options[option]
|
31
|
+
$stderr.puts "Can not run #{option.to_s} was not given."
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
require 'rubygems'
|
38
|
+
require 'json'
|
39
|
+
require 'time'
|
40
|
+
require 'isna'
|
41
|
+
|
42
|
+
|
43
|
+
def print(data)
|
44
|
+
unless $options[:errors]
|
45
|
+
puts data
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def translate_timestamp(timestamp_integer)
|
50
|
+
Time.at(timestamp_integer)
|
51
|
+
end
|
52
|
+
|
53
|
+
SUMMARY_FORMAT = "%<indent>s %<action>s %<resolved_class>s %<method_name>s %<short_token_id>s %<short_trace_id>s %<pname>s %<took_time>s"
|
54
|
+
|
55
|
+
def print_summary(log_object, indent, use_colors = true)
|
56
|
+
|
57
|
+
|
58
|
+
object = log_object.symbolize_keys
|
59
|
+
|
60
|
+
object[:short_trace_id] = object[:trace_id].to_s[1..10]
|
61
|
+
object[:short_token_id] = object[:token].to_s[1..10]
|
62
|
+
|
63
|
+
if use_colors
|
64
|
+
if object[:action] == 'error'
|
65
|
+
object[:action] = object[:action].to_ansi.blink.red
|
66
|
+
end
|
67
|
+
if object[:action] == 'execute'
|
68
|
+
object[:action] = object[:action].to_ansi.green
|
69
|
+
end
|
70
|
+
if object[:action] == 'executed'
|
71
|
+
object[:action] = object[:action].to_ansi.green
|
72
|
+
end
|
73
|
+
object[:method_name] = object[:method_name].to_ansi.red
|
74
|
+
|
75
|
+
|
76
|
+
object[:short_trace_id] = object[:trace_id].to_s[1..10].to_ansi.green.to_s
|
77
|
+
object[:short_token_id] = object[:token].to_s[1..10].to_ansi.blue.to_s
|
78
|
+
|
79
|
+
object[:took_time] = object[:took_time].to_s.to_ansi.blue
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
# if log_object['action'] == 'error'
|
84
|
+
# template << "\n%s %s"
|
85
|
+
# bindings.push(indent)
|
86
|
+
# if use_colors
|
87
|
+
# bindings.push("[#{log_object['error']['message'].to_ansi.red}]")
|
88
|
+
# else
|
89
|
+
# bindings.push("[#{log_object['error']['message']}]")
|
90
|
+
# end
|
91
|
+
# end
|
92
|
+
|
93
|
+
puts format(SUMMARY_FORMAT, object)
|
94
|
+
end
|
95
|
+
|
96
|
+
def print_detailed(log_object, indent, options)
|
97
|
+
template = "%20s: %s"
|
98
|
+
if log_object['action'] == 'execute'
|
99
|
+
print "{{{{{ #{log_object['action']} #{log_object['class_name']} #{log_object['method_name']} #{log_object['arguments']}"
|
100
|
+
end
|
101
|
+
print '------'
|
102
|
+
log_object.keys.sort.each do |key|
|
103
|
+
next if key == 'error'
|
104
|
+
if key == 'start_time'
|
105
|
+
print indent + template % [key, translate_timestamp(log_object[key])]
|
106
|
+
elsif key == 'end_time'
|
107
|
+
print indent + template % [key, translate_timestamp(log_object[key])]
|
108
|
+
elsif key == 'timestamp'
|
109
|
+
print indent + template % [key, translate_timestamp(log_object[key])]
|
110
|
+
elsif key == '_timestamp'
|
111
|
+
print indent + template % [key, translate_timestamp(log_object[key].to_f / 1000)]
|
112
|
+
elsif key == 'return'
|
113
|
+
if log_object[key].include?("\\n")
|
114
|
+
object = eval(log_object[key].to_s)
|
115
|
+
|
116
|
+
|
117
|
+
if object.is_a?(Array)
|
118
|
+
object.each_with_index do |item, index|
|
119
|
+
item = item.to_s
|
120
|
+
if item.to_s.include? "output"
|
121
|
+
begin
|
122
|
+
json = JSON.parse(item)
|
123
|
+
json['output'].each_line do |json_line|
|
124
|
+
print indent + template % [key, json_line.chomp]
|
125
|
+
end
|
126
|
+
rescue => error
|
127
|
+
print indent + template % [index, item.chomp]
|
128
|
+
end
|
129
|
+
else
|
130
|
+
print indent + template % [index, item.chomp]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
if object.is_a?(String)
|
136
|
+
object.each_line do |line|
|
137
|
+
print indent + template % [key, line.chomp]
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
else
|
142
|
+
print indent + template % [key, log_object[key]]
|
143
|
+
end
|
144
|
+
else
|
145
|
+
print indent + template % [key, log_object[key]]
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
if log_object.keys.include?('deploy')
|
150
|
+
log_object['deploy'].keys.sort.each do |key|
|
151
|
+
print indent + template % [key, log_object['deploy'][key]]
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
unless options[:summary]
|
156
|
+
if log_object['action'] == 'executed'
|
157
|
+
print '}}}}}'
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
if log_object.keys.include?('error')
|
162
|
+
if options[:errors]
|
163
|
+
message = log_object['error']['message'][0..100].gsub(/\n/, '')
|
164
|
+
puts "#{log_object['token']} #{translate_timestamp(log_object['start_time'])} #{log_object['pname']} #{log_object['method_name']} #{message}"
|
165
|
+
end
|
166
|
+
|
167
|
+
log_object['error'].keys.sort.each do |key|
|
168
|
+
if key != 'backtrace'
|
169
|
+
print indent + template % [key, log_object['error'][key]]
|
170
|
+
next
|
171
|
+
end
|
172
|
+
end
|
173
|
+
print ''
|
174
|
+
log_object['error']['backtrace'].each do |err_line|
|
175
|
+
print indent + "\t#{err_line}"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
unless options[:summary]
|
180
|
+
if log_object['action'] == 'error'
|
181
|
+
print '}}}}}'
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
count = 0
|
188
|
+
indent = ''
|
189
|
+
|
190
|
+
STDIN.each_line do |line|
|
191
|
+
next unless line.include? 'lithium'
|
192
|
+
|
193
|
+
begin
|
194
|
+
log_object = JSON.parse(line)
|
195
|
+
rescue => error
|
196
|
+
$stderr.puts error.message
|
197
|
+
next
|
198
|
+
end
|
199
|
+
|
200
|
+
if log_object['action'] == 'execute'
|
201
|
+
count += 1
|
202
|
+
end
|
203
|
+
|
204
|
+
if count < 0
|
205
|
+
count = 0
|
206
|
+
end
|
207
|
+
|
208
|
+
if $options[:summary]
|
209
|
+
indent = ' ' * count
|
210
|
+
print_summary(log_object, indent, $options)
|
211
|
+
else
|
212
|
+
indent = ' ' * count
|
213
|
+
print_detailed(log_object, indent, $options)
|
214
|
+
end
|
215
|
+
|
216
|
+
if log_object['action'] == 'executed'
|
217
|
+
count -= 1
|
218
|
+
end
|
219
|
+
|
220
|
+
if log_object['action'] == 'error'
|
221
|
+
count -= 1
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
data/bin/ix-log
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
$stdout.sync = true
|
7
|
+
$stdin.sync = true
|
8
|
+
|
9
|
+
TRACE_ID = ENV['TRACE_ID'] || SecureRandom.hex
|
10
|
+
|
11
|
+
def get_object(message)
|
12
|
+
object = {}
|
13
|
+
object[:trace_id] = TRACE_ID
|
14
|
+
object[:token_id] = SecureRandom.hex
|
15
|
+
object[:message] = message
|
16
|
+
object[:timestamp] = Time.now.to_f
|
17
|
+
object
|
18
|
+
end
|
19
|
+
|
20
|
+
def print_marker(marker)
|
21
|
+
object = get_object('ix log initiation marker')
|
22
|
+
puts JSON.dump(object)
|
23
|
+
end
|
24
|
+
|
25
|
+
print_markers = true
|
26
|
+
|
27
|
+
if ARGV[0]
|
28
|
+
print_markers = false
|
29
|
+
end
|
30
|
+
|
31
|
+
if print_markers
|
32
|
+
object = get_object('ix log initiation marker')
|
33
|
+
puts JSON.dump(object)
|
34
|
+
end
|
35
|
+
|
36
|
+
STDIN.each_line do |line|
|
37
|
+
object = get_object(line.chomp!)
|
38
|
+
puts JSON.dump(object)
|
39
|
+
end
|
40
|
+
|
41
|
+
if print_markers
|
42
|
+
object = get_object('ix log termination marker')
|
43
|
+
puts JSON.dump(object)
|
44
|
+
end
|
data/bin/ix-man
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# stole from: http://unix.stackexchange.com/questions/164575/highlight-the-current-search-match-in-man-pages
|
4
|
+
|
5
|
+
if [ "$1" == "" ]; then
|
6
|
+
echo "Buddy, I can't find a man page if you don't give me a command.."
|
7
|
+
exit 1
|
8
|
+
fi
|
9
|
+
|
10
|
+
man -P "sh -c \"col -b | vim -c 'set ft=man ts=8 nomod nolist nonu' \
|
11
|
+
-c 'nnoremap i <nop>' \
|
12
|
+
-c 'nnoremap <Space> <C-f>' \
|
13
|
+
-c 'noremap q :quit<CR>' -\"" $1
|
14
|
+
|
data/bin/ix-math
ADDED
data/bin/ix-maze
ADDED
data/bin/ix-md5
ADDED
data/bin/ix-md5s
ADDED
data/bin/ix-military
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
map = {
|
4
|
+
'A' => 'Alpha',
|
5
|
+
'B' => 'Bravo',
|
6
|
+
'C' => 'Charlie',
|
7
|
+
'D' => 'Delta',
|
8
|
+
'E' => 'Echo',
|
9
|
+
'F' => 'Foxtrot',
|
10
|
+
'G' => 'Golf',
|
11
|
+
'H' => 'Hotel',
|
12
|
+
'I' => 'India',
|
13
|
+
'J' => 'Juliet',
|
14
|
+
'K' => 'Kilo',
|
15
|
+
'L' => 'Lima',
|
16
|
+
'M' => 'Mike',
|
17
|
+
'N' => 'November',
|
18
|
+
'O' => 'Oscar',
|
19
|
+
'P' => 'Papa',
|
20
|
+
'Q' => 'Quebec',
|
21
|
+
'R' => 'Romeo',
|
22
|
+
'S' => 'Sierra',
|
23
|
+
'T' => 'Tango',
|
24
|
+
'U' => 'Uniform',
|
25
|
+
'V' => 'Victor',
|
26
|
+
'W' => 'Whiskey',
|
27
|
+
'X' => 'X-Ray',
|
28
|
+
'Y' => 'Yankee',
|
29
|
+
'Z' => 'Zulu',
|
30
|
+
}
|
31
|
+
|
32
|
+
STDIN.each_line do |line|
|
33
|
+
puts ''
|
34
|
+
chars = []
|
35
|
+
line.chomp.each_char do |char|
|
36
|
+
chars.push(map[char.upcase])
|
37
|
+
end
|
38
|
+
puts line.chomp + ' = ' + (chars * '-') + '!'
|
39
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
class Morse
|
4
|
+
|
5
|
+
MAPPING = {
|
6
|
+
'a' => '.-',
|
7
|
+
'b' => '-...',
|
8
|
+
'c' => '-.-.',
|
9
|
+
'd' => '-..',
|
10
|
+
'e' => '.',
|
11
|
+
'f' => '..-.',
|
12
|
+
'g' => '--.',
|
13
|
+
'h' => '....',
|
14
|
+
'i' => '..',
|
15
|
+
'j' => '.---',
|
16
|
+
'k' => '-.-',
|
17
|
+
'l' => '.-..',
|
18
|
+
'm' => '--',
|
19
|
+
'n' => '-.',
|
20
|
+
'o' => '---',
|
21
|
+
'p' => '.--.',
|
22
|
+
'q' => '--.-',
|
23
|
+
'r' => '.-.',
|
24
|
+
's' => '...',
|
25
|
+
't' => '-',
|
26
|
+
'u' => '..-',
|
27
|
+
'v' => '...-',
|
28
|
+
'w' => '.--',
|
29
|
+
'x' => '-..-',
|
30
|
+
'y' => '-.--',
|
31
|
+
'z' => '--..',
|
32
|
+
'0' => '-----',
|
33
|
+
'1' => '.----',
|
34
|
+
'2' => '..---',
|
35
|
+
'3' => '...--',
|
36
|
+
'4' => '....-',
|
37
|
+
'5' => '.....',
|
38
|
+
'6' => '-....',
|
39
|
+
'7' => '--...',
|
40
|
+
'8' => '---..',
|
41
|
+
'9' => '----.',
|
42
|
+
' ' => ' / ',
|
43
|
+
}
|
44
|
+
|
45
|
+
def self.text_to_morse(string)
|
46
|
+
result = ''
|
47
|
+
string.scan(/[a-zA-Z0-9]| /).each do |word|
|
48
|
+
word.each_char do |char|
|
49
|
+
result << MAPPING[char] + ' '
|
50
|
+
end
|
51
|
+
result << ' / '
|
52
|
+
end
|
53
|
+
result
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.morse_to_text(string)
|
57
|
+
result = ''
|
58
|
+
string.split(' / ').each do |word|
|
59
|
+
word.split(' ').each do |char|
|
60
|
+
MAPPING.each do |k, v|
|
61
|
+
if v == char
|
62
|
+
result << k
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
result << ' '
|
67
|
+
end
|
68
|
+
result
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
STDIN.each_line do |line|
|
74
|
+
puts Morse.morse_to_text(line)
|
75
|
+
end
|
76
|
+
|