Linux server.edchosting.com 4.18.0-553.79.1.lve.el7h.x86_64 #1 SMP Wed Oct 15 16:34:46 UTC 2025 x86_64
LiteSpeed
Server IP : 75.98.162.185 & Your IP : 216.73.216.163
Domains :
Cant Read [ /etc/named.conf ]
User : goons4good
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
lib64 /
nagios /
plugins /
Delete
Unzip
Name
Size
Permission
Date
Action
eventhandlers
[ DIR ]
drwxr-xr-x
2024-03-10 06:52
a2_csf_modsecsync.mvps.mdedi
1.27
KB
-rwxr-xr-x
2025-09-10 09:31
a2_customerview.sh.shared
1.21
KB
-rwxr-xr-x
2025-09-10 09:31
a2_nf_conntrack_count.sh.all
977
B
-rwxr-xr-x
2025-09-10 09:31
a2_postgresql-monitor.shared
1.23
KB
-rwxr-xr-x
2025-09-10 09:31
a2_ram.shared.mdedi.bmi
611
B
-rwxr-xr-x
2025-09-10 09:31
a2_sssd_service_check.sh.all
1.4
KB
-rwxr-xr-x
2025-09-10 09:31
a2_system-updates.all
2.18
KB
-rwxr-xr-x
2025-09-10 09:31
a2_temperature_check.shared.bmi
3.17
KB
-rwxr-xr-x
2025-09-10 09:31
a2_user_mem.shared
1.13
KB
-rwxr-xr-x
2025-09-10 09:31
a2_yum_processes.shared
835
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_backup_network
844
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_backups
2.64
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_cagefs.shared.mvps.mdedi
762
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_cagefs_503_errors
2.96
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_cpdavd_cpu.sh
701
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_cpu_throttle.shared
1.61
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_dbgov.shared
1.23
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_dedi_nvme.mdedi
894
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_devnull-perms.shared
161
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_dimm.shared
1.49
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_disk.sh
2.05
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_dmi.sh.all
2.38
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_dnsdist_cache.sh
298
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_dnsdist_health.sh
270
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_dnsdist_pools.sh
414
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_dnsdist_proc.sh
210
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_dovecot
191
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_extra_ips.shared
854
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_fsstate.sh.all
2.28
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_fw.sh.internal
2.11
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_fw.sh.shared
1.04
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_grub.sh.all
1.22
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_httpdconf.shared
1.16
KB
-rwxr-xr-x
2025-04-15 08:48
check_a2_ifspeed.shared
784
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_imap_auth
1.2
KB
-rwxr-xr-x
2025-02-19 06:03
check_a2_imunify_service
910
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_ipaliases.shared
443
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_ipastatus.sh
2.16
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_ipmi_ip.sh.shared
565
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_jbk_client_limits.sh
1.13
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_jetbackup.sh
12.08
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_largelogs.shared
966
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_le_certs.sh.saltmaster1
1.02
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_load.php
618
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_long_mysql_queries
1.22
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_mailqueue.mvps.mdedi
1.26
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_memlimits-on.shared
458
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_mod-passenger.shared
516
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_monitor-randomize_sqlroot_password_cron.shared.mvps.mdedi
322
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_mysql-monitor.shared.mvps.mdedi
2.62
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_mysql-replication.sh
1.33
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_mysql_tmp_size
242
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_olderdrive_health.all
2.25
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_omni_mysql_backup.sh
1.15
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_omni_pxe_https_check.sh
1.27
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_omni_saltmaster1_authcheck.sh
2.76
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_omni_website.sh
1.01
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_outbound_nat.sh
436
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_packets.mvps
1.73
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_pdns
462
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_php_versions.shared
3.04
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_redis_opcache.shared
1.39
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_salt_minion_service
196
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_salt_running.all
1.83
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_saltmaster_api.sh
1.13
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_smart.py.all
15.54
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_softy_version.sh.shared.mvps.mdedi
1.09
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_vps_memory.sh
411
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_vz7-ikvm_backup.sh
1.2
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_whm_ssl
874
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_whmcs_db_mysql-replication.sh
2.19
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_whmcs_nginx_connections.sh
745
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_whmcs_phpfpm_status.sh
1.6
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_whmcs_th_network.sh
773
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_whmcs_virtualizor.sh
534
B
-rwxr-xr-x
2025-09-10 09:31
check_a2_xen_guest_vm.sh.flexdedi
3.11
KB
-rwxr-xr-x
2025-09-10 09:31
check_a2_zpool.sh
1.31
KB
-rwxr-xr-x
2025-09-10 09:31
check_aad_ldaps
2.09
KB
-rwxr-xr-x
2025-11-03 05:31
check_apache_status.pl
6.09
KB
-rwxr-xr-x
2025-09-10 09:31
check_backup_zpool
17.68
KB
-rwxr-xr-x
2025-09-10 09:31
check_backuply.py
5.77
KB
-rwxr-xr-x
2025-09-10 09:31
check_backups.php
576
B
-rwxr-xr-x
2025-09-10 09:31
check_breeze
2.29
KB
-rwxr-xr-x
2024-04-11 07:27
check_by_ssh
61.16
KB
-rwxr-xr-x
2024-04-11 07:27
check_clamd
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_cluster
40.35
KB
-rwxr-xr-x
2024-04-11 07:27
check_cpu
467
B
-rwxr-xr-x
2025-09-10 09:31
check_cpu_interrupts
353
B
-rwxr-xr-x
2025-09-10 09:31
check_cpu_steal
313
B
-rwxr-xr-x
2025-09-10 09:31
check_crond
227
B
-rwxr-xr-x
2025-09-10 09:31
check_csf
535
B
-rwxr-xr-x
2025-09-10 09:31
check_dhcp
56.75
KB
-rwsr-x---
2024-04-11 07:27
check_dig
56.83
KB
-rwxr-xr-x
2024-04-11 07:27
check_disk
86.26
KB
-rwxr-xr-x
2024-04-11 07:27
check_disk_smb
9.9
KB
-rwxr-xr-x
2024-04-11 07:27
check_dns
249
B
-rwxr-xr-x
2025-09-10 09:31
check_dummy
31.76
KB
-rwxr-xr-x
2024-04-11 07:27
check_elastic
10.49
KB
-rwxr-xr-x
2025-09-10 09:31
check_elasticsearch
335
B
-rwxr-xr-x
2025-09-10 09:31
check_enhance_backup
495
B
-rwxr-xr-x
2025-09-10 09:31
check_exim
184
B
-rwxr-xr-x
2025-09-10 09:31
check_exim_spam.sh
3.44
KB
-rwxr-xr-x
2025-09-10 09:31
check_eximqueue.sh
1.11
KB
-rwxr-xr-x
2025-09-10 09:31
check_file_age
4.95
KB
-rwxr-xr-x
2024-04-11 07:27
check_flexlm
6.35
KB
-rwxr-xr-x
2024-04-11 07:27
check_fping
56.76
KB
-rwsr-x---
2024-04-11 07:27
check_ftp
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_ftpd
199
B
-rwxr-xr-x
2025-09-10 09:31
check_game
44.5
KB
-rwxr-xr-x
2024-04-11 07:27
check_hpjd
52.5
KB
-rwxr-xr-x
2024-04-11 07:27
check_http
106.2
KB
-rwxr-xr-x
2024-04-11 07:27
check_icmp
68.39
KB
-rwsr-x---
2024-04-11 07:27
check_ide_smart
44.57
KB
-rwsr-x---
2024-04-11 07:27
check_imap
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_iowait
587
B
-rwxr-xr-x
2025-09-10 09:31
check_ipaliases.py
2.14
KB
-rwxr-xr-x
2025-09-10 09:31
check_ipmi_sensor
39.45
KB
-rwxr-xr-x
2025-09-10 09:31
check_ircd
6.82
KB
-rwxr-xr-x
2024-04-11 07:27
check_jabber
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_jetbackup.py
12.8
KB
-rwxr-xr-x
2025-09-10 09:31
check_jetbackup_alerts
5.35
KB
-rwxr-xr-x
2025-09-10 09:31
check_jetbackup_license.sh
581
B
-rwxr-xr-x
2025-09-10 09:31
check_jetbackup_mongodb
915
B
-rwxr-xr-x
2025-09-10 09:31
check_jetbackup_queue
4.83
KB
-rwxr-xr-x
2025-09-10 09:31
check_kernel
393
B
-rwxr-xr-x
2025-09-10 09:31
check_ldap
61.07
KB
-rwxr-xr-x
2024-04-11 07:27
check_ldaps
61.07
KB
-rwxr-xr-x
2024-04-11 07:27
check_litespeed
2.43
KB
-rwxr-xr-x
2025-09-10 09:31
check_load
48.39
KB
-rwxr-xr-x
2024-04-11 07:27
check_load.php
422
B
-rwxr-xr-x
2025-09-10 09:31
check_load.py
401
B
-rwxr-xr-x
2025-09-10 09:31
check_local_users
2.01
MB
-rwxr-xr-x
2025-09-10 09:31
check_log
7.99
KB
-rwxr-xr-x
2024-04-11 07:27
check_lvm_thinpools
2.48
KB
-rwxr-xr-x
2025-09-10 09:31
check_mailq
25
KB
-rwxr-xr-x
2024-04-11 07:27
check_managed.sh
5.85
KB
-rwxr-xr-x
2025-09-10 09:31
check_md5files
1.2
KB
-rwxr-xr-x
2025-09-10 09:31
check_md_raid
782
B
-rwxr-xr-x
2025-09-10 09:31
check_megaraid_sas
6.75
KB
-rwxr-xr-x
2025-09-10 09:31
check_memcached
184
B
-rwxr-xr-x
2025-09-10 09:31
check_meminfo
2.79
KB
-rwxr-xr-x
2025-09-10 09:31
check_memory
330
B
-rwxr-xr-x
2025-09-10 09:31
check_memory.py
1.06
KB
-rwxr-xr-x
2025-09-10 09:31
check_mrtg
44.42
KB
-rwxr-xr-x
2024-04-11 07:27
check_mrtgtraf
44.36
KB
-rwxr-xr-x
2024-04-11 07:27
check_mysql
52.91
KB
-rwxr-xr-x
2024-04-11 07:27
check_mysql_all.sh
6.53
KB
-rwxr-xr-x
2025-09-10 09:31
check_mysql_connections
5.89
KB
-rwxr-xr-x
2025-09-10 09:31
check_mysql_engines
603
B
-rwxr-xr-x
2025-09-10 09:31
check_mysql_log
170
B
-rwxr-xr-x
2025-09-10 09:31
check_mysql_memory
733
B
-rwxr-xr-x
2025-09-10 09:31
check_mysql_processes
346
B
-rwxr-xr-x
2025-09-10 09:31
check_mysql_query
48.71
KB
-rwxr-xr-x
2024-04-11 07:27
check_nagios
44.34
KB
-rwxr-xr-x
2024-04-11 07:27
check_nimbus.sh
2.25
KB
-rwxr-xr-x
2025-09-10 09:31
check_nntp
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_nntps
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_nscp_api
5.84
MB
-rwxr-xr-x
2024-10-29 07:19
check_nt
56.65
KB
-rwxr-xr-x
2024-04-11 07:27
check_ntp
56.84
KB
-rwxr-xr-x
2024-04-11 07:27
check_ntp.pl
14.53
KB
-rwxr-xr-x
2024-04-11 07:27
check_ntp_peer
56.91
KB
-rwxr-xr-x
2024-04-11 07:27
check_ntp_time
52.84
KB
-rwxr-xr-x
2024-04-11 07:27
check_nwstat
68.52
KB
-rwxr-xr-x
2024-04-11 07:27
check_oracle
9.27
KB
-rwxr-xr-x
2024-04-11 07:27
check_overcr
48.49
KB
-rwxr-xr-x
2024-04-11 07:27
check_partitions
434
B
-rwxr-xr-x
2025-09-10 09:31
check_pgsql
56.95
KB
-rwxr-xr-x
2024-04-11 07:27
check_ping
60.77
KB
-rwxr-xr-x
2024-04-11 07:27
check_pop
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_postfix
193
B
-rwxr-xr-x
2025-09-10 09:31
check_postfix_queue
930
B
-rwxr-xr-x
2025-09-10 09:31
check_postgres
445.78
KB
-rwxr-xr-x
2025-09-10 09:31
check_procs
60.99
KB
-rwxr-xr-x
2024-04-11 07:27
check_proxmox.sh
928
B
-rwxr-xr-x
2025-09-10 09:31
check_proxmox_backups.sh
1.86
KB
-rwxr-xr-x
2025-09-10 09:31
check_qps_dnsdist.sh
1.68
KB
-rwxr-xr-x
2025-09-10 09:31
check_real
48.59
KB
-rwxr-xr-x
2024-04-11 07:27
check_redis.sh
175
B
-rwxr-xr-x
2025-09-10 09:31
check_resolver.py
3.27
KB
-rwxr-xr-x
2025-09-10 09:31
check_rpc
9.45
KB
-rwxr-xr-x
2024-04-11 07:27
check_rpmdb
690
B
-rwxr-xr-x
2025-09-10 09:31
check_sensors
1.59
KB
-rwxr-xr-x
2024-04-11 07:27
check_service.sh
9.94
KB
-rwxr-xr-x
2025-09-10 09:31
check_simap
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_smart.pl
35.16
KB
-rwxr-xr-x
2025-09-10 09:31
check_smartarray.py
10.07
KB
-rwxr-xr-x
2025-09-10 09:31
check_smartermail_queue
1.5
KB
-rwxr-xr-x
2025-09-10 09:31
check_smtp
69.23
KB
-rwxr-xr-x
2024-04-11 07:27
check_snmp
77.59
KB
-rwxr-xr-x
2024-04-11 07:27
check_spop
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_ssh
48.59
KB
-rwxr-xr-x
2024-04-11 07:27
check_ssmtp
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_sssd
1.32
KB
-rwxr-xr-x
2025-09-10 09:31
check_supervisord.py
15.71
KB
-rwxr-xr-x
2025-09-10 09:31
check_swap
44.33
KB
-rwxr-xr-x
2024-04-11 07:27
check_tcp
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_time
48.55
KB
-rwxr-xr-x
2024-04-11 07:27
check_tmp
210
B
-rwxr-xr-x
2025-09-10 09:31
check_udp
61.13
KB
-rwxr-xr-x
2024-04-11 07:27
check_ups
52.61
KB
-rwxr-xr-x
2024-04-11 07:27
check_users
40.2
KB
-rwxr-xr-x
2024-04-11 07:27
check_vm_status.sh
635
B
-rwxr-xr-x
2025-09-10 09:31
check_wave
3.19
KB
-rwxr-xr-x
2024-04-11 07:27
check_webserver_status
2.93
KB
-rwxr-xr-x
2025-09-10 09:31
check_yum_updates
600
B
-rwxr-xr-x
2025-09-10 09:31
check_zfs
17.68
KB
-rwxr-xr-x
2025-09-10 09:31
check_zpool_usage.sh
885
B
-rwxr-xr-x
2025-09-10 09:31
md5list
61
B
-rw-r--r--
2025-09-10 09:31
negate
40.18
KB
-rwxr-xr-x
2024-04-11 07:27
urlize
35.97
KB
-rwxr-xr-x
2024-04-11 07:27
utils.pm
2.05
KB
-rw-r--r--
2024-04-11 07:27
utils.sh
2.73
KB
-rwxr-xr-x
2024-04-11 07:27
vz7_check_a2_backup_timer_enabled.sh
605
B
-rwxr-xr-x
2025-09-10 09:31
vz7_check_a2_backups-check.sh
8.4
KB
-rwxr-xr-x
2025-09-10 09:31
vz7_check_a2_backups-running.sh
2.18
KB
-rwxr-xr-x
2025-09-10 09:31
vz7_check_a2_fw.sh
1.37
KB
-rwxr-xr-x
2025-09-10 09:31
vz7_check_a2_ifspeed.sh
1.04
KB
-rwxr-xr-x
2025-09-10 09:31
vz7_check_a2_license.sh
749
B
-rwxr-xr-x
2025-09-10 09:31
vz7_check_a2_template_count.sh
856
B
-rwxr-xr-x
2025-09-10 09:31
vz7_check_a2_templates_mount.sh
940
B
-rwxr-xr-x
2025-09-10 09:31
vz7_check_a2_zombie-procs.sh
768
B
-rwxr-xr-x
2025-09-10 09:31
vz7_check_nfs_kill.sh
1000
B
-rwxr-xr-x
2025-09-10 09:31
Save
Rename
#!/usr/bin/env python3 """ JetBackup Health Check Plugin for Icinga Description: - Checks JetBackup MongoDB connection - Verifies JetBackup license status - Monitors backup job durations (--cdur / --wdur) - Monitors recent JetBackup alerts (--calert / --walert) - Prints backup destiantion(s) Usage: ./check_jetbackup.py [--cdur 24] [--wdur 12] [--calert 24] [--walert 12] Exit Codes: 0 OK 1 WARNING 2 CRITICAL 3 UNKNOWN """ import os import sys import subprocess import shutil import json import re from datetime import datetime, timedelta import argparse def run_command(command): try: return subprocess.run( command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True, universal_newlines=True ) except subprocess.CalledProcessError: return None def check_jetmongo(): auth_file = "/usr/local/jetapps/etc/.mongod.auth" if not os.path.isfile(auth_file): print("OK: JetBackup is not installed on this server") return 0 try: with open(auth_file) as f: password = next((line.strip().split("=", 1)[1] for line in f if line.startswith("PASS=")), None) if not password: print("CRITICAL: Password not found in auth file") return 2 except Exception as e: print(f"CRITICAL: Failed to read auth file: {e}") return 2 mongo_paths = [ "/usr/local/jetapps/usr/bin/mongo", "/usr/local/jetapps/usr/bin/mongosh" ] mongo_cli = next((path for path in mongo_paths if os.access(path, os.X_OK)), None) if not mongo_cli: print("CRITICAL: mongo cli not found") return 2 result = run_command([ mongo_cli, "--port", "27217", "--username", "root", "--password", password, "--authenticationDatabase", "admin", "--quiet", "jetbackup", "--eval", "printjson(db.stats().ok)" ]) if result is None: print("CRITICAL: Failed to connect to JetMongo") return 2 if result.stdout.strip() != "1": print("CRITICAL: JetMongo is not working") return 2 print("OK: JetMongo is working") return 0 def check_jetbackup5_license(): result = run_command([ "sudo", "/usr/bin/jetbackup5api", "-F", "getDashboardDetails", "-O", "json" ]) if result is None: print("CRITICAL: Failed to run jetbackup5api") return 2 if '"licenseIssue":false' in result.stdout: print("OK: No licensing issues found (JetBackup 5)") return 0 else: print("CRITICAL: There are licensing issues with the JetBackup 5 instance") return 2 def check_jetbackup4_license(): result = run_command([ "sudo", "/usr/bin/jetapi", "backup", "-F", "licenseStatus" ]) if result is None: print("CRITICAL: Failed to run jetapi") return 2 if "licenseIssue: 1" in result.stdout: print("CRITICAL: There are licensing issues with the JetBackup 4 instance") return 2 else: print("OK: No licensing issues found (JetBackup 4)") return 0 def check_jetbackup_license(): if shutil.which("jetbackup5api"): return check_jetbackup5_license() else: return check_jetbackup4_license() def parse_time(time_str): if not time_str: return None time_str = re.sub(r"(\d{2}):(\d{2})$", r"\1\2", time_str) timezone_offset = timedelta(hours=int(time_str[-4:-2]), minutes=int(time_str[-2:])) return datetime.strptime(time_str[:-6], "%Y-%m-%dT%H:%M:%S") + timezone_offset def check_jetbackup_job_durations(): parser = argparse.ArgumentParser(add_help=False) parser.add_argument("--cdur", type=int, default=24, help="Critical duration threshold in hours (default: 24)") parser.add_argument("--wdur", type=int, default=12, help="Warning duration threshold in hours (default: 12)") args, _ = parser.parse_known_args() critical_hours = args.cdur warning_hours = args.wdur if shutil.which("jetbackup5api"): jobs_cmd = ["jetbackup5api", "-F", "listBackupJobs", "-O", "json"] elif shutil.which("jetapi"): jobs_cmd = ["jetapi", "backup", "-F", "listBackupJobs", "-O", "json"] else: print("UNKNOWN: No suitable JetBackup command found") return 3 jobs_output = run_command(jobs_cmd) if not jobs_output: print("UNKNOWN: Failed to get JetBackup job data") return 3 try: jobs_data = json.loads(jobs_output.stdout) except ValueError: print("UNKNOWN: Failed to parse JetBackup jobs JSON") return 3 jobs = jobs_data.get("data", {}).get("jobs", []) if not jobs: print("CRITICAL: No backup jobs found") return 2 now = datetime.now() critical_alerts = [] warning_alerts = [] for job in jobs: job_id = job.get("_id") running = job.get("running", False) last_run = parse_time(job.get("last_run")) if running and last_run: age = now - last_run if age > timedelta(hours=critical_hours): critical_alerts.append(job_id) elif age > timedelta(hours=warning_hours): warning_alerts.append(job_id) if critical_alerts: print(f"CRITICAL: BackupJob(s) running > {critical_hours}h: {', '.join(critical_alerts)}") return 2 elif warning_alerts: print(f"WARNING: BackupJob(s) running > {warning_hours}h: {', '.join(warning_alerts)}") return 1 print("OK: JetBackup Queue is ok") return 0 def check_jetbackup_alerts(): parser = argparse.ArgumentParser(add_help=False) parser.add_argument("--calert", type=int, default=24, help="Critical alert threshold in hours") parser.add_argument("--walert", type=int, default=12, help="Warning alert threshold in hours") args, _ = parser.parse_known_args() def is_command_available(command): try: subprocess.call([command], stdout=subprocess.PIPE, stderr=subprocess.PIPE) return True except OSError: return False def get_current_users_count(): try: if os.path.exists("/usr/local/cpanel/cpanel"): command = "whmapi1 --output=jsonpretty get_current_users_count" process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) output, _ = process.communicate() data = json.loads(output) return data['data']['users'] except: pass try: if os.path.exists("/usr/local/psa/version"): command = "plesk bin customer --list | wc -l" process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) output, _ = process.communicate() return int(output.strip()) except: pass try: if os.path.exists("/usr/local/directadmin/directadmin"): command = "/bin/ls -1 /usr/local/directadmin/data/users/ | /usr/bin/wc -l" process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) output, _ = process.communicate() return int(output.decode('utf-8').strip()) except: pass def get_critical_titles(alerts, hours, source_cmd): titles = "" now = datetime.now() threshold = now - timedelta(hours=hours) exclude = ["Restore process for the account"] for alert in alerts: created = datetime.strptime(alert["created"][:-6], "%Y-%m-%dT%H:%M:%S") title = alert["title"] if any(ex in title for ex in exclude): continue if source_cmd == "jetapi" and alert.get("level", "0") == 128 and created > threshold: titles += (" | " if titles else "") + title elif source_cmd == "jetbackup5api" and alert.get("level", "0") == 4 and created > threshold: titles += (" | " if titles else "") + title return titles if is_command_available("jetbackup5api"): output = run_command(["jetbackup5api", "-F", "listAlerts", "-D", "sort[created]=-1", "-O", "json"]) command = "jetbackup5api" elif is_command_available("jetapi"): output = run_command(["jetapi", "backup", "-F", "listAlerts", "-O", "json"]) command = "jetapi" else: print("JetBackup not found on the server") return 0 if not output: print("UNKNOWN: Failed to retrieve alerts") return 3 try: data = json.loads(output.stdout) alerts = data["data"]["alerts"] except Exception: print("UNKNOWN: Failed to parse JetBackup alerts") return 3 users_count = get_current_users_count() critical_titles = get_critical_titles(alerts, args.calert, command) warning_titles = get_critical_titles(alerts, args.walert, command) found_no_accounts = any("No accounts found for backup" in a.get("message", "") for a in alerts) jb_config_export = any("JB configurations export Backup job Failed" in a.get("title", "") for a in alerts) jb_download_backup = any("Download process for the account" in a.get("title", "") for a in alerts) if critical_titles: if users_count > 0 and found_no_accounts and not jb_config_export: print(f"CRITICAL: {critical_titles} ({users_count} users)") return 2 elif users_count == 0 and found_no_accounts: print(f"OK: No accounts found for backup ({users_count} users)") return 0 elif jb_config_export and len(critical_titles.split("|")) == 1: print(f"WARNING: JB configurations export Backup job Failed ({users_count} users)") return 1 elif jb_download_backup and len(critical_titles.split("|")) == 1: print(f"WARNING: {critical_titles} ({users_count} users)") return 1 else: print(f"CRITICAL: {critical_titles} ({users_count} users)") return 2 elif warning_titles: if users_count > 0 and found_no_accounts: print(f"WARNING: {warning_titles} ({users_count} users)") return 1 elif users_count == 0 and found_no_accounts: print(f"OK: No accounts found for backup ({users_count} users)") return 0 else: print(f"WARNING: {warning_titles} ({users_count} users)") return 1 else: print(f"OK: JetBackup alerts clean ({users_count} users)") return 0 def get_backup_destinations(): binary = None for cmd in ['jetbackup5api', 'jetapi']: if os.path.exists(os.path.join('/usr/bin', cmd)): binary = cmd break try: subprocess.check_output(['which', cmd], stderr=subprocess.PIPE) binary = cmd break except subprocess.CalledProcessError: continue try: # Run the API command and get output output = subprocess.check_output( [binary, "-F", "listBackupJobs", "-O", "json"], stderr=subprocess.PIPE ).decode('utf-8') # Parse JSON and extract unique hosts data = json.loads(output) jet_destinations = set() jobs = data.get('data', {}).get('jobs', []) for job in jobs: destinations = job.get('destination_details', []) for dest in destinations: options = dest.get('options', {}) host = options.get('host') if host: jet_destinations.add(host) elif options.get('bucket'): bucket = options.get('bucket') region = options.get('region', '') endpoint = options.get('endpoint', '') formatted = f"bucket={bucket}/region={region}/endpoint={endpoint}" jet_destinations.add(formatted) backup_destinations = ",".join(jet_destinations) if jet_destinations else None if backup_destinations: print("OK: Backup destination(s):", backup_destinations) return 0 else: print("OK: Could not find a backup destination") return 0 except Exception as e: return None if __name__ == "__main__": if not (shutil.which("jetbackup5api") or shutil.which("jetbackup4api") or shutil.which("jetapi")): print("OK: JetBackup is not installed on this server") sys.exit(0) if shutil.which("backuply"): print("OK: Backuply is installed on this server") sys.exit(0) for check_fn in [check_jetmongo, get_backup_destinations, check_jetbackup_license, check_jetbackup_job_durations, check_jetbackup_alerts]: result = check_fn() if result != 0: sys.exit(result)