add news
This commit is contained in:
parent
a2466e610c
commit
6faa712586
23
.editorconfig
Normal file
23
.editorconfig
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
[*]
|
||||||
|
charset=utf-8
|
||||||
|
end_of_line=crlf
|
||||||
|
insert_final_newline=false
|
||||||
|
indent_style=space
|
||||||
|
indent_size=4
|
||||||
|
|
||||||
|
[*.json]
|
||||||
|
indent_style=space
|
||||||
|
indent_size=2
|
||||||
|
|
||||||
|
[{*.pyw,*.py}]
|
||||||
|
indent_style=tab
|
||||||
|
tab_width=4
|
||||||
|
|
||||||
|
[*.pyi]
|
||||||
|
indent_style=tab
|
||||||
|
tab_width=4
|
||||||
|
|
||||||
|
[{*.yml,*.yaml}]
|
||||||
|
indent_style=space
|
||||||
|
indent_size=2
|
||||||
|
|
165
common/common.py
165
common/common.py
@ -5,117 +5,134 @@ import functools
|
|||||||
|
|
||||||
|
|
||||||
def tarce(f):
|
def tarce(f):
|
||||||
@functools.wraps(f)
|
@functools.wraps(f)
|
||||||
def decorated_function(*args, **kwargs):
|
def decorated_function(*args, **kwargs):
|
||||||
print(f"func name was {__name__}, args was {f}, {args}, {kwargs}")
|
print(f"func name was {__name__}, args was {f}, {args}, {kwargs}")
|
||||||
result = f(*args, **kwargs)
|
result = f(*args, **kwargs)
|
||||||
print(f"return was {result}!")
|
print(f"return was {result}!")
|
||||||
|
|
||||||
return decorated_function
|
return decorated_function
|
||||||
|
|
||||||
|
|
||||||
def send_ops_mail(sub, body, sendto):
|
def send_ops_mail(sub, body, sendto):
|
||||||
import requests
|
import requests
|
||||||
mail_url = 'http://10.10.3.10:5011/mail/api/v2.0/alarm'
|
mail_url = 'http://10.10.3.10:5011/mail/api/v2.0/alarm'
|
||||||
data = {"sub": sub, "content": body, "sendto": sendto}
|
data = {"sub": sub, "content": body, "sendto": sendto}
|
||||||
r = requests.post(url=mail_url, data=data)
|
r = requests.post(url=mail_url, data=data)
|
||||||
if r.status_code == 200:
|
if r.status_code == 200:
|
||||||
log.info("send mail success!")
|
log.info("send mail success!")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
err_msg = "send mail failed ,output was %s" % r.content
|
err_msg = "send mail failed ,output was %s" % r.content
|
||||||
log.error("send mail failed ,{0}".format(err_msg))
|
log.error("send mail failed ,{0}".format(err_msg))
|
||||||
|
|
||||||
|
|
||||||
def send_alter_mail(sub, body, sendto):
|
def send_alter_mail(sub, body, sendto):
|
||||||
import requests
|
import requests
|
||||||
mail_url = 'http://10.10.3.16:50010/mail/api/v2.0/send'
|
mail_url = 'http://10.10.3.16:50010/mail/api/v2.0/send'
|
||||||
data = {"sub": sub, "content": body, "sendto": sendto}
|
data = {"sub": sub, "content": body, "sendto": sendto}
|
||||||
r = requests.post(url=mail_url, data=data)
|
r = requests.post(url=mail_url, data=data)
|
||||||
if r.status_code == 200:
|
if r.status_code == 200:
|
||||||
log.info("send mail success!")
|
log.info("send mail success!")
|
||||||
else:
|
else:
|
||||||
err_msg = "send mail failed ,output was %s" % r.content
|
err_msg = "send mail failed ,output was %s" % r.content
|
||||||
log.error("send mail failed ,{0}".format(err_msg))
|
log.error("send mail failed ,{0}".format(err_msg))
|
||||||
|
|
||||||
|
|
||||||
def run_cmd(cmd):
|
def run_cmd(cmd):
|
||||||
import subprocess
|
import subprocess
|
||||||
msg = "Starting run: %s " % cmd
|
msg = "Starting run: %s " % cmd
|
||||||
log.info("run_cmd {0}".format(msg))
|
log.info("run_cmd {0}".format(msg))
|
||||||
cmdref = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
|
cmdref = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
|
||||||
output, error_info = cmdref.communicate()
|
output, error_info = cmdref.communicate()
|
||||||
if cmdref.returncode != 0:
|
if cmdref.returncode != 0:
|
||||||
if isinstance(error_info, list) or isinstance(error_info, tuple):
|
if isinstance(error_info, list) or isinstance(error_info, tuple):
|
||||||
error_info = error_info[0]
|
error_info = error_info[0]
|
||||||
msg = "RUN %s ERROR,error info: %s" % (cmd, error_info)
|
msg = "RUN %s ERROR,error info: %s" % (cmd, error_info)
|
||||||
log.error(msg)
|
log.error(msg)
|
||||||
return False, error_info
|
return False, error_info
|
||||||
|
|
||||||
else:
|
else:
|
||||||
msg = "run %s success" % cmd
|
msg = "run %s success" % cmd
|
||||||
log.info(msg)
|
log.info(msg)
|
||||||
# print "Run Success!!"
|
# print "Run Success!!"
|
||||||
return True, output
|
return True, output
|
||||||
|
|
||||||
|
|
||||||
def str_datetime(step=0):
|
def str_datetime(step=0):
|
||||||
import datetime
|
import datetime
|
||||||
return (datetime.datetime.now() - datetime.timedelta(int(step))).strftime("%Y-%m-%d %H:%M:%S")
|
return (datetime.datetime.now() - datetime.timedelta(int(step))).strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
|
|
||||||
def str_short_time(step=0):
|
def str_short_time(step=0):
|
||||||
import datetime
|
import datetime
|
||||||
return (datetime.datetime.now() - datetime.timedelta(int(step))).strftime("%Y%m%d%H%M%S")
|
return (datetime.datetime.now() - datetime.timedelta(int(step))).strftime("%Y%m%d%H%M%S")
|
||||||
|
|
||||||
|
|
||||||
def write_files(filename, data):
|
def write_files(filename, data):
|
||||||
with open(filename, 'a+') as f:
|
with open(filename, 'a+') as f:
|
||||||
f.write(data)
|
f.write(data)
|
||||||
f.write('\n')
|
f.write('\n')
|
||||||
|
|
||||||
|
|
||||||
def read_files(filename):
|
def read_files(filename):
|
||||||
with open(filename, 'r') as f:
|
with open(filename, 'r') as f:
|
||||||
data = f.read().strip()
|
data = f.read().strip()
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def cal_crc32(data):
|
def cal_crc32(data):
|
||||||
import binascii
|
import binascii
|
||||||
return binascii.crc32(data.encode())
|
return binascii.crc32(data.encode())
|
||||||
|
|
||||||
|
|
||||||
def cal_db_num(data, db=16):
|
def cal_db_num(data, db=16):
|
||||||
import binascii
|
import binascii
|
||||||
data_crc = binascii.crc32(data.encode())
|
data_crc = binascii.crc32(data.encode())
|
||||||
return int(data_crc % db) + 1
|
return int(data_crc % db) + 1
|
||||||
|
|
||||||
|
|
||||||
def to_str(bytes_or_str):
|
def to_str(bytes_or_str):
|
||||||
if isinstance(bytes_or_str, bytes):
|
if isinstance(bytes_or_str, bytes):
|
||||||
value = bytes_or_str.decode('utf-8')
|
value = bytes_or_str.decode('utf-8')
|
||||||
else:
|
else:
|
||||||
value = bytes_or_str
|
value = bytes_or_str
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
# 返回格式化时间的下一天
|
# 返回格式化时间的下一天
|
||||||
def next_day(day, i=1):
|
def next_day(day, i=1):
|
||||||
import datetime
|
import datetime
|
||||||
try:
|
try:
|
||||||
begin = datetime.datetime.strptime(day, '%Y-%m-%d')
|
begin = datetime.datetime.strptime(day, '%Y-%m-%d')
|
||||||
except:
|
except:
|
||||||
raise Exception("PLS input time as '2019-03-01!'")
|
raise Exception("PLS input time as '2019-03-01!'")
|
||||||
next_day = (begin + datetime.timedelta(days=i))
|
next_day = (begin + datetime.timedelta(days=i))
|
||||||
return datetime.datetime.strftime(next_day, "%Y-%m-%d")
|
return datetime.datetime.strftime(next_day, "%Y-%m-%d")
|
||||||
|
|
||||||
|
|
||||||
def class2dict(a):
|
def class2dict(a):
|
||||||
try:
|
try:
|
||||||
dd = dict((name, getattr(a, name)) for name in dir(a) if
|
dd = dict((name, getattr(a, name)) for name in dir(a) if
|
||||||
(not name.startswith('_') and not name.startswith('__') and not callable(getattr(a, name))))
|
(not name.startswith('_') and not name.startswith('__') and not callable(getattr(a, name))))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("{} 转换到dict失败 ,{}".format(a, e))
|
print("{} 转换到dict失败 ,{}".format(a, e))
|
||||||
return None
|
return None
|
||||||
return dd # a=open(filename,'r').read() # time.strftime("%Y%m%d %H:%M:%S") # print( '20180807 15:23:29') # # time.strptime("20180702","%Y%m%d") # time.struct_time(tm_year=2018, tm_mon=7, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=183, tm_isdst=-1)
|
return dd # a=open(filename,'r').read() # time.strftime("%Y%m%d %H:%M:%S") # print( '20180807 15:23:29') # # time.strptime("20180702","%Y%m%d") # time.struct_time(tm_year=2018, tm_mon=7, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=183, tm_isdst=-1)
|
||||||
|
|
||||||
|
|
||||||
|
def is_number(s):
|
||||||
|
try:
|
||||||
|
float(s)
|
||||||
|
return True
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
import unicodedata
|
||||||
|
unicodedata.numeric(s)
|
||||||
|
return True
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
return False
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
mysql_conn = {"host": "192.168.100.30", "user": "miles", "pswd": "aspect", "db": "wjtx_log01"}
|
||||||
|
|
||||||
|
db_tables = (
|
||||||
|
"act_recharge", "arena_$date", "cailiao_$date", "chat_$date", "copy_end_$date", "exp_flow_$date", "first_charge",
|
||||||
|
"gift_bag", "item_change_$date", "mail_$date", "match_$date", "money_change_$date", "multi_player_boss",
|
||||||
|
"offline_award_$date", "pet_hh", "player_info_$date", "player_login_$date", "player_logout_$date",
|
||||||
|
"power_detail_$date",
|
||||||
|
"qy_answer_$date", "qy_question_$date", "role_online_count_$date", "sev_jinjie", "skill_upgrade", "sqhw_$date",
|
||||||
|
"strength_equip_$date", "task_flow_$date", "team_gard", "tower", "treasure_$date", "tribe_battle_$date",
|
||||||
|
"tribe_copy",
|
||||||
|
"tricks_$date", "vip_change_$date$date")
|
||||||
|
tga_url = "http://10.10.3.17:8992/querySql"
|
||||||
|
appid = "f325f667ceba4ce58a2a6553c977977d"
|
||||||
|
key = "SLZlX1IfdTkT7zYsnjJHaDuz9J4UraP65os8gr2fPoOzruPjHIILBxDMNd6W2743"
|
||||||
|
tgaid = 1009
|
||||||
|
db_row = {"act_recharge": ('name', 'acount_id', 'nickname'), "arena": ('name', 'acount_id', 'nickname')}
|
86
wjtx_log2tga.py
Normal file
86
wjtx_log2tga.py
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
-------------------------------------------------
|
||||||
|
File Name: wjtx_log2tga
|
||||||
|
Description :
|
||||||
|
Author : pengtao
|
||||||
|
date: 2020/2/12
|
||||||
|
-------------------------------------------------
|
||||||
|
Change Activity:
|
||||||
|
2020/2/12:
|
||||||
|
-------------------------------------------------
|
||||||
|
"""
|
||||||
|
__author__ = 'pengtao'
|
||||||
|
|
||||||
|
from common.plog import define_logger
|
||||||
|
from common.mmysql import MysqlBase
|
||||||
|
from common.mtga import FromTga
|
||||||
|
from common.common import is_number
|
||||||
|
import logging
|
||||||
|
from conf.wjtx_log import *
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
define_logger("/data/logs/ops/wjtx_log2tga.log")
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Db2TGA:
|
||||||
|
def __init__(self, day):
|
||||||
|
self.tga = FromTga(tga_url, key)
|
||||||
|
self.tga.init_tga_write(tgaid)
|
||||||
|
self.mysql = MysqlBase(**mysql_conn)
|
||||||
|
self.day = day
|
||||||
|
|
||||||
|
def write2tga(self, data, event_name):
|
||||||
|
self.tga.put_event_data(data, event_name=event_name)
|
||||||
|
|
||||||
|
def check_data(self, data):
|
||||||
|
return data
|
||||||
|
|
||||||
|
def collect_table(self, table_name, rows):
|
||||||
|
data = []
|
||||||
|
row_name = " ".jion(rows)
|
||||||
|
sql = f"select {row_name} from {table_name} where time between '{self.day} 00:00:00' and '{self.day} 23:59:59'"
|
||||||
|
out = self.mysql.query(sql)
|
||||||
|
if out:
|
||||||
|
for line in out:
|
||||||
|
try:
|
||||||
|
temp = {}
|
||||||
|
for i in range(0, len(rows)):
|
||||||
|
temp[rows[i]] = line[i]
|
||||||
|
data.append(temp)
|
||||||
|
except Exception:
|
||||||
|
log.error(f"split {line} failed!", exc_info=True)
|
||||||
|
else:
|
||||||
|
log.error(f"get data from {table_name} failed!")
|
||||||
|
return data
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
if not datetime.datetime.strptime(self.day, "%Y%m%d"):
|
||||||
|
log.error(f"{self.day} unformat!", exc_info=True)
|
||||||
|
return False
|
||||||
|
for table in db_tables:
|
||||||
|
if table.split('_')[-1] == "$date":
|
||||||
|
table_name = f"{table.split('_')[0]}_{self.day}"
|
||||||
|
rows = db_row.get(table.split('_')[0], None)
|
||||||
|
event_name = table.split('_')[0]
|
||||||
|
else:
|
||||||
|
table_name = table
|
||||||
|
rows = db_row.get(table)
|
||||||
|
event_name = table
|
||||||
|
data = self.collect_table(table_name, rows)
|
||||||
|
new = self.check_data(data)
|
||||||
|
self.write2tga(new, event_name)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import sys
|
||||||
|
day = sys.argv[1]
|
||||||
|
if not day:
|
||||||
|
raise Exception(f"pls check inputs days={day}")
|
||||||
|
db2tga = Db2TGA(day)
|
||||||
|
db2tga.run()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
x
Reference in New Issue
Block a user