Quantcast
Channel: Active questions tagged jq - Stack Overflow
Viewing all articles
Browse latest Browse all 657

How to iterate and pick the each element in {} blocks

$
0
0
{ __name__: sc_pcd_g2version, container: mgmtbroker, endpoint: vxexporter, instance: 10.42.24.132:9116, job: prometheus, namespace: delivery, pod: chn1-d1-ac-0, service: prometheus }{ __name__: sc_pcd_g2version, container: mgmtbroker, endpoint: vxexporter, instance: 10.42.3.110:9116, job: prometheus, namespace: delivery, pod: chn1-d1-ia-0, service: prometheus }

There are two block below how to iterate the below data block using jq filter which should pick on first iteration

{ __name__: sc_pcd_g2version, container: mgmtbroker, endpoint: vxexporter, instance: 10.42.24.132:9116, job: prometheus, namespace: delivery, pod: chn1-d1-ac-0, service: prometheus }

On second iteration, it should pick the second one

{ __name__: sc_pcd_g2version, container: mgmtbroker, endpoint: vxexporter, instance: 10.42.3.110:9116, job: prometheus, namespace: delivery, pod: chn1-d1-ia-0, service: prometheus }

The response of the above which needs to be later selected each {} block

The required output filtered and captured below. Now i am looking to select the first element {} block and then next iteration must select the next one.

function get_prometheus_vector_value {  local _RESULT  for i in 0 1  do    # return the value of the first element of the vector    _RESULT=$(echo $1 | jq -r '.['$i'].value?')    printf '%s'"${_RESULT}"  done}function get_prometheus_vector_metric {  local _RESULT  for i in 0 1  do    # return the metric information of the first element of the vector    _RESULT=$(echo $1 | jq -r '.['$i'].metric?' | xargs)    printf '%s'"${_RESULT}"  done}# set up exit functiontrap on_exit EXIT TERM# process the cli optionsprocess_command_line "$@"# get the raw query from prometheusPROMETHEUS_RAW_RESULT="$( get_prometheus_raw_result )"  # extract the metric value from the raw prometheus result  if [[ "${PROMETHEUS_QUERY_TYPE}" = "scalar" ]]  then      PROMETHEUS_RESULT=$( get_prometheus_scalar_result "$PROMETHEUS_RAW_RESULT" )      PROMETHEUS_METRIC=UNKNOWN  else      PROMETHEUS_VALUE=$( get_prometheus_vector_value "$PROMETHEUS_RAW_RESULT" )      PROMETHEUS_RESULT=$( get_prometheus_scalar_result "$PROMETHEUS_VALUE" )      printf 'PROMETHEUS_RESULT: %s\n'"${PROMETHEUS_RESULT}"      PROMETHEUS_METRIC=$( get_prometheus_vector_metric "$PROMETHEUS_RAW_RESULT" )      PROMETHEUS_METRIC=$(echo $PROMETHEUS_METRIC | jq -Rr 'scan("({[^}]*})")')      printf 'PROMETHEUS_METRIC after scan: %s\n'"${PROMETHEUS_METRIC}"  fifor i in "$PROMETHEUS_METRIC"do  # check the value  **PROMETHEUS_METRIC=$(echo $PROMETHEUS_METRIC) |jq .[1]**  if [[ ${PROMETHEUS_RESULT} =~ ^-?[0-9]+$ ]]  then    if eval [[ ${PROMETHEUS_RESULT} -${COMPARISON_METHOD} ${CRITICAL_LEVEL} ]]    then      NAGIOS_STATUS=CRITICAL      NAGIOS_SHORT_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"    elif eval [[ ${PROMETHEUS_RESULT} -${COMPARISON_METHOD} $WARNING_LEVEL ]]    then      NAGIOS_STATUS=WARNING      NAGIOS_SHORT_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"    else      NAGIOS_STATUS=OK      NAGIOS_SHORT_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"    fi  else    if [[ "${NAN_OK}" = "true" && "${PROMETHEUS_RESULT}" = "NaN" ]]    then      NAGIOS_STATUS=OK      NAGIOS_SHORT_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"    else      NAGIOS_SHORT_TEXT="unable to parse prometheus response"      NAGIOS_LONG_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"    fi  fi  if [[ "${NAGIOS_INFO}" = "true" ]]  then      NAGIOS_SHORT_TEXT="${NAGIOS_SHORT_TEXT}: ${PROMETHEUS_METRIC}"  fi  if [[ "${PERFDATA}" = "true" ]]  then      NAGIOS_SHORT_TEXT="${NAGIOS_SHORT_TEXT} | query_result=${PROMETHEUS_RESULT}"  fiexit

Viewing all articles
Browse latest Browse all 657

Trending Articles