prometheus-veeam-exporter/prometheus-veeam-exporter

80 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python
from prometheus_client import start_http_server, Gauge
from time import sleep
from datetime import datetime
import re
import os
import sys
HTTP_PORT = 9401
BACKUP_DIRECTORY = '/srv/dropzone/'
INTERVAL = 30 * 60 # seconds
DATEREGEX = re.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}")
files_touched_recently = Gauge('veeam_has_touched_files',
'Files have been modified in past 24h',
['name'])
def isNotHidden(dirname):
return dirname[0] != '.'
def hasDate(filename):
return DATEREGEX.search(filename) is not None
def deltaInDays(filename):
filedate = datetime.strptime(DATEREGEX.search(filename).group(),
"%Y-%m-%d")
return (datetime.today() - filedate).days
# Because Prometheus has no binary datatype, we use integers in a Gauge.
# Sorry, dear reader...
def hasRecentFile(deltaList):
if 0 in deltaList or 1 in deltaList:
return 1
else:
return 0
def deltaList(dirname):
return [deltaInDays(f) for f in os.listdir(dirname) if hasDate(f)]
if __name__ == '__main__':
if len(sys.argv) == 2:
BACKUP_DIRECTORY = sys.argv[1]
elif len(sys.argv) > 2:
sys.exit("Invalid number of arguments."
"Usage: ./prometheus-borgbackup-exporter [backup-directory]")
# Serve metrics over HTTP.
print("Starting prometheus-veeam-exporter on port",
"{}...".format(HTTP_PORT), end='')
start_http_server(HTTP_PORT)
print(" OK.")
os.chdir(BACKUP_DIRECTORY)
while True:
try:
print(">> Running check...")
result = [(backupjob, hasRecentFile(deltaList(backupjob)))
for backupjob in os.listdir(BACKUP_DIRECTORY)
if isNotHidden(backupjob)]
for job in result:
files_touched_recently.labels(job[0]).set(job[1])
print(" OK.")
except Exception as e:
print("Error! {}".format(e))
sleep(INTERVAL)