summaryrefslogtreecommitdiffstats
path: root/modules/tick
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2020-07-05 18:47:09 -0400
committerJesse Luehrs <doy@tozt.net>2020-07-05 18:47:09 -0400
commit0cf629c60d7fb5a6c41ca29fe5b9fd29183f7361 (patch)
treec7a234d464498f734b164cfbc957ead146ba30ac /modules/tick
parenteb502bd9cc88e7390f0763e23e8fda01cbba5da2 (diff)
downloadpuppet-tozt-0cf629c60d7fb5a6c41ca29fe5b9fd29183f7361.tar.gz
puppet-tozt-0cf629c60d7fb5a6c41ca29fe5b9fd29183f7361.zip
add telegraf plugin for duplicati
Diffstat (limited to 'modules/tick')
-rw-r--r--modules/tick/files/plugins/duplicati42
-rw-r--r--modules/tick/files/plugins/duplicati.conf3
-rw-r--r--modules/tick/manifests/client/base_plugins.pp7
-rw-r--r--modules/tick/manifests/client/plugin/duplicati.pp15
4 files changed, 66 insertions, 1 deletions
diff --git a/modules/tick/files/plugins/duplicati b/modules/tick/files/plugins/duplicati
new file mode 100644
index 0000000..7b0487b
--- /dev/null
+++ b/modules/tick/files/plugins/duplicati
@@ -0,0 +1,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
diff --git a/modules/tick/files/plugins/duplicati.conf b/modules/tick/files/plugins/duplicati.conf
new file mode 100644
index 0000000..f335a03
--- /dev/null
+++ b/modules/tick/files/plugins/duplicati.conf
@@ -0,0 +1,3 @@
+[[inputs.exec]]
+commands = ["/etc/telegraf/plugins/duplicati"]
+data_format = "influx"
diff --git a/modules/tick/manifests/client/base_plugins.pp b/modules/tick/manifests/client/base_plugins.pp
index 2a4b347..28cd084 100644
--- a/modules/tick/manifests/client/base_plugins.pp
+++ b/modules/tick/manifests/client/base_plugins.pp
@@ -29,5 +29,10 @@ class tick::client::base_plugins {
]:
}
- class { "tick::client::plugin::pacman": }
+ class {
+ [
+ "tick::client::plugin::duplicati",
+ "tick::client::plugin::pacman",
+ ]:
+ }
}
diff --git a/modules/tick/manifests/client/plugin/duplicati.pp b/modules/tick/manifests/client/plugin/duplicati.pp
new file mode 100644
index 0000000..ff7e21b
--- /dev/null
+++ b/modules/tick/manifests/client/plugin/duplicati.pp
@@ -0,0 +1,15 @@
+class tick::client::plugin::duplicati {
+ file {
+ "/etc/telegraf/telegraf.d/duplicati.conf":
+ source => 'puppet:///modules/tick/plugins/duplicati.conf',
+ require => [
+ File["/etc/telegraf/telegraf.d"],
+ File["/etc/telegraf/plugins/duplicati"],
+ ],
+ notify => Service["telegraf"];
+ "/etc/telegraf/plugins/duplicati":
+ source => 'puppet:///modules/tick/plugins/duplicati',
+ mode => '0755',
+ require => File['/etc/telegraf/plugins'];
+ }
+}