#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
##@package
|
#
|
# @todo:
|
#
|
# @author: Alee
|
# @date 2019-2-20 ÏÂÎç04:50:04
|
# @version 1.0
|
#
|
# @note:
|
#
|
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
from bottle import Bottle, request
|
from lib import mylog
|
import os
|
import md5
|
import smtplib
|
from email.mime.text import MIMEText
|
from email.header import Header
|
import datetime
|
import subprocess
|
import urllib
|
# get: request.query.username request.GET.get('username','')
|
# post: request.forms.get('username') request.POST.get('username')
|
#===============================================================================
|
# @myapp.route('/cool/kk/:name3/:count#\\d+#')
|
# def maybe(name3, count):
|
# client_ip = request.environ.get('REMOTE_ADDR')
|
# client_ip = request.environ.get('HTTP_X_FORWARDED_FOR') or request.environ.get('REMOTE_ADDR')
|
#===============================================================================
|
|
g_AllMapCnt = 0
|
|
myapp = Bottle()
|
|
# ¿ÉÖ´Ðй̶¨µÄÔ¶³ÌÃüÁî
|
|
@myapp.route('/control/openandclose.php', method='POST')
|
def RemoteCmd():
|
dataDict = request.POST
|
# for key in dataDict:
|
# print key
|
# mylog.debug("---%s"%dataDict[key])
|
result = dataDict.get("control", "")
|
if not result:
|
return
|
|
sign = dataDict.get("sign", "")
|
if not sign:
|
return
|
|
ofile = open(r".\key.txt")
|
text = ofile.read().strip()
|
ofile.close()
|
if sign != md5.md5("%s1234666%s"%(result, text)).hexdigest():
|
mylog.debug("Ç©Ãûʧ°Ü")
|
return
|
|
if result == "open":
|
pResult = os.popen('tasklist /FI "IMAGENAME eq EventServer.exe"')
|
pResult = pResult.read()
|
if "PID" in pResult or "pid" in pResult:
|
return " =======·þÎñÆ÷ÒѾ¿ªÆô£¬ÇëÔÙ´ÎÈ·ÈÏ·þÎñÆ÷Çé¿ö£¬ EventServer.exeÔËÐÐÖÐ"
|
#os.system(r"call D:\ProjectServer\LaunchServerManager\Õý³£¿ª·þ.bat")
|
# system call»áµ¼ÖÂ×Ó½ø³ÌÕ¼Óø¸½ø³ÌµÄÎļþÃèÊö·ûµ¼Ö¶˿ÚÎÞ·¨ÊÍ·Å£¬ Ó°ÏìÖØÆôʹÓÃ
|
# Èç¹ûÐèÒª±£³Ö×Ó½ø³Ì³ÖÐø³¤ÆÚÔËÐеÄÓ¦¸Ãµ÷Óà subprocess.Popen(cmd, close_fds=True)
|
cmd = r"D:\ProjectServer\LaunchServerManager\Õý³£¿ª·þ.bat"
|
subprocess.Popen(cmd, close_fds=True)
|
return "open success"
|
elif result == "close":
|
# ¼ÇµÃ¹Ø·þºó»òÕßÖØÆô»úÆ÷Ðè×Ô¶¯Æô¶¯·þÎñÆ÷¿ØÖÆÌ¨
|
os.system(r"call D:\ProjectServer\LaunchServerManager\Õý³£¹Ø·þ.bat")
|
return "close success"
|
|
return
|
|
# OnLogError OnPyError
|
# ·þÎñÆ÷¿ªÆôµÄ״̬»ã±¨
|
@myapp.route('/control/state.php')
|
def ServerState():
|
global g_AllMapCnt
|
try:
|
dataDict = request.GET
|
stateType = dataDict.get("Type", "")
|
if not stateType:
|
return
|
if stateType == "MapInit":
|
# ·þÎñÆ÷¹Ø±ÕµÄʱºò»áÖØÆô£¬´Ë״ֻ̬ÓÃÓÚ¿ª·þµÄʱºòÊÇ·ñ³õʼ»¯OK
|
g_AllMapCnt = dataDict.get("MapCount", 0)
|
if g_AllMapCnt:
|
ifile = open(".\MapCount.txt", "w")
|
ifile.write(str(datetime.datetime.today()) + "\t·þÎñÆ÷¿ªÆôÍê±Ï£¬µØÍ¼Êý=%s"%g_AllMapCnt)
|
ifile.close()
|
#return "·þÎñÆ÷¿ªÆôÍê±Ï£¬µØÍ¼Êý=%s"%dataDict.get("MapCount", 0)
|
return
|
|
elif stateType in ["MapError", "GameServerError", "PyMongoError"]:
|
#groupID=%s&userDBName=%s&Type=PyMongoError
|
ServerInfo = "´íÎóÀàÐÍ:%s ·þÎñÆ÷×é:%s, dbname:%s msg:%s"%(stateType,
|
dataDict.get("groupID", 0),
|
dataDict.get("userDBName", 0),
|
urllib.unquote_plus(dataDict.get("MsgInfo", "0")))
|
SendEmail(ServerInfo)
|
return
|
elif stateType == "MapDisconnect":
|
# µØÍ¼5·ÖÖÓδÏìÓ¦£¬¿ÉÒÔ¿¨ÁË»òÕßÉÁÍË ¹Ø±Õ
|
#groupID=%s&userDBName=%s&Type=PyMongoError
|
ServerInfo = "´íÎóÀàÐÍ:µØÍ¼±»¹Ø±Õ%s ·þÎñÆ÷×é:%s, dbname:%s"%(stateType,
|
dataDict.get("groupID", 0),
|
dataDict.get("userDBName", 0))
|
SendEmail(ServerInfo)
|
return
|
elif stateType == "GameWarning":
|
# ÓÎϷͨÓþ¯¸æÓʼþʹÓÃ
|
ServerInfo = "ÓÎÏ·¾¯±¨:·þÎñÆ÷×é:%s, dbname:%s, ¾¯¸æÐÅÏ¢:%s"%(
|
dataDict.get("groupID", 0),
|
dataDict.get("userDBName", 0),
|
urllib.unquote_plus(dataDict.get("MsgInfo", 0)))
|
SendEmail(ServerInfo)
|
elif stateType in ["MapServerRaiseException", "GameServerRaiseException", "RaiseException"]:
|
ServerInfo = "%s Å׳öTryÒì³£±¨´í:·þÎñÆ÷×é:%s, dbname:%s, MapID:%s Òì³£ÐÅÏ¢:%s"%(
|
stateType,
|
dataDict.get("groupID", 0),
|
dataDict.get("userDBName", 0),
|
dataDict.get("mapID", 0),
|
urllib.unquote_plus(dataDict.get("MsgInfo", 0)))
|
SendEmail(ServerInfo)
|
elif stateType == "QueryMapOK":
|
if g_AllMapCnt == 0:
|
if not os.path.exists(".\MapCount.txt"):
|
return "===ÔÝÎÞ·´À¡£¬ÉԵȺó²éѯ==="
|
ifile = open(".\MapCount.txt")
|
text = ifile.read()
|
ifile.close()
|
return "=========ÉÏÒ»´Î¼Ç¼µÄ¿ªÆôÇé¿ö, Çë¹ý»áÔÙ²éѯ========", text
|
return "·þÎñÆ÷¿ªÆôÍê±Ï£¬µØÍ¼Êý:%s"%g_AllMapCnt
|
except Exception, e:
|
print e
|
ServerInfo = "¿ØÖÆÌ¨±¨´í£¬·þÎñÆ÷Òì³££¡ %s"%e
|
try:
|
SendEmail(ServerInfo)
|
except:
|
print "ÎÞ·¨·¢ËÍÓʼþ"
|
|
# Óʼþ»ã±¨
|
def SendEmail(ServerInfo):
|
|
# µÚÈý·½ SMTP ·þÎñ
|
mail_host="smtp.qq.com" #ÉèÖ÷þÎñÆ÷
|
mail_user="2199274165@qq.com" #Óû§Ãû
|
mail_pass="asmizpysxngtdjic" # ¿ªÍ¨QQÓÊÏäµÄSMTP£¬¶ÌÐÅÑéÖ¤ºó»ñÈ¡µÄ£¬·ÇÃÜÂë
|
|
|
sender = '2199274165@qq.com'
|
|
# ÕâÀï¿ÉÒÔÌîдÐèÒª½ÓÊջ㱨µÄÓʼþµØÖ·
|
receivers = ['305670599@qq.com']#, '1142397645@qq.com', '305670599@qq.com', '995275190@qq.com']
|
|
message = MIMEText('Òì³£»ã±¨:%s'%ServerInfo, 'plain', 'gbk')
|
message['From'] = Header("ÓÎÏ··þÎñÆ÷Òì³£»ã±¨", 'gbk')
|
message['To'] = Header("ÔËά", 'gbk') # ²»·¢Ë͵ϰ»á±»¼Ç¼ΪÀ¬»øÓʼþ
|
|
subject = 'ÓÎÏ··þÎñÆ÷Òì³£'
|
message['Subject'] = Header(subject, 'gbk')
|
|
|
|
smtpObj = smtplib.SMTP()
|
smtpObj.connect(mail_host, 25) # 25 Ϊ SMTP ¶Ë¿ÚºÅ£¬ Èç¹ûÓÃSSL ÐèÒª»»¶Ë¿Ú
|
smtpObj.login(mail_user,mail_pass)
|
smtpObj.sendmail(sender, receivers, message.as_string())
|
print "Óʼþ·¢Ëͳɹ¦"
|
|