代码拉取完成,页面将自动刷新
同步操作将从 德州深之海网络技术有限公司/ModuleBackend 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- coding: utf-8 -*-
'''
作者:姜夏
日期:2020-02-28
Email:315010397@qq.com
'''
import tornado
import tornado.escape
from tornado.options import define, options
import pika
import sys
import time
import os
import shutil
__version__ = '0.0.1'
__doc__ = 'RabbitMQ的日志处理工具!'
# 日志目录
logFilePath = '/workspace/logs/'
# 日志最大字节,单位M
logMaxSize = 100
MQ_HOST = "localhost"
MQ_QUEUE = "sailfish-backend-mqlog"
parameters = pika.ConnectionParameters(MQ_HOST)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.queue_declare(MQ_QUEUE)
class LogRecord(object):
def __init__(self, proName, level, logDate, body, requestFileName='', requestFnName='', requestFnLineNo=0):
self.proName = proName
self.level = level
self.body = body
self.logDate = logDate
self.requestFileName = requestFileName
self.requestFnName = requestFnName
self.requestFnLineNo = requestFnLineNo
def __str__(self):
return '<LogRecord:[%s:%s:%s][%s][%s][%s]:"%s">' % (self.requestFileName, self.requestFnName, self.requestFnLineNo, self.proName, self.level, self.logDate, self.body)
__repr__ = __str__
def writeLog2File(logStr):
timestamp = int(time.time())
logFileName = "%ssailfish-%s.log" % (logFilePath,
time.strftime("%Y%m%d", time.localtime(timestamp)))
if os.path.isfile(logFileName) == True:
logSize = os.path.getsize(logFileName)
logMaxSizeB = 1024 * 1024 * logMaxSize
if logSize >= logMaxSizeB:
_logFileName = "%ssailfish-%s.log" % (
logFilePath, time.strftime("%Y%m%d-%H%M%S", time.localtime(timestamp)))
shutil.move(logFileName, _logFileName)
f = open(logFileName, 'a', encoding='utf8')
f.write(logStr + "\n")
f.close()
return True
def _buildLogMsg(params):
if 'request_file_name' not in params:
params['request_file_name'] = ''
if 'request_fn_name' not in params:
params['request_fn_name'] = ''
if 'request_fn_line_no' not in params:
params['request_fn_line_no'] = 0
logStr = LogRecord(params['pro_name'], params['level'], params['log_date'], params['body'],
params['request_file_name'], params['request_fn_name'], params['request_fn_line_no']).__str__()
return logStr
def sendMsg(RequestDict):
if 'request_uuid' not in RequestDict.keys():
RequestDict['request_uuid'] = 'unknown'
params = {
'uri':RequestDict['uri'],
'method':RequestDict['method'],
'body':'',
'remote_ip':RequestDict['remote_ip'],
'response_time':RequestDict['response_time'],
'cate':RequestDict['cate'],
'pro_name':RequestDict['pro_name'],
'request_time':RequestDict['request_time'],
'request_uuid':RequestDict['request_uuid'],
'msgCate':'monitor',
}
if RequestDict['body'] != '':
if isinstance( RequestDict['body'] , bytes ):
params['body'] = str( RequestDict['body'] , encoding="utf-8" )
else:
params['body'] = RequestDict['body']
channel.queue_declare('c2ccode-backend-devops')
channel.basic_publish(exchange='', routing_key='c2ccode-backend-devops',
body=tornado.escape.json_encode(params))
return True
def assignQueueByCate(logs):
logStr = "========START========="
writeLog2File(logStr)
# return True
for item in logs:
print( item )
if item['level'] != 'MONITOR':
logStr = _buildLogMsg(item)
writeLog2File(logStr)
else: # 监控信息发送到devops
try:
monitorBody = eval( item['body'] )
sendMsg( monitorBody )
except ValueError:
# monitorBody = item['body']
print( '不能发布monitor body !' )
writeLog2File( item['body'] )
writeLog2File("记录monitor成功!")
logStr = "========OVER========="
writeLog2File(logStr)
return True
def callback(ch, method, properties, body):
bodyJson = tornado.escape.json_decode(body)
assignQueueByCate(bodyJson['msgs'])
ch.basic_ack(delivery_tag=method.delivery_tag)
if __name__ == "__main__":
channel.basic_consume(MQ_QUEUE, callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。