#!/usr/bin/env python
#coding:utf-8
import socket
import select
import Queue
import json
import traceback
from datetime import datetime
from mysql_db import mysql_db
class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, obj)
class server_socket(object):
def __init__(self,server_host='192.168.137.1',server_port=8888,server_listen=10):
self.server_host=server_host
self.server_port=server_port
self.server_listen=server_listen
def server_get(self):
try:
so=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
so.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
so.setblocking(0)
so.bind((self.server_host,self.server_port))
so.listen(self.server_listen)
inputs=[so]
outputs = []
message_queue={}
while True:
rs,ws,es=select.select(inputs,outputs,[],1)
print 'socket connent num %s' %len(rs)
for f in rs:
#print type(f)
#print type(so)
if f is so:
c,a=f.accept()
inputs.append(c)
message_queue[c]=Queue.Queue()
#print message_queue
config_host=mysql_db()
config_data=config_host.mysql_db()
#data=[0,config_data]
#print config_data
#for new_data in range(len(config_data)):
# print config_data[0][new_data]
data={'status':0,'host_data':config_data}
json_data=json.dumps(data, cls = ComplexEncoder)
#print json_data
c.sendall(json_data)
#print '1000'
else:
data=f.recv(4096)
data_1=len(str(data))
if data_1>0:
message_queue[f].put(data)
if f not in outputs:
outputs.append(f)
#f.sendall('0')
#print data
with open(r'G:\testmxq.log','a+') as f:
f.write(data)
#so.close()
else:
#if f in outputs :
#outputs.remove(f)
#c.sendall('1')
inputs.remove(f)
#f.close()
for f in ws:
while not message_queue[f].empty():
msg = message_queue[f].get_nowait()
#print "send to data" , msg , "to", f.getpeername()
json_data=json.loads(msg)
#json_data
host_ip=json_data['host_ip']
host_cpu=json_data['cpu']
print host_cpu
host_memory=json_data['memory']
sql='insert into web_monitor_data (host,cpu,disk,memory) values("{ip}","{cpu}","","{memory}")'.format(ip=host_ip,cpu=host_cpu,memory=host_memory)
print sql
db=mysql_db()
db.insert_db(sql)
outputs.remove(f)
del message_queue[f]
#s.send(msg)
except Exception as e:
print e
traceback.print_exc()
if __name__=='__main__':
new_socket=server_socket()
new_socket.server_get()