port dsa-check-memory to python3
[mirror/dsa-nagios.git] / dsa-nagios-checks / checks / dsa-check-backuppg
index ddef856..ce6a9a0 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 
 # Copyright 2010 Peter Palfrader
 #
@@ -102,10 +102,7 @@ def wal_pre(w, host, db):
     (w1,w2) = w
     if w2 == 0:
         w1 -= 1
-        if (host,db) in ( ('moszumanska', 'main'), ):
-            w2 = 0xFE
-        else:
-            w2 = 0xFF
+        w2 = 0xFF
     else:
         w2 -= 1
 
@@ -120,6 +117,25 @@ def parse_pg_backup_info(fn):
     f.close()
     return i
 
+def get_retention(config, host, db):
+    assert('retention' in config)
+
+    assert('backups' in config)
+    assert(isinstance(config['backups'], dict))
+
+    assert(host in config['backups'])
+    assert(isinstance(config['backups'][host], dict))
+
+    assert(db in config['backups'][host])
+    if isinstance(config['backups'][host][db], dict) and 'retention' in config['backups'][host][db]:
+        r = config['backups'][host][db]['retention']
+    elif '_retention' in config['backups'][host]:
+        r = config['backups'][host]['_retention']
+    else:
+        r = config['retention']
+
+    assert(isinstance(r, int))
+    return r
 
 parser = optparse.OptionParser()
 parser.set_usage("%prog [-c=<CONFFILE>]               (nagios mode)\n" +
@@ -143,7 +159,7 @@ config = load_conf(options.conffile)
 
 os.chdir(config['rootdir'])
 for dir in os.listdir('.'):
-    if dir.startswith('.') or dir.endswith('.old'):
+    if dir.startswith('.') or dir.endswith('.old') or dir == 'lost+found':
         note_info('IGNORED', dir)
         continue
 
@@ -264,7 +280,7 @@ for dir in os.listdir('.'):
                 backup_state[db]['base_needs_wal_until'] = walbase
 
                 start = time.mktime(time.strptime(info['start time'], '%Y-%m-%d %H:%M:%S %Z'))
-                if start + config['retention'] < time.time():
+                if start + get_retention(config, dir, db) < time.time():
                     backup_state[db]['can_expire_for_base_hit'] = True
                 continue
 
@@ -329,6 +345,7 @@ for dir in os.listdir('.'):
                     global_expires.append(f)
 
     for db in notyetseen_dbs:
+        if db.startswith('_'): continue
         note_warning_db(dir, db, 'NO-BACKUP', 'no backups! (no .backup files found)')
 
     #if not db in backup_state:
@@ -344,21 +361,21 @@ for dir in os.listdir('.'):
 
 
 for p in problems_seq:
-    print p
+    print(p)
 if options.verbose:
     for p in notices_seq:
-        print p
+        print(p)
 
 if options.expire:
     for f in global_expires:
-        if options.verbose: print "Expiring %s"%(f)
+        if options.verbose: print("Expiring %s" % f)
         if not options.dry_run: os.unlink(f)
 
 if len(problems_seq) > 0:
     sys.exit(1)
 
 if not options.expire or options.verbose:
-    print "OK: no problems detected"
+    print("OK: no problems detected")
 sys.exit(0)
 
 # vim:set et: