首页 > 解决方案 > curl,拆分字符串并在需要时退出

问题描述

这是运行时的输出curl --silent localhost:9091/health

# HELP metrics_qollector_ttt_health_check The status of ttt.
# TYPE metrics_qollector_ttt_health_check gauge
metrics_qollector_ttt_health_check 1.0
# HELP metrics_qollector_database_health_check The status of the database.
# TYPE metrics_qollector_database_health_check gauge
metrics_qollector_database_health_check 1.0
# HELP metrics_qollector_health_checks_latency_seconds Health check latency in seconds.
# TYPE metrics_qollector_health_checks_latency_seconds summary
metrics_qollector_health_checks_latency_seconds_count{method="runtime",} 1.0
metrics_qollector_health_checks_latency_seconds_sum{method="runtime",} 9.51166E-4

我需要编写一个检查 if或metrics_qollector_ttt_health_check == "1.0"thenmetrics_qollector_database_health_check == "1.0"的bash 脚本exit 0;exit 1;

我一直在尝试做的是以下

#!/usr/bin/env bash

set -e

HEALTHSTATUS=$(curl --silent localhost:9091/health)

for item in ${HEALTHSTATUS}
    if [[ item[0] = "metrics_qollector_ttt_health_check" && item[1] = "1.0" ]  || [ item[0] = "metrics_qollector_database_health_check" && item[1] "1.0" ]]; then
        exit 0;
    else
        exit 1;
done

标签: bashsplit

解决方案


你有很多方法可以做到这一点,但这里有一个:

#!/bin/bash

STATUS=$(curl --silent http://localhost:9091/health | egrep "^metrics_qollector_ttt_health_check |^metrics_qollector_database_health_check ")

EXIT_STATUS=$(echo $STATUS | awk '{if(NF == 4) { if(($2 == 0) || ($4 == 0)) {print "0"} else {print "1"} } else {print "2"}}')

exit $EXIT_STATUS

awk 应该将您的浮点值(1.0)解析为数值以进行比较。它还会检查您是否同时拥有这两个指标。

脚本退出代码

0 - 至少有一个值为 0.0

1 - 没有一个值是 0.0

2 - 如果由于某种原因您的健康 API 中没有一个或两个指标


推荐阅读