Advertisement
Guest User

Untitled

a guest
May 31st, 2016
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.90 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. # Last Modified: 2013-03-29
  4. #
  5. # until 2103-03-29 worked for SNR-ERD-2.0
  6. #
  7.  
  8. # Paths to commands used in this script. These
  9. # may have to be modified to match your system setup.
  10. # TV: removed PATH restriction. Need to think more about what this means overall
  11. export PATH="/usr/bin:${PATH}"
  12.  
  13. # required for bc to work
  14. export LC_ALL=C
  15.  
  16.  
  17. #DEBUG=1
  18.  
  19. BC=$(which bc)
  20. if [ "${BC}" == "" ]
  21. then
  22. echo "# BC needed for perfomance info" >&2
  23. fi
  24.  
  25. #
  26. ##
  27. #UTILS=(locate utils.sh |/bin/grep -E '^/usr' |head -n1)
  28. UTILS='/usr/local/icinga/libexec/utils.sh'
  29. UTILDIR=${UTILS%%/*}
  30. if [ ! -d "${UTILDIR}" ]
  31. then
  32. echo "ERROR! dir '${UTILDIR}' does not exist." >&2
  33. exit 1 # for nagios it means WARNING
  34. fi
  35.  
  36. if [ -r "${UTILS}" ]
  37. then
  38. source "${UTILS}"
  39. else
  40. UTILNAME="${UTILS##*/}"
  41. echo "ERROR! file '${UTILNAME}' not found in '${UTILDIR}'" >&2
  42. exit 1
  43. fi
  44. #
  45. ECHO=$(which echo)
  46.  
  47. PROGNAME=${0##*/}
  48. PROGPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  49. REVISION="0.0.2"
  50.  
  51. function print_usage()
  52. {
  53. ECHO=$(which echo)
  54. echo ""
  55. echo "Usage: ${PROGNAME} [OPTIONS]"
  56. echo ""
  57. echo "Options:"
  58. echo " --host-address|-H HOST : host to send query to. (default is 192.168.1.36)"
  59. echo " --mib|-m /full/patch/to/mib : full path to mib file."
  60. echo " --community|-C WORD : snmp community word."
  61. echo " -I INOPTS : Toggle various defaults controlling input parsing (see snmpget --help)."
  62. echo ""
  63. echo "Flags:"
  64. echo " --resetSmartContact6|-rsc6 : manualy reset 'smart contact'."
  65. echo " --monitorVoltageSignal|-mvs : check for voltage on monitored input."
  66. echo " --monitorAlarmSignalContact3|-masc3 : check for circuit between 1-3 contacts."
  67. echo " --monitorAnySensorSignal1contact4|-mass1c4 : check for circuit between 1-4 contacts."
  68. echo " --monitorAnySensorSignal2contact7|-mass2c7 : check for circuit between 1-7 contacts."
  69. echo " --monitorAnySensorSignal3contact9|-mass3c9 : check for circuit between 1-9 contacts."
  70. echo ""
  71. echo "Other flags:"
  72. echo " --show-defaults : print defaults and exit"
  73. echo " --version|-V : print version information and exit"
  74. echo " --debug|-d : debug mode"
  75. echo " --help|-h : display this help screen and exit"
  76. echo ""
  77. }
  78. #
  79. function print_help() {
  80. print_revision $PROGNAME $REVISION
  81. echo ""
  82. print_usage
  83. echo ""
  84. support
  85. }
  86. #
  87. ## Make sure the correct number of command line
  88. ## arguments have been supplied
  89. #
  90. if [ $# -lt 1 ]; then
  91. print_usage
  92. exit $STATE_UNKNOWN
  93. fi
  94. [ -n "${DEBUG}" ] && echo -n "$(date +%F-%T) ${@}" >> "/var/log/icinga/erd-$(date +%F).log"
  95. #
  96. RM=$(which rm)
  97. AWK=$(which awk)
  98. CAT=$(which cat)
  99. TEE=$(which tee)
  100. TEEOPTS="-a"
  101. SED=$(which sed)
  102. GREP=$(which grep)
  103. GREPOPTS="-i"
  104. DIFF=$(which diff)
  105. SORT=$(which sort)
  106. UNIQ=$(which uniq)
  107. DATE=$(which date)
  108. SUDO=$(which sudo)
  109. SUDOPTS="-n"
  110. TAIL=$(which tail)
  111. MKDIR=$(which mkdir)
  112. MKDIROPTS="-p"
  113. MYSQL=$(which mysql)
  114. CHMOD=$(which chmod)
  115. TOUCH=$(which touch)
  116. PRINTF=$(which printf)
  117. PRINTFOPTS="%.03f"
  118. #
  119. SNMPSET=$(which snmpset)
  120. SNMPGET=$(which snmpget)
  121. #
  122. exitstatus=$STATE_UNKNOWN #default
  123. # simple getopt mech for debug and comfort purposes
  124. while test $# -gt 0
  125. do
  126. case "$1" in
  127. --host|-H)
  128. shift
  129. HOST=$1
  130. shift
  131. ;;
  132. --mib|-m)
  133. shift
  134. MIB=$1
  135. shift
  136. ;;
  137. --comunity|-C)
  138. shift
  139. COMUNITY=$1
  140. shift
  141. ;;
  142. -I)
  143. shift
  144. SNMPOPTIONS=$1
  145. shift
  146. ;;
  147. --resetNumberOfResetPositives|-rnorp)
  148. RESETNUMBEROFRESETPOSITIVES=1
  149. shift
  150. ;;
  151. --resetSmartContact6|-rsc6)
  152. RESETSMARTCONTACT6=1
  153. shift
  154. ;;
  155. --monitorVoltageSignal|-mvs)
  156. MONITORVOLTAGESIGNAL=1
  157. shift
  158. ;;
  159. --monitorAlarmSignalContact3|-masc3)
  160. MONITORALARMSIGNALCONTACT3=1
  161. shift
  162. ;;
  163. --monitorAnySensorSignal1contact4|-mass1c4)
  164. MONITORANYSENSORSIGNAL1CONTACT4=1
  165. shift
  166. ;;
  167. --monitorAnySensorSignal2contact7|-mass2c7)
  168. MONITORANYSENSORSIGNAL2CONTACT7=1
  169. shift
  170. ;;
  171. --monitorAnySensorSignal3contact9|-mass3c9)
  172. MONITORANYSENSORSIGNAL3CONTACT9=1
  173. shift
  174. ;;
  175. --show-defaults)
  176. SHOWDEFAULTS=1
  177. echo '##' >&2
  178. echo "# SHOWDEFAULTS mode ON." >&2
  179. echo '###' >&2
  180. shift
  181. ;;
  182. --debug|-d)
  183. DEBUG=1
  184. echo '##' >&2
  185. echo "# DEBUG mode ON." >&2
  186. echo '#' >&2
  187. shift
  188. ;;
  189. --help|-h)
  190. print_help
  191. exit $STATE_UNKNOWN
  192. ;;
  193. --version|-V)
  194. print_revision $PROGNAME $REVISION
  195. exit $STATE_UNKNOWN
  196. ;;
  197. *)
  198. echo '##' >&2
  199. echo "# $* ignored." >&2
  200. echo '#' >&2
  201. print_usage
  202. break
  203. ;;
  204. esac
  205. done
  206.  
  207. #
  208. START=$( ${PRINTF} "${PRINTFOPTS}" $( ${DATE} +%s.%N ) )
  209. #
  210. if [ -n "${SHOWDEFAULTS}" ]
  211. then
  212. echo "# MIB = ${MIB}" >&2
  213. echo "# HOST = ${HOST}" >&2
  214. echo "# SNMPGET = ${SNMPGET}" >&2
  215. echo "# SNMPSET = ${SNMPSET}" >&2
  216. echo "# COMUNITY = ${COMUNITY}" >&2
  217. echo "# SNMPOPTIONS = ${SNMPOPTIONS}" >&2
  218. echo "# RESETSMARTCONTACT6 = ${RESETSMARTCONTACT6}" >&2
  219. echo "# MONITORVOLTAGESIGNAL = ${MONITORVOLTAGESIGNAL}" >&2
  220. echo "# MONITORALARMSIGNALCONTACT3 = ${MONITORALARMSIGNALCONTACT3}" >&2
  221. echo "# MONITORANYSENSORSIGNAL1CONTACT4 = ${MONITORANYSENSORSIGNAL1CONTACT4}" >&2
  222. echo "# MONITORANYSENSORSIGNAL2CONTACT7 = ${MONITORANYSENSORSIGNAL2CONTACT7}" >&2
  223. echo "# MONITORANYSENSORSIGNAL3CONTACT9 = ${MONITORANYSENSORSIGNAL3CONTACT9}" >&2
  224. fi
  225. #
  226. if [ -z "${MIB}" ]
  227. then
  228. MIB="/home/scripts/erd/mibs/erd-2.0.mib"
  229. MIB="/home/scripts/erd/mibs/erd-2.0-rev1.mib"
  230. fi
  231. if [ -z "${COMUNITY}" ]
  232. then
  233. COMUNITY="public"
  234. fi
  235. if [ -z "${HOST}" ]
  236. then
  237. HOST="192.168.1.36"
  238. fi
  239.  
  240. if [ -z "${SNMPVERSION}" ]
  241. then
  242. SNMPVERSION="1"
  243. fi
  244. if [ -z "${SNMPOPTIONS}" ]
  245. then
  246. SNMPOPTIONS="u"
  247. fi
  248. #
  249. if [ -n "${RESETNUMBEROFRESETPOSITIVES}" ]
  250. then
  251. OID="numberOfResetPositives.0 i 0"
  252. if [ -n "${DEBUG}" ]
  253. then
  254. echo "# Resetting numberOfResetPositives.." >&2
  255. echo "# ${SNMPSET} -P${SNMPOPTIONS} -m${MIB} -v${SNMPVERSION} -c${COMUNITY} ${HOST} ${OID}" >&2
  256. echo "#" >&2
  257. fi
  258. # snmpget -Pu -m /home/scripts/mibs/erd-2.0-rev2.mib -v1 -c public 192.168.1.36 resetSmartContact6.0
  259. RESPONSE=$( ${SNMPSET} -P"${SNMPOPTIONS}" -m"${MIB}" -v"${SNMPVERSION}" -c"${COMUNITY}" ${HOST} ${OID} )
  260.  
  261. STATE=$( echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "resetPositives" &>/dev/null )
  262. if [ "$?" -eq 0 ]
  263. then
  264. MESSAGE="ERD OK - SmartContact been resetted"
  265. exitstatus="${STATE_OK}"
  266. else
  267. MESSAGE="ERD CRITICAL - command returned '${STATE}'"
  268. exitstatus="${STATE_CRITICAL}"
  269. fi
  270. fi
  271. #
  272. if [ -n "${RESETSMARTCONTACT6}" ]
  273. then
  274. OID="resetSmartContact6.0 i 1"
  275. if [ -n "${DEBUG}" ]
  276. then
  277. echo "# Resetting SmartContact6.." >&2
  278. echo "# ${SNMPSET} -P${SNMPOPTIONS} -m${MIB} -v${SNMPVERSION} -c${COMUNITY} ${HOST} ${OID}" >&2
  279. echo "#" >&2
  280. fi
  281. # snmpget -Pu -m /home/scripts/mibs/erd-2.0-rev2.mib -v1 -c public 192.168.1.36 resetSmartContact6.0
  282. RESPONSE=$( ${SNMPSET} -P"${SNMPOPTIONS}" -m"${MIB}" -v"${SNMPVERSION}" -c"${COMUNITY}" ${HOST} ${OID} )
  283.  
  284. STATE=$( echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "bypass" &>/dev/null )
  285. if [ "$?" -eq 0 ]
  286. then
  287. MESSAGE="ERD OK - SmartContact been resetted"
  288. exitstatus="${STATE_OK}"
  289. else
  290. MESSAGE="ERD CRITICAL - command returned '${STATE}'"
  291. exitstatus="${STATE_CRITICAL}"
  292. fi
  293. fi
  294. #
  295. if [ -n "${MONITORVOLTAGESIGNAL}" ]
  296. then
  297. OID="monitorVoltageSignal.0 i 3"
  298. if [ -n "${DEBUG}" ]
  299. then
  300. echo "# monitoring voltage signal.." >&2
  301. echo "# ${SNMPSET} -P${SNMPOPTIONS} -m${MIB} -v${SNMPVERSION} -c${COMUNITY} ${HOST} ${OID}" >&2
  302. echo "#" >&2
  303. fi
  304. RESPONSE=$( ${SNMPSET} -P"${SNMPOPTIONS}" -m"${MIB}" -v"${SNMPVERSION}" -c"${COMUNITY}" ${HOST} ${OID} )
  305. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorOff" &>/dev/null
  306. if [ "$?" -eq 0 ]
  307. then
  308. MESSAGE="ERD UNKNOWN - Voltage Sensor is turned Off."
  309. exitstatus="${STATE_UNKNOWN}"
  310. fi
  311. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "voltageIsYes" &>/dev/null
  312. if [ "$?" -eq 0 ]
  313. then
  314. MESSAGE="ERD OK - Voltage is present."
  315. exitstatus="${STATE_OK}"
  316. fi
  317. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "voltageIsNo" &>/dev/null
  318. if [ "$?" -eq 0 ]
  319. then
  320. MESSAGE="ERD CRITICAL - Voltage is NOT present."
  321. exitstatus="${STATE_CRITICAL}"
  322. fi
  323. fi
  324. ##
  325. if [ -n "${MONITORALARMSIGNALCONTACT3}" ]
  326. then
  327. OID="monitorAlarmSignalContact3.0 i 3"
  328. if [ -n "${DEBUG}" ]
  329. then
  330. echo "# monitoring alarm signal (contact 3).." >&2
  331. echo "# ${SNMPSET} -P${SNMPOPTIONS} -m${MIB} -v${SNMPVERSION} -c${COMUNITY} ${HOST} ${OID}" >&2
  332. echo "#" >&2
  333. fi
  334. RESPONSE=$( ${SNMPSET} -P"${SNMPOPTIONS}" -m"${MIB}" -v"${SNMPVERSION}" -c"${COMUNITY}" ${HOST} ${OID} )
  335. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorOff" &>/dev/null
  336. if [ "$?" -eq 0 ]
  337. then
  338. MESSAGE="ERD UNKNOWN - Sensor is turned Off."
  339. exitstatus="${STATE_UNKNOWN}"
  340. fi
  341. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "doorIsClose" &>/dev/null
  342. if [ "$?" -eq 0 ]
  343. then
  344. MESSAGE="ERD OK - Door is Closed."
  345. exitstatus="${STATE_OK}"
  346. fi
  347. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "doorIsOpen" &>/dev/null
  348. if [ "$?" -eq 0 ]
  349. then
  350. MESSAGE="ERD CRITICAL - Door is Open."
  351. exitstatus="${STATE_CRITICAL}"
  352. fi
  353. fi
  354.  
  355. if [ -n "${MONITORANYSENSORSIGNAL1CONTACT4}" ]
  356. then
  357. OID="monitorAnySensorSignal1contact4.0 i 3"
  358. if [ -n "${DEBUG}" ]
  359. then
  360. echo "# monitoring Any Sensor Signal 1 (contact 4).." >&2
  361. echo "# ${SNMPSET} -P${SNMPOPTIONS} -m${MIB} -v${SNMPVERSION} -c${COMUNITY} ${HOST} ${OID}" >&2
  362. echo "#" >&2
  363. fi
  364. RESPONSE=$( ${SNMPSET} -P"${SNMPOPTIONS}" -m"${MIB}" -v"${SNMPVERSION}" -c"${COMUNITY}" ${HOST} ${OID} )
  365. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorOff" &>/dev/null
  366. if [ "$?" -eq 0 ]
  367. then
  368. MESSAGE="ERD UNKNOWN - Sensor is turned Off."
  369. exitstatus="${STATE_UNKNOWN}"
  370. fi
  371. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorIs_0" &>/dev/null
  372. if [ "$?" -eq 0 ]
  373. then
  374. MESSAGE="ERD OK - contact 4 is closed."
  375. exitstatus="${STATE_OK}"
  376. fi
  377. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorIs_1" &>/dev/null
  378. if [ "$?" -eq 0 ]
  379. then
  380. MESSAGE="ERD CRITICAL - contact 4 is open."
  381. exitstatus="${STATE_CRITICAL}"
  382. fi
  383. fi
  384.  
  385. if [ -n "${MONITORANYSENSORSIGNAL2CONTACT7}" ]
  386. then
  387. OID="monitorAnySensorSignal2contact7.0 i 3"
  388. if [ -n "${DEBUG}" ]
  389. then
  390. echo "# monitoring Any Sensor Signal 2 (contact 7).." >&2
  391. echo "# ${SNMPSET} -P${SNMPOPTIONS} -m${MIB} -v${SNMPVERSION} -c${COMUNITY} ${HOST} ${OID}" >&2
  392. echo "#" >&2
  393. fi
  394. RESPONSE=$( ${SNMPSET} -P"${SNMPOPTIONS}" -m"${MIB}" -v"${SNMPVERSION}" -c"${COMUNITY}" ${HOST} ${OID} )
  395. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorOff" &>/dev/null
  396. if [ "$?" -eq 0 ]
  397. then
  398. MESSAGE="ERD UNKNOWN - Sensor is turned Off."
  399. exitstatus="${STATE_UNKNOWN}"
  400. fi
  401. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorIs_0" &>/dev/null
  402. if [ "$?" -eq 0 ]
  403. then
  404. MESSAGE="ERD OK - contact 7 is closed."
  405. exitstatus="${STATE_OK}"
  406. fi
  407. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorIs_1" &>/dev/null
  408. if [ "$?" -eq 0 ]
  409. then
  410. MESSAGE="ERD CRITICAL - contact 7 is open."
  411. exitstatus="${STATE_CRITICAL}"
  412. fi
  413. fi
  414. if [ -n "${MONITORANYSENSORSIGNAL3CONTACT9}" ]
  415. then
  416. OID="monitorAnySensorSignal3contact9.0 i 3"
  417. if [ -n "${DEBUG}" ]
  418. then
  419. echo "# monitoring Any Sensor Signal 3 (contact 9).." >&2
  420. echo "# ${SNMPSET} -P${SNMPOPTIONS} -m${MIB} -v${SNMPVERSION} -c${COMUNITY} ${HOST} ${OID}" >&2
  421. echo "#" >&2
  422. fi
  423. RESPONSE=$( ${SNMPSET} -P"${SNMPOPTIONS}" -m"${MIB}" -v"${SNMPVERSION}" -c"${COMUNITY}" ${HOST} ${OID} )
  424. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorOff" &>/dev/null
  425. if [ "$?" -eq 0 ]
  426. then
  427. MESSAGE="ERD UNKNOWN - Sensor is turned Off."
  428. exitstatus="${STATE_UNKNOWN}"
  429. fi
  430. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorIs_0" &>/dev/null
  431. if [ "$?" -eq 0 ]
  432. then
  433. MESSAGE="ERD OK - contact 9 is closed."
  434. exitstatus="${STATE_OK}"
  435. fi
  436. echo "${RESPONSE}" |${GREP} "${GREPOPTS}" "sensorIs_1" &>/dev/null
  437. if [ "$?" -eq 0 ]
  438. then
  439. MESSAGE="ERD CRITICAL - contact 9 is open."
  440. exitstatus="${STATE_CRITICAL}"
  441. fi
  442. fi
  443.  
  444. if [ -n "${MESSAGE}" ]
  445. then
  446. echo -n "${MESSAGE}"
  447. else
  448. echo -n "UNKNOWN"
  449. fi
  450.  
  451. END=$( ${PRINTF} "${PRINTFOPTS}" $( ${DATE} +%s.%N ) )
  452. PRECISION="3"
  453. PRINTFOPTS="%0*.*f"
  454. DIFF=$( ${PRINTF} "${PRINTFOPTS}" 1 ${PRECISION} $( echo "$END - $START" | ${BC} ) )
  455.  
  456. [ -n "${DEBUG}" ] && echo " | TIME=${DIFF}" |${TEE} "${TEEOPTS}" "/var/log/icinga/erd-$(date +%F).log"
  457.  
  458. if [ -n "${DEBUG}" ]
  459. then
  460. echo "# START = ${START}" >&2
  461. echo "# END = ${END}" >&2
  462. echo "# DIFF = ${DIFF}" >&2
  463. if
  464. exit "${exitstatus}"
  465.  
  466. exit "${STATE_UNKNOWN}"
  467. exit "${STATE_OK}"
  468. exit "${STATE_WARNING}"
  469. exit "${STATE_CRITICAL}"
  470. exit "${STATE_DEPENDENT}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement