当前位置:网站首页>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
边栏推荐
- HDU - 1078 fatmouse and cheese (memory search DP)
- 1807. Replace the parentheses in the string
- Enabling digital economy Fuxin software attends the BRICs high level Forum on Sustainable Development
- 将QA引入软件开发生命周期是工程师要遵循的最佳实践
- Force buckle 2_ 1480. Dynamic sum of one-dimensional array
- 时空预测3-graph transformer
- [advanced C language] array & pointer & array written test questions
- 2022-07-04:以下go语言代码输出什么?A:true;B:false;C:编译错误。 package main import “fmt“ func main() { fmt.Pri
- leetcode 72. Edit Distance 编辑距离(中等)
- How can the advertising system of large factories be upgraded without the presence of large models
猜你喜欢

将QA引入软件开发生命周期是工程师要遵循的最佳实践

el-tree结合el-table,树形添加修改操作

卷积神经网络模型之——LeNet网络结构与代码实现

赋能数字经济 福昕软件出席金砖国家可持续发展高层论坛

Bookmark

力扣98:验证二叉搜索树

迷失在Mysql的锁世界

VS2019 C# release下断点调试

Xiangjiang Kunpeng joined the shengteng Wanli partnership program and continued to write a new chapter of cooperation with Huawei

Huawei Nova 10 series released Huawei application market to build a solid application security firewall
随机推荐
WebGIS框架---kalrry
Common shortcut keys for hbuilder x
Machine learning notes mutual information
置信区间的画法
el-tree结合el-table,树形添加修改操作
Concurrent network modular reading notes transfer
Nat. Commun.| 机器学习对可突变的治疗性抗体的亲和力和特异性进行共同优化
# 2156. Find the substring of the given hash value - post order traversal
Flask 上下文详解
机器人相关课程考核材料归档实施细则2022版本
É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)
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
Embedded development: skills and tricks -- seven skills to improve the quality of embedded software code
面试题 01.01. 判定字符是否唯一
广电五舟与华为签署合作协议,共同推进昇腾AI产业持续发展
With this PDF, we finally got offers from eight major manufacturers, including Alibaba, bytek and Baidu
i.MX6ULL驱动开发 | 24 - 基于platform平台驱动模型点亮LED
Why should garment enterprises talk about informatization?
283. 移动零-c与语言辅助数组法
i. Mx6ull driver development | 24 - platform based driver model lights LED