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