当前位置:网站首页>不同环境相同配置项的内容如何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
边栏推荐
- 置信区间的画法
- GTEST from ignorance to proficiency (3) what are test suite and test case
- Redis has three methods for checking big keys, which are necessary for optimization
- Representation of confidence interval
- 挖财学院股票开户安全吗?开户只能在挖财开户嘛?
- Radio and television Wuzhou signed a cooperation agreement with Huawei to jointly promote the sustainable development of shengteng AI industry
- 开户哪家券商比较好?网上开户安全吗
- 【C语言进阶篇】数组&&指针&&数组笔试题
- 网上开户哪家证券公司佣金最低,我要开户,网上开户安全吗
- 并发优化总结
猜你喜欢
Play with grpc - go deep into concepts and principles
Common open source codeless testing tools
B站大量虚拟主播被集体强制退款:收入蒸发,还倒欠B站;乔布斯被追授美国总统自由勋章;Grafana 9 发布|极客头条
Bizchart+slider to realize grouping histogram
How to transfer to software testing, one of the high paying jobs in the Internet? (software testing learning roadmap attached)
TCP protocol three times handshake process
Nat. Commun.| Machine learning jointly optimizes the affinity and specificity of mutagenic therapeutic antibodies
Kdd2022 | what features are effective for interaction?
NAACL-22 | 在基于Prompt的文本生成任务上引入迁移学习的设置
将QA引入软件开发生命周期是工程师要遵循的最佳实践
随机推荐
网上开户哪家证券公司佣金最低,我要开户,网上开户安全吗
从RepVgg到MobileOne,含mobileone的代码
Locust性能测试 —— 环境搭建及使用
What is business intelligence (BI), just look at this article is enough
vim 从嫌弃到依赖(23)——最后的闲扯
力扣_回文数
283. Moving zero-c and language assisted array method
什么是商业智能(BI),就看这篇文章足够了
可视化任务编排&拖拉拽 | Scaleph 基于 Apache SeaTunnel的数据集成
做BI开发,为什么一定要熟悉行业和企业业务?
服装企业为什么要谈信息化?
关系型数据库
时空预测3-graph transformer
《命令行上的数据科学第二版》校对活动重新启动
力扣98:验证二叉搜索树
KDD2022 | 什么特征进行交互才是有效的?
Tiktok actual combat ~ the number of comments is updated synchronously
Which securities company is better to open an account? Is online account opening safe
广电五舟与华为签署合作协议,共同推进昇腾AI产业持续发展
智洋创新与华为签署合作协议,共同推进昇腾AI产业持续发展