转载一个python写的zabbix sender脚本

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import struct
import json
class ZabbixSender:
zbx_header = 'ZBXD'
zbx_version = 1
zbx_sender_data = {u'request': u'sender data', u'data': []}
send_data = ''
def __init__(self, server_host, server_port = 10051):
self.server_ip = socket.gethostbyname(server_host)
self.server_port = server_port
def add(self, host, key, value, clock = None):
add_data = {u'host': host, u'key': key, u'value': value}
if clock != None:
add_data[u'clock'] = clock
self.zbx_sender_data['data'].append(add_data)
return self.zbx_sender_data
def clean(self):
self.zbx_sender_data['data'] = []
return self.zbx_sender_data
def __MakeSendData(self):
zbx_sender_json = json.dumps(self.zbx_sender_data, separators=(',', ':'), ensure_ascii=False).encode('utf-8')
json_byte = len(zbx_sender_json)
self.send_data = struct.pack("<4sBq" + str(json_byte) + "s", self.zbx_header, self.zbx_version, json_byte, zbx_sender_json)
def send(self):
self.__MakeSendData()
so = socket.socket()
so.connect((self.server_ip, self.server_port))
wobj = so.makefile(u'wb')
wobj.write(self.send_data)
wobj.close()
robj = so.makefile(u'rb')
recv_data = robj.read()
robj.close()
so.close()
tmp_data = struct.unpack("<4sBq" + str(len(recv_data) - struct.calcsize("<4sBq")) + "s", recv_data)
recv_json = json.loads(tmp_data[3])
return recv_data
if __name__ == '__main__':
sender = ZabbixSender(u'127.0.0.1')
for num in range(0,2):
sender.add(u'Zabbix server', u'test', u'sent data' + str(num))
res = sender.send()
print sender.send_data
print res

最新文章

  1. jquery Combo Select 下拉框可选可输入插件
  2. js获取输入框中当前光标位置并在此位置插入字符串的方法(angularjs+ts)
  3. 30个你必须记住的CSS选择符
  4. linker command failed with exit code
  5. GitLab常见使用方法
  6. Sonar+Hudson+Maven构建系列之二:迁移Sonar
  7. TP复习9
  8. ZOJ 2724 Windows Message Queue (优先级队列,水题,自己动手写了个最小堆)
  9. java中的getClass()函数
  10. mmap和普通文件读写的区别和比较 &amp; mmap的注意点
  11. if(!!attr)是什么鬼???
  12. 使用测试思路快速学习Python-适合测试工程师的学习方法
  13. redis的sorted set类型
  14. Logback分别打印info日志和error日志
  15. 三十九、vue中element最原始的分页(未封装的)
  16. AutoFac - 将 autofac 应用于MVC多层项目
  17. Excel坐标自动在AutoCad绘图_5
  18. Filter简易实现.
  19. 使用VSTS的Git进行版本控制(三)——评审历史记录
  20. svn提交报错Previous operation has not finished; run &#39;cleanup&#39; if it was interrupted

热门文章

  1. 【SDOI 2011】染色
  2. Wireshark抓包分析TCP协议
  3. hdu 3503(有点小技巧的dfs(对结点加东西表示边的某些状态))
  4. UI:UITextView
  5. 使用java发送HTTP请求
  6. Java使用动态代理实现AOP
  7. glance镜像服务
  8. YCOJ中国邮递员问题
  9. 自己动手利用CentOS6.5 搭建php环境安装discuz论坛
  10. Styles and Themens(3)android所有主题表