成功:
1
2
3
4
<code>{ </code>
<code> </code><code>"errcode"</code><code>: </code><code>"0"</code><code>, </code>
<code> </code><code>"errmsg"</code><code>: </code><code>"ok"</code>
<code>}</code>
失败:
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<code> </code><code>"errcode"</code><code>: </code><code>"1"</code><code>, </code>
<code> </code><code>"errmsg"</code><code>: { </code>
<code> </code><code>"mysql"</code><code>: { </code>
<code> </code><code>"code"</code><code>: </code><code>"0"</code><code>, </code>
<code> </code><code>"msg"</code><code>: </code><code>"ok"</code>
<code> </code><code>}, </code>
<code> </code><code>"memcache"</code><code>: { </code>
<code> </code><code>"msg"</code><code>: </code><code>"0"</code>
<code> </code><code>"mq"</code><code>: { </code>
<code> </code><code>"bs"</code><code>: { </code>
<code> </code><code>"code"</code><code>: </code><code>"1"</code><code>, </code>
<code> </code><code>"msg"</code><code>: </code><code>"os与bs连接出现故障"</code>
<code> </code><code>"redis"</code><code>: { </code>
<code> </code><code>} </code>
<code> </code><code>} </code>
<code> </code><code>"errmsg"</code><code>: { </code>
由于今晚就要更新包含这段代码的应用,有可能来不及修改,因此我只能重新修改一下先前写好的脚本,现将脚本展示如下:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<code>#!/bin/bash</code>
<code># shell script details</code>
<code># name: getdata_gwservice.sh</code>
<code># version: 1.0</code>
<code># visual name(human readable format): get data from web service(gwservice)</code>
<code># shell script function: get data from web service with curl, data format is json</code>
<code># author: guodong ding</code>
<code># date: thu aug 20 09:56:26 cst 2015</code>
<code># parameter is necessary</code>
<code>[ ! -z </code><code>"$1"</code> <code>] || </code><code>exit</code> <code>1</code>
<code># resolve "jq" command for parse json</code>
<code>if</code> <code>[[ ! `</code><code>which</code> <code>jq` ]]; </code><code>then</code>
<code> </code><code>echo</code> <code>"jq is not installed on target system, please install it first! "</code>
<code> </code><code># adaptive for centos or ubuntu</code>
<code> </code><code>apt-get -qq -y </code><code>install</code> <code>jq || yum -y </code><code>install</code> <code>jq</code>
<code> </code><code>[ $? -</code><code>ne</code> <code>0 ] && </code><code>echo</code> <code>"trying install jq failed! "</code><code>;</code><code>echo</code> <code>"trying install jq successfully! "</code>
<code> </code><code>echo</code> <code>"$(which jq) is found!"</code>
<code> </code><code>echo</code> <code>1</code>
<code>fi</code>
<code># refactoring curl cli</code>
<code>curl=$(</code><code>which</code> <code>curl)</code>
<code>postdata=</code><code>"accesscode=somecode&method=someapiname"</code>
<code># test environment</code>
<code>url=http:</code><code>//hostname/url/api</code>
<code># production environment</code>
<code>#url=http://hostname/url/api</code>
<code># todo</code>
<code># why not execute a string as command?</code>
<code># curlcli="$curl -d \"$postdata\" $url 2>/dev/null"</code>
<code># make repeated cli to a function</code>
<code>function</code> <code>curlcli() {</code>
<code> </code><code>$curl -m 10 --connect-timeout 10 -s -d </code><code>"$postdata"</code> <code>$url 2></code><code>/dev/null</code>
<code> </code><code># for test purpose</code>
<code> </code><code>#echo '{"errcode":"1","errmsg":{"mysql":{"code":"0","msg":"ok"},"memcache":{"code":"0","msg":"0"},"mq":{"code":"0","msg":"ok"},"bs":{"code":"1","errmsg":"os与bs连接出.故障"},"redis":{"code":"0","errmsg":"ok"}}}'</code>
<code> </code><code>[ $? -</code><code>ne</code> <code>0 ] && </code><code>exit</code> <code>$?</code>
<code># how to merge function totalstatus() and function total_error_status() into a function?</code>
<code>function</code> <code>totalstatus() {</code>
<code> </code><code># another awk expression is: awk '{print int($1)}'</code>
<code> </code><code>curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>
<code>function</code> <code>total_error_status() {</code>
<code> </code><code>outputswitch=`curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code><code>`</code>
<code> </code><code>if</code> <code>[[ $outputswitch -</code><code>eq</code> <code>1 ]]; </code><code>then</code>
<code> </code><code>curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code> <code>></code><code>/dev/null</code> <code>2>&1</code>
<code> </code><code>else</code>
<code> </code><code>curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>
<code> </code><code>fi</code>
<code> </code><code># todo</code>
<code> </code><code># why we need a return for this function ? because we will use "||" to determine result of cli</code>
<code> </code><code># by the way , "||" is depended on the result which returned with keyword "return"</code>
<code> </code><code># tested pass with return a numeric argument lager than 1</code>
<code> </code><code>return</code> <code>`curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code><code>`</code>
<code>function</code> <code>mysqlstatus() {</code>
<code> </code><code>curlcli | jq </code><code>".errmsg.mysql.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>
<code>function</code> <code>memcachedstatus() {</code>
<code> </code><code>curlcli | jq </code><code>".errmsg.memcache.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>
<code>function</code> <code>messagequeuestatus() {</code>
<code> </code><code>curlcli | jq </code><code>".errmsg.mq.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>
<code>function</code> <code>businessservicestatus() {</code>
<code> </code><code>curlcli | jq </code><code>".errmsg.bs.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>
<code>function</code> <code>redisstatus() {</code>
<code> </code><code>curlcli | jq </code><code>".errmsg.redis.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>
<code>case</code> <code>$1 </code><code>in</code>
<code> </code><code>totalstatus )</code>
<code> </code><code>totalstatus</code>
<code> </code><code>;;</code>
<code> </code><code>mysqlstatus )</code>
<code> </code><code>total_error_status || mysqlstatus</code>
<code> </code><code>memcachedstatus )</code>
<code> </code><code>total_error_status || memcachedstatus</code>
<code> </code><code>messagequeuestatus )</code>
<code> </code><code>total_error_status || messagequeuestatus</code>
<code> </code><code>businessservicestatus )</code>
<code> </code><code>total_error_status || businessservicestatus</code>
<code> </code><code>redisstatus )</code>
<code> </code><code>total_error_status || redisstatus</code>
<code>esac</code>
<code># shell script details:</code>
<code># version: 2.0</code>
<code># visual name(human readable format): get data from web service(gwservice) for zabbix monitoring</code>
<code> </code><code>#echo '{"errcode":"1","errmsg":{"mysql":{"code":"0","msg":"ok"},"memcatch":{"code":"0","msg":"0"},"mq":{"code":"0","msg":"ok"},"bs":{"code":"1","errmsg":"os与bs连接出.故障"},"redis":{"code":"0","errmsg":"ok"}}}'</code>
<code> </code><code># todo, toremember</code>
<code> </code><code># why we need a return for this function? because we will use "||" to determine result of cli, </code>
<code> </code><code># such as "totalstatus >/dev/null 2>&1 || mysqlstatus".</code>
<code> </code><code># by the way , "||" is depended on the result which returned with keyword "return", </code>
<code> </code><code># tested pass with return a numeric argument lager than 1 , such as 1001, 9003, etc</code>
<code> </code><code>mysqlstatus</code>
<code> </code><code>memcachedstatus</code>
<code> </code><code>messagequeuestatus</code>
<code> </code><code>businessservicestatus</code>
<code> </code><code>redisstatus</code>
<code> </code><code>* )</code>
<code> </code><code>exit</code> <code>1</code>
tag:linux命令行解析json,linux shell解析json,zabbix业务监控,zabbix自定义用户参数,zabbix api
--end--