#!/bin/bash # This file is part of the rsyslog project, released under ASL 2.0 . ${srcdir:=.}/diag.sh init export ES_PORT=19200 export NUMMESSAGES=1000 # 1000 is sufficient, as this test is pretty slow REBIND_INTERVAL=100 # should be enough to run several times for $NUMMESSAGES queue_empty_check() { es_shutdown_empty_check && \ content_check --check-only --regex '"name": "omelasticsearch".*"submitted": '$NUMMESSAGES \ $RSYSLOG_DYNNAME.spool/omelasticsearch-stats.log } export QUEUE_EMPTY_CHECK_FUNC=queue_empty_check ensure_elasticsearch_ready generate_conf add_conf ' template(name="tpl" type="string" string="{\"msgnum\":\"%msg:F,58:2%\"}") module(load="../plugins/impstats/.libs/impstats" interval="1" log.file="'"$RSYSLOG_DYNNAME.spool"'/omelasticsearch-stats.log" log.syslog="off" format="cee") module(load="../plugins/omelasticsearch/.libs/omelasticsearch") if $msg contains "msgnum:" then action(type="omelasticsearch" server="127.0.0.1" serverport="'$ES_PORT'" template="tpl" searchIndex="rsyslog_testbench" rebindinterval="'$REBIND_INTERVAL'") ' startup injectmsg 0 $NUMMESSAGES shutdown_when_empty wait_shutdown es_getdata $NUMMESSAGES $ES_PORT seq_check 0 $(( NUMMESSAGES - 1 )) rc=0 if [ -f ${RSYSLOG_DYNNAME}.spool/omelasticsearch-stats.log ] ; then $PYTHON <${RSYSLOG_DYNNAME}.spool/omelasticsearch-stats.log -c ' import sys,json nrecs = int(sys.argv[1]) nrebinds = nrecs/int(sys.argv[2])-1 expected = { "name": "omelasticsearch", "origin": "omelasticsearch", "submitted": nrecs, "failed.http": 0, "failed.httprequests": 0, "failed.checkConn": 0, "failed.es": 0, "response.success": 0, "response.bad": 0, "response.duplicate": 0, "response.badargument": 0, "response.bulkrejection": 0, "response.other": 0, "rebinds": nrebinds } actual = {} for line in sys.stdin: jstart = line.find("{") if jstart >= 0: hsh = json.loads(line[jstart:]) if hsh["origin"] == "omelasticsearch": actual = hsh if not expected == actual: sys.stderr.write("ERROR: expected stats not equal to actual stats\n") sys.stderr.write("ERROR: expected {}\n".format(expected)) sys.stderr.write("ERROR: actual {}\n".format(actual)) sys.exit(1) ' $NUMMESSAGES $REBIND_INTERVAL || { rc=$?; echo error: expected stats not found in ${RSYSLOG_DYNNAME}.spool/omelasticsearch-stats.log; } else echo error: stats file ${RSYSLOG_DYNNAME}.spool/omelasticsearch-stats.log not found rc=1 fi if [ $rc != 0 ] ; then error_exit 1 else exit_test fi