summaryrefslogtreecommitdiffstats
path: root/modules/tick/files/plugins/duplicati
blob: 7b0487b3f659a4a1f43df8b6b668c53dd32bd860 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env ruby

require 'date'
require 'yaml'

def parse_duration(dur)
  hours, minutes, seconds = dur.split(/:/)
  3600 * hours.to_f + 60 * minutes.to_f + seconds.to_f
end

def field_name(name)
  name.gsub(/\A[^A-Za-z_]/, '_').gsub(/[^A-Za-z0-9_]/, '_')
end

def backup_metadata(id)
    backup = YAML.load(%x{duplicati-client describe backup #{id}})
    backup[0]['Backup']['Metadata']
end

def all_backups
  _ = %x{duplicati-client login}
  backups = YAML.load(%x{duplicati-client list backups})
  ret = {}
  backups.each do |backup|
    name = backup.keys[0]
    id = backup[name]['ID']
    ret[id] = name
  end
  ret
end

now = Time.now
all_backups.each do |id, name|
  metadata = backup_metadata(id)

  ago_s = now - DateTime.iso8601(metadata['LastBackupFinished']).to_time
  dur_s = parse_duration(metadata['LastBackupDuration'])
  file_size_b = metadata['SourceFilesSize'].to_i
  file_count_n = metadata['SourceFilesCount'].to_i

  puts "duplicati,id=#{id},name=#{name} days_since_last_run=#{ago_s / 60.0 / 60.0 / 24.0},last_run_duration_minutes=#{dur_s / 60.0},file_size=#{file_size_b}i,file_count=#{file_count_n}i"
end