Commit 0c277885 authored by xiao-hesheng's avatar xiao-hesheng
Browse files

Signed-off-by: xiao-hesheng <xhs89@sina.com>

parent 26c6f206
Pipeline #3481 failed with stages
in 25 seconds
.idea
*.iml
.DS_Store
.project
target
*.pyc
log
\ No newline at end of file
import os
from jpype import *
import jpype
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = rootPath = os.path.split(curPath)[0]
startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=%s" % rootPath + os.sep + "jar" + os.sep + "utils.jar")
jclass = JClass("com.babytree.AesUtils")
class aesUtils:
def encrypt(self, content):
"""
aes_ecb模式加密
:param content:
:return:
"""
result = jclass.encrypt(content)
return result
def decrypt(self, content):
"""
aes_ecb模式解密
:param content:
:return:
"""
result = jclass.decrypt(content)
return result
def shutdown(self):
"""
关闭虚拟机
:return:
"""
shutdownJVM()
if __name__ == '__main__':
sign = aesUtils().encrypt("helloword")
print("加密:", sign)
sign2 = aesUtils().decrypt(sign)
print("解密: ", sign2)
aesUtils().shutdown()
import re
import os
def get_message(case_path, case_name):
"""
从注释中获取某个文件的 case tag 信息
"""
tags = []
pyfile = open(case_path + os.sep + case_name + '.py', 'r', encoding='utf-8')
lines = pyfile.readlines()
for line in lines:
if 'case_tag' in line:
line = line.split('case_tag')[-1]
#对不规范的写法做一些处理,如中文分号, 中文逗号,多空格等。。
line = re.sub(' ', '', line)
line = line.replace(',', ',').replace(':', '').replace(':', '')
line = line.strip().strip('\n')
tags = line.split(',')
pyfile.close()
return tags
def get_case_tag_list(case_path, tagList):
"""
遍历case目录下的文件,从文件中获取case tag,加入列表中
"""
case_list = []
for f in os.listdir(case_path):
script = os.path.join(case_path, f)
air_name = f.replace('.air', '')
case_tags = get_message(script, air_name)
comLevels = list(set(case_tags)&set(tagList))
if comLevels:
case_list.append(air_name)
return case_list
def get_author(case_path, case_name):
"""
获取case是谁写的
:return:
"""
name = 'Unknown'
pyfile = open(case_path + os.sep + case_name + '.air' + os.sep + case_name + '.py', 'r', encoding='utf-8')
lines = pyfile.readlines()
for line in lines:
if '__author__' in line:
line = line.split('__author__ = ')[-1]
name = line.replace('"', '')
name = name.strip().strip('\n')
pyfile.close()
return name
def get_case_by_author(case_path, user):
"""
根据作者执行用例
:param case_path:
:param user:
:return:
"""
case_list = []
for f in os.listdir(case_path):
script = os.path.join(case_path, f)
air_name = f.replace('.air', '')
author = get_author(case_path, air_name)
case_tags = get_message(script, air_name)
tagList = ['core']
comLevels = list(set(case_tags)&set(tagList))
if user == author and comLevels:
case_list.append(air_name)
return case_list
# -*- coding: utf-8 -*-
import unittest
import os
import sys
import six
import re
import shutil
import traceback
import warnings
from io import open
from airtest.core.api import G, auto_setup, log
from airtest.core.settings import Settings as ST
from airtest.utils.compat import decode_path, script_dir_name, script_log_dir
from copy import copy
class AirtestCase(unittest.TestCase):
PROJECT_ROOT = "."
SCRIPTEXT = ".air"
TPLEXT = ".png"
@classmethod
def setUpClass(cls):
cls.args = args
setup_by_args(args)
# setup script exec scope
cls.scope = copy(globals())
cls.scope["exec_script"] = cls.exec_other_script
def setUp(self):
if self.args.log and self.args.recording:
for dev in G.DEVICE_LIST:
try:
dev.start_recording()
except:
traceback.print_exc()
def tearDown(self):
if self.args.log and self.args.recording:
for k, dev in enumerate(G.DEVICE_LIST):
try:
output = os.path.join(self.args.log, "recording_%d.mp4" % k)
dev.stop_recording(output)
except:
traceback.print_exc()
def runTest(self):
scriptpath, pyfilename = script_dir_name(self.args.script)
pyfilepath = os.path.join(scriptpath, pyfilename)
pyfilepath = os.path.abspath(pyfilepath)
self.scope["__file__"] = pyfilepath
with open(pyfilepath, 'r', encoding="utf8") as f:
code = f.read()
pyfilepath = pyfilepath.encode(sys.getfilesystemencoding())
try:
exec(compile(code.encode("utf-8"), pyfilepath, 'exec'), self.scope)
except Exception as err:
tb = traceback.format_exc()
log("Final Error", tb)
six.reraise(*sys.exc_info())
@classmethod
def exec_other_script(cls, scriptpath):
"""run other script in test script"""
warnings.simplefilter("always")
warnings.warn("please use using() api instead.", PendingDeprecationWarning)
def _sub_dir_name(scriptname):
dirname = os.path.splitdrive(os.path.normpath(scriptname))[-1]
dirname = dirname.strip(os.path.sep).replace(os.path.sep, "_").replace(cls.SCRIPTEXT, "_sub")
return dirname
def _copy_script(src, dst):
if os.path.isdir(dst):
shutil.rmtree(dst, ignore_errors=True)
os.mkdir(dst)
for f in os.listdir(src):
srcfile = os.path.join(src, f)
if not (os.path.isfile(srcfile) and f.endswith(cls.TPLEXT)):
continue
dstfile = os.path.join(dst, f)
shutil.copy(srcfile, dstfile)
# find script in PROJECT_ROOT
scriptpath = os.path.join(ST.PROJECT_ROOT, scriptpath)
# copy submodule's images into sub_dir
sub_dir = _sub_dir_name(scriptpath)
sub_dirpath = os.path.join(cls.args.script, sub_dir)
_copy_script(scriptpath, sub_dirpath)
# read code
pyfilename = os.path.basename(scriptpath).replace(cls.SCRIPTEXT, ".py")
pyfilepath = os.path.join(scriptpath, pyfilename)
pyfilepath = os.path.abspath(pyfilepath)
with open(pyfilepath, 'r', encoding='utf8') as f:
code = f.read()
# replace tpl filepath with filepath in sub_dir
code = re.sub("[\'\"](\w+.png)[\'\"]", "\"%s/\g<1>\"" % sub_dir, code)
exec(compile(code.encode("utf8"), pyfilepath, 'exec'), cls.scope)
def setup_by_args(args):
# init devices
if isinstance(args.device, list):
devices = args.device
elif args.device:
devices = [args.device]
else:
devices = []
print("do not connect device")
# set base dir to find tpl
dirpath, _ = script_dir_name(args.script)
# set log dir
if args.log:
args.log = script_log_dir(dirpath, args.log)
print("save log in '%s'" % args.log)
else:
print("do not save log")
# guess project_root to be basedir of current .air path
project_root = os.path.dirname(args.script) if not ST.PROJECT_ROOT else None
try:
auto_setup(dirpath, devices, args.log, project_root)
except:
os.system('adb devices')
auto_setup(dirpath, devices, args.log, project_root)
def run_script(parsed_args, testcase_cls=AirtestCase):
global args # make it global deliberately to be used in AirtestCase & test scripts
args = parsed_args
suite = unittest.TestSuite()
suite.addTest(testcase_cls())
result = unittest.TextTestRunner(verbosity=0).run(suite)
if not result.wasSuccessful():
sys.exit(-1)
import yaml
import os
from common.rw import Rw
import requests
import json
from airtest.core.api import *
from common.confop import confOP
class commonFuc(object):
def headers(self, token):
headers = {
'clientInfo': '{"birthday":"2018-11-18","screenwidth":"375","clientVersion":"2.4.2","screenheight":"667","partner":"meitunmama","clientip":"10.180.81.127","traderName":"iPhone 6S","clientAppVersion":"2.4.2","clientYunyuVersion":"7.9.6","clientSystem":"ios","nettype":"wifi","deviceCode":"1f4b3860acfa303bca0407f5128bc5ea0f529fec"}',
'platform': "1",
'signature': "144c6b3c78fc20ad57da1ebdb879615b",
'token': token,
'timestamp': str(int(time.time()))
}
return headers
def get_api_url(self):
"""
接口类型的请求
:return:
"""
env = os.environ['ENV']
print(env)
if env == 'on':
url = 'https://m.meitun.com'
elif env == 'pre':
url = 'http://pre-m.meitun.com'
elif env == 'sita':
url = 'http://sita-m.meitun.com'
else:
url = 'http://sit-m.meitun.com'
return url
def check_token(self, enc_user_id='u779700044448'):
"""
多个case同一个token不用一直查数据库
:param enc_user_id:
:return:
"""
env = os.environ['ENV']
result = Rw().r_token(enc_user_id, env)
print(result)
if result == None:
return Rw().w_token(enc_user_id, env)
else:
return result["token"]
def http_get(self, url, token, params=""):
"""
一个get请求,返回json
"""
result = requests.get(url, headers=self.headers(token), params=params)
print(result.text)
result = json.loads(result.text)
return result
def check_result(self, check_dict, result):
"""
结果检查,要检查的字段及值放在字典里, 结果是完全匹配
result 是json
"""
assert_not_equal(result, [], "只想看下result的值")
for k, v in check_dict.items():
actual_value = self.analysis_json(k, result)
assert_equal(str(v).replace(" ", ""), str(actual_value).replace(" ", ""))
def analysis_json(self, key, result):
"""
解析json
"""
res = None
if self.typeof(result) == 'dict':
if key in result.keys():
return result[key]
else:
for k, v in result.items():
res = self.analysis_json(key, v)
if res != None:
break
elif self.typeof(result) == 'list':
for value in result:
res = self.analysis_json(key, value)
if res != None:
break
else:
pass
return res
def typeof(self, variate):
"""
变量类型
:param variate:
:return:
"""
if isinstance(variate, int):
return "int"
elif isinstance(variate, str):
return "str"
elif isinstance(variate, float):
return "float"
elif isinstance(variate, list):
return "list"
elif isinstance(variate, tuple):
return "tuple"
elif isinstance(variate, dict):
return "dict"
elif isinstance(variate, set):
return "set"
else:
return None
def get_data(self, path, module):
return confOP().getBusiYamlValue(path, module)
import configparser
import os
import yaml
cf = configparser.ConfigParser()
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = rootPath = os.path.split(curPath)[0]
def getConfValue(filename, section, option, type='string'):
cf.read(filename)
if (type == 'string'):
value = cf.get(section, option)
else:
value = cf.getint(section, option)
return value
def getYamlValue(filename):
file = os.path.join(rootPath, "data" + os.sep + filename)
f = open(file, 'r', encoding='utf-8')
cont = f.read()
value = yaml.load(cont)
f.close()
return value
u779700044448_sit:
time: 2021-03-02 14:48:30.914746
token: u779700044448_5c36630e639120c4471f216c928ffa2e_1614305054
enc_user_id: u779700044448
import datetime
import calendar
class dateUtils:
def get_current_start_end(self):
"""
获取当日的开始时间和结束时间
:return:
"""
start, end = datetime.datetime.now().replace(hour=0, minute=0, second=0).strftime(
"%Y-%m-%d %H:%M:%S"), datetime.datetime.now().replace(hour=23, minute=59, second=59).strftime(
"%Y-%m-%d %H:%M:%S")
return start, end
def get_week_start_end(self):
"""
获取本周的第一天和最后一天
:return:
"""
monday, sunday = datetime.date.today(), datetime.date.today()
one_day = datetime.timedelta(days=1)
while monday.weekday() != 0:
monday -= one_day
while sunday.weekday() != 6:
sunday += one_day
# 返回当前的星期一和星期天的日期
monday, sunday = monday.strftime("%Y-%m-%d %H:%M:%S"), sunday.strftime("%Y-%m-%d %H:%M:%S").replace("00:00:00", "23:59:59")
return monday, sunday
def get_current_time(self):
"""
获取当前时间,返回格式是yyyy-mm-dd hh:mm:ss
:return:
"""
curr_time = datetime.datetime.now()
time = datetime.datetime.strftime(curr_time, '%Y-%m-%d %H:%M:%S')
return time
def get_current_date(self):
"""
获取当前日期,返回格式是yyyy-mm-dd
:return:
"""
curr_time = datetime.datetime.now()
date = datetime.datetime.strftime(curr_time, '%Y-%m-%d')
return date
def get_week_of_date(self, date):
"""
获取传入的日期是星期几
:param date:
:return:
"""
week_day_dict = {
0: '星期一',
1: '星期二',
2: '星期三',
3: '星期四',
4: '星期五',
5: '星期六',
6: '星期日',
}
day = datetime.datetime.strptime(date, "%Y-%m-%d").weekday()
return week_day_dict[day]
def add_days(self, date, days):
"""
获取新的日期
:param date: 日期
:param days: 天数(可正数,可负数)
:return:
"""
dt = datetime.datetime.strptime(date, "%Y-%m-%d")
out_date = (dt + datetime.timedelta(days=days)).strftime("%Y-%m-%d")
return out_date
def add_hours(self, date, hours):
"""
获取新的时间
:param date:
:param hours:
:return:
"""
dt = datetime.datetime.strptime(date, "%Y-%m-%d %H:%M:%S")
out_date = (dt + datetime.timedelta(hours=hours)).strftime("%Y-%m-%d %H:%M:%S")
return out_date
def get_month_start_end(self, year, month):
"""
获取本月的第一天和最后一天
:return:
"""
weekDay, monthCountDay = calendar.monthrange(year, month)
firstDay = datetime.date(year, month, day=1)
lastDay = datetime.date(year, month, day=monthCountDay)
return firstDay, lastDay
def get_every_month_start_end(self, year):
"""
获取某年的每个月的第一天和最后一天
:param year:
:return:
"""
start = []
end = []
for x in range(1, 13):
dt_start = (datetime.datetime(int(year), x, 1)).strftime("%Y%m%d")
if 12 == x:
dt_end = (datetime.datetime(int(year), 12, 31)).strftime("%Y%m%d")
else:
dt_end = (datetime.datetime(int(year), x + 1, 1) - datetime.timedelta(days=1)).strftime("%Y%m%d")
start.append(dt_start)
end.append(dt_end)
return start, end
def get_year_month(self, time):
"""
获取某个时间的年、月份
:param time:
:return:
"""
dt = datetime.datetime.strptime(time, "%Y-%m-%d %H:%M:%S")
return dt.year, dt.month
if __name__ == '__main__':
print(dateUtils().get_current_date())
print(" \n ")
print(dateUtils().get_current_start_end())
print(" \n ")
print(dateUtils().add_days("2020-10-18", 10))
print(" \n ")
print(dateUtils().add_hours("2020-10-18 00:00:00", 3))
print(" \n ")
print(dateUtils().get_current_time())
print(" \n ")
print(dateUtils().get_every_month_start_end("2020"))
print(" \n ")
print(dateUtils().get_week_of_date("2020-10-18"))
[meitun_db]
host = 192.168.24.42
port = 3306
user = developer
password = DJ@TdX73
[promotion]
livedb = 19
liveenv = 4
liveserver = 129
predb = 19
preenv = 2
preserver = 58
[mongo]
ip = 127.0.0.1
port = 27017
[redis]
redis_host=192.168.24.31
import pymysql
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
import sys
sys.path.append(rootPath)
from common import confop
import pandas as pd
import pymongo
import redis
class dbOP:
def selectSql(self, schema, param=[], db="meitun_db"):
host = mySql().getConf(db)[0]
port = mySql().getConf(db)[1]
user = mySql().getConf(db)[2]
pwd = mySql().getConf(db)[3]
value = confop.getYamlValue("sql")
mySql().selectSql(host, port, user, pwd, value[schema][0], value[schema][1], param)
def ddlSql(self, schema, param=[], db="meitun_db"):
host = mySql().getConf(db)[0]
port = mySql().getConf(db)[1]
user = mySql().getConf(db)[2]
pwd = mySql().getConf(db)[3]
value = confop.getYamlValue("sql")
mySql().executeUpdate(host,port,user,pwd,value[schema][0],value[schema][1], param)
class mySql:
def __init__(self):
pass
def getConf(self,db="meitun_db"):
host = confop.getConfValue("conf.ini", db, "host")
port = confop.getConfValue("conf.ini", db, "port", "int")
user = confop.getConfValue("conf.ini", db, "user")
pwd = confop.getConfValue("conf.ini", db, "password")
return host,port,user,pwd
def connection(self, host, port, user, pwd, database):
return pymysql.connect(host=host, port=port,user=user,passwd=pwd,db=database)
def selectSql(self, host, port, user, pwd, database, sql, param=[]):
conn = self.connection(host, port, user, pwd, database)
cursor = conn.cursor()
try:
cursor.execute(sql, param)
data = cursor.fetchall()
cols = cursor.description
col = []
for i in cols:
col.append(i[0])
data = list(map(list, data))
result = pd.DataFrame(data, columns=col)
return result
except Exception as e:
print(e)
conn.rollback()
cursor.close()
conn.close()
def executeUpdate(self, host, port,user,pwd,database, sql, param=[]):
conn = self.connection(host, port,user,pwd,database)
cursor = conn.cursor()
try:
cursor.execute(sql, param)
conn.commit()
return cursor
except Exception as e:
print(e)
conn.rollback()
cursor.close()
conn.close()
class mongodb:
def connection(self,db,collect):
ip = confop.getConfValue("conf.ini", "mongo", "ip")
port = confop.getConfValue("conf.ini", "mongo", "port")
path = "mongodb://" + ip + ":" + port + "/"
myclient = pymongo.MongoClient(path)
mydb = myclient[db]
mycol = mydb[collect]
return mycol
#查询所有的值
def findALl(self, db, collect):
result = []
mycol = self.connection(db, collect)
for x in mycol.find():
result.append(x)
return result
#按照条件查询:条件为{}类型
def findByCon(self, db, collect, condition):
result = []
mycol = self.connection(db, collect)
for x in mycol.find(condition):
result.append(x)
return result
class redisClass:
def connect(self):
redis_host = confop.getConfValue("conf.ini", "redis", "redis_host")
pool = redis.ConnectionPool(host=redis_host)
r = redis.Redis(connection_pool=pool)
return r
def getValue(self,key):
r = redisClass().connect()
return r.get(key)
if __name__ == '__main__':
#mysql的例子
dbOP().selectSql("prc_prom_price", [13])
#monggdb的例子
mongodb().findByCon("yapi","user", {"role": "admin"})
#redis的例子
redisClass().connect()
This diff is collapsed.
import time
import telnetlib
import re
class TelnetClient(object):
"""通过telnet连接dubbo服务, 执行shell命令, 可用来调用dubbo接口
"""
def __init__(self, server_host, server_post):
self.tn = telnetlib.Telnet()
self.server_host = server_host
self.server_port = server_post
# 此函数实现telnet登录主机
def connect_dubbo(self):
try:
print("telent连接dubbo服务端: telnet {} {} ……".format(self.server_host, self.server_port))
self.tn.open(self.server_host, port=self.server_port)
return True
except Exception as e:
print('连接失败, 原因是: {}'.format(str(e)))
return False
# 此函数实现执行传过来的命令,并输出其执行结果
def execute_some_command(self, command):
# 执行命令
cmd = (command + '\n').encode("gbk")
self.tn.write(cmd)
# 获取命令结果,字符串类型
retry_count = 0
# 如果响应未及时返回,则等待后重新读取,并记录重试次数
result = self.tn.read_very_eager().decode(encoding='gbk')
while result == '':
time.sleep(1)
result = self.tn.read_very_eager().decode(encoding='gbk')
retry_count += 1
return result
# 退出telnet
def logout_host(self):
self.tn.write(b"exit\n")
print("登出成功")
class InvokeDubboApi(object):
def __init__(self, server_host, server_post):
try:
self.telnet_client = TelnetClient(server_host, server_post)
self.login_flag = self.telnet_client.connect_dubbo()
except Exception as e:
print("invokedubboapi init error" + str(e))
def invoke_dubbo_api(self, dubbo_service, dubbor_method, args):
api_name = dubbo_service + "." + dubbor_method + "({})"
cmd = "invoke " + api_name.format(args)
print("调用命令是:{}".format(cmd))
resp0 = None
try:
if self.login_flag:
resp0 = self.telnet_client.execute_some_command(cmd)
print("接口响应是,resp={}".format(resp0))
# dubbo接口返回的数据中有 elapsed: 4 ms. 耗时,需要使用elapsed 进行切割
return str(re.compile(".+").findall(resp0).pop(0)).split("elapsed").pop(0).strip()
else:
print("登陆失败!")
except Exception as e:
raise Exception("调用接口异常, 接口响应是resp={}, 异常信息为:{}".format(resp0, str(e)))
self.logout()
def logout(self):
self.telnet_client.logout_host()
class GetDubboService2(object):
def __init__(self):
pass
def get_dubbo_info2(self,content):
try:
dubbore = re.compile(r"([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)", re.I)
result = dubbore.search(str(content)).group()
print("获取到dubbo部署信息" + result)
return {"server_host": result.split(":")[0], "server_post": result.split(":")[1]}
except Exception as e:
raise Exception("获取dubbo部署信息失败:{}".format(str(e)))
This diff is collapsed.
import os
from ruamel import yaml
from common.db.db import dbOP
import datetime
curpath = os.path.dirname(os.path.realpath(__file__))
# 数据读入和写入文件
class Rw:
def w_token(self, enc_user_id='u779700044448', env='on'):
result = dbOP().selectSql('select_user_token', [enc_user_id])
token = result[0][0]
dict = {}
token_value = {}
token_value["time"] = datetime.datetime.now()
token_value["token"] = token
token_value["enc_user_id"] = enc_user_id
key = enc_user_id + "_" + env
dict[key] = token_value
yamlpath = os.path.join(curpath, "data")
# 写入到yaml文件
with open(yamlpath, "w", encoding="utf-8") as f:
yaml.dump(dict, f, Dumper=yaml.RoundTripDumper)
return token
def r_token(self, enc_user_id='u779700044448', env='on'):
yamlpath = os.path.join(curpath, "data")
file_value = open(yamlpath, 'r')
result = yaml.load(file_value.read(), Loader=yaml.Loader)
if result != None:
key = enc_user_id + "_" + env
if key in result:
return result[key]
else:
return None
else:
return None
def r_temp_file(self, key):
"""
读临时文件
:return:
"""
yamlPath = os.path.join(curpath, "temp.yaml")
file_value = open(yamlPath, 'r')
result = yaml.load(file_value.read(), Loader=yaml.Loader)
return result[key]
def w_temp_file(self, dict):
"""
写临时文件,没有会自动生成
:param content:
:return:
"""
yamlpath = os.path.join(curpath, "temp.yaml")
# 写入到yaml文件
with open(yamlpath, "w", encoding="utf-8") as f:
yaml.dump(dict, f, Dumper=yaml.RoundTripDumper)
# dev
# dev
172.16.10.203 api.babytree-dev.com
172.16.10.203 api-test11.babytree-test.com
172.16.10.203 api.test11.babytree-fpm.com
172.16.10.203 api.babytree.com
10.88.9.88 config.meitun.com copy.meitun.com
10.54.17.151 sita-h5.meitun.com
10.54.17.151 sita-cu.meitun.com
10.54.11.80 jenkins.baobaoshu.com atms.baobaoshu.com cloud.baobaoshu.com
10.88.7.8 fastdfs1.mt.com img11.meitun.com img01.meituncdn.com
10.88.7.8 fastdfs2.mt.com img12.meitun.com img02.meituncdn.com
10.54.11.80 grafana.baobaoshu.com
10.54.11.80 zabbix.baobaoshu.com
10.54.11.80 cacti.baobaoshu.com
10.54.11.80 ucm.baobaoshu.com
10.54.11.80 rundeck.baobaoshu.com dubbo.baobaoshu.com
10.54.11.80 cmdb.baobaoshu.com
10.54.11.80 apollo.baobaoshu.com muse.baobaoshu.com
10.54.11.80 splunk.baobaoshu.com
192.168.24.30 dbm.mt.com
192.168.24.30 dbs1.mt.com
192.168.24.30 redisdb1.mt.com redisdb2.mt.com redis.mobile.db01.mt.com rediscache1.mt.com rediscache2.mt.com rediscache3.mt.com
192.168.24.46 mqmaster.mt.com
192.168.24.47 mqslave01.mt.com
10.88.9.166 zk.mt.com
10.54.11.80 ucmweb.baobaoshu.com
172.16.9.154 webview.test9.dev.babytree-inc.com
172.16.9.154 test11.dev.babytree-inc.com
172.16.10.203 test11.babytree-dev.com test11.babytree-fpm.com m.test11.babytree-test.com test11.babytree-test.com test19.babytree-test.com webview.test9.dev.babytree-inc.com
10.54.17.151 sita-live.meitun.com
10.88.9.118 kafka.mt.com
10.88.7.11 pkg.baobaoshu.com
172.16.10.203 test100.babytree-dev.com g.babytree-dev.com
122.9.41.244 gerrit.babytree-inc.com
10.54.17.153 localproxy.baobaoshu.com
192.168.24.43 gerrit.mtmm.com
192.168.24.43 gerrit.baobaoshu.com
0.0.0.0 account.jetbrains.com
10.54.11.80 idb.baobaoshu.com
10.54.17.153 sit-backend.meitunmama.com
10.54.17.153 sit-openapi.meitun.com
180.168.13.174 backend.meitunmama.com
10.54.17.153 sit-m.meitun.com
10.54.17.153 sit-static.meitun.com
10.54.17.153 sit-static.meituncdn.com
10.54.17.153 static.meitun.com
10.54.17.153 static.meituncdn.com
47.97.216.230 m.meitun.com
10.88.17.43 pre-backend.meitunmama.com
172.16.9.154 pack.babytree-inc.com
# 线上
117.121.137.17 jumper.meitunmama.com
192.168.60.26 ops.baobaoshu.com
192.168.60.26 falcon.baobaoshu.com
115.159.253.118 ppt.baobaoshu.com
10.50.80.66 oneops.baobaoshu.com
10.50.80.66 ssv.baobaoshu.com
10.88.9.204 im.meitun.com
10.50.253.100 workflow.meitunmama.com
172.16.9.163 space.babytree-inc.com
10.88.17.43 pre-m.meitun.com
10.88.17.43 pre-openapi.meitun.com
10.54.11.80 mock.baobaoshu.com
10.54.11.80 mantis.baobaoshu.com
10.54.11.80 testportal.baobaoshu.com
\ No newline at end of file
user:
live:
- 9
- 4
- 310
pre:
- 9
- 2
- 307
health:
live:
- 35
- 4
- 165
pre :
- 35
- 2
- 163
sit: health
alimall:
live:
- 736
- 4
- 828
pre :
- 736
- 2
- 826
sit: alimall
promotion:
live:
- 19
- 4
- 129
pre:
- 19
- 2
- 58
sit: promotion
salesorder:
live:
- 6
- 4
- 134
pre :
- 6
- 2
- 6
sit: salesorder
seller:
live:
- 7
- 4
- 144
pre:
- 7
- 2
- 7
sit: seller
cms:
live:
- 22
- 4
- 142
pre:
- 22
- 2
- 41
sit: cms
community:
live:
- 25
- 4
- 147
pre:
- 25
- 2
- 37
sit: community
price:
live:
- 14
- 4
- 138
pre:
- 14
- 2
- 51
sit: price
medical:
live:
- 766
- 4
- 1131
pre:
- 766
- 2
- 1128
sit: medical
bcoin:
live:
- 717
- 4
- 750
pre:
- 717
- 2
- 747
sit: bcoin
edu:
live:
- 727
- 4
- 794
pre:
- 727
- 2
- 792
sit: edu
account:
live:
- 62
- 4
- 293
pre:
- 62
- 2
- 291
sit: account
finance:
live:
- 10
- 4
- 136
pre:
- 10
- 2
- 139
sit: finance
socialec:
live:
- 762
- 4
- 1079
pre:
- 762
- 2
- 1077
sit: socialec
item:
live:
- 8
- 4
- 143
pre:
- 8
- 2
- 8
sit: item
new_wms:
live:
- 763
- 4
- 1089
pre:
- 763
- 2
- 1086
sit: new_wms
distribution:
live:
- 67
- 4
- 312
pre:
- 67
- 2
- 315
sit: new_wms
"dingding_msg":
-
# 存储业务sql
"select_patient":
- medical
- SELECT relation_id,name,gender,id FROM `patient` where enc_user_id=%s and deleted=0;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment