diff --git a/salt/suricata/cron/so-suricata-rulestats b/salt/suricata/cron/so-suricata-rulestats index 95b51c58a..459ab894f 100644 --- a/salt/suricata/cron/so-suricata-rulestats +++ b/salt/suricata/cron/so-suricata-rulestats @@ -17,14 +17,23 @@ query() { STATS=$(query "ruleset-stats") RELOAD=$(query "ruleset-reload-time") +[ -z "$RELOAD" ] && RELOAD='{}' -if echo "$STATS" | jq -e '.return == "OK"' > /dev/null 2>&1; then - LOADED=$(echo "$STATS" | jq -r '.message[0].rules_loaded') - FAILED=$(echo "$STATS" | jq -r '.message[0].rules_failed') - LAST_RELOAD=$(echo "$RELOAD" | jq -r '.message[0].last_reload') +# Outputs valid JSON on success, empty on failure +OUTPUT=$(jq -n \ + --argjson stats "$STATS" \ + --argjson reload "$RELOAD" \ + 'if $stats.return == "OK" and ($stats.message[0].rules_loaded | type) == "number" and ($stats.message[0].rules_failed | type) == "number" then + { + rules_loaded: $stats.message[0].rules_loaded, + rules_failed: $stats.message[0].rules_failed, + last_reload: ($reload.message[0].last_reload // ""), + return: "OK" + } + else empty end' 2>/dev/null) - jq -n --argjson loaded "$LOADED" --argjson failed "$FAILED" --arg reload "$LAST_RELOAD" \ - '{rules_loaded: $loaded, rules_failed: $failed, last_reload: $reload, return: "OK"}' > "$OUTFILE" +if [ -n "$OUTPUT" ]; then + echo "$OUTPUT" > "$OUTFILE" else echo '{"return":"FAIL"}' > "$OUTFILE" fi diff --git a/salt/telegraf/scripts/surirules.sh b/salt/telegraf/scripts/surirules.sh index b38d5df26..f4c6885e1 100644 --- a/salt/telegraf/scripts/surirules.sh +++ b/salt/telegraf/scripts/surirules.sh @@ -18,11 +18,15 @@ if [[ ! "`pidof -x $(basename $0) -o %PPID`" ]]; then if [ -f "$STATSFILE" ] && [ $(($(date +%s) - $(stat -c %Y "$STATSFILE"))) -lt 90 ] && jq -e '.return == "OK" and .rules_loaded != null and .rules_failed != null' "$STATSFILE" > /dev/null 2>&1; then LOADED=$(jq -r '.rules_loaded' "$STATSFILE") FAILED=$(jq -r '.rules_failed' "$STATSFILE") - RELOAD_TIME=$(jq -r '.last_reload // ""' "$STATSFILE") + RELOAD_TIME=$(jq -r 'if .last_reload then .last_reload else "" end' "$STATSFILE") - echo "surirules loaded=${LOADED}i,failed=${FAILED}i,reload_time=\"${RELOAD_TIME}\",status=\"ok\"" + if [ -n "$RELOAD_TIME" ]; then + echo "surirules loaded=${LOADED}i,failed=${FAILED}i,reload_time=\"${RELOAD_TIME}\",status=\"ok\"" + else + echo "surirules loaded=${LOADED}i,failed=${FAILED}i,status=\"ok\"" + fi else - echo "surirules loaded=0i,failed=0i,reload_time=\"\",status=\"unknown\"" + echo "surirules loaded=0i,failed=0i,status=\"unknown\"" fi fi