当前位置:网站首页>How diff are the contents of the same configuration item in different environments?
How diff are the contents of the same configuration item in different environments?
2022-07-04 22:22:00 【Wu_ Candy】
Step1: Share the background
At work , The environment we use often has many sets , Because different environments use different configurations , So how can we compare the same configuration items of all different environments ?
Step2:Python Code implementation
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
# Appoint java Project directory
dirpath="D:\java_project\entitystorage"
emails='[email protected]'
alldict={}
# Get all files 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!!!")
# To obtain the key and value Put the content into the dictionary
def get_all_properties(env,k,v):
if(env not in alldict.keys()):
alldict[env] = {}
alldict[env][k]=v
else:
alldict[env][k]=v
# Show different environments on the page key Corresponding value
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: E-mail rendering
Remarks :
1. Red in the figure indicates live Environment has corresponding items , But not in other environments .
2. Blue in the figure indicates non live Environment and live Same configuration .
end
边栏推荐
- 并列图的画法,多排多列
- Visual task scheduling & drag and drop | scalph data integration based on Apache seatunnel
- TCP protocol three times handshake process
- Energy momentum: how to achieve carbon neutralization in the power industry?
- 使用 BlocConsumer 同时构建响应式组件和监听状态
- Nat. Commun.| Machine learning jointly optimizes the affinity and specificity of mutagenic therapeutic antibodies
- Short video system source code, click the blank space of the screen, the keyboard does not automatically stow
- 制作条形码的手机App推荐
- Jvm-Sandbox-Repeater的部署
- Use blocconsumer to build responsive components and monitor status at the same time
猜你喜欢
随机推荐
Relational database
湘江鲲鹏加入昇腾万里伙伴计划,与华为续写合作新篇章
可视化任务编排&拖拉拽 | Scaleph 基于 Apache SeaTunnel的数据集成
机器人相关课程考核材料归档实施细则2022版本
el-tree结合el-table,树形添加修改操作
What is the stock account opening process? Is it safe to use flush mobile stock trading software?
QT - plot other problems
NAACL-22 | 在基于Prompt的文本生成任务上引入迁移学习的设置
LOGO特训营 第五节 字体结构与设计常用技法
迷失在Mysql的锁世界
HDU - 2859 Phalanx(DP)
Telephone encryption, middle 4 is replaced by * * * *
Éducation à la transmission du savoir | Comment passer à un test logiciel pour l'un des postes les mieux rémunérés sur Internet? (joindre la Feuille de route pour l'apprentissage des tests logiciels)
制作条形码的手机App推荐
More than 30 institutions jointly launched the digital collection industry initiative. How will it move forward in the future?
HDU - 2859 Phalanx(DP)
WebGIS框架---kalrry
Shell 脚本实现应用服务日志入库 Mysql
【C语言进阶篇】数组&&指针&&数组笔试题
A large number of virtual anchors in station B were collectively forced to refund: revenue evaporated, but they still owe station B; Jobs was posthumously awarded the U.S. presidential medal of freedo