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


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

def initialize output
  @output = output
end

Class Method Details

.format_mapObject



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

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



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

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

.formatted_totalsObject



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

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

.to_filesizeObject



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

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

.to_numbersObject



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

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

.totalObject

Keep track of totals



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

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",
  ...
}


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

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

#formatted_valuesObject



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

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

#labelsObject



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

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,
}


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

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