当前位置:网站首页>不同环境相同配置项的内容如何diff差异?
不同环境相同配置项的内容如何diff差异?
2022-07-04 21:58:00 【Wu_Candy】
Step1:分享背景
在工作中,我们用到的环境经常会有很多套,由于不同的环境使用的配置是不一样的,那么怎么能够对比所有不同环境的相同配置项各是什么内容呢?
Step2:Python代码实现
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
#指定java工程目录
dirpath="D:\java_project\entitystorage"
emails='[email protected]'
alldict={}
#获取所有文件里的key and value
def get_all_property(dirpath,env):
for root, dirs, files in os.walk(dirpath, topdown=False):
for fn in files:
fullpathfile=os.path.join(root, fn)
if(env in fullpathfile and "properties" in fullpathfile):
with open(fullpathfile,'r',encoding='utf-8') as ff:
print(ff)
for line in ff.readlines():
print(fullpathfile,line)
if(not line.startswith("#")):
line=line.replace("\n","")
if(len(line)>1):
if("=" in line):
kv=line.split("=")
get_all_properties(env, kv[0], kv[1])
else:
print("the "+str(fullpathfile) +"has an error!!!")
#将获取的key and value 内容放入字典
def get_all_properties(env,k,v):
if(env not in alldict.keys()):
alldict[env] = {}
alldict[env][k]=v
else:
alldict[env][k]=v
#在页面上展示不同环境的key 对应的值
def show_data_to_page(betadict,stagingdict,uatdict,proddict):
count=0
str1 = '<!DOCTYPE html> <html> <meta charset="utf-8"> <head> <style type="text/css"> table.gridtable {font-family: verdana,arial,sans-serif; font-size:11px; color:#333333; border-width: 1px; border-color: #666666; border-collapse: collapse; } table.gridtable th {border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede; } table.gridtable td {border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff; } </style> </head>';
str1 = str1 + '<body>'
str1 = str1 + ' <table class="gridtable">'
str1 = str1 + ' <tr> <th>key</th> <th>beta</th> <th>staging</th> <th>uat</th> <th>prod</th> <tr/> '
sorted_prod=sorted(proddict['prod'].items(), key=lambda d: d[0])
for pk,pv in sorted_prod:
count+=1
print(count,pk,pv)
if(pk in betadict['betamagic'].keys()):
try:
if(len(betadict['betamagic'][pk])>0):
bv=betadict['betamagic'][pk]
if(str(pv).lower()==str(bv).lower()):
bv="<p style='color:blue'><B>"+bv+"</B>"
else:
bv = "None"
except:
bv="None"
else:
bv="None"
if (pk in stagingdict['staging'].keys()):
try:
if (len(stagingdict['staging'][pk]) > 0):
sv = stagingdict['staging'][pk]
if (str(pv).lower() == str(sv).lower()):
sv = "<p style='color:blue'><B>" + sv + "</B>"
else:
sv = "None"
except:
sv = "None"
else:
sv = "None"
if (pk in uatdict['uat'].keys()):
try:
if (len(uatdict['uat'][pk]) > 0):
uv = uatdict['uat'][pk]
if (str(pv).lower() == str(uv).lower()):
uv = "<p style='color:blue'><B>" + uv + "</B>"
else:
uv = "None"
except:
uv = "None"
else:
uv = "None"
str1+='<tr> <td>' + str(count)+" . "+ pk + '</td> <td>' + bv + '</td> <td>' + sv + '</td> <td>' + uv + '</td> <td>' + pv + '</td> <tr/>'
str1 = str1 + ' </table>'
str1 = str1 + '</body> </html>'
str1=str1.replace("None","<p style='color:green'><B>None</B>")
send_mail(emails, 'diff the properties', str1)
def send_mail(receivers, title, content):
sender = '[email protected]'
mailto = receivers.split(",")
try:
msg = MIMEMultipart()
msg['Subject'] = title
to_user = ",".join(mailto)
print("receivers...", to_user)
msg['to'] = to_user
msg['From'] = sender
body = MIMEText(content, _subtype='html', _charset='utf-8')
msg.attach(body)
smtp = smtplib.SMTP('smtp.officexxx.com', 587)
smtp.starttls()
print("sending")
smtp.login("[email protected]", "testkyjrsdxz")
smtp.sendmail(sender, mailto, msg.as_string())
print("send")
smtp.quit()
except smtplib.SMTPException as e:
print(e)
if __name__ == '__main__':
get_all_property(dirpath,"betamagic")
betadict=alldict
print(betadict)
alldict={}
print("***")
get_all_property(dirpath,"staging")
stagingdict = alldict
print(stagingdict)
alldict = {}
get_all_property(dirpath,"uat")
uatdict = alldict
print(uatdict)
alldict = {}
get_all_property(dirpath,"prod")
proddict = alldict
print(proddict)
show_data_to_page(betadict,stagingdict,uatdict,proddict)
Step3:邮件效果图展示
备注说明:
1. 图中红色表示live环境有对应项,但是其他环境没有的。
2. 图中蓝色表示非live环境与live配置相同的。
end
边栏推荐
- Nat. Commun.| 机器学习对可突变的治疗性抗体的亲和力和特异性进行共同优化
- From repvgg to mobileone, including mobileone code
- 并列图的画法,多排多列
- 力扣3_383. 赎金信
- Deveco device tool 3.0 release brings five capability upgrades to make intelligent device development more efficient
- 置信区间的画法
- 微服务--开篇
- vim 从嫌弃到依赖(23)——最后的闲扯
- WebGIS framework -- kalrry
- Solve the problem of data disorder caused by slow asynchronous interface
猜你喜欢
TLA+ 入门教程(1):形式化方法简介
迷失在Mysql的锁世界
Convolutional neural network model -- lenet network structure and code implementation
MongoDB聚合操作总结
Locust性能测试 —— 环境搭建及使用
Ascendex launched Walken (WLKN) - an excellent and leading "walk to earn" game
Redis has three methods for checking big keys, which are necessary for optimization
抖音实战~评论数量同步更新
[optimtool.unconstrained] unconstrained optimization toolbox
QT—绘制其他问题
随机推荐
【C语言进阶篇】数组&&指针&&数组笔试题
Representation of confidence interval
i.MX6ULL驱动开发 | 24 - 基于platform平台驱动模型点亮LED
现在mysql cdc2.1版本在解析值为0000-00-00 00:00:00的datetime类
删库不必跑路!详解 MySQL 数据恢复
广电五舟与华为签署合作协议,共同推进昇腾AI产业持续发展
虚拟人产业面临的挑战
Interview question 01.01 Determine whether the character is unique
Solana链上应用Crema因黑客攻击停运
PostgreSQL服务端编程聚合和分组
做BI开发,为什么一定要熟悉行业和企业业务?
Sorting and sharing of selected papers, systems and applications related to the most comprehensive mixed expert (MOE) model in history
Scala下载和配置
力扣98:验证二叉搜索树
el-tree结合el-table,树形添加修改操作
B站大量虚拟主播被集体强制退款:收入蒸发,还倒欠B站;乔布斯被追授美国总统自由勋章;Grafana 9 发布|极客头条
[optimtool.unconstrained] unconstrained optimization toolbox
什么是商业智能(BI),就看这篇文章足够了
制作条形码的手机App推荐
GTEST from ignorance to skillful use (1) GTEST installation