Don't forget to lycansubscribe
1class ImportReport
2 def initialize
3 @data = {}
4 @start = Time.now
5 end
6
7 def update(data)
8 deep_merge(@data, data)
9 render
10 end
11
12 def deep_merge(target, updates)
13 updates.each do |k, v|
14 if v.is_a?(Hash)
15 target[k] ||= {}
16 deep_merge(target[k], v)
17 else
18 target[k] = v
19 end
20 end
21 end
22
23 def render
24 print " " * 80 + "\r"
25 puts "Elapsed time: #{(Time.now - @start).to_i} s"
26
27 importers = @data[:importers] || {}
28
29 importers.each do |name, data|
30 print " " * 80 + "\r"
31 puts "#{name}: imported items = #{data[:imported_items] || 0} (until: #{data[:oldest_date]}) #{" (DONE)" if data[:finished]}"
32 end
33
34 print " " * 80 + "\r"
35 puts "Downloader: imported posts = #{@data.dig(:downloader, :downloaded_posts) || 0} (until: #{@data.dig(:downloader, :oldest_date)})"
36
37 print " " * 80 + "\r"
38 puts "Queue size: #{@data.dig(:queue, :length) || 0}"
39
40 print "\e[#{3 + importers.length}A"
41 end
42end