check_modem.py: represent modem state as string, check for more status codes

This commit is contained in:
Pavel Valach 2025-11-25 14:47:05 +01:00
parent 1f5c87cb36
commit 93757f5f1a

View file

@ -4,6 +4,7 @@ import logging
import os import os
import sys import sys
import time import time
from enum import IntEnum
from pydbus import SystemBus from pydbus import SystemBus
from gi.repository import GLib from gi.repository import GLib
import sms_functions import sms_functions
@ -28,19 +29,20 @@ import sms_functions
# * Enumeration of possible modem states. # * Enumeration of possible modem states.
# */ # */
# mm_modem_state # mm_modem_state
MM_MODEM_STATE_FAILED = -1 class MMModemState(IntEnum):
MM_MODEM_STATE_UNKNOWN = 0 FAILED = -1
MM_MODEM_STATE_INITIALIZING = 1 UNKNOWN = 0
MM_MODEM_STATE_LOCKED = 2 INITIALIZING = 1
MM_MODEM_STATE_DISABLED = 3 LOCKED = 2
MM_MODEM_STATE_DISABLING = 4 DISABLED = 3
MM_MODEM_STATE_ENABLING = 5 DISABLING = 4
MM_MODEM_STATE_ENABLED = 6 ENABLING = 5
MM_MODEM_STATE_SEARCHING = 7 ENABLED = 6
MM_MODEM_STATE_REGISTERED = 8 SEARCHING = 7
MM_MODEM_STATE_DISCONNECTING = 9 REGISTERED = 8
MM_MODEM_STATE_CONNECTING = 10 DISCONNECTING = 9
MM_MODEM_STATE_CONNECTED = 11 CONNECTING = 10
CONNECTED = 11
# Setup logging # Setup logging
logfile = "/opt/sms/sms.log" logfile = "/opt/sms/sms.log"
@ -49,14 +51,28 @@ logging.basicConfig(format=FORMAT,filename=logfile,level=10)
logger = logging.getLogger('check_modem') logger = logging.getLogger('check_modem')
if __name__ == "__main__": if __name__ == "__main__":
exit_code = 3 # Unknown (for Nagios)
modem = sms_functions.unlock_and_enable_modem() modem = sms_functions.unlock_and_enable_modem()
time.sleep(2) time.sleep(2)
modem = sms_functions.get_modem() modem = sms_functions.get_modem()
status = modem.GetStatus()
print(status)
status = modem.GetStatus()
status['state_text'] = MMModemState(status['state']).name
# return code: if registered and signal > 0, return 0 # return code: if registered and signal > 0, return 0
if modem.GetStatus()["state"] in [ MM_MODEM_STATE_REGISTERED, MM_MODEM_STATE_CONNECTED ] and modem.SignalQuality[0] > 0 and modem.RegistrationState == 1: if modem.GetStatus()["state"] in [ MMModemState.REGISTERED, MMModemState.CONNECTED ] and modem.SignalQuality[0] > 0 and modem.RegistrationState == 1:
exit(0) print("OK: ", end='')
exit_code = 0
elif modem.GetStatus()["state"] in [ MMModemState.INITIALIZING, MMModemState.ENABLED, MMModemState.SEARCHING, MMModemState.DISCONNECTING ]:
print("WARNING: ", end='')
exit_code = 1
elif modem.GetStatus()["state"] in [ MMModemState.FAILED, MMModemState.LOCKED, MMModemState.DISABLED ]:
print("CRITICAL: ", end='')
exit_code = 2
else: else:
exit(1) print("UNKNOWN: ", end='')
exit_code = 3
print(status)
exit(exit_code)