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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
#coding=utf-8
import re
import argparse
import sys
import syslog
import random
path.append(r'../py_common') #将存放module的路径添加进来
path.append(r'./py_common') #将存放module的路径添加进来
from common_diagnose import *
#前台执行的diagnose cli命令, 不写syslog日志
#后台自动监测脚本, 写syslog, 也就是APP FM的功能
#写日志仅限于app相关, cpu,mem是snmp模块负责的
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */
MSG_PREFIX = ['EMERG', 'ALERT', 'CRIT', 'ERR', 'WARNING', 'NOTICE', 'INFO', 'DEBUG']
G_SYSLOG_EVENT_SRC = "CLI"
G_DIAGNOSE_NAME = "tsg_diagnose"
G_DIAGNOSE_VERSION = "1.0.6 20190827"
def tsg_diagnose_for_app():
app_msg = ['app is not running', 'app is not running', 'app is not running', 'app maybe deadlock', 'app is reboot in 5 minute']
app_msg.append('app is running normally')
app_msg.append('app is running normally')
app_msg.append('app is running normally')
num = random.randint(1,7)
if num <= 4:
msg = "[%s] %s" %(MSG_PREFIX[num], app_msg[num])
syslog.syslog(num, msg)
print(msg)
return num
def tsg_diagnose_for_cpu():
cpu_msg = []
cpu_msg.append('CPU usage over 95%')
cpu_msg.append('CPU usage over 90%')
cpu_msg.append('CPU usage over 85%')
cpu_msg.append('CPU usage over 80%')
cpu_msg.append('CPU usage over 70%')
num = random.randint(1,7)
if num <= 4:
msg = "[%s] %s" %(MSG_PREFIX[num], cpu_msg[num])
syslog.syslog(num, msg)
print(msg)
return num
def tsg_diagnose_for_mem():
mem_msg = []
mem_msg.append('free memory less than 1%')
mem_msg.append('free memory less than 5%')
mem_msg.append('free memory less than 10%')
mem_msg.append('free memory less than 15%')
mem_msg.append('free memory less than 20%')
num = random.randint(1,7)
if num <= 4:
msg = "[%s] %s" %(MSG_PREFIX[num], mem_msg[num])
syslog.syslog(num, msg)
print(msg)
return num
def tsg_diagnose_for_disk():
disk_msg = []
disk_msg.append('disk usage over 99%')
disk_msg.append('disk usage over 95%')
disk_msg.append('disk usage over 90%')
disk_msg.append('disk usage over 85%')
disk_msg.append('disk usage over 80%')
num = random.randint(1,7)
if num <= 4:
msg = "[%s] %s" %(MSG_PREFIX[num], disk_msg[num])
syslog.syslog(num, msg)
print(msg)
return num
def tsg_diagnose_for_network():
return 7
def tsg_diagnose():
log_handle = syslog.openlog("TSG-MXN")
diagnose_level = syslog.LOG_DEBUG
#check app, not running, dead-lock
check_ret = tsg_diagnose_for_app()
if check_ret < diagnose_level:
diagnose_level = check_ret
#error, critical return immediately
if diagnose_level <= syslog.LOG_WARNING:
return diagnose_level
#check app, drop packet, traffic bps
check_ret = tsg_diagnose_for_network()
if check_ret < diagnose_level:
diagnose_level = check_ret
#error, critical return immediately
if diagnose_level <= syslog.LOG_WARNING:
return diagnose_level
#check cpu, more than 80%, 90%, 95%
check_ret = tsg_diagnose_for_cpu()
if check_ret < diagnose_level:
diagnose_level = check_ret
#error, critical return immediately
if diagnose_level <= syslog.LOG_WARNING:
return diagnose_level
#check mem, free memory less than 10%
check_ret = tsg_diagnose_for_mem()
if check_ret < diagnose_level:
diagnose_level = check_ret
#error, critical return immediately
if diagnose_level <= syslog.LOG_WARNING:
return diagnose_level
#check disk, free disk space less than 5%
check_ret = tsg_diagnose_for_mem()
if check_ret < diagnose_level:
diagnose_level = check_ret
#error, critical return immediately
if diagnose_level <= syslog.LOG_WARNING:
return diagnose_level
#if not error, output success
syslog.syslog(syslog.LOG_DEBUG, "TSG diagnose completed, all modules are running normally!")
print ("TSG diagnose completed, all modules are running normally!")
return 0
def setup_cmd_args():
parser = argparse.ArgumentParser(description='TSG OAM Argument Parser')
parser.add_argument('-v', '--version', help = 'Print version information',
action='store_true', default = 0)
return parser
if __name__ == '__main__':
comm_arg_parser = setup_cmd_args()
arg_options = comm_arg_parser.parse_args()
if arg_options.version != 0:
print("%s version: %s" %(G_DIAGNOSE_NAME, G_DIAGNOSE_VERSION))
sys.exit(0)
fun_res_code = tsg_diagnose()
sys.exit(fun_res_code)
|