JSON을 슬라이스하여 JQ를 사용하여 새로운 Relic 수집을 위한 배열 생성

JSON을 슬라이스하여 JQ를 사용하여 새로운 Relic 수집을 위한 배열 생성

New Relic이 이를 올바르게 구문 분석할 수 있도록 일부 JSON을 JQ를 사용하여 분할해야 합니다. 왜냐하면 JSON은 대시보드에 푸시될 때 특정 형식으로만 제공되기 때문입니다.

저는 WPCLI와 함께 bash 스크립트를 사용한 다음 JQ를 사용하여 JSON 출력 형식을 지정하고 있습니다.

아래는 내 스크립트입니다.

#!/bin/bash

#for d in /var/www/* ; do
#   echo "$d"
#done

for f in /var/www/*/public_html/; do
    if [[ -d $f ]]; then
                #echo "$f"

                cd $f;
                SITEURL="$(wp option get siteurl)"
                USERS="$(wp user list --fields=display_name,user_email,user_registered,roles --format=json | jq .[])"
                PLUGINS="$(wp plugin list --format=json | jq .[])"

                echo "${SITEURL}" "${USERS}" "${PLUGINS}"
                cd ../.. ;
    fi
done

아래는 내가 얻은 결과입니다 ...

cat wp-info-output 
http://mytest1.com {
  "display_name": "testuser1",
  "user_email": "[email protected]",
  "user_registered": "2018-11-26 17:44:09",
  "roles": "administrator"
} {
  "name": "akismet",
  "status": "inactive",
  "update": "available",
  "version": "4.0.8"
}
{
  "name": "hello",
  "status": "inactive",
  "update": "none",
  "version": "1.7"
}

이런 모습이 필요해...

[
  {
    "eventType":"WordpressSite",
    "siteurl":"http://mytest1.com"
  },
  {
    "eventType":"WordpressPlugins",
    "pluginName": "akismet",
    "status": "inactive",
    "update": "available",
    "version": "4.0.8"
  },
    {
    "eventType":"WordpressPlugins",
    "pluginName": "hello",
    "status": "inactive",
    "update": "none",
    "version": "1.7"
  }
  {
    "eventType":"Users",
    "display_name": "testuser2",
    "user_email": "[email protected]",
    "user_registered": "2018-11-26 17:44:04",
    "roles": "administrator"
  }
]

제 생각에는 jq가 JSON 형식 지정에 대한 답이라고 생각하는데 약간의 어려움이 있습니다.

답변1

모든 JSON 개체를 가져와서 1비트 배열로 혼합하려는 것 같습니다. 시도해 보세요.

siteurl=$(wp option get siteurl)
users=$(
    wp user list --fields=display_name,user_email,user_registered,roles --format=json) |
    jq '.[] | .eventType = "WordpressUser"'
)
plugins=$( wp plugin list --format=json | jq '.[] | .eventType = "WordpressPlugin"' )

{
    printf '{"eventType":"WordpressSite","siteurl":"%s"}\n' "$(wp option get siteurl)"
    echo "$plugins"
    echo "$users"
} | jq -s .

관련 정보