from flask import Flask, request from subprocess import check_output app = Flask(__name__) # http://192.168.177.48:5000/check-qnap-disk-smart?ip=192.168.177.61 @app.route('/check-qnap-disk-smart') def snmp_disk_smart_status(): # Die Parameter aus der URL abrufen Ip = request.args.get('ip') Oid = '.1.3.6.1.4.1.24681.1.2.11.1.7' result = startsnmpwalk(Ip, Oid, 'good') return result # http://192.168.177.48:5000/check-qnap-status?ip=192.168.177.61 @app.route('/check-qnap-status') def snmp_disk_status(): # Die Parameter aus der URL abrufen Ip = request.args.get('ip') Oid = '.1.3.6.1.4.1.24681.1.2.11.1.4' result = startsnmpwalk(Ip, Oid, 'integer: 0') return result # http://192.168.177.48:5000/check-volume-status?ip=192.168.177.61 @app.route('/check-volume-status') def snmp_volume_status(): # Die Parameter aus der URL abrufen Ip = request.args.get('ip') Oid = '.1.3.6.1.4.1.24681.1.2.17.1.6.1' result = startsnmpwalk(Ip, Oid, 'ready') return result def startsnmpwalk(ip, oid, expectedtext): try: process = check_output(['/usr/bin/snmpwalk', '-v', '1', '-c', 'public', ip, oid]) decoded_string = process.decode('utf-8') healthy = True statuscode = 200 for line in decoded_string.splitlines(): if not expectedtext.lower() in line.lower(): healthy = False statuscode = 418 except: statuscode = 400 healthy = False decoded_string = "snmpwalk failed" return f'SNMP result for IP {ip}\nOID: {oid}\nSNMP-Output: {decoded_string}\nHealthy: {healthy}\n', statuscode if __name__ == '__main__': app.run(host="0.0.0.0", port=8684)