# encoding:UTF-8
import xlsxwriter
import datetime
import pymysql
import numpy as np
import pandas __author__ = 'sanjing'
__data__ = '2019/06/14' averagesql = """
select from_unixtime(clock,'%Y-%m-%d') as time,
count(DISTINCT eventid) as id
from alerts
WHERE mediatypeid = 5
AND message LIKE '%告警等级: Average%'
AND SUBJECT LIKE '%PROBLEM%'
AND clock BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY)) AND UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))
group by time
order by time asc """ highsql = """
select from_unixtime(clock,'%Y-%m-%d') as time,
count(DISTINCT eventid) as id
from alerts
WHERE mediatypeid = 5
AND message LIKE '%告警等级: High%'
AND SUBJECT LIKE '%PROBLEM%'
AND clock BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY)) AND UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))
group by time
order by time asc
""" warningsql = """
select from_unixtime(clock,'%Y-%m-%d') as time,
count(DISTINCT eventid) as id
from alerts
WHERE mediatypeid = 5
AND message LIKE '%告警等级: Warning%'
AND SUBJECT LIKE '%PROBLEM%'
AND clock BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY)) AND UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))
group by time
order by time asc
""" informationsql = """
select from_unixtime(clock,'%Y-%m-%d') as time,
count(DISTINCT eventid) as id
from alerts
WHERE mediatypeid = 5
AND message LIKE '%告警等级: Information%'
AND SUBJECT LIKE '%PROBLEM%'
AND clock BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY)) AND UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))
group by time
order by time asc
""" disastersql = """
select from_unixtime(clock,'%Y-%m-%d') as time,
count(DISTINCT eventid) as id
from alerts
WHERE mediatypeid = 5
AND message LIKE '%告警等级: Diasater%'
AND SUBJECT LIKE '%PROBLEM%'
AND clock BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY)) AND UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))
group by time
order by time asc
""" #连接MySQL数据库
def get_count(sql):
conn=pymysql.connect("xx.xx.xx.xx", "readonly", "xxxx", "zabbix", charset='utf8')
cursor = conn.cursor()
cursor.execute(sql)
count = cursor.fetchall()
# 将rows转化为数组
rows = np.array(count)
conn.close()
return count def coloum(data, weekendtime):
#创建一个excel文件
workbook = xlsxwriter.Workbook(weekendtime +".xlsx")
#创建一个工作表,默认sheet1
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': 1})
#表头 title = ['告警级别', '星期一','星期二','星期三','星期四','星期五','星期六','星期日']
#列名
buname = ['information', 'warning','average', 'high', 'disaster']
# 定义数据formatter格式对象,设置边框加粗1像素
formatter = workbook.add_format()
formatter.set_border(1)
#定义格式:# 定义标题栏格式对象:边框加粗1像素,背景色为灰色,单元格内容居中、加粗
title_formatter = workbook.add_format()
title_formatter.set_border(1)
title_formatter.set_bg_color('#cccccc')
title_formatter.set_align('center')
title_formatter.set_bold()
chart_col = workbook.add_chart({'type': 'column'})
def chart_series(row):
chart_col.add_series(
{
'categories': '=Sheet1!$B$1:$H$1',
'values': '=Sheet1!$B${}:$H${}'.format(row, row),
'line': {'color': 'black'},
# 'name': '=Sheet1!$A${}'.format(row)
'name': '=Sheet1!$A$' + row
}
)
# 下面分别以行和列的方式将标题栏、业务名称、流量数据写入单元格,并引用不同的格式对象
worksheet.write_row('A1',title,title_formatter)
worksheet.write_column('A2',buname,formatter)
for i in range (2,7):
worksheet.write_row('B{}'.format(i),data[i-2],formatter)
print (i)
chart_series(str(i)) # 设置图表的title 和 x,y轴信息
chart_col.set_title({'name': '告警统计/周'})
chart_col.set_x_axis({'name': '告警级别'})
chart_col.set_y_axis({'name': '告警次数'})
# 设置图表的风格
# chart_col.set_style(37) # 把图表插入到worksheet以及偏移
worksheet.insert_chart('A10', chart_col, {'x_offset': 25, 'y_offset': 10})
workbook.close()
#判断二维元组是否为空,长度是否满足要求,不满足则补0.
#输入为一个字典,判断是否为空,空则添加数据
def covertdata(jsondata,weektime): listkey = list(jsondata.keys())
for i in weektime:
j = i.strftime("%Y-%m-%d")
if listkey:
if j not in listkey:
jsondata[j] = ""
else:
jsondata[j] = ""
# print (jsondata)
#按照时间对字典进行排序
sort = sorted(jsondata.items(), key=lambda d: d[0])
#将第二列取出来并转为列表
array = np.array(sort)
array2 = array[:, 1]
list2 = array2.tolist()
list3 = list(map(lambda x: float(x), list2))
return list3
# print (list2) if __name__ == '__main__':
yesterday = (datetime.date.today() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
weeklist = pandas.date_range(end=yesterday, periods=7)
informationdata = get_count(informationsql)
informationlist = covertdata(dict(informationdata),weeklist)
warningdata = get_count(warningsql)
warninglist = covertdata(dict(warningdata),weeklist)
averagedata = get_count(averagesql)
averagelist = covertdata(dict(averagedata),weeklist)
highdata = get_count(highsql)
highlist = covertdata(dict(highdata),weeklist)
disasterdata = get_count(disastersql)
disasterlist = covertdata(dict(disasterdata),weeklist)
# print (informationlist)
# print (warninglist)
# print (averagelist)
# print (highlist)
# print (disasterlist)
data1 = [informationlist, warninglist, averagelist, highlist, disasterlist]
coloum(data1,yesterday)

结果如图:

zabbix获取一周内各个等级告警的次数的更多相关文章

  1. iOS:获取一周7天的日期(年-月-日-星期)

    一.介绍 在开发中,日期的使用绝对是离不了的,跟业务的关联性太强了,例如课程表.有的时候我们不需要课程表,但是需要获取一周7天的日期,这一周内的日期,我觉得有两种理解: 1.获取当天开始的一周日期,当 ...

  2. Servlet 利用Cookie实现一周内不重复登录

    import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import ...

  3. [Java] 获取本月周次和日期时间段信息

    package com.wdcloud.monitoring.common; import java.text.SimpleDateFormat; import java.util.ArrayList ...

  4. Android JAVA如何判断两天在同一周内

    /** * <pre> * 判断date和当前日期是否在同一周内 * 注: * Calendar类提供了一个获取日期在所属年份中是第几周的方法,对于上一年末的某一天 * 和新年初的某一天在 ...

  5. JavaWeb 08_JSP+Dao+Bean+Servlet 实现登录注册(连接数据库,验证码登录,两周内免登陆等功能)

    一.数据库db_01   表usert   字段username,password 二. 目录 三. 配置信息 四. 代码 index.jsp <script type="text/j ...

  6. Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录

    Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...

  7. js 获取每月有几周,根据年月周获取该周从周一到周日的日期等方法

    本文基于react-native 本人在用react-native写一个关于课程表的APP时需要课程表按照日期周期显示,网上查了许多方法,都没有达到自己想要的效果,根据一些方法的参考,再根据自己思维写 ...

  8. PHP获取一周的日期

    /** * 获取一周日期 * @param $time 时间戳 * @param $format 转换格式 */ function get_week($time, $format = "Y- ...

  9. oracle 根据一个时间段获取这个时间段内所有月份、天数、日期

    注:本文来源于< oracle 根据一个时间段获取这个时间段内所有月份.天数.日期 > 获取月份列表: SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2014-10 ...

随机推荐

  1. 【跟唐老师学习云网络】 - 第7篇 Tcpdump大杀器抓包

    [摘要] 前面章节的网络协议栈相关的信息建议大家多学习一遍,因为这些都是最基础的东西,想玩好云网络必备基本功.. 一.上帝视角 之前提到过定位问题可以开启上帝视角,那么如何开启就要依靠tcpdump这 ...

  2. 什么是渐进式框架 (vue.js)

    渐进式意味着你可以将 vue 作为你项目的一部分嵌入其中,带来更丰富的交互体验

  3. NRF52833蓝牙5.1可用于105℃环境温度的Nordic蓝牙5.1 SoC能实现更广泛的并发多协议低功耗蓝牙、mesh和Thread应用

    Nordic Semiconductor宣布推出nRF52833先进多协议系统级芯片(SoC),这是其广受欢迎且验证通过的nRF52系列的第五个新成员.nRF52833是一款功耗超低的低功耗蓝牙 (B ...

  4. C#语言和SQL Server数据库技术_My Bank银行系统

    第一个类: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...

  5. Atoder-3620

    The season for Snuke Festival has come again this year. First of all, Ringo will perform a ritual to ...

  6. Selenium 4.0 Alpha更新日志

    早在2018年8月,整个测试自动化社区就发生了一件重大新闻:Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重要更新. ...

  7. 【Python3网络爬虫开发实战】 分析Ajax爬取今日头条街拍美图

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:haoxuan10 本节中,我们以今日头条为例来尝试通过分析Ajax请求 ...

  8. PyCharm设置Python版本,你肯定不知道!

      前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:智小星    PyCharm默认会使用虚拟的Python解释器,即使 ...

  9. gtest、cmake使用

    gtest github: https://github.com/google/googletest 学习:玩转Google开源C++单元测试框架Google Test系列(gtest)(总) 一.安 ...

  10. springboot中实现kafa指定offset消费

    kafka消费过程难免会遇到需要重新消费的场景,例如我们消费到kafka数据之后需要进行存库操作,若某一时刻数据库down了,导致kafka消费的数据无法入库,为了弥补数据库down期间的数据损失,有 ...