@@ -68,7 +68,9 @@ def to_stream_id(str)
"#{epoch * 1000}-0"
end
-def format_event(fields)
+def format_event(fields, json: False, **)
+ return JSON.dump(fields) if json
+
event = fields["event"]
parts = [fields.fetch("timestamp", "—"), Color.event(event)]
@@ -146,6 +148,7 @@ parser = OptionParser.new do |opts|
opts.on("--from TEL", "Filter by sender") { |v| options[:from] = v }
opts.on("--bandwidth-id ID", "Filter by Bandwidth msg ID") { |v| options[:bandwidth_id] = v }
opts.on("--stanza-id ID", "Filter by XMPP stanza ID") { |v| options[:stanza_id] = v }
+ opts.on("-j", "--json", "Format output as JSON") { |v| options[:json] = v }
end
parser.parse!
@@ -189,7 +192,7 @@ if options[:recent]
break if entries.size < BATCH_SIZE
end
- matched.each { |fields| puts format_event(fields) }
+ matched.each { |fields| puts format_event(fields, **options) }
count = matched.length
else
start_id = to_stream_id(options[:start])
@@ -202,7 +205,7 @@ else
entries.each do |_id, fields|
next unless matches?(fields, filters)
- puts format_event(fields)
+ puts format_event(fields, **options)
count += 1
end