-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathcheck_goldsky.sh
More file actions
71 lines (60 loc) · 2.08 KB
/
check_goldsky.sh
File metadata and controls
71 lines (60 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
PORT=35681
STATUS_FILE="/tmp/subgraph_status.txt"
echo "Initializing..." > "$STATUS_FILE"
# 登录
echo "准备登录 Goldsky..."
goldsky login || { echo "登录失败"; exit 1; }
echo -e "\n登录成功,开始监控子图状态...\n"
# HTTP服务函数
start_http_service() {
PIPE="/tmp/subgraph_http_pipe"
rm -f "$PIPE"; mkfifo "$PIPE"
while true; do
{
# 读取请求头
while read -r line; do [[ "$line" == $'\r' || -z "$line" ]] && break; done
# 读取最新状态(移除换行符)
current_status=$(tr -d '\n' < "$STATUS_FILE")
# 生成JSON响应
echo -e "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nConnection: close\r\n\r\n"
echo "{"
echo " \"timestamp\": \"$(date '+%Y-%m-%d %H:%M:%S')\","
echo " \"status\": \"${current_status//\"/\\\"}\"" # 转义双引号
echo "}"
} < "$PIPE" | nc -l $PORT > "$PIPE"
done
}
# 启动HTTP服务
start_http_service &
HTTP_PID=$!
trap 'kill $HTTP_PID; rm -f "$PIPE" "$STATUS_FILE"; exit' INT TERM
# 主监控循环
while true; do
# 获取并处理状态(生成单行输出)
new_status=$(goldsky subgraph list 2>&1 | awk '
BEGIN { RS = "\\* "; FS = "\n"; output = "" }
/^[^ ]/ {
subgraph_name = substr($1, 14)
for (i=2; i<=NF; i++) {
if ($i ~ /Status:/) {
split($i, parts, ": ")
status = parts[2]
gsub(/[ \t$$]+/, " ", status)
sub("^ +| +$", "", status)
# 构建字符串输出
output = output "Subgraph: " subgraph_name " - Status: " status "; "
break
}
}
}
END { print output }')
# 更新状态文件(确保无换行)
if [ -n "$new_status" ]; then
echo "$new_status" > "$STATUS_FILE"
else
echo "No status available" > "$STATUS_FILE"
fi
echo "[$(date '+%H:%M:%S')] 当前状态: $(cat "$STATUS_FILE")"
sleep 60
done