如何 grep response 找出有多少个调用超时?

如何 grep response 找出有多少个调用超时?

我有一个curl 命令正在调用我们的一项服务,因此如果我的服务超时,它会返回如下JSON 响应:

[{"results":{"response":null},"error":{"errorCode":1001,"message":"Service Timeout","status":"FAILURE"}}]

下面是我运行时的curl命令,如果有超时,我会得到上面的响应

curl --header "Authorization: Bearer some token here" "http://localhost:8080/v2/line?&clientid=120";

我在 for 循环中运行上面的 curl 命令 x 次。现在我想通过检查"message"JSON 响应来查看有多少调用超时?我的意思是,如果我拨打了 100 万个电话,那么有多少个电话超时,超时的百分比是多少?

所以我得到了下面一行调用curl命令的循环,但我不确定如何计算出有多少调用超时以及超时的百分比是多少?这可以吗?

for ((i=1;i<=1000000;i++)); do   curl --header "Authorization: Bearer some token here" "http://localhost:8080/v2/line?&clientid=120"; done

更新:-

这是运行命令后我看到的输出:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   226  100   226    0     0  12798      0 --:--:-- --:--:-- --:--:-- 17384
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   226  100   226    0     0   4591      0 --:--:-- --:--:-- --:--:--  7290
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   226  100   226    0     0   6318      0 --:--:-- --:--:-- --:--:--  8370
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   226  100   226    0     0   5252      0 --:--:-- --:--:-- --:--:--  7793
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   226  100   226    0     0   6139      0 --:--:-- --:--:-- --:--:--  8071
1

答案1

我建议用于jq所有 JSON 相关的文本处理操作。当然,你可以使用它来解析 JSON grep,但在我看来,这不是正确的方法。

假设超时等于错误代码 1001 的快速示例。返回的数字是已发生的超时次数:

for ((i=1;i<=1000000;i++)); do
curl --header "Authorization: Bearer some token here" "http://localhost:8080/v2/line?&clientid=120"
done \
| jq '.[].error.errorCode == 1001' | grep -c true

或者,如果您只想使用 grep(假设 JSON 回复是单行):

for ((i=1;i<=1000000;i++)); do
curl --header "Authorization: Bearer some token here" "http://localhost:8080/v2/line?&clientid=120"
done \
| grep -wcoE '"errorCode":1001'

相关内容