Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >获取 zabbix 挂件数据(widget)

获取 zabbix 挂件数据(widget)

作者头像
用户1416054
发布于 2018-08-02 03:32:45
发布于 2018-08-02 03:32:45
77000
代码可运行
举报
文章被收录于专栏:JackeyGao的博客JackeyGao的博客
运行总次数:0
代码可运行

获取 zabbix 挂件数据(widget)

Posted January 03, 2018

Zabbix 有非常丰富的 API ,但没有 widget 的 API。 所以获取 widget 的数据需要通过模拟登录爬取网页的形式来做。虽然我们可以用一定的 API 数据和相应的逻辑计算出此 TABLE 的数据, 但工作量非常大。

#zabbix widget

我用了两个模块来做, 一个逻辑控制 一个解析模块.

main.py

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-

import sys
import json
import requests
from parse import HTMLTableParser

reload(sys)
sys.setdefaultencoding("utf-8")

HOST = "http://{{ HOST }}:8080/"


def parse(html):
    p = HTMLTableParser()
    p.feed(html)
    table = p.tables[0]
    c = [ {'prop': str(x), 'label': y} \
           for x,y in zip(range(len(table[0])), table[0]) ]
    return { "columns": c }, table[1:]


def login_session():
    s = requests.Session()
    payload = {
        "name": "{{ USER }}",
        "password": "{{ PASSWORD }}",
        "autologin": "1",
        "enter": "Sign in"
    }
    s = requests.Session()
    resp = s.post(HOST + 'index.php', payload)
    return s


def action(action_name):
    session = login_session()

    # 可以通过浏览器的开发者模式获取这里的参数, 一般需要更改 sid.
    params = {
        "action": action_name,
        "sid": "8c09585cdef21c27",  {{ SID }}
        "upd_counter": 0,
        "pmasterid": "dashboard"
    }
    payload = {"widgetRefresh": "syssum", '_': ""}

    resp = session.post(
        HOST + 'zabbix.php', params=params, data=payload)

    data = json.loads(resp.text)
    return data


def usage():
    raise Exception(
        """Arg error, Missing key
        Key choice in:
        \twidget.status.view
        \twidget.hosts.view
        \twidget.system.view
        \twidget.web.view
        \twidget.issues.view"""
    )


if __name__ == '__main__':
    if len(sys.argv) != 2:
        usage()

    data = action(sys.argv[1])
    config, data = parse(data["body"])
    sys.stdout.write(json.dumps(config, indent=2)+'\n')
    sys.stdout.write(json.dumps(data, indent=2)+'\n')

parse.py

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from HTMLParser import HTMLParser


class HTMLTableParser(HTMLParser):
    """ This class serves as a html table parser. It is able to parse multiple
    tables which you feed in. You can access the result per .tables field.
    """
    def __init__(
        self,
        decode_html_entities=False,
        data_separator=' ',
    ):

        HTMLParser.__init__(self)

        self._parse_html_entities = decode_html_entities
        self._data_separator = data_separator

        self._in_td = False
        self._in_th = False
        self._in_span = 0
        self._current_table = []
        self._current_row = []
        self._current_cell = []
        self.tables = []

    def handle_starttag(self, tag, attrs):
        """ We need to remember the opening point for the content of interest.
        The other tags (<table>, <tr>) are only handled at the closing point.
        """
        if tag == 'span':
            self._in_span = self._in_span + 1
        if tag == 'td':
            self._in_td = True
        if tag == 'th':
            self._in_th = True

    def handle_data(self, data):
        """ This is where we save content to a cell """
        if self._in_td or self._in_th:
            if self._in_span in (0, 1):
                self._current_cell.append(data.strip())
            else:
                return

    def handle_charref(self, name):
        """ Handle HTML encoded characters """

        if self._parse_html_entities:
            self.handle_data(self.unescape('&#{};'.format(name)))

    def handle_endtag(self, tag):
        """ Here we exit the tags. If the closing tag is </tr>, we know that we
        can save our currently parsed cells to the current table as a row and
        prepare for a new row. If the closing tag is </table>, we save the
        current table and prepare for a new one.
        """
        if tag == 'td':
            self._in_td = False
        elif tag == 'th':
            self._in_th = False
        elif tag == 'span':
            self._in_span = self._in_span - 1

        if self._in_span < 2:
            if tag in ['td', 'th']:
                final_cell = self._data_separator.join(self._current_cell).strip()
                self._current_row.append(final_cell)
                self._current_cell = []
            elif tag == 'tr':
                self._current_table.append(self._current_row)
                self._current_row = []
            elif tag == 'table':
                self.tables.append(self._current_table)
                self._current_table = []
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
zabbix发送报警信息带图片
zabbix 发送报警内容调用 zabbix 的 api 生成原始图数据,然后将图片上传到远方图床取出图片 URL 进行展示;
cuijianzhe
2022/06/14
7370
zabbix发送报警信息带图片
zabbix最新SQL注入漏洞+EXP
最近zabbix又出大事了,高危的SQL注入漏洞,影响V3.0.4以下所有版本,请小伙伴及时修复。 漏洞概述: zabbix是一个开源的企业级性能监控解决方案。 官方网站:http://www.zab
逸鹏
2018/04/11
1.6K0
zabbix最新SQL注入漏洞+EXP
[PYTHON] 使用python实现一个miniWorkNote来记录工作内容
对于我这种记忆力不好的人来说, 是需要一个工具来记录 已完成 和 待完成 的事情的. 比如一个记事本就行, 但我没法一眼就能找到还有哪些事情未做(都一个色儿). 那么就需要一个工具来帮我了.
大大刺猬
2024/06/26
1600
[PYTHON] 使用python实现一个miniWorkNote来记录工作内容
自定义admin组件
1 新建一个项目, 创建一个app01和stark应用,stark创建一个service包,并在service下创建stark.py。然后注册app
py3study
2020/01/16
1.7K0
自定义admin组件
Zabbix告警发送邮件时附带性能图
zabbix告警传入item.ky参数 -> 利用item.key获取当前的性能图 -> 保存到本地 -> 在发送邮件的时候构建邮件文本内容
星哥玩云
2022/07/13
3110
Zabbix告警发送邮件时附带性能图
2021最新微博爬虫——根据话题名称获取所有相关微博与评论
-首先确定抓取微博内容、评论数、点赞数、发布时间、发布者名称等主要字段。选择weibo.com作为主要数据来源。(就是因为搜索功能好使)
MinChess
2022/12/27
4.5K1
2021最新微博爬虫——根据话题名称获取所有相关微博与评论
python开发_HTMLParser_html文档解析
=============================================
Hongten
2022/05/06
4380
23.Django基础
Django基本配置 Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能 1.安装 # windows 直接用pip进行安装 pip install django # 生成的django文件加入到系统环境变量 2.创建并启动 创建 django-admin startproject mysite 运行 python manage.py runserver
zhang_derek
2018/04/11
9530
23.Django基础
readability-lxml 源码解析(三):`readability.py`
ApacheCN_飞龙
2023/10/13
2640
Python自动化开发学习-Django
django amdin是django提供的一个后台管理页面,该管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查。
py3study
2020/01/09
1.8K0
Zabbix监控调用map.get并且下载图文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 17/8/28 上午9:09 # @Author : lee # @File : ZabbixMaps.py # @Software: PyCharm # 说明: 输入机器要查询的园区 知道序号后,第二次 园区+序号出图 阿里 m6 园区命令分别是(ali,m6,yq) import urllib.request import http.cookiejar import htt
98k
2018/04/12
1.1K0
v$和v_$的一些玄机
原因是该用户缺少一些动态性能视图的访问权限,但是当我们尝试将提示的v$session授予用户(例如hr)时,提示了这个错,
bisal
2021/09/06
8560
【Zabbix】Zabbix 分布式监控—创建Proxy主机
zabbix镜像-zabbix下载地址-zabbix安装教程-阿里巴巴开源镜像站 (aliyun.com)
宝耶需努力
2022/12/13
5960
【Zabbix】Zabbix 分布式监控—创建Proxy主机
【说站】python中htmlparser解析html
它根据树形结构将html页面中的标签分析成一个节点,一种类型的节点对应一个类,通过调用它可以轻松访问标签中的内容。
很酷的站长
2022/11/23
6530
【说站】python中htmlparser解析html
通达OAの漏洞合集
两三个月之前实习的时候通达OA的漏洞学习笔记,赶紧发了清一下库存,免得文件夹吃灰。
h0cksr
2023/05/18
5.9K0
CVE-2024-22120|Zabbix Server SQL注入漏洞(POC)
Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
信安百科
2024/05/22
2.6K0
CVE-2024-22120|Zabbix Server SQL注入漏洞(POC)
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查
文章于2016-12-17日重写 在第八讲中,我们已经做到了怎么样分页。这一讲主要讲增删改查。第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下。 这讲主要是,制作漂亮的工具栏,虽然ea
用户1149182
2018/01/16
2K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查
小鲤AI志愿填报助手:一键探索最适合你的大学专业
每年六月,随着高考的落幕,一个新的挑战随之而来——如何在全国范围内的激烈竞争中抢占一席之地。今年,超过1300万的学生参加了这场决定未来命运的考试,每一个人都希望能进入心仪的大学,学习理想的专业。然而,选择的过程并不简单,错综复杂的分数线、众多的院校和专业以及地域和预算的限制,构成了一张巨大的迷宫。在这个迷宫中,每一步选择都可能影响未来职业路径和生活质量。
AI Inception
2024/06/19
2210
小鲤AI志愿填报助手:一键探索最适合你的大学专业
测试开发:Python + Flask 实现接口接收 Disk 信息
今天分享的内容是基于:测试开发:Python + Flask 实现接口接收内存信息 来进一步分享如何使用 Python + Flask 实现接收 Disk 的信息。
Wu_Candy
2022/07/04
3480
测试开发:Python + Flask 实现接口接收 Disk 信息
python3 下 Zabbix监控调用graph.get并且下载监控图
这个代码是如何访问三个不同机房并将传入的zabbix中的监控机器的ip进行判断(因为后来需要登陆网站,不同的机房名称不一样) 可以输入两个参数 只输入IP 返回监控列表 需要准备的包: pre
98k
2018/04/11
2K0
python3 下 Zabbix监控调用graph.get并且下载监控图
相关推荐
zabbix发送报警信息带图片
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档