bash - 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
解决方案
你有很多方法可以做到这一点,但这里有一个:
#!/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 中没有一个或两个指标
推荐阅读
- c# - Unity Move() 函数在角色控制器上不起作用
- ios - 如何在集合视图中保存一组图像swift 4
- cookies - 在 HTTP/2 流中有多个“set-cookie”标头是否可以接受?
- matlab - 如何在 MATLAB 中加速非常慢的动画绘图
- c++ - 关于在 C++ 中访问字符串的字母
- c++ - 避免 3+ 整数的整数乘法溢出
- twitter-bootstrap - 带有圆形边框的轮播上的可见图像边缘
- html - ng重复元素内的引导下拉菜单被溢出自动隐藏
- pandas - Pandas:比较大数据框和小数据框
- java - Java:在堆栈帧中,当前常量池引用值何时以及如何填充?