1
Files
nagios-mumble/check_mumble.py
T
2025-05-30 23:18:39 -04:00

66 lines
1.7 KiB
Python
Executable File

#! /usr/bin/env python
import argparse
import sys
import socket
import random
import time
CODE_OK = 0
CODE_WARN = 1
CODE_CRITICAL = 2
CODE_UNKNOWN = 3
def main(args):
# setup ping query and random identifier
query = [0,0,0,0]
ident = random.sample(range(0,255),8)
# load default values if not passed as arguments
if args.timeout:
timeout = args.timeout
else:
timeout = 10
if args.port:
port = args.port
else:
port = 64738
# open socket and send ping request
start = time.time()
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(timeout)
try:
sock.sendto(bytes(query+ident), (args.hostname, port))
except:
print("MURMUR CRITICAL - Could not send UDP ping request")
sys.exit(CODE_CRITICAL)
try:
data, addr = sock.recvfrom(24)
except:
print("MURMUR CRITICAL - No response from server")
sys.exit(CODE_CRITICAL)
end = time.time()
if data[4:12]==bytes(ident):
delay = round(end-start, 3)
print("MURMUR OK - %s second response time | users=%s max=%s bandwidth=%sB" % (delay, int.from_bytes(data[12:16]), int.from_bytes(data[16:20]), int.from_bytes(data[20:24])/8))
#print("Murmur version %s.%s" % (int.from_bytes(data[0:2]), data[2]))
else:
print("MURMUR WARN - Identification code did not match")
sys.exit(CODE_WARN)
sys.exit(CODE_OK)
if __name__ == '__main__':
parser = argparse.ArgumentParser(\
description='Murmur (Mumble server) UDP ping checker for Nagios')
parser.add_argument('-H', '--hostname', help='Hostname to check', required=True)
parser.add_argument('-p', '--port', help='Server port')
parser.add_argument('-t', '--timeout', help='Timeout in seconds')
args = parser.parse_args()
main(args)