HEX
Server: Apache
System: Linux vpshost0650.publiccloud.com.br 4.4.79-grsec-1.lc.x86_64 #1 SMP Wed Aug 2 14:18:21 -03 2017 x86_64
User: bandeirantesbomb3 (10068)
PHP: 8.0.7
Disabled: apache_child_terminate,dl,escapeshellarg,escapeshellcmd,exec,link,mail,openlog,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_check_syntax,php_strip_whitespace,popen,proc_close,proc_open,shell_exec,symlink,system
Upload Files
File: //lib/python2.7/site-packages/lap/bacula_time.py
#!/usr/bin/python

from backupmanager import BackupAPI
import socket
import json
from datetime import datetime,timedelta
import argparse
import sys,os
import yaml
from random import randrange
import pwd, grp
import time

auth = BackupAPI()
client = socket.gethostname().split('.')[0]
OK = 0
CRITICAL = 2
WARNING = 1
cache_file = "/tmp/bacula_time.cache"
cache_time = 10950 + randrange(100)

def user_cache():
    try:
        uid, gid =  pwd.getpwnam('check-mk').pw_uid, grp.getgrnam('check-mk').gr_gid
        if uid and gid:
            os.chown(cache_file, uid, gid)

    except KeyError:
        pass

def without_backup(jobname):
    last_jobok = False
    created = auth.login('client', client)['date']
    created_format = datetime.strptime(created, '%Y-%m-%dT%H:%M:%S.%fZ')
    if datetime.now() - created_format > timedelta(days=3):
        warning_days = 2
        critical_days = 4
        json_jobs = auth.login('jobid', client)
        list_jobname = json_jobs[jobname]
        if list_jobname:
            for values in list_jobname:
                if values['jobstatus'] == 'T':
                    last_jobok = values['endtime']

                if values['jobstatus'] in ('R','C'):
                    last_jobok = last_jobok
                    
                if not last_jobok:
                    last_jobok = datetime.strftime(created_format, "%Y-%m-%d %H:%M:%S")

            last_date = datetime.strptime(last_jobok, "%Y-%m-%d %H:%M:%S")
            if last_date <= datetime.now() - timedelta(days=warning_days) and last_date >= datetime.now() - timedelta(days=5):
               return WARNING

            if last_date <= datetime.now() - timedelta(days=critical_days):
               return CRITICAL

def cegonha(client, full_json):
    if full_json['status'] in ["IN_PRODUCTION","SPARE_INSTALATION","SPARE_MAINTAINCE","PRE_PRODUCTION","MAINTENANCE"] and full_json['flag'] == True:
        return True
    else:
        return False


def __run__(params):
    lista_warning = []
    lista_critical = []
    if os.path.isfile(cache_file) and (time.time() - os.stat(cache_file).st_mtime) < cache_time and \
                                  os.stat(cache_file).st_size > 0:
        data = json.loads(open(cache_file).read())

        if data:
            return [OK, "Cache " + data]
        else:
            return [CRITICAL, "Cache " + data]
    else:
        with open(cache_file, 'w') as f:
            user_cache()
            try:
                full_json = auth.login('cegonha', client)
                if cegonha(client, full_json):
                    client_json = auth.login('rotina', client)
                    if client_json:
                        for job in client_json:
                             backup_time = without_backup(job)
                             if backup_time == WARNING:
                                lista_warning.append(job)
                             if backup_time == CRITICAL:
                                lista_critical.append(job)
                        if lista_warning and not lista_critical:
                            return [WARNING, "WARNING: List jobs %s with 3 days without backup" % lista_warning]
    
                        elif lista_critical or lista_warning:
                            return [CRITICAL, "CRITICAL: List jobs %s with 5 days without backup or WARNING: %s and 3 days" % (lista_critical, lista_warning)]
                        else:
                            msg = "Backup OK"
                            f.write(json.dumps(msg))
                            return [OK, msg]
                    else:
                        msg = "OK: Client %s does not exist in backupmanager" % client
                        f.write(json.dumps(msg))
                        return [OK, msg]
                else:
                    msg = "Machine flag false or desactived"
                    f.write(json.dumps(msg))
                    return [OK, msg]

            except Exception, e:
                   return [WARNING, "WARNING: %s" % e]