Exemplo n.º 1
0
def init_system():
    form = MyForm.MyForm_input()
    try:
        if form.submit.data:
            ips = form.text.data.strip().splitlines()
            ips = set(ips)
            if len(ips) >10:
                raise flash('一次初始化服务器数量不能超过10个!')
            for ip in ips:
                ip_list = ip.split('.')
                hostname = 'S%s-%s.server.baihe' %(ip_list[2],ip_list[3])
                for i in ('45','46'):
                    Redis.lpush('clear%s_salt-minon' %i,hostname)
                def remote_run(ip):
                    def ssh2(ip, username, passwd,cmd):
                        try:
                            ssh = paramiko.SSHClient()
                            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
                            ssh.connect(ip, 22, username, passwd, timeout=30)
                            loging.write('%s     %s'%(ip,cmd))
                            ssh.exec_command(cmd)
                            ssh.close()
                        except Exception as e:
                            loging.write(e)
                    cmds = ['/sbin/service iptables stop && /sbin/chkconfig iptables off','rm -f /tmp/mod_host.sh','/usr/bin/yum -y install wget','/usr/bin/wget -P /tmp/ http://172.16.16.160/dw/shell/mod_host.sh','/bin/bash /tmp/mod_host.sh']
                    for cmd in cmds:
                        ssh2(ip,username,passwd,cmd)
                tm = datetime.datetime.now()+datetime.timedelta(minutes=1)
                tm = tm.strftime('%Y-%m-%d %H:%M:%S')
                flash('初始化 %s完成,后台需要运行60分钟......' % ip)
                scheduler.add_job(remote_run, 'date', run_date=tm,args=[ip],id=ip)
                scheduler.start()
    except Exception as e:
        loging.write(e)
    return render_template('init_system.html',form=form)
Exemplo n.º 2
0
Arquivo: cdn.py Projeto: znavy/opsweb
def curl():
    form = MyForm.MyForm_input()
    if form.submit.data:
        urls = form.text.data.strip().splitlines()
        urls = set(urls)
        for url in urls:
            Purge = purge.Purged()
            if not url or url.startswith('#'):
                continue
            else:
                url = url.strip()
            if not url.startswith('http'):
                flash('url begin with http(s)://')
                return render_template('Message.html')
            #clear ats cache
            '''
            ips = Purge.purge_ats(url)
            if ips is None:
                flash(url+' purge ATS success')
            else:
                flash(url+' purge ATS fail from %s' %str(ips))
            '''
            #clear cdn cache
            url_rep = Purge.purge_cdn(url)
            flash(url + ' purge CDN ' + url_rep)
        return render_template('Message.html')
    return render_template('cdn.html', form=form)
Exemplo n.º 3
0
def tables():
    form = MyForm.MyForm_input()
    if form.submit.data:
        try:
            ts = form.text.data.strip().splitlines()
            db_name = form.text2.data.strip()
            if ts and db_name:
                ts = set(ts)
                tt=('ip','port','数据库','表名','引擎','表行数','编码','版本')
                vv=[]
                Indexs = []
                INDEXS = []
                db = db_idc.idc_tableinfo
                for t_name in ts:
                    val = db.query.filter(and_(db.database_name == db_name,db.table_name == t_name)).all()
                    if val:
                        v = [str(v).encode('UTF-8').split(',') for v in val if v]
                        vv.append(v)
                        v = v[0]
                        cmds = ("show create table %s;" %v[3],"show index from %s;" %v[3])
                        for cmd in cmds:
                            Indexs.append(Mysql.Query_sql(v[0],v[1],v[2],cmd))
                    else:
                        return render_template_string('没有找到库{0}或者表{1}!'.format(db_name,t_name))
                for index in Indexs:
                    INDEX = []
                    for info in index:
                        info = [str(i).encode('UTF-8') for i in info]
                        INDEX.append(info)
                    INDEXS.append(INDEX)
                return render_template('tables_show.html',values=vv,tables=tt,INDEXS=INDEXS)
        except Exception as e:
            loging.write(e)
            return render_template_string('获取数据错误!')
    return render_template('tables.html',form=form)
Exemplo n.º 4
0
def init_system():
    form = MyForm.MyForm_input()
    if form.submit.data:
        ips = form.text.data.strip().splitlines()
        ips = set(ips)
        for ip in ips:
            Redis.lpush(init_key, ip)
            flash('已将%s加入初始化处理队列......' % ip)
    return render_template('init_system.html',
                           Main_Infos=g.main_infos,
                           form=form)
Exemplo n.º 5
0
def curl():
    form = MyForm.MyForm_input()
    if form.submit.data:
        urls = form.text.data.strip().splitlines()
        urls = set(urls)
        for url in urls:
            Purge = purge.Purged()
            if not url or url.startswith('#'):
                continue
            else:
                url = url.strip()
            if not url.startswith('http'):
                flash('url begin with http(s)://')
                return render_template('Message_static.html',Main_Infos=g.main_infos)
            url_rep=Purge.purge_cdn(url)
            flash(url+' purge CDN '+url_rep)
        return render_template('Message_static.html',Main_Infos=g.main_infos)
    return render_template('cdn.html',form=form,Main_Infos=g.main_infos)
Exemplo n.º 6
0
def init_system():
    form = MyForm.MyForm_input()

    def ssh2(ip, username, passwd, cmds):
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(ip, 22, username, passwd, timeout=30)
            for cmd in cmds:
                stdin, stdout, stderr = ssh.exec_command(cmd)
                if stderr.read():
                    flash(stderr.read())
            ssh.close()
        except Exception as e:
            loging.write(e)
            flash('初始化失败!')

    if form.submit.data:
        ips = form.text.data.strip().splitlines()
        ips = set(ips)
        for ip in ips:
            flash('初始化 %s 后台需要运行60分钟......' % ip)
            username = app.config.get('INIT_USER')
            passwd = app.config.get('INIT_PASSWORD')
            ip_list = ip.split('.')
            hostname = 'S%s-%s.server.baihe' % (ip_list[2], ip_list[3])
            for i in ('45', '46'):
                Redis.lpush('clear%s_salt-minon' % i, hostname)
            cmds = [
                'rm -f /tmp/mod_host.sh',
                '/usr/bin/wget -P /tmp/ http://172.16.16.160/dw/shell/mod_host.sh ',
                'echo "* * * * * /bin/bash /tmp/mod_host.sh" >/var/spool/cron/root'
            ]
            ssh2(ip, username, passwd, cmds)
            Redis.lpush('init_server_list', ip)
    return render_template('init_system.html', form=form)
Exemplo n.º 7
0
def mysql_parse():
    form = MyForm.MyForm_input()
    db = db_idc.idc_mysqldb
    db_table = db_idc.idc_tableinfo
    if form.submit.data:
        if form.text.data and form.input.data:
            mysql_db = form.input.data.strip()
            try:
                if ';' in form.text.data.strip():
                    sql_lines = form.text.data.strip().replace('\r\n', ' ')
                    for Line in sql_lines.split(';'):
                        if '.' in Line:
                            raise flash('%s 语句中不能有库名!' % Line)
                        if Line:
                            Line = '%s ;' % Line.strip()
                            line = Line.lower()
                            if 'delete' in line:
                                table_name = Line.split('from')[1].split()[0]
                            elif 'update' in line:
                                table_name = Line.split()[1]
                            elif 'alter' in line:
                                table_name = Line.split()[2]
                            else:
                                flash(Line)
                                flash('------->该SQL语句不在审查范围内!')
                                continue
                            # 从sql语句中抽取表名
                            val = db_table.query.with_entities(
                                db_table.ip, db_table.port,
                                db_table.Engine_name, db_table.Rows).filter(
                                    and_(
                                        db_table.database_name == mysql_db,
                                        db_table.table_name ==
                                        table_name.replace('`', ''))).all()
                            if val:
                                mysql_ip, mysql_port, Engine_name, Rows = val[
                                    0]
                                flash('----' * 24)
                                flash('数据库IP:{0},数据库端口:{1},表引擎:{2},表行数:{3}'.
                                      format(mysql_ip, mysql_port, Engine_name,
                                             Rows))
                                flash('----' * 24)
                                MYSQL = Mysql.MYSQL(user, password, mysql_ip,
                                                    mysql_port)
                                cmd = "explain %s" % Line
                                flash(Line)
                                result = MYSQL.Run(cmd)
                                if isinstance(result, list):
                                    flash('------->语法检查通过!')
                                else:
                                    raise flash('------->语法有错误! %s' %
                                                str(result))
                                MYSQL.Close()
                                if (int(Rows) >= 10000
                                        and Engine_name == 'MyISAM') or (
                                            int(Rows) >= 50000
                                            and Engine_name == 'InnoDB'):
                                    result = 'SQL语句建议进行定时执行!'
                                else:
                                    result = 'SQL语句可以直接执行!'
                                flash('----' * 24)
                                flash('审核结果:{0}'.format(result))
                                flash('----' * 24)
                            else:
                                raise flash('没有找到%s数据库的相关服务器信息!' % mysql_db)
                else:
                    flash('SQL语句没有以分号结尾!')
                    return render_template('Message.html')
            except Exception as e:
                if 'old-style' not in str(e):
                    flash(e)
            return render_template('Message_static.html')
        else:
            flash('输入框内容不能为空!')
            return render_template('Message.html')
    return render_template('mysql_parse.html', form=form)