Class: Multisync::RsyncStat

Inherits:
Object
  • Object
show all
Defined in:
lib/multisync/rsync_stat.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output) ⇒ RsyncStat

Sample output

...
Number of files: 89,633 (reg: 59,322, dir: 30,311)
Number of created files: 356 (reg: 281, dir: 75)
Number of deleted files: 114 (reg: 101, dir: 13)
Number of regular files transferred: 344
Total file size: 546,410,522,192 bytes
Total transferred file size: 7,991,491,676 bytes
Literal data: 7,952,503,842 bytes
Matched data: 38,987,834 bytes
File list size: 3,063,808
File list generation time: 2.414 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 7,957,645,803
Total bytes received: 101,299

sent 7,957,645,803 bytes  received 101,299 bytes  23,719,067.37 bytes/sec
total size is 546,410,522,192  speedup is 68.66


28
29
30
# File 'lib/multisync/rsync_stat.rb', line 28

def initialize output
  @output = output
end

Class Method Details

.format_mapObject



82
83
84
85
86
87
88
89
90
91
# File 'lib/multisync/rsync_stat.rb', line 82

def self.format_map
  {
    'Number of files' => to_numbers,
    'Number of created files' => to_numbers,
    'Number of deleted files' => to_numbers,
    'Number of regular files transferred' => to_numbers,
    'Total file size' => to_filesize,
    'Total transferred file size' => to_filesize,
  }
end

.format_valuesObject



76
77
78
79
80
# File 'lib/multisync/rsync_stat.rb', line 76

def self.format_values
  format_map.map do |label, format|
    format.call(yield label)
  end
end

.formatted_totalsObject



70
71
72
73
74
# File 'lib/multisync/rsync_stat.rb', line 70

def self.formatted_totals
  format_values do |label|
    total[label]
  end
end

.to_filesizeObject



97
98
99
# File 'lib/multisync/rsync_stat.rb', line 97

def self.to_filesize
  ->(x) { Filesize.new(x).pretty }
end

.to_numbersObject



93
94
95
# File 'lib/multisync/rsync_stat.rb', line 93

def self.to_numbers
  ->(x) { x.to_s.gsub(/\B(?=(...)*\b)/, "'") }
end

.totalObject

Keep track of totals



6
7
8
# File 'lib/multisync/rsync_stat.rb', line 6

def self.total
  @total ||= Hash.new 0
end

Instance Method Details

#extractedObject

extracted returns a hash with labels as keys and extracted strings as values

{
  "Number of files" => "35,648", 
  "Number of created files" => "2,120", 
  ...
}


38
39
40
# File 'lib/multisync/rsync_stat.rb', line 38

def extracted
  @extraced ||= @output.scan(/(#{labels.join('|')}):\s+([,0-9]+)/).to_h
end

#formatted_valuesObject



64
65
66
67
68
# File 'lib/multisync/rsync_stat.rb', line 64

def formatted_values
  self.class.format_values do |label|
    stats[label]
  end
end

#labelsObject



60
61
62
# File 'lib/multisync/rsync_stat.rb', line 60

def labels
  self.class.format_map.keys
end

#statsObject

stats returns a hash with the follwing keys (and updates class total)

{
  "Number of files" => 35648, 
  "Number of created files" => 2120, 
  "Number of deleted files" => 37,
  "Number of regular files transferred" => 394,
  "Total file size" => 204936349,
  "Total transferred file size" => 49239,
}


51
52
53
54
55
56
57
58
# File 'lib/multisync/rsync_stat.rb', line 51

def stats
  @stats ||= labels.each_with_object({}) do |label, h|
    value = extracted[label]&.delete(",").to_i

    self.class.total[label] += value # update total
    h[label] = value
  end
end