mirror of
				https://github.com/librenms/librenms-agent.git
				synced 2024-05-09 09:54:52 +00:00 
			
		
		
		
	When checking if arrays have slaves, the mdadm script, does an ls/$LS of the device to see if it exists. This $LS throws an error to STDERR if it does not match. This output is caught by snmp and corrupts the json output
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| CAT=/bin/cat
 | |
| LS=/bin/ls
 | |
| BASENAME=/usr/bin/basename
 | |
| REALPATH=/usr/bin/realpath
 | |
| 
 | |
| CONFIGFILE=/etc/snmp/mdadm.conf
 | |
| if [ -f $CONFIGFILE ] ; then
 | |
|      . $CONFIGFILE
 | |
| fi
 | |
| 
 | |
| VERSION=1
 | |
| ERROR_CODE=0
 | |
| ERROR_STRING=""
 | |
| 
 | |
| OUTPUT_DATA='['
 | |
| 
 | |
| # use 'ls' command to check if md blocks exist
 | |
| if $LS /dev/md?* 1> /dev/null 2>&1 ; then
 | |
|     for ARRAY_BLOCKDEVICE in $($LS -1 /dev/md?*) ; do
 | |
|         RAID="/sys/block/"$($BASENAME $($REALPATH $ARRAY_BLOCKDEVICE))
 | |
| 
 | |
|         # ignore arrays with no slaves
 | |
|         if [ -z "$($LS -1 $RAID/slaves 2> /dev/null)" ] ; then
 | |
|             continue
 | |
|         fi
 | |
|         # ignore "non existing" arrays
 | |
|         if [ ! -f "$RAID/md/degraded" ] ; then
 | |
|             continue
 | |
|         fi
 | |
| 
 | |
|         if [[ $($BASENAME $ARRAY_BLOCKDEVICE) = [[:digit:]] ]] ; then
 | |
|             RAID_NAME=$($BASENAME $RAID)
 | |
|         else
 | |
|             RAID_NAME=$($BASENAME $ARRAY_BLOCKDEVICE)
 | |
|         fi
 | |
|         RAID_DEV_LIST=$($LS $RAID/slaves/)
 | |
|         RAID_LEVEL=$($CAT $RAID/md/level)
 | |
|         RAID_DISC_COUNT=$($CAT $RAID/md/raid_disks| cut -d' ' -f1)
 | |
|         RAID_STATE=$($CAT $RAID/md/array_state)
 | |
|         RAID_ACTION=$($CAT $RAID/md/sync_action)
 | |
|         RAID_DEGRADED=$($CAT $RAID/md/degraded)
 | |
| 
 | |
|         if [ "$RAID_SYNC_SPEED" = "none" ] ; then
 | |
|             RAID_SYNC_SPEED=0
 | |
|         else
 | |
|             let "RAID_SYNC_SPEED=$($CAT $RAID/md/sync_speed)*1024"
 | |
|         fi
 | |
| 
 | |
|         if [ "$($CAT $RAID/md/sync_completed)" != "none" ] ; then
 | |
|             let "RAID_SYNC_COMPLETED=100*$($CAT $RAID/md/sync_completed)"
 | |
|         elif [ $RAID_DEGRADED -eq 1 ] ; then
 | |
|             RAID_SYNC_COMPLETED=0
 | |
|         else
 | |
|             RAID_SYNC_COMPLETED=100
 | |
|         fi
 | |
| 
 | |
|         # divide with 2 to size like in /proc/mdstat
 | |
|         # and multiply with 1024 to get size in bytes
 | |
|         let "RAID_SIZE=$($CAT $RAID/size)*1024/2"
 | |
| 
 | |
|         RAID_DEVICE_LIST='['
 | |
|         ALL_DEVICE_COUNT=0
 | |
|         for D in $RAID_DEV_LIST ; do
 | |
|             RAID_DEVICE_LIST=$RAID_DEVICE_LIST'"'$D'",'
 | |
|             let "ALL_DEVICE_COUNT+=1"
 | |
|         done
 | |
|         if [ ${#RAID_DEVICE_LIST} -gt 3 ] ; then
 | |
|             RAID_DEVICE_LIST=${RAID_DEVICE_LIST: : -1}
 | |
|         fi
 | |
|         RAID_DEVICE_LIST=$RAID_DEVICE_LIST']'
 | |
| 
 | |
|         RAID_MISSING_DEVICES='['
 | |
|         for D in $RAID_DEV_LIST ; do
 | |
|             if [ -L $RAID/slaves/$D ] && [ -f $RAID/slaves/$D ] ; then
 | |
|                 RAID_MISSING_DEVICES=$RAID_MISSING_DEVICES'"'$D'",'
 | |
|             fi
 | |
|         done
 | |
|         if [ ${#RAID_MISSING_DEVICES} -gt 3 ] ; then
 | |
|             RAID_MISSING_DEVICES=${RAID_MISSING_DEVICES: : -1}
 | |
|         fi
 | |
|         RAID_MISSING_DEVICES=$RAID_MISSING_DEVICES']'
 | |
| 
 | |
|         let "RAID_HOTSPARE_COUNT=ALL_DEVICE_COUNT-RAID_DISC_COUNT"
 | |
|         if [ $RAID_HOTSPARE_COUNT -lt 0 ] ; then
 | |
|             RAID_HOTSPARE_COUNT=0
 | |
|         fi
 | |
| 
 | |
|         ARRAY_DATA='{'\
 | |
| '"name":"'$RAID_NAME\
 | |
| '","level":"'$RAID_LEVEL\
 | |
| '","size":"'$RAID_SIZE\
 | |
| '","disc_count":"'$RAID_DISC_COUNT\
 | |
| '","hotspare_count":"'$RAID_HOTSPARE_COUNT\
 | |
| '","device_list":'$RAID_DEVICE_LIST\
 | |
| ',"missing_device_list":'$RAID_MISSING_DEVICES\
 | |
| ',"state":"'$RAID_STATE\
 | |
| '","action":"'$RAID_ACTION\
 | |
| '","degraded":"'$RAID_DEGRADED\
 | |
| '","sync_speed":"'$RAID_SYNC_SPEED\
 | |
| '","sync_completed":"'$RAID_SYNC_COMPLETED\
 | |
| '"},'
 | |
| 
 | |
|         OUTPUT_DATA=$OUTPUT_DATA$ARRAY_DATA
 | |
|     done
 | |
| 
 | |
|     OUTPUT_DATA=${OUTPUT_DATA: : -1}']'
 | |
| else
 | |
|     OUTPUT_DATA=${OUTPUT_DATA}']'
 | |
| fi
 | |
| 
 | |
| OUTPUT='{"data":'$OUTPUT_DATA\
 | |
| ',"error":"'$ERROR_CODE\
 | |
| '","errorString":"'$ERROR_STRING\
 | |
| '","version":"'$VERSION'"}'
 | |
| 
 | |
| echo $OUTPUT
 | |
| 
 |