17
17
18
18
19
19
class CheckPcMeasure (object ):
20
- def __init__ (self ):
20
+ def __init__ (self , host = "127.0.0.1" , port = 4000 ):
21
21
version = "0.2.0"
22
- parser = argparse .ArgumentParser (formatter_class = argparse .RawDescriptionHelpFormatter ,
23
- description = textwrap .dedent (os .path .basename (__file__ ) + " " + version +
24
- " (GPLv3) 2018 - " + time .strftime ("%Y" )),
25
- epilog = textwrap .dedent ("GitHub: https://github.com/mpibpc-mroose/"
26
- "nagios_plugin_pcmeasure" ))
27
- parser .add_argument ("-H" , dest = "host" , type = str , required = True , help = "hostname of the etherbox" )
28
- parser .add_argument ("-p" , type = int , dest = "port" , default = 4000 , required = False , help = "port to use" )
29
- parser .add_argument ("-S" , dest = "sensor_name" , type = str , required = True , help = "sensor name, e.g. com1.1" )
30
- parser .add_argument ("-w" , dest = "warning_threshold" , type = float , required = True , help = "warning threshold" )
31
- parser .add_argument ("-c" , dest = "critical_threshold" , type = float , required = True , help = "critical threshold" )
32
- parser .add_argument ("-l" , dest = "label" , type = str , required = False , help = "label for perfdata, e.g. 'celsius'" )
33
- self .arguments = parser .parse_args ()
34
-
35
- if self .arguments .label :
36
- self .label_perfdata = self .arguments .label
37
- self .arguments .label = " " + self .arguments .label
38
- else :
39
- self .label_perfdata = "sensor_output"
40
- self .arguments .label = ""
22
+ if __name__ == '__main__' :
23
+ parser = argparse .ArgumentParser (formatter_class = argparse .RawDescriptionHelpFormatter ,
24
+ description = textwrap .dedent (os .path .basename (__file__ ) + " " + version +
25
+ " (GPLv3) 2018 - " + time .strftime ("%Y" )),
26
+ epilog = textwrap .dedent ("GitHub: https://github.com/mpibpc-mroose/"
27
+ "nagios_plugin_pcmeasure" ))
28
+ parser .add_argument ("-H" , dest = "host" , type = str , required = True , help = "hostname of the etherbox" )
29
+ parser .add_argument ("-p" , type = int , dest = "port" , default = 4000 , required = False , help = "port to use" )
30
+ parser .add_argument ("-S" , dest = "sensor_name" , type = str , required = True , help = "sensor name, e.g. com1.1" )
31
+ parser .add_argument ("-w" , dest = "warning_threshold" , type = float , required = True , help = "warning threshold" )
32
+ parser .add_argument ("-c" , dest = "critical_threshold" , type = float , required = True , help = "critical threshold" )
33
+ parser .add_argument ("-l" , dest = "label" , type = str , required = False , help = "label for perfdata, e.g. 'celsius'" )
41
34
42
- if self .arguments .warning_threshold > self .arguments .critical_threshold :
43
- print ("UNKNOWN: warning threshold should be lower than critical threshold" )
44
- sys .exit (STATUS_UNKNOWN )
35
+ self .arguments = parser .parse_args ()
36
+ self .critical_threshold = self .arguments .critical_threshold
37
+ self .warning_threshold = self .arguments .warning_threshold
38
+ self .host = self .arguments .host
39
+ self .port = self .arguments .port
40
+ self .sensor_name = self .arguments .sensor_name
45
41
42
+ if self .arguments .label :
43
+ self .label_name = " " + self .arguments .label
44
+ self .label_perfdata = self .arguments .label
45
+ else :
46
+ self .label_name = ""
47
+ self .label_perfdata = "sensor_output"
48
+
49
+ if self .warning_threshold > self .critical_threshold :
50
+ print ("UNKNOWN: warning threshold should be lower than critical threshold" )
51
+ sys .exit (STATUS_UNKNOWN )
52
+ else :
53
+ self .label_name = ""
54
+ self .label_perfdata = "sensor_output"
55
+ self .critical_threshold = False
56
+ self .warning_threshold = False
57
+ self .host = host
58
+ self .port = port
59
+ self .sensor_name = False
46
60
self .socket = self ._connect ()
47
61
48
62
def _connect (self ):
49
63
_socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
50
64
_socket .settimeout (0.5 )
51
65
try :
52
- _socket .connect ((self .arguments . host , self . arguments .port ))
66
+ _socket .connect ((self .host , self .port ))
53
67
except socket .timeout :
54
- print ("UNKNOWN: timeout on connect to {host}:{port}" .format (host = self .arguments .host ,
55
- port = self .arguments .port ))
68
+ print ("UNKNOWN: timeout on connect to {host}:{port}" .format (host = self .host ,
69
+ port = self .port ))
70
+ sys .exit (STATUS_UNKNOWN )
71
+ except ConnectionRefusedError as error :
72
+ print ("UNKNOWN: {error} by {host}:{port}" .format (error = str (error ),
73
+ host = self .host ,
74
+ port = self .port ))
56
75
sys .exit (STATUS_UNKNOWN )
57
76
return _socket
58
77
78
+ def close (self ):
79
+ self .socket .close ()
80
+
59
81
def __delete__ (self , instance ):
60
82
self .socket .close ()
61
83
@@ -65,38 +87,53 @@ def _get_value(self, sensor_name) -> float:
65
87
sensor_reply_pattern = re .compile (r"value=\s(?P<value>.+);" )
66
88
return float (sensor_reply_pattern .findall (raw_data )[0 ])
67
89
68
- def check (self ):
90
+ def check (self , sensor_name = False , warning_threshold = False , critical_threshold = False , label = False ) -> int :
91
+ if sensor_name :
92
+ self .sensor_name = sensor_name
93
+ if warning_threshold :
94
+ self .warning_threshold = warning_threshold
95
+ if critical_threshold :
96
+ self .critical_threshold = critical_threshold
97
+ if label :
98
+ self .label_name = " " + label
99
+ self .label_perfdata = label
69
100
try :
70
- value = self ._get_value (sensor_name = self .arguments . sensor_name )
71
- if value > self .arguments . critical_threshold :
101
+ value = self ._get_value (sensor_name = self .sensor_name )
102
+ if value > self .critical_threshold :
72
103
print ("CRITICAL: {value} exceeds {threshold} | "
73
104
"{label_perfdata}={value};;;0" .format (value = value ,
74
- label = self .arguments . label ,
105
+ label = self .label_name ,
75
106
label_perfdata = self .label_perfdata ,
76
- threshold = self .arguments . critical_threshold ))
77
- sys . exit ( STATUS_CRITICAL )
78
- elif value > self .arguments . warning_threshold :
107
+ threshold = self .critical_threshold ))
108
+ return STATUS_CRITICAL
109
+ elif value > self .warning_threshold :
79
110
print ("WARNING: {value} exceeds {threshold} | "
80
111
"{label_perfdata}={value};;;0" .format (value = value ,
81
- label = self .arguments . label ,
112
+ label = self .label_name ,
82
113
label_perfdata = self .label_perfdata ,
83
- threshold = self .arguments . warning_threshold ))
84
- sys . exit ( STATUS_WARNING )
114
+ threshold = self .warning_threshold ))
115
+ return STATUS_WARNING
85
116
else :
86
117
print ("OK: {value}{label} | {label_perfdata}={value};;;0" .format (value = value ,
87
118
label_perfdata = self .label_perfdata ,
88
- label = self .arguments . label ))
89
- sys . exit ( STATUS_OK )
119
+ label = self .label_name ))
120
+ return STATUS_OK
90
121
except UnicodeDecodeError :
91
122
print ("UNKNOWN: can not read from sensor '{sensor_name}'! "
92
- "use {app_name} -h for further information!" .format (sensor_name = self .arguments . sensor_name ,
123
+ "use {app_name} -h for further information!" .format (sensor_name = self .sensor_name ,
93
124
app_name = os .path .basename (__file__ )))
94
- sys . exit ( STATUS_UNKNOWN )
125
+ return STATUS_UNKNOWN
95
126
except Exception as error :
96
127
print ("UNKNOWN: " + str (error ))
97
- sys .exit (STATUS_UNKNOWN )
128
+ return STATUS_UNKNOWN
129
+
130
+ def check_command (self ):
131
+ return_code = self .check (sensor_name = self .sensor_name ,
132
+ warning_threshold = self .warning_threshold ,
133
+ critical_threshold = self .critical_threshold )
134
+ sys .exit (return_code )
98
135
99
136
100
137
if __name__ == '__main__' :
101
138
check_pcmeasure = CheckPcMeasure ()
102
- check_pcmeasure .check ()
139
+ check_pcmeasure .check_command ()
0 commit comments