原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://dgd2010.blog.51cto.com/1539422/1686475
1
2
3
4
|
{
"errcode"
:
"0"
,
"errmsg"
:
"ok"
}
|
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
|
{
"errcode"
:
"1"
,
"errmsg"
: {
"Mysql"
: {
"code"
:
"0"
,
"msg"
:
"OK"
},
"Memcache"
: {
"code"
:
"0"
,
"msg"
:
"0"
},
"MQ"
: {
"code"
:
"0"
,
"msg"
:
"OK"
},
"BS"
: {
"code"
:
"1"
,
"msg"
:
"os与bs连接出现故障"
},
"Redis"
: {
"code"
:
"0"
,
"msg"
:
"OK"
}
}
}
|
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
|
{
"errcode"
:
"0"
,
"errmsg"
: {
"Mysql"
: {
"code"
:
"0"
,
"msg"
:
"OK"
},
"Memcache"
: {
"code"
:
"0"
,
"msg"
:
"0"
},
"MQ"
: {
"code"
:
"0"
,
"msg"
:
"OK"
},
"BS"
: {
"code"
:
"0"
,
"msg"
:
"ok"
},
"Redis"
: {
"code"
:
"0"
,
"msg"
:
"OK"
}
}
}
|
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
|
{
"errcode"
:
"1"
,
"errmsg"
: {
"Mysql"
: {
"code"
:
"0"
,
"msg"
:
"OK"
},
"Memcache"
: {
"code"
:
"0"
,
"msg"
:
"0"
},
"MQ"
: {
"code"
:
"0"
,
"msg"
:
"OK"
},
"BS"
: {
"code"
:
"1"
,
"msg"
:
"os与bs连接出现故障"
},
"Redis"
: {
"code"
:
"0"
,
"msg"
:
"OK"
}
}
}
|
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
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
|
#!/bin/bash
# Shell Script Details
# Name: getdata_gwservice.sh
# Version: 1.0
# Visual Name(human readable format): get data from Web Service(GWService)
# Shell Script Function: get data from Web Service with curl, data format is json
# Author: Guodong Ding
# Date: Thu Aug 20 09:56:26 CST 2015
# parameter is necessary
[ ! -z
"$1"
] ||
exit
1
# resolve "jq" command for parse json
if
[[ ! `
which
jq` ]];
then
echo
"jq is not installed on target system, please install it first! "
# adaptive for CentOS or Ubuntu
apt-get -qq -y
install
jq || yum -y
install
jq
[ $? -
ne
0 ] &&
echo
"Trying install jq failed! "
;
echo
"Trying install jq successfully! "
echo
"$(which jq) is found!"
echo
1
fi
# refactoring curl CLI
curl=$(
which
curl)
postdata=
"accesscode=somecode&method=someapiname"
# test environment
url=http:
//hostname/url/api
# production environment
#url=http://hostname/url/api
# TODO
# why not execute a string as command?
# curlcli="$curl -d \"$postdata\" $url 2>/dev/null"
# make repeated cli to a function
function
curlcli() {
$curl -m 10 --connect-timeout 10 -s -d
"$postdata"
$url 2>
/dev/null
# For test purpose
#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"}}}'
[ $? -
ne
0 ] &&
exit
$?
}
# TODO
# How to merge function totalstatus() and function total_error_status() into a function?
function
totalstatus() {
# another awk expression is: awk '{print int($1)}'
curlcli | jq
".errcode"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
total_error_status() {
outputswitch=`curlcli | jq
".errcode"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
`
if
[[ $outputswitch -
eq
1 ]];
then
curlcli | jq
".errcode"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
>
/dev/null
2>&1
else
curlcli | jq
".errcode"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
fi
[ $? -
ne
0 ] &&
exit
$?
# TODO
# why we need a return for this function ? because we will use "||" to determine result of CLI
# by the way , "||" is depended on the result which returned with keyword "return"
# tested pass with return a numeric argument lager than 1
return
`curlcli | jq
".errcode"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
`
}
function
mysqlstatus() {
curlcli | jq
".errmsg.Mysql.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
memcachedstatus() {
curlcli | jq
".errmsg.Memcache.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
messagequeuestatus() {
curlcli | jq
".errmsg.MQ.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
businessservicestatus() {
curlcli | jq
".errmsg.BS.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
redisstatus() {
curlcli | jq
".errmsg.Redis.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
case
$1
in
totalstatus )
totalstatus
;;
mysqlstatus )
total_error_status || mysqlstatus
;;
memcachedstatus )
total_error_status || memcachedstatus
;;
messagequeuestatus )
total_error_status || messagequeuestatus
;;
businessservicestatus )
total_error_status || businessservicestatus
;;
redisstatus )
total_error_status || redisstatus
;;
esac
|
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
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
|
#!/bin/bash
# Shell Script Details:
# Name: getdata_gwservice.sh
# Version: 2.0
# Visual Name(human readable format): get data from Web Service(GWService) for Zabbix monitoring
# Shell Script Function: get data from Web Service with curl, data format is json
# Author: Guodong Ding
# Date: Thu Aug 20 09:56:26 CST 2015
# parameter is necessary
[ ! -z
"$1"
] ||
exit
1
# resolve "jq" command for parse json
if
[[ ! `
which
jq` ]];
then
echo
"jq is not installed on target system, please install it first! "
# adaptive for CentOS or Ubuntu
apt-get -qq -y
install
jq || yum -y
install
jq
[ $? -
ne
0 ] &&
echo
"Trying install jq failed! "
;
echo
"Trying install jq successfully! "
echo
"$(which jq) is found!"
echo
1
fi
# refactoring curl CLI
curl=$(
which
curl)
postdata=
"accesscode=somecode&method=someapiname"
# test environment
url=http:
//hostname/url/api
# production environment
#url=http://hostname/url/api
# TODO
# why not execute a string as command?
# curlcli="$curl -d \"$postdata\" $url 2>/dev/null"
# make repeated cli to a function
function
curlcli() {
$curl -m 10 --connect-timeout 10 -s -d
"$postdata"
$url 2>
/dev/null
# For test purpose
#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"}}}'
[ $? -
ne
0 ] &&
exit
$?
}
function
totalstatus() {
# another awk expression is: awk '{print int($1)}'
curlcli | jq
".errcode"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
# TODO, TOREMEMBER
# Why we need a return for this function? because we will use "||" to determine result of CLI,
# such as "totalstatus >/dev/null 2>&1 || mysqlstatus".
# By the way , "||" is depended on the result which returned with keyword "return",
# tested pass with return a numeric argument lager than 1 , such as 1001, 9003, etc
return
`curlcli | jq
".errcode"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
`
}
function
mysqlstatus() {
curlcli | jq
".errmsg.Mysql.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
memcachedstatus() {
curlcli | jq
".errmsg.Memcache.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
messagequeuestatus() {
curlcli | jq
".errmsg.MQ.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
businessservicestatus() {
curlcli | jq
".errmsg.BS.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
function
redisstatus() {
curlcli | jq
".errmsg.Redis.code"
|
awk
-F
'"'
'/[0-9]/ {print $2}'
[ $? -
ne
0 ] &&
exit
$?
}
case
$1
in
totalstatus )
totalstatus
;;
mysqlstatus )
mysqlstatus
;;
memcachedstatus )
memcachedstatus
;;
messagequeuestatus )
messagequeuestatus
;;
businessservicestatus )
businessservicestatus
;;
redisstatus )
redisstatus
;;
* )
exit
1
;;
esac
|