一.需求分析
- 有查询,删除,添加的功能
- 查询功能:查询则打印查询内容,如果不存在也要打印相应的信息
- 删除功能:查询到要删除内容则删除,打印信息。
- 添加功能:同上。
二.流程图
三.代码实现
本程序主要分成两部分,接口部分与主函数处理部分,接口部分主要是用于编写三个接口,添加、删除、查询接口,此部分程序存储在Data_Deal.py函数中,主函数程序则执行系统的主循环逻辑,主要是上图流程图中的接口调用部分,此部分程序主要在Data_Change.py中实现,话不多说,上代码:
Data_Deal.py函数程序代码如下:
import sys def Check_Backend(): #数据查询接口 Backend = str(input("输入要查询的Backend :")) Backend_split = 'backend '+Backend+'\n'#根据输入内容组成要查询的字符串 T =True with open('song.txt','r') as f:#文件循环 for line in f: if Backend_split in line :#条件判断 sys.stdout.write(line) T= False continue if T==False: sys.stdout.write(line) break if T ==True: print("文件不存在 !") def Add_Backend(): #数据添加接口 T =True msg =eval(input("输入要存入的数据 :"))#字符串转换成列表,这里注意eval函数,此函数可以将字符串转换成字典,前提是字符串内容是一个字典 with open('song.txt','a+') as f:#文件循环 f.seek(0)#移动文件指针 for line in f: if "backend "+msg["backend"]+'\n'== line: print("当前Backend已存在,存入失败 !") T = False break if T == True: stradd = '\nbackend '+msg['backend']+'\n'+'\t'.expandtabs()+'server '+\ msg['record']['server']+' weight '+str(msg['record']['weight'])+' maxconn '+str(msg['record']['maxconn'])+'\n'#组帧,写入数据要按照一定格式转换成字符串 f.write(stradd) print("添加成功 !") def Del_Backend(): #数据删除接口 local = 0 T = False F = False Num=0 msg =eval(input("输入要删除的数据 :"))#字符串转换成列表 f = open('song.txt', 'r+')#读写模式打开文件 lines = f.readlines()#一次读出所有行 f.seek(0)#移动文件指针 f.truncate()#清除文件内容 for i,line in enumerate(lines): if T==True: Num+=1 if Num>=2: T=False print("删除成功 !") F =True else: continue if line == 'backend '+msg['backend']+'\n': T =True Num=0 continue f.write(line)#逐行写入文件,如果遇到要删除的内容则不写入 if F==False: print("数据库中没有此条数据,删除失败!")
此文件的读写要特别读写后的读写指针的位置,文件的操作如果读写指针有误可能导致文件出错,删除接口要特别注意,本函数使用较为笨拙的方案,一次读出所有数据然后比对写入,这种方案的前提是文件相对较小,如果大文件的读写删除不建议使用此方法。
Data_Change.py程序代码如下:
while True: msg = input("1.查询\n2.删除\n3.添加\n,输入q退出程序,请输入你的选择 :") if msg.isdigit(): msg=int(msg) if msg==1: Check_Backend() elif msg==2: Del_Backend() elif msg==3: Add_Backend() else: pass elif msg=='q': break else: pass
haproxy文件文本内容如下:
global
log 127.0.0.1 local2
daemon
maxconn 256
log 127.0.0.1 local2 info
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
listen stats :8888
stats enable
stats uri /admin
stats auth admin:1234
frontend oldboy.org
bind 0.0.0.0:80
option httplog
option httpclose
option forwardfor
log global
acl www hdr_reg(host) -i www.oldboy.org
use_backend www.oldboy.org if www
backend www.oldboy.org
server 100.1.7.9 weight 20 maxconn 30
backend www.koujie.org
server 100.1.7.9 weight 2000 maxconn 3000
数据输入格式如下:
#1、查 # 输入:www.oldboy.org # 获取当前backend下的所有记录 #2、新建 #输入: #arg = { 'bakend': 'www.oldboy.org', 'record':{ 'server': '100.1.7.9', 'weight': 20, 'maxconn': 30 } } #3、删除 #输入: # arg = { 'bakend': 'www.oldboy.org', 'record':{ 'server': '100.1.7.9', 'weight': 20, 'maxconn': 30 } }