加速器后台程序,,[Python]代码#!


[Python]代码

#!/usr/bin/env py262import osimport sysimport refrom xml.dom import minidomfrom lxml import etreefrom StringIO import StringIOimport timefile_eth1 = '/etc/sysconfig/network-scripts/ifcfg-eth1'file_eth0 = '/etc/sysconfig/network-scripts/ifcfg-eth0'file_sysctl = '/etc/sysctl_test.conf'file_vd = '/etc/init.d/varnishd'file_vf = '/usr/local/varnish_214/etc/varnish_01.conf'filexml= '/speedy_data_transfers_server/speedy_data_transfers_server/WEB-INF/classes/config/config.xml'nw = {}eth = {}def daemonize (stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):    ''' Fork the current process as a daemon, redirecting standard file        descriptors (by default, redirects them to /dev/null).    '''    # Perform first fork.    try:        pid = os.fork( )        if pid > 0:            sys.exit(0) # Exit first parent.    except OSError, e:        sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror))        sys.exit(1)    # Decouple from parent environment.    os.chdir("/")    os.umask(0)    os.setsid( )    # Perform second fork.    try:        pid = os.fork( )        if pid > 0:            sys.exit(0) # Exit second parent.    except OSError, e:        sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror))        sys.exit(1)    # The process is now daemonized, redirect standard file descriptors.    for f in sys.stdout, sys.stderr: f.flush( )    si = file(stdin, 'r')    so = file(stdout, 'a+')    se = file(stderr, 'a+', 0)    os.dup2(si.fileno( ), sys.stdin.fileno( ))    os.dup2(so.fileno( ), sys.stdout.fileno( ))    os.dup2(se.fileno( ), sys.stderr.fileno( ))def parse_xml(fn,r_t,*tg):    f_x = open(fn,'r')    f_x.seek(0,0)    tree = etree.parse(fn)    root = tree.getroot()    #print root    #print type(root)    NS = '{http://accelerator.com/config}'    r_t_element = root.findall( NS  + r_t)    #print r_t_element    #print type(r_t_element)    if len(tg) >= 2:        #if tg[-2] is None:           #print tg[-2]        s_t_element = tree.findall("//" + NS  + tg[-2])        tg1_element = s_t_element[0].findall(NS + tg[-1])        b = []        for i in tg1_element:            b.append(i.text)        return b    if len(tg) < 2:        tg1_element = r_t_element[0].findall(NS + tg[-1])        b = []        for i in tg1_element:            b.append(i.text)        return bdef file_replace(filename,srcStr,dstStr):    f = open(filename,'r')    sc = f.read()    stra = re.compile(srcStr)    sub = re.sub(stra,dstStr,sc,0)    f.close    fok = open(filename,'w')    fok.write(sub)    fok.close()def file_replace_escap(filename,srcStr,dstStr):    f = open(filename,'r')    sc = f.read()    stra0 = re.sub('\^','\\^',srcStr)    stra1 = re.sub('\$','\\$',stra0)    stra2 = re.sub('\(','\\(',stra1)    stra3 = re.sub('\)','\\)',stra2)    stra = re.compile(stra3)    sub = re.sub(stra,dstStr,sc)    f.close    fok = open(filename,'w')    fok.write(sub)    fok.close()def fetch_conf(fn,conf):  #conf maybe: IPADDR|NETMASK|NETWORK|GATEWAY    #file_nw = file('/etc/sysconfig/network','r')    #file_nw.seek(0,0)    fn.seek(0,0)    if conf == 'GATEWAY':        #file_nw = file('/etc/sysconfig/network','r')        for eachLine in fn:            #alist = eachLine.strip().split('=')            m1 = re.match('^#|^$',eachLine)            if m1 is not None:                continue            else:                m1 = re.search('=',eachLine)                if m1 is not None:                    alist = eachLine.strip().split('=')                    nw[alist[0]]=alist[1]        #print nw[conf]        return  nw[conf]    else:        #file_eth1_pu = file('/etc/sysconfig/network-scripts/ifcfg-eth0','r')        for eachLine in fn:            #alist = eachLine.strip().split('=')            m1 = re.match('^#|^$',eachLine)            if m1 is not None:                continue            else:                m1 = re.search('=',eachLine)                if m1 is not None:                    alist = eachLine.strip().split('=')                    eth[alist[0]]=alist[1]        return eth[conf]def check_pn():       file_eth1_pu = open(file_eth1,'r')    xml_ip = parse_xml(filexml,"network","public_setting","ip")    xml_mk = parse_xml(filexml,"network","public_setting","mask")    xml_gw = parse_xml(filexml,"network","public_setting","gateway")    conf_ip = fetch_conf(file_eth1_pu,"IPADDR")    conf_mk = fetch_conf(file_eth1_pu,"NETMASK")    conf_gw = fetch_conf(file_eth1_pu,"GATEWAY")    file_eth1_pu.close()    '''check public ip'''    if  xml_ip[0] == conf_ip:        print "ip is ok",xml_ip[0],conf_ip    else:        print "ip is wrong",xml_ip[0],conf_ip        file_replace(file_eth1,conf_ip,xml_ip[0])        #os.system('''sudo sed -i 's|wrong|right|g' /etc/sysconfig/network-scripts/ifcfg-eth1''')    '''check public netmask'''    if xml_mk[0] == conf_mk:        print "netmask is ok",xml_mk[0],conf_mk    else:        print "netmask is wrong",xml_mk[0],conf_mk        file_replace(file_eth1,conf_mk,xml_mk[0])    '''check public gateway'''    if xml_gw[0] == conf_gw:        print "gateway is ok",xml_gw[0],conf_gw    else:        print "gateway is wrong",xml_gw[0],conf_gw        file_replace(file_eth1,conf_gw,xml_gw[0])def check_in():       file_eth0_it = open(file_eth0,'r')    xml_ip = parse_xml(filexml,"network","private_setting","ip")    xml_mk = parse_xml(filexml,"network","private_setting","mask")    xml_gw = parse_xml(filexml,"network","private_setting","gateway")    conf_ip = fetch_conf(file_eth0_it,"IPADDR")    conf_mk = fetch_conf(file_eth0_it,"NETMASK")    conf_gw = fetch_conf(file_eth0_it,"GATEWAY")    file_eth0_it.close()    '''check internal ip'''    if  xml_ip[0] == conf_ip:        print "ip is ok",xml_ip[0],conf_ip    else:        print "ip is wrong",xml_ip[0],conf_ip        file_replace(file_eth0,conf_ip,xml_ip[0])    '''check internal netmask'''    if xml_mk == conf_mk:        print "netmask is ok",xml_mk[0],conf_mk    else:        print "netmask is wrong",xml_mk[0],conf_mk        file_replace(file_eth0,conf_mk,xml_mk[0])    '''check internal gateway'''    if xml_gw == conf_gw:        print "gateway is ok",xml_gw[0],conf_gw    else:        print "gateway is wrong",xml_gw[0],conf_gw        file_replace(file_eth0,conf_gw,xml_gw[0])def bu_cv(str):    if str == "true":       return str.replace('true','1')    else:       return str.replace('false','0')def bu_cv0(str):    if str == '0':        return str.replace('0','true')    else:        return str.replace('1','false')def check_sysctl_fs():    file_sysctl_fs = open(file_sysctl,'r')    xml_fs_en = "tcp_fast.enable=" + bu_cv(str(parse_xml(filexml,"fasttcp","enable")[0]))    xml_fs_p1 = "tcp_fast.noaccel_lport=" + parse_xml(filexml,"fasttcp","block_port","value")[0]    xml_fs_p2 = "tcp_fast.noaccel_lport2=" + parse_xml(filexml,"fasttcp","block_port","value")[1]    conf_fs_en = "tcp_fast.enable=" + fetch_conf(file_sysctl_fs,'tcp_fast.enable')    conf_fs_p1 = "tcp_fast.noaccel_lport=" + fetch_conf(file_sysctl_fs,'tcp_fast.noaccel_lport')    conf_fs_p2 = "tcp_fast.noaccel_lport2=" + fetch_conf(file_sysctl_fs,'tcp_fast.noaccel_lport2')    file_sysctl_fs.close()    if xml_fs_en == conf_fs_en:        print "fastsoft enable toggle is ok"    else:        print "fastsoft enable toggle is bad"        file_replace(file_sysctl,conf_fs_en,xml_fs_en)    if xml_fs_p1 == conf_fs_p1:        print "fastsoft p1 is ok"    else:        print "fastsoft p2 is bad"        file_replace(file_sysctl,conf_fs_p1,xml_fs_p1)    if xml_fs_p2 == conf_fs_p2:        print "fastsoft p2 is ok"    else:        print "fastsoft p2 is bad"        file_replace(file_sysctl,conf_fs_p2,xml_fs_p2)def check_cache():    file_vd_cf = open(file_vd,'r')    xml_cache_mm = "VARNISH_STORAGE_SIZE=" + parse_xml(filexml,"cache","max_memeory")[0] + "M"    xml_cache_en = str(parse_xml(filexml,"cache","enable")[0])    conf_cache_mm = "VARNISH_STORAGE_SIZE=" + fetch_conf(file_vd_cf,'VARNISH_STORAGE_SIZE')    conf_cache_en = bu_cv0(str(os.system('ps aux | grep -v grep | grep -q varnishd')))    file_vd_cf.close()    if xml_cache_mm[0] == conf_cache_mm:        print "conf_cache_mm is ok"    else:        print "conf_cache_mm is bad"        file_replace(file_vd,conf_cache_mm,xml_cache_mm[0])    if xml_cache_en[0] == conf_cache_en:        print "conf_cache_en is ok"    else:        print "conf_cache_en is bad"        if xml_cache_en == 'true':            os.system('/sbin/service varnishd start')        if xml_cache_en == 'false':            os.system('/sbin/service varnishd stop')def gen_backend_str():    k = ""    xml_varnish_origin = parse_xml(filexml,"varnish","origin","value")    #print xml_varnish_origin[0].split('|')[0],xml_varnish_origin[0].split('|')[1],xml_varnish_origin[0].split('|')[2]    ft_bk = "#origin_backend_start#" + "\n" + "backend  " + xml_varnish_origin[0].split('|')[0] + " {\n" + "\t.host = \"" + xml_varnish_origin[0].split('|')[1] + "\";\n\t.port = \"" + xml_varnish_origin[0].split('|')[2]  + "\";\n}\n"    for i in xml_varnish_origin[1:-1]:        #print i.split('|')[0],i.split('|')[1],i.split('|')[2]        j = "backend  " + i.split('|')[0] + " {\n" + "\t.host = \"" + i.split('|')[1] + "\";\n\t.port = \"" + i.split('|')[2]  + "\";\n}\n"        k += j    #print xml_varnish_origin[-1].split('|')[0],xml_varnish_origin[-1].split('|')[1],xml_varnish_origin[-1].split('|')[2]    lt_bk = "backend  " + xml_varnish_origin[-1].split('|')[0] + " {\n" + "\t.host = \"" + xml_varnish_origin[-1].split('|')[1] + "\";\n\t.port = \"" + xml_varnish_origin[-1].split('|')[2]  + "\";\n}\n#origin_backend_end#\n"    all_str= ft_bk + k + lt_bk    #print all_str    return all_strdef gen_origin_str():    k = ""    xml_varnish_origin = parse_xml(filexml,"varnish","origin","value")    ft_o = "#origin_start#" + "\n" + "if (req.http.host ~ \"^" + xml_varnish_origin[0].split('|')[0]  +  "$\") {\n" + "set req.backend=" + xml_varnish_origin[0].split('|')[0] + " ;\n}"    #print ft_o    #print xml_varnish_origin[1:]    for i in xml_varnish_origin[1:]:       #print i       j = "  elsif (req.http.host ~ \"^" + i.split('|')[0]  +  "$\") {\n" + "set req.backend=" + i.split('|')[0] + " ;\n}"       k += j    lt_o = "  else {\n" + "error 404 \"Unknown virtual host\";\n" + "}\n#origin_end#\n"    #print ft_o + k + lt_o    return ft_o + k + lt_odef check_varnishd():    file_vd_cf = open(file_vd,'r')    xml_varnish_status = parse_xml(filexml,"varnish","status")[0]    xml_varnish_storage = parse_xml(filexml,"varnish","storage")[0]    #xml_varnish_origin = parse_xml(filexml,"varnish","origin","value")    conf_varnish_status = bu_cv0(str(os.system('ps aux | grep -v grep | grep -q varnishd')))    conf_varnish_storage = "VARNISH_STORAGE_SIZE=" + fetch_conf(file_vd_cf,'VARNISH_STORAGE_SIZE')    file_vd_cf.close()    fl_vf = open(file_vf,'r')    fl_vf_all = fl_vf.read()    m1 = re.search('#origin_backend_start#(\n.*)*#origin_backend_end#\n',fl_vf_all)    if m1 is not None:        conf_varnishd_backend = m1.group()    fl_vf.close()    fl_vf2 = open(file_vf,'r')    fl_vf_all2 = fl_vf2.read()    m2 = re.search('#origin_start#(\n.*)*#origin_end#\n',fl_vf_all2)    if m2 is not None:        conf_varnishd_origin = m2.group()    fl_vf2.close()    xml_varnishd_backend = gen_backend_str()    xml_varnishd_origin = gen_origin_str()    if xml_varnishd_backend != conf_varnishd_backend:        print "conf_varnishd_backend is wrong, Begin replace the wrong conf..."        print xml_varnishd_backend        print conf_varnishd_backend        file_replace('/usr/local/varnish_214/etc/varnish_01.conf',conf_varnishd_backend,xml_varnishd_backend)        #os.system('service varnishd restart')    else:        print xml_varnishd_backend        print conf_varnishd_backend        print "conf_varnishd_backend is ok"    if xml_varnishd_origin != conf_varnishd_origin:        print xml_varnishd_origin        print '------------------'        print conf_varnishd_origin        print "conf_varnishd_origin is wrong, Begin replace the wrong conf..."        file_replace_escap('/usr/local/varnish_214/etc/varnish_01.conf',conf_varnishd_origin,xml_varnishd_origin)        #os.system('service varnishd restart')    else:        print xml_varnishd_origin        print '------------------'        print conf_varnishd_origin        print "conf_varnishd_origin is ok"def main():    while True:        time.sleep(3)        daemonize()        check_pn()        check_in()        check_sysctl_fs()        check_cache()        check_varnishd()        gen_backend_str()        gen_origin_str()        check_varnishd()if __name__ == '__main__':   main()

评论关闭