当前位置:网站首页>不同环境相同配置项的内容如何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
边栏推荐
猜你喜欢

可视化任务编排&拖拉拽 | Scaleph 基于 Apache SeaTunnel的数据集成

Bizchart+slider to realize grouping histogram

NAACL-22 | 在基于Prompt的文本生成任务上引入迁移学习的设置

傳智教育|如何轉行互聯網高薪崗比特之一的軟件測試?(附軟件測試學習路線圖)

AscendEX 上线 Walken (WLKN) - 一款卓越领先的“Walk-to-Earn”游戏

Deveco device tool 3.0 release brings five capability upgrades to make intelligent device development more efficient

30余家机构联合发起数字藏品行业倡议,未来会如何前进?

Huawei Nova 10 series released Huawei application market to build a solid application security firewall

凭借了这份 pdf,最终拿到了阿里,字节,百度等八家大厂 offer

做BI开发,为什么一定要熟悉行业和企业业务?
随机推荐
Zhiyang innovation signed a cooperation agreement with Huawei to jointly promote the sustainable development of shengteng AI industry
NAACL-22 | 在基于Prompt的文本生成任务上引入迁移学习的设置
VIM from dislike to dependence (23) -- the last gossip
[advanced C language] array & pointer & array written test questions
Scala下载和配置
HDU - 2859 Phalanx(DP)
You don't have to run away to delete the library! Detailed MySQL data recovery
New intersectionobserver usage notes
Kdd2022 | what features are effective for interaction?
AscendEX 上线 Walken (WLKN) - 一款卓越领先的“Walk-to-Earn”游戏
Interview question 01.08 Zero matrix
WebGIS框架---kalrry
卷积神经网络模型之——LeNet网络结构与代码实现
leetcode 72. Edit Distance 编辑距离(中等)
TLA+ 入门教程(1):形式化方法简介
好用app推荐:扫描二维码、扫描条形码并查看历史
网上开户哪家证券公司佣金最低,我要开户,网上开户安全吗
Locust性能测试 —— 环境搭建及使用
Nat. Commun.| Machine learning jointly optimizes the affinity and specificity of mutagenic therapeutic antibodies
Sorting and sharing of selected papers, systems and applications related to the most comprehensive mixed expert (MOE) model in history