#!/usr/bin/env python
#coding:utf-8
__author__ = 'dwj'
from twisted.protocols import basic
from twisted.internet import protocol, defer, task
import Get_basic_info_2 as Huoqu
import guardian as shouhu
import time
from twisted.application import service, internet
class Monitor_Protocol(basic.LineReceiver):
#自定义客户端和服务端的连接协议,从basic的line继承
def __init__(self):
#没想好要初始化点什么
pass
@staticmethod
def huoqu_shuju():
#定义一个函数获取本机的一些状态
now = str(time.strftime('%Y-%m-%d %H:%M:%S'))
def add_tag(source, tag1, tag2 = 'none'):
#定义格式化字符串函数
return ':::'.join([now, tag1, tag2, source])
#使用:::分隔时间、简单信息、详细信息、原始信息
tcp = add_tag(Huoqu.net_tcp(), 'tcp')
cpu = add_tag(Huoqu.cpu(), 'cpu', 'cpu_detail')
mem = add_tag(Huoqu.mem(), 'mem', 'mem_detail')
disk = add_tag(Huoqu.disk_usage(), 'disk', 'disk_detail')
net = add_tag(Huoqu.net_rate(), 'net', 'net_detail')
process = add_tag(shouhu.check_alive(), 'process_down', 'process_alived')
result = (tcp, cpu, mem, disk, net, process, )
d = defer.Deferred()
#使用defered返回结果
d.callback(result)
return d
def xunhuan(self, list):
#定义循环发送函数
for i in list:
self.sendLine(i)
def fasong(self):
#定义程序运行顺序,取得信息后用callback交给发送函数发送
self.huoqu_shuju().addCallback(self.xunhuan)
def loop(self):
#使用twist内置的循环函数定义几秒监控数据传送到服务端
l = task.LoopingCall(self.fasong)
l.start(1)
def connectionMade(self):
#覆盖协议的connectmade函数,定义于服务端的连接建立后开始循环
print 'Connected!......ok!'
self.loop()
def lineReceived(self, line):
#必须覆盖接受函数,否则twist会报not importent错误!
pass
class Moinitor_client_factory(protocol.ReconnectingClientFactory):
def __init__(self, service):
#还没想要要写什么
self.service = service
protocol = Monitor_Protocol
class Client_Service(service.Service):
def __init__(self):
pass
def startService(self):
service.Service.startService(self)
#配置文件开始
port = 10000
host = '127.0.0.1'
#守护进程
top_service = service.MultiService() #定义服务容器
client_service = Client_Service() #实例化服务类
client_service.setServiceParent(top_service) #把自己定义的服务丢到服务容器中
factory = Moinitor_client_factory(client_service) #定义服务工厂化
tcp_service = internet.TCPClient(host, port, factory) #定义tcp连接的服务
tcp_service.setServiceParent(top_service) #把tcp服务丢到服务容器中去
application = service.Application('Fish_Service') #定义应用名字
top_service.setServiceParent(application) #把服务容器丢到应用中去
评论16
最新资源