zserverpiclass.py
import json
import pymysql
import requests
import pandas as pd
from jinja2 import Environment, FileSystemLoader
from sqlalchemy import create_engine
def schtml(cdate, zdatah, zjdata, rp):
env = Environment(loader=FileSystemLoader('/data/zz/zscript/serverpi/'))
template = env.get_template('zserverpitemp.html')
with open('/data/zz/zscript/serverpi/zserverpireport/%s' % rp, 'w+') as fout:
html_content = template.render(cdate=cdate,
zdatah=zdatah,
zjdata=zjdata)
fout.write(html_content)
print("服务器巡检报告已生成"+cdate)
def post_file(file, wx_url, id_url):
data = {'file': open(file, 'rb')}
response = requests.post(url=id_url, files=data)
print(response.text)
json_res = response.json()
media_id = json_res['media_id']
data = {"msgtype": "file",
"file": {"media_id": media_id}
}
result = requests.post(url=wx_url, json=data)
return (result)
def send_message(message, person_list, wx_url):
data = {
"msgtype": "text",
"text": {
"content": message,
"mentioned_list": person_list
}
}
r = requests.post(url=wx_url,
json=data)
def rmysql(v_sql):
db = pymysql.connect(host='10.12.8.120', user='root', password='root@mnxxxx', database='zapp', autocommit=True)
cursor = db.cursor()
cursor.execute(v_sql)
result = cursor.fetchall()
column = [index[0] for index in cursor.description]
data = pd.DataFrame([list(i) for i in result], columns=column)
db.close()
return data
def wmysql(v_sql):
db = pymysql.connect(host='10.12.8.120', user='root', password='root@mn8120', database='zapp', autocommit=True)
cursor = db.cursor()
cursor.execute(v_sql)
db.close()
def rtdf(value,cname):
listz = []
for i in range(len(value)):
tt = value[i]['metric']
tt.update({'checktime': value[i]['value'][0]})
tt.update({cname: value[i]['value'][1]})
listz.append(tt)
return pd.json_normalize(listz)
class pm:
def __init__(self, serveraddr):
self.serveraddr = serveraddr
self.hh = 'http://' + self.serveraddr + ':7746' + '/api/v1/query?query='
self.engine = create_engine('mysql+mysqlconnector://root:root%40mnxxxx@10.12.8.120:3306/zapp')
self.getHost()
self.getCpu()
self.getMemory()
self.getDisk()
def getHost(self):
wmysql(v_sql='''truncate table tm_host;''')
hsql = 'system_uptime'
url = self.hh + hsql
response = requests.request('get', url)
if response.status_code == 200:
hdf=rtdf(value=response.json()['data']['result'],cname='uptime')
hdf[['ident','uptime','checktime']].to_sql('tm_host', con=self.engine, index=False, if_exists='append')
wmysql(v_sql='''INSERT into tb_zhost (hostip,hostname,os,server,service,uptime,checktime)
SELECT SUBSTRING_INDEX(a.ident,'-',-1),
IF(left(a.ident,LENGTH(a.ident)-1-LENGTH(SUBSTRING_INDEX(a.ident,'-',-1)))='',a.ident,left(a.ident,LENGTH(a.ident)-1-LENGTH(SUBSTRING_INDEX(a.ident,'-',-1)))),
t.os,ifnull(bg.name,'/'),ifnull(t.note,'/'),concat(FORMAT(uptime/3600/24,2),'天') ,
CAST(from_unixtime( a.checktime,'%Y-%m-%d') as char) as checktime from tm_host a
inner join n9e_v6.target t on a.ident =t.ident
left join n9e_v6.target_busi_group tb on t.ident =tb.target_ident
LEFT join n9e_v6.busi_group bg on tb.group_id =bg.id
WHERE not exists
(SELECT 1 from tb_zhost b where CAST(from_unixtime(a.checktime,'%Y-%m-%d')as char) = CAST(b.checktime as char )and SUBSTRING_INDEX(a.ident,'-',-1) =b.hostip );''')
def getCpu(self):
wmysql(v_sql='''truncate table tm_cpu;''')
csql = 'avg_over_time (cpu_usage_active [1d])'
url = self.hh + csql
response = requests.request('GET', url)
if response.status_code == 200:
cdf = rtdf(value=response.json()['data']['result'], cname='cpuuse')
cdf[['ident','cpuuse','checktime']].to_sql('tm_cpu', con=self.engine, index=False, if_exists='append')
wmysql(v_sql='''INSERT into tb_zcpu(hostip,cpuuse,checktime)
select SUBSTRING_INDEX(ident,'-',-1),
CONCAT(FORMAT(a.cpuuse,2),'%') as cpuuse,
CAST(from_unixtime( a.checktime,'%Y-%m-%d') as char) as checktime from tm_cpu a
WHERE not exists
(SELECT 1 from tb_zcpu b where CAST(from_unixtime(a.checktime,'%Y-%m-%d')as char) = cast(b.checktime as char )and SUBSTRING_INDEX(ident,'-',-1) =b.hostip );''')
def getMemory(self):
wmysql(v_sql='''truncate table tm_mem;''')
musql = 'avg_over_time (mem_used [1d])'
mtsql = 'mem_total'
muurl = self.hh+musql
mturl = self.hh+mtsql
response = requests.request('get', muurl)
if response.status_code == 200:
mudf = rtdf(value=response.json()['data']['result'], cname='memuse')
response = requests.request('get', mturl)
if response.status_code == 200:
mtdf = rtdf(value=response.json()['data']['result'], cname='memtotal')
mdf=pd.merge(mudf,mtdf, on='ident',how='inner')[['ident','memuse','memtotal','checktime_x']]
mdf.to_sql('tm_mem', con=self.engine, index=False, if_exists='append')
wmysql(v_sql='''INSERT into tb_zmem(hostip,memuse,memtotal,useratio,checktime)
select SUBSTRING_INDEX(ident,'-',-1),
concat(FORMAT(memuse/1073741824,2),'G') as memuse,
concat(FORMAT(memtotal/1073741824,2),'G') as memtotal,
concat(FORMAT(memuse/memtotal *100,2),'%' ) as useratio,
CAST(from_unixtime( a.checktime_x,'%Y-%m-%d') as char) as checktime from tm_mem a
WHERE not exists
(SELECT 1 from tb_zmem b where CAST(from_unixtime(a.checktime_x,'%Y-%m-%d')as char) = cast(b.checktime as char ) and SUBSTRING_INDEX(ident,'-',-1) =b.hostip );''')
def getDisk(self):
wmysql(v_sql='''truncate table tm_disk;''')
dtsql = 'disk_total'
dusql = 'disk_used'
dturl = self.hh+dtsql
duurl = self.hh+dusql
response = requests.request('get', dturl)
if response.status_code == 200:
dtdf = rtdf(value=response.json()['data']['result'], cname='disktotal')
response = requests.request('get', duurl)
if response.status_code == 200:
dudf = rtdf(value=response.json()['data']['result'], cname='diskuse')
ddf=pd.merge(dtdf,dudf, on=['ident','device','fstype','mode','path'],how='inner')[['ident','device','fstype','mode','path','diskuse','disktotal','checktime_x']]
ddf.to_sql('tm_disk', con=self.engine, index=False, if_exists='append')
wmysql('''INSERT into tb_zdisk(hostip,device,fstype,diskuse,disktotal,diskavail,useratio,mode,path,checktime)
select SUBSTRING_INDEX(ident,'-',-1),
a.device,
a.fstype,
concat(FORMAT(a.diskuse/1073741824,2),'G') as diskuse,
concat(FORMAT(a.disktotal/1073741824,2),'G') as disktotal,
concat(FORMAT((a.disktotal-a.diskuse)/1073741824,2),'G') as diskavail,
concat(FORMAT(a.diskuse/a.disktotal *100,2),'%' ) as useratio,
a.mode,
a.path,
CAST(from_unixtime( a.checktime_x,'%Y-%m-%d') as char) as checktime from tm_disk a
WHERE not exists
(SELECT 1 from tb_zdisk b where CAST(from_unixtime(a.checktime_x,'%Y-%m-%d')as char) = cast(b.checktime as char ) and SUBSTRING_INDEX(ident,'-',-1) =b.hostip and a.device=b.device );''')
zserverpimain.py
import zserverpiclass as z
from datetime import datetime
pm = z.pm(serveraddr='10.12.8.120')
datah=z.rmysql(v_sql='''
select hostip,hostname,os,`server`,service,uptime,
getha(hostip,NULL) as alarm,
checktime
from tb_zhost where checktime =CURDATE();
''')
datac=z.rmysql(v_sql='''
select hostip,cpuuse as cpuuse,checktime ,
if(replace(cpuuse,'%','')>80,1,0) as alarm
from tb_zcpu where checktime =CURDATE();
''')
datam=z.rmysql(v_sql='''
select hostip,memtotal,memuse,
useratio,checktime ,
IF(replace(useratio,'%','')>90,1,0) as alarm
from tb_zmem where checktime =CURDATE();
''')
datad = z.rmysql(v_sql='''
select hostip,device,fstype,diskuse,
disktotal,diskavail,useratio,mode,path,checktime ,
if(replace(useratio,'%','')>90,1,0) as alarm
from tb_zdisk where checktime =CURDATE();
''')
zjdata = []
for i in datam.to_dict('records'):
icdatc = datac[(datac['hostip'] == i['hostip'])].to_dict('records')
iddata = datad[(datad['hostip'] == i['hostip'])].to_dict('records')
idata = {'cpu': icdatc[0], 'mem': i, 'disk': iddata}
zjdata.append(idata)
zdatah = datah.to_dict('records')
cdate = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
rp = 'serverpireport' + cdate.replace(' ', '').replace(':', '') + '.html'
z.schtml(zdatah=zdatah, zjdata=zjdata, cdate=cdate, rp=rp)
zserverpitemp.html
<html>
<head>
<title>服务器巡检报告 -- {{ cdate }}</title>
<style type='text/css'>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
font-size: 14px;
line-height: 1.6;
color: #333;
background-color: #f5f7fa;
padding: 20px;
}
.container {
width: 100%;
max-width: 1200px;
margin: 0 auto;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
padding: 30px;
}
h2 {
text-align: center;
color: #2c3e50;
margin-bottom: 30px;
padding-bottom: 15px;
border-bottom: 2px solid #23a85b;
}
.index-table {
margin-bottom: 40px;
}
table {
width: 100%;
border-collapse: collapse;
margin: 15px 0;
border-radius: 6px;
overflow: hidden;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
th, td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid #e0e0e0;
}
th {
background-color: #34db6c;
color: white;
font-weight: 600;
}
tr:last-child td {
border-bottom: none;
}
tr:hover td {
background-color: #f9f9f9;
}
.section-title {
color: #2c3e50;
margin: 30px 0 15px;
padding-left: 10px;
border-left: 4px solid #34db7a;
}
.node-section {
margin-bottom: 40px;
padding-bottom: 20px;
border-bottom: 1px dashed #e0e0e0;
}
.node-section:last-child {
border-bottom: none;
}
.back-to-top {
display: inline-block;
color: #3498db;
text-decoration: none;
font-weight: 500;
padding: 5px 10px;
border: 1px solid #3498db;
border-radius: 4px;
float: right;
transition: all 0.3s ease;
}
.back-to-top:hover {
background-color: #3498db;
color: white;
}
.status-warning {
background-color: #fdecea;
color: #e74c3c;
font-weight: 600;
text-align: center;
}
.status-normal {
background-color: #eafaf1;
color: #27ae60;
font-weight: 600;
text-align: center;
}
.category-header {
background-color: #2c3e50;
color: white;
font-weight: 600;
}
a {
color: #3498db;
text-decoration: none;
}
a:hover {
color: #2980b9;
text-decoration: underline;
}
.index-link {
font-weight: 500;
}
.disk-table th,
.mem-table th,
.cpu-table th {
background-color: #2980b9;
}
</style>
</head>
<body>
<div class="container">
<a name='index' />
<h2>服务器巡检报告 -- {{ cdate }}</h2>
<table class="index-table">
<thead>
<tr>
<th style='width: 100px;'>节点IP</th>
<th>主机名</th>
<th>操作系统</th>
<th>所属项目</th>
<th>服务</th>
<th>运行时间</th>
<th>告警</th>
<th>检查时间</th>
</tr>
</thead>
{% for ihc in zdatah %}
<tr>
<td><a href='#{{ ihc["hostip"] }}' class="index-link">{{ ihc["hostip"] }}</a></td>
<td>{{ ihc["hostname"] }}</td>
<td>{{ ihc["os"] }}</td>
<td>{{ ihc["server"] }}</td>
<td>{{ ihc["service"] }}</td>
<td>{{ ihc["uptime"] }}</td>
{% if ihc["alarm"] == 1 %}
<td class="status-warning">Warning</td>
{% else %}
<td class="status-normal">Normal</td>
{% endif %}
<td>{{ ihc["checktime"] }}</td>
</tr>
{% endfor %}
</table>
{% for ic in zjdata %}
<div class="node-section">
<a name='{{ ic["cpu"]["hostip"] }}' />
<div>
<a href='#index' class="back-to-top">返回目录</a>
<h3 class="section-title">节点IP: {{ ic["cpu"]["hostip"] }}</h3>
</div>
<table class="cpu-table">
<thead>
<tr>
<th class="category-header" colspan="3">CPU信息</th>
</tr>
<tr>
<th style='width: 100px;'>节点IP</th>
<th>CPU使用率</th>
<th>检查时间</th>
</tr>
</thead>
<tr>
<td style='text-align: center;'>{{ ic["cpu"]["hostip"] }}</td>
{% if ic["cpu"]["alarm"] == 1 %}
<td class="status-warning">{{ ic["cpu"]["cpuuse"] }}</td>
{% else %}
<td class="status-normal">{{ ic["cpu"]["cpuuse"] }}</td>
{% endif %}
<td>{{ ic["cpu"]["checktime"] }}</td>
</tr>
</table>
<table class="mem-table">
<thead>
<tr>
<th class="category-header" colspan="5">内存信息</th>
</tr>
<tr>
<th style='width: 100px;'>节点IP</th>
<th>总量</th>
<th>已用</th>
<th>使用率</th>
<th>检查时间</th>
</tr>
</thead>
<tr>
<td style='text-align: center;'>{{ ic["mem"]["hostip"] }}</td>
<td>{{ ic["mem"]["memtotal"] }}</td>
<td>{{ ic["mem"]["memuse"] }}</td>
{% if ic["mem"]["alarm"] == 1 %}
<td class="status-warning">{{ ic["mem"]["useratio"] }}</td>
{% else %}
<td class="status-normal">{{ ic["mem"]["useratio"] }}</td>
{% endif %}
<td>{{ ic["mem"]["checktime"] }}</td>
</tr>
</table>
<table class="disk-table">
<thead>
<tr>
<th class="category-header" colspan="10">磁盘信息</th>
</tr>
<tr>
<th style='width: 100px;'>节点IP</th>
<th>文件系统</th>
<th>类型</th>
<th>总量</th>
<th>已用</th>
<th>可用</th>
<th>使用率</th>
<th>模式</th>
<th>路径</th>
<th>检查时间</th>
</tr>
</thead>
{% for icd in ic["disk"] %}
<tr>
<td style='text-align: center;'>{{ icd["hostip"] }}</td>
<td>{{ icd["device"] }}</td>
<td>{{ icd["fstype"] }}</td>
<td>{{ icd["disktotal"] }}</td>
<td>{{ icd["diskuse"] }}</td>
<td>{{ icd["diskavail"] }}</td>
{% if icd["alarm"] == 1 %}
<td class="status-warning">{{ icd["useratio"] }}</td>
{% else %}
<td class="status-normal">{{ icd["useratio"] }}</td>
{% endif %}
<td>{{ icd["mode"] }}</td>
<td>{{ icd["path"] }}</td>
<td>{{ icd["checktime"] }}</td>
</tr>
{% endfor %}
</table>
</div>
{% endfor %}
</div>
</body>
</html>
zapp db相关表及函数
CREATE TABLE `tb_zcpu` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键自增',
`hostip` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '主机ip',
`cpuuse` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '使用率',
`checktime` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '检查时间',
`inserttime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '写入时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=746 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='cpu信息';
CREATE TABLE `tb_zdisk` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键自增',
`hostip` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '主机ip',
`device` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '文件系统',
`fstype` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '文件系统类型',
`diskuse` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '总量',
`disktotal` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '已用',
`diskavail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '可用',
`useratio` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '已用百分比',
`mode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '模式',
`path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '路径',
`checktime` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '检查时间',
`inserttime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '写入时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2922 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='磁盘信息';
CREATE TABLE `tb_zhost` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键Id',
`hostip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '主机ip',
`hostname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '主机名',
`os` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作系统',
`server` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '所属项目',
`service` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '运行服务',
`uptime` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '运行时间',
`checktime` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '检查时间',
`inserttime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '数据写入时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=714 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='主机信息';
CREATE TABLE `tb_zmem` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键自增',
`hostip` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '主机ip',
`memuse` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '已用',
`memtotal` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '总量',
`useratio` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '已用百分比',
`checktime` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '检查时间',
`inserttime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '写入时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=714 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='内存信息';
CREATE TABLE `tm_cpu` (
`ident` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`cpuuse` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`checktime` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `tm_disk` (
`ident` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`device` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`fstype` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`mode` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`diskuse` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`disktotal` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`checktime_x` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `tm_host` (
`ident` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`os` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`server` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`service` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`uptime` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`checktime` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `tm_mem` (
`ident` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`memuse` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`memtotal` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`checktime_x` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE DEFINER=`root`@`%` FUNCTION `zapp`.`getalarm`(inhostip VARCHAR(100),indate date) RETURNS tinyint
BEGIN
DECLARE outalarm TINYINT;
IF indate is NULL THEN
set indate =CURRENT_DATE() ;
end if;
WITH za as (
select
if(FORMAT(cpuuse,2)>80,1,0) as alarm
from tb_targetc where DATE_FORMAT(inserttime,'%Y-%m-%d') =indate
and hostip =inhostip
UNION all
select
IF(FORMAT((memTotal-(buffers+cached+memFree))/memTotal *100,2)>80,1,0) as alarm
from tb_targetm where DATE_FORMAT(inserttime,'%Y-%m-%d') =indate
and hostip =inhostip
UNION all
select
if(FORMAT(useratio*100,2)>80,1,0) as alarm
from tb_targetd where DATE_FORMAT(inserttime,'%Y-%m-%d') =indate
and hostip =inhostip
)
select if(sum(alarm) >0,1,0) into outalarm from za
;
RETURN outalarm;
END;
CREATE DEFINER=`root`@`%` FUNCTION `zapp`.`getha`(inhostip VARCHAR(100),indate date) RETURNS tinyint
BEGIN
DECLARE outalarm TINYINT;
IF indate is NULL THEN
set indate =CURRENT_DATE() ;
end if;
WITH za as (
select
if(replace(cpuuse,'%','')>80,1,0) as alarm
from tb_zcpu where checktime =indate
and hostip =inhostip
UNION all
select
IF(replace(useratio,'%','')>90,1,0) as alarm
from tb_zmem where checktime =indate
and hostip =inhostip
UNION all
select
if(replace(useratio,'%','')>90,1,0) as alarm
from tb_zdisk where checktime =indate
and hostip =inhostip
)
select if(sum(alarm) >0,1,0) into outalarm from za
;
RETURN outalarm;
END;