Exemplo n.º 1
0
def chart_center_internet():
    try:
        reload(MyForm)
        form = MyForm.MyForm_chart_center()
        DOMAIN_DATA = None
        RT_DATA = None
        PV = RC.get('baihe_pv') or 'None'
        UV = len(RC.smembers('baihe_uv')) or 'None'
        if form.submit.data:
            Domain = form.select_internet.data
            Key = 'internet_access_%s' %Domain
            web_rt_key = 'internet_rt_%s' % Domain
            if RC.exists(Key):
                #获取响应时间
                DATA = [eval(v) for v in RC.lrange(web_rt_key, 0, -1)]
                DATA = [DATA[i] for i in xrange(0, len(DATA), 3)]
                RT_DATA = [{'data': DATA, 'name': str(Domain)}]
                #获取并发量
                DATA = [eval(v) for v in RC.lrange(Key, 0, -1)]
                DATA = [DATA[i] for i in xrange(0, len(DATA), 3)]
                DOMAIN_DATA = [{'data': DATA, 'name': str(Domain)}]
            else:
                 flash('暂时还没%s的相关数据!' %Domain)
        DATA = [eval(v) for v in Redis.lrange('lvs_internet', 0, -1)]
        LVS_DATA = [{'data': DATA, 'name': 'INTERNET_LVS'}]
        return render_template('chart_center_internet.html',form = form,LVS_DATA=LVS_DATA,DOMAIN_DATA=DOMAIN_DATA,RT_DATA=RT_DATA,PV=PV,UV=UV)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
Exemplo n.º 2
0
def dns_conf():
    form = MyForm.MyForm_dns_conf()
    if form.submit.data:
        try:
            domain = form.select_domain.data.strip()
            Type = form.select_type.data.strip()
            action = form.select_action.data.strip()
            field = form.field.data.strip()
            system = form.select_sys.data.strip()
            ip = form.ip.data.strip()
            db = db_op.dns_innr
            if field:
                if '.baihe.com' in field or '.ibaihe.com' in field or '.service.baihe' in field:
                    raise flash("二级域名格式错误!")
                value = db.query.with_entities(db.ip).filter(and_(db.domain == domain, db.Type == Type, db.field == field,db.system == system)).all()
                if action == 'add':
                    if system == 'cw' and domain != 'baihe.com':
                        raise flash('测外只可以操作baihe.com域名!')
                    if value:
                            raise flash('%s  IN  %s  %s 该DNS记录已存在' % (field, Type,str(value[0][0])))
                    if ip:
                        if Type == 'CNAME' and not ip.endswith('.'):
                            raise flash('CNAME 主机名格式错误!')
                        if Type == 'A' and not re.search('\.\d{1,3}$',ip):
                            raise flash('A IP地址格式错误!')
                        c = db(domain=domain, field=field, Type=Type, ip=ip,stats='1',system=system)
                        db_op.DB.session.add(c)
                        db_op.DB.session.commit()
                        flash(' %s  IN  %s  %s 添加完成!' % (field, Type, ip))
                    else:
                        flash('IP地址/主机名不能为空!')
                elif value:
                    if action == 'modify':
                        if ip:
                            if Type == 'CNAME' and not ip.endswith('.'):
                                raise flash('CNAME 主机名格式错误!')
                            if Type == 'A' and not re.search('\.\d{1,3}$',ip):
                                raise flash('A IP地址格式错误!')
                            db.query.filter(and_(db.domain == domain,db.Type == Type,db.field == field,db.system == system)).update({db.ip:ip,db.stats:'1'})
                            db_op.DB.session.commit()
                            flash(' %s  IN  %s  %s 修改完成!' %(field, Type,ip))
                        else:
                            flash('IP地址/主机名不能为空!')
                    if action == 'query':
                        ip = str(value[0][0])
                        flash('查询结果: {0}  IN  {1}   {2}'.format(field,Type,ip))
                    if action == 'del':
                        v = db.query.filter(and_(db.domain == domain, db.Type == Type, db.field == field,db.system == system)).all()
                        for c in v:
                            db_op.DB.session.delete(c)
                            db_op.DB.session.commit()
                        flash('%s记录已删除!' %(field))
                else:
                    flash('没有找到相关数据!')
            else:
                flash('二级域名不能为空!')
        except Exception as e:
            if 'old-style' not in str(e):
                flash(e)
    return render_template('dns_conf.html',form=form)
Exemplo n.º 3
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.º 4
0
def chart_center_traffic():
    tt = int(time.strftime('%Y%m%d', time.localtime()))
    try:
        reload(MyForm)
        form = MyForm.MyForm_chart_center()
        Traffic_ser_DATA = Traffic_cli_DATA = None
        if form.submit.data:
            Domain = form.select_internet.data
            Cli_Key = 'Topic.traffic.client_%s_%s' % (tt, Domain)
            Ser_Key = 'Topic.traffic.server_%s_%s' % (tt, Domain)
            if RC.exists(Cli_Key):
                # 获取请求流量
                DATA = [eval(v) for v in RC.lrange(Cli_Key, 0, -1)]
                DATA = [DATA[i] for i in xrange(0, len(DATA), 10)]
                Traffic_cli_DATA = [{'data': DATA, 'name': str(Domain)}]
            if RC.exists(Ser_Key):
                # 获取响应流量
                DATA = [eval(v) for v in RC.lrange(Ser_Key, 0, -1)]
                DATA = [DATA[i] for i in xrange(0, len(DATA), 10)]
                Traffic_ser_DATA = [{'data': DATA, 'name': str(Domain)}]
            if not Traffic_ser_DATA and not Traffic_cli_DATA:
                flash('%s的相关数据为空!' % Domain.strip())
        return render_template('chart_center_traffic.html',
                               form=form,
                               Traffic_cli_DATA=Traffic_cli_DATA,
                               Traffic_ser_DATA=Traffic_ser_DATA)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
Exemplo n.º 5
0
def sql_kill():
    user = app.config.get('MYSQL_USER')
    password = app.config.get('MYSQL_PASSWORD')
    form = MyForm.MyForm_sql_kill()
    if form.submit.data:
        try:
            if form.ip.data and form.port.data:
                # 获取页面相关信息
                ip = form.ip.data.strip()
                port = form.port.data.strip()
                keyword = form.select_action.data
                MYSQL = Mysql.MYSQL(user, password, ip, port)
                cmd = 'show processlist;'
                i = 0
                for pid in MYSQL.Run(cmd):
                    if keyword in pid:
                        pid = pid[0]
                        cmd = 'kill %s;' % pid
                        MYSQL.Run(cmd)
                        i = i + 1
                MYSQL.Close()
                flash('清理完毕,共清除%i个sql连接......' % i)
        except Exception as e:
            flash(e)
        finally:
            return render_template('Message_static.html')
    return render_template('mysql_kill.html', form=form)
Exemplo n.º 6
0
def chart_center_intranet():
    try:
        reload(MyForm)
        tt = int(time.strftime('%Y%m%d', time.localtime()))
        form = MyForm.MyForm_chart_center()
        DOMAIN_DATA = None
        RT_DATA = None
        if form.submit.data:
            Domain = form.select_intranet.data
            Key = 'intranet_access_%s_%s' % (tt, Domain)
            web_rt_key = 'intranet_rt_%s_%s' % (tt, Domain)
            if RC.exists(Key):
                # 获取响应时间
                DATA = [eval(v) for v in RC.lrange(web_rt_key, 0, -1)]
                DATA = [DATA[i] for i in xrange(0, len(DATA), 3)]
                # 获取并发量
                RT_DATA = [{'data': DATA, 'name': str(Domain)}]
                DATA = [eval(v) for v in RC.lrange(Key, 0, -1)]
                DATA = [DATA[i] for i in xrange(0, len(DATA), 3)]
                DOMAIN_DATA = [{'data': DATA, 'name': str(Domain)}]
            else:
                flash('%s的相关数据为空!' % Domain.strip())
        DATA = [eval(v) for v in Redis.lrange('lvs_intranet', 0, -1)]
        LVS_DATA = [{'data': DATA, 'name': 'INTRANET_LVS'}]
        return render_template('chart_center_intranet.html',
                               form=form,
                               LVS_DATA=LVS_DATA,
                               DOMAIN_DATA=DOMAIN_DATA,
                               RT_DATA=RT_DATA)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
Exemplo n.º 7
0
def app():
    form = MyForm.MyForm_app()
    if form.submit.data:
        try:
            ts = form.text.data.strip().splitlines()
            ts = set(ts)
            t = ('ip', '账号', '应用部署', '域名')
            va = []
            for vv in ts:
                if form.select.data == 'ip':
                    val = db_idc.idc_app.query.filter(
                        db_idc.idc_app.ip == vv).all()
                elif form.select.data == 'app':
                    val = db_idc.idc_app.query.filter(
                        db_idc.idc_app.appName == vv).all()
                elif form.select.data == 'domain':
                    val = db_idc.idc_app.query.filter(
                        db_idc.idc_app.domainName == vv).all()
                else:
                    return redirect(url_for('mysql.app'))
                v = [str(v).encode('UTF-8').split(',') for v in val if v]
                if v:
                    va.append(v)
            return render_template('user_show.html', values=va, tables=t)
        except Exception as e:
            loging.write(e)
            return render_template_string('获取数据错误!')
    return render_template('app.html', form=form)
Exemplo n.º 8
0
def servers():
    form = MyForm.MyForm_server()
    if form.submit.data:
        try:
            db = db_idc.idc_servers
            t = ('机柜号', 'SN', '服务器型号', '操作系统', 'CPU核数', '内存', '磁盘大小', 'ip',
                 '公司部门', '使用状态', '部署应用', '备注')
            ts = form.text.data.strip().splitlines()
            ts = set(ts)
            va = []
            for vv in ts:
                if form.select.data == 'ip':
                    val = db.query.filter(db.ip == vv).all()
                elif form.select.data == 'cid':
                    val = db.query.filter(db.cid == vv).all()
                elif form.select.data == 'sn':
                    val = db.query.filter(db.sn == vv).all()
                elif form.select.data == 'deparment':
                    val = db.query.filter(db.department == vv).all()
                elif form.select.data == 'status':
                    val = db.query.filter(db.status == vv).all()
                else:
                    return redirect(url_for('mysql.servers'))
                v = [str(i).encode('UTF-8').split(',') for i in val if i]
                va.append(v)
            return render_template('server_show.html', values=va, tables=t)
        except Exception as e:
            loging.write(e)
            return render_template_string('获取数据错误!')
    return render_template('server.html', form=form)
Exemplo n.º 9
0
def slow_redis():
    form = MyForm.myform()
    if form.submit_redis.data:
        for ip in redis_ips:
            Redis = redis.StrictRedis(host=ip,
                                      port=6379,
                                      db=0,
                                      socket_timeout=1)
            Redis.slowlog_reset()
            Redis.config_set("slowlog-max-len", 100)
            Redis.config_set("slowlog-log-slower-than", 200000)
    for ip in redis_ips:
        try:
            Redis = redis.StrictRedis(host=ip,
                                      port=6379,
                                      db=0,
                                      socket_timeout=1)
            results = Redis.slowlog_get(100)
        except:
            logging.error('%s Timeout reading from socket!' % ip)
            continue
        if results:
            flash("redis server:%s" % ip)
            flash("slow log len:%s" % Redis.slowlog_len())
            flash(results)
    return render_template('slow_redis_show.html',
                           Main_Infos=g.main_infos,
                           form=form)
Exemplo n.º 10
0
Arquivo: pw.py Projeto: zhouqiw/opsweb
def pw():
    form = MyForm.MyForm_pw()
    if form.submit.data:
        pw = Md5.Md5_make(form.password.data)
        pw1 = form.new_password1.data
        pw2 = form.new_password2.data
        try:
            db = db_op.idc_users
            va = db.query.filter(and_(db.name == g.user,
                                      db.passwd == pw)).first()
            if pw1 == pw2:
                if va:
                    va.passwd = Md5.Md5_make(pw1)
                    db_op.DB.session.commit()
                    db_op.DB.session.close()
                    flash('密码修改成功,请重新登录!')
                    app_resp = make_response(redirect(url_for('index.index')))
                    return app_resp
                else:
                    flash('旧密码错误!')
            else:
                flash('新密码不一致!')
        except Exception as e:
            flash(e)
    return render_template('password.html', Main_Infos=g.main_infos, form=form)
Exemplo n.º 11
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.º 12
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.º 13
0
def ingress(context=None):
    try:
        form = MyForm.Form_k8s_contexts()
        valus = []
        if context and context != 'moji':
            config.load_kube_config(config_file, context)
        else:
            _, active_contexts = config.list_kube_config_contexts(config_file)
            context = active_contexts['name']
        v1 = client.ExtensionsV1beta1Api()
        keys = tables = ('name', 'request', 'domain', 'service_name',
                         'service_port')
        ret = v1.list_ingress_for_all_namespaces()
        for i in ret.items:
            try:
                for rule in i.spec.rules:
                    valus.append([
                        i.metadata.name, 'http', rule.host,
                        rule.http.paths[0].backend.service_name,
                        rule.http.paths[0].backend.service_port
                    ])
            except Exception as e:
                logging.error(e)
    except Exception as e:
        logging.error(e)
    return render_template('k8s-resource.html',
                           valus=valus,
                           tables=tables,
                           keys=keys,
                           form=form,
                           context=context,
                           resource='Ingress')
Exemplo n.º 14
0
def login():
    form = MyForm.MyForm_login()
    form.name.label = '用户名:'
    form.password.label = '密码:'
    user = request.cookies.get('user')
    if user:
        Incr = Redis.incr('%s_Incr' % user)
    else:
        Incr = 0
    if form.submit.data:
        if form.name.data and form.password.data:
            user = form.name.data
            pw = form.password.data
            Key_Incr = '%s_Incr' % user
            Key_Lock = '%s_lock' % user
            try:
                if Incr >= 30:
                    raise flash('该帐号异常登陆,已被锁定3分钟!')
                if Incr >= 5:
                    if form.code.data:
                        if str(form.code.data) != str(session['verify_code']):
                            raise flash('输入验证码错误!')
                    else:
                        raise flash('请输入验证码,看不清点击验证码刷新!')
                va_p = db_op.idc_users.query.filter(
                    and_(db_op.idc_users.name == user,
                         db_op.idc_users.passwd == Md5.Md5_make(pw))).first()
                produce.Async_log(user, request.url)
                if va_p:
                    URL = url_for('index.index')
                    if pw == app.config.get('INIT_OP_PASSWORD'):
                        URL = url_for('pw.pw')
                        flash('请修改初始密码!')
                    timestamp = None
                    if form.remember_me.data:
                        timestamp = check.timestamp(7)
                    ID = produce.Produce(length=24, chars=string.hexdigits)
                    app_resp = make_response(redirect(URL))
                    app_resp.set_cookie('user', user, expires=timestamp)
                    app_resp.set_cookie('ID', ID, expires=timestamp)
                    Redis.set('OP_ID_%s' % user, ID)
                    Redis.delete(Key_Lock)
                    Redis.delete(Key_Incr)
                    return app_resp
                else:
                    Redis.incr(Key_Incr)
                    if Incr >= 30:
                        Redis.set(Key_Lock, 'True')
                        Redis.expire(Key_Incr, 60)
                        Redis.expire(Key_Lock, 180)
                    flash('用户名或者密码错误!')
                    URL = url_for('login.login')
                    app_resp = make_response(redirect(URL))
                    app_resp.set_cookie('user', user)
                    return app_resp
            except Exception as e:
                if 'old' not in str(e):
                    flash(str(e))
    return render_template('login.html', form=form, verify_incr=Incr)
Exemplo n.º 15
0
def Scheduler():
    form = MyForm.MyForm_Scheduler()
    cron = form.cron.data
    host = '127.0.0.1'
    if form.host.data:
        host = form.host.data
    user = form.user.data
    job = form.job.data
    return render_template('Scheduler.html',form=form)
Exemplo n.º 16
0
def vpn_admin():
    form = MyForm.MyForm_vpn()
    if form.submit.data:
        users = form.text.data.strip().splitlines()
        users = set(users)
        for i, name in enumerate(users):
            if not re.search('.*@baihe.com$', name):
                flash('%s格式错误,用户名应为百合个人邮箱账号!' % name)
                i = -1
        if i < 0:
            return render_template('Message.html')
        action = form.select_action.data
        key = 'vpn2_list'
        sender = "*****@*****.**"
        if action == 'query':
            List = []
            user_list = Redis.hgetall(key)
            for user in users:
                try:
                    if user_list[user]:
                        List.append((user, user_list[user]))
                except:
                    continue
            if List:
                return render_template('vpn_admin_show.html', user_list=List)
            else:
                flash('%s 账号不存在!' % user)
        elif action == 'add':
            for user in users:
                pw = produce.Produce(13)
                val = [K for K in Redis.hgetall(key)]
                if user in val:
                    flash('%s 账号已存在' % user)
                    continue
                msg = Message("VPN账号信息", sender=sender, recipients=[user])
                msg.html = '<p>用户名:%s</p><p> 密码:%s</p><p><font color="red">账号5分钟后开通,请妥善保管此封邮件,勿邮件回复!</font></p>' % (
                    user, pw)
                with app.open_resource("%s/../doc/vpn_conf.docx" %
                                       page_vpn_admin.root_path) as f:
                    msg.attach("vpn_conf.docx", "text/docx", f.read())
                try:
                    with app.app_context():
                        mail.send(msg)
                        Redis.hset(key, user, pw)
                except Exception as e:
                    flash(e)
                else:
                    flash('%s 账号开通完毕,通知邮件已发送.' % user)
        elif action == 'del':
            for user in users:
                Redis.hdel(key, user)
                Redis.hdel('vpn_list', user)
                flash('%s 账号已关闭!' % user)
        return render_template('Message.html')
    return render_template('vpn_admin.html', form=form)
Exemplo n.º 17
0
def update_java():
    produce.Async_log(g.user, request.url)
    K = '%s_%s' %(g.user,g.secret_key)
    messageKey = '%s_update_java' % K
    taskKey = 'update_java'
    form = MyForm.MyForm_updateJboss()
    if form.submit.data:
        try:
            if form.text.data:
                tags = form.text.data.strip().splitlines()
                assert len(tags)==1,'Can only execute a project at a time!'
                project = form.text.data.strip()
                warname = project.split('-')[0]
                Action = form.selectAction.data
                Gray = form.Gray.data
                Type = 1
                dbTable = db_op.java_list
                #灰度发布
                if Gray:
                    ServerList = dbTable.query.with_entities(dbTable.ip, dbTable.user).filter(db_op.DB.and_(dbTable.project == warname, dbTable.type == Type,dbTable.Gray == '1')).limit(1).all()
                    if not ServerList:
                        ServerList = dbTable.query.with_entities(dbTable.ip, dbTable.user).filter(db_op.DB.and_(dbTable.project == warname, dbTable.type == Type)).limit(1).all()
                        loging.write(ServerList[:])
                        if ServerList:
                            for ip, username in ServerList:
                                dbTable.query.filter(db_op.DB.and_(dbTable.ip == ip, dbTable.user == username)).update({dbTable.Gray:'1'})
                        else:
                            flash('%s Not found' % warname)
                            return render_template('Message.html')
                else:
                    ServerList = dbTable.query.with_entities(dbTable.ip,dbTable.user).filter(db_op.DB.and_(dbTable.project == warname,dbTable.type == Type)).all()
                if ServerList:
                    information = {}
                    information['warname'] = warname
                    information['project'] = project
                    information['ServerList'] = ServerList
                    information['Action'] = Action
                    information['key'] = messageKey
                    information['Gray'] = Gray
                    myRedis.delete(messageKey)
                    myRedis.lpush(taskKey,information)
                    mysql_operation = Mysql.mysql_op(g.user,Action,Type,project,Gray)
                    mysql_operation.op_operation()
                    Scheduler = produce.Scheduler_publish()
                    Scheduler = Scheduler.Scheduler_mem(Scheduler.job_update_java)
                    Scheduler.start()
                else:
                    flash('%s Not found' % warname)
                    return render_template('Message.html')
        except Exception as e:
                flash(e)
                return render_template('Message.html')
        return render_template('java_update_show.html')
    return render_template('java_update.html',form=form)
Exemplo n.º 18
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.º 19
0
def haproxy_reload(Type=None):
    form = MyForm.MyForm_Submit()
    if Type:
        if Type == 'internet':
            URL = "http://op.baihe.com/haproxy_conf?type=cw&ip=127.0.0.1:80&domain=test.baihe.com"
        else:
            URL = "http://op.baihe.com/haproxy_conf?type=cw&ip=127.0.0.1:80&domain=test.baihe.com&intranet=True"
        f = requests.get(URL, timeout=10)
        Info = f.json()
        if 'result' in f.json():
            Info = f.json()['result']
        return render_template('qrcode.html', INFO=Info)
    return render_template('haproxy_reload.html', form=form)
Exemplo n.º 20
0
def clear_redis():
    form = MyForm.MyForm_clear_redis()
    if form.submit.data:
        Keys = form.text.data.strip().splitlines()
        Keys = set(Keys)
        port = form.select_port.data
        action = form.select_action.data
        if Keys:
            for key in Keys:
                flash('获取Key:%s信息......' % key)
                vv = _RC_Run(key, port, action)
                flash('存储数据:{0}'.format(vv))
            return render_template('Message.html')
    return render_template('clear_redis.html', form=form)
Exemplo n.º 21
0
def platform_token(action=None, id=None, args=None):
    produce.Async_log(g.user, request.url)
    db_token = db_op.platform_token
    tm = time.strftime('%Y-%m-%d', time.localtime())
    form = MyForm.Form_platform_token()
    tables = ['第三方平台', '连接方式', 'Token', '颁发日期', '失效日期', '管理']
    if action == 'add':
        expire_date = "2999-12-30"
        if id > 0:
            expire_date = datetime.datetime.now() + datetime.timedelta(days=id)
            expire_date = expire_date.strftime('%Y-%m-%d')
        try:
            c = db_token(platform=args,
                         channel='api',
                         token=Md5.Md5_make(tools.Produce(8, string.digits)),
                         award=tm,
                         expire=expire_date)
            db_op.DB.session.add(c)
            db_op.DB.session.commit()
            return render_template_string('success')
        except Exception as e:
            logging.error(e)
            return render_template_string('fail')
    if action == 'modify':
        try:
            db_token.query.filter(db_token.id == id).update(
                {db_token.expire: args})
            db_op.DB.session.commit()
            return render_template_string('success')
        except Exception as e:
            logging.error(e)
            return render_template_string('fail')
    if action == 'drop':
        try:
            v = db_token.query.filter(db_token.id == id).all()
            for c in v:
                db_op.DB.session.delete(c)
                db_op.DB.session.commit()
            return render_template_string('success')
        except Exception as e:
            logging.error(e)
            return render_template_string('fail')
    vals = db_token.query.with_entities(
        db_token.id, db_token.platform, db_token.channel, db_token.token,
        db_token.award, db_token.expire).order_by(desc(db_token.id)).all()
    return render_template('platform_token.html',
                           form=form,
                           vals=vals,
                           tables=tables,
                           tm=tm)
Exemplo n.º 22
0
def deploy_php():
    reload(MyForm)
    form = MyForm.MyForm_deploy_php()
    try:
        if form.submit_produce.data:
            Info = form.select_produce.data.strip()
            Ver = form.ver_produce.data.strip()
            Type = '1'
        elif form.submit_test.data:
            Info = form.select_test.data.strip()
            Ver = form.ver_test.data.strip()
            Type = '2'
        else:
            return render_template('deploy_php.html', form=form)
        assert Info, '服务器选择不能为空!'
        Info = Info.split(':')
        user = Info[1]
        ip = Info[0]
        db = db_op.php_list
        val = db.query.filter(and_(db.ip == ip, db.type == Type)).all()
        if val:
            flash('{0}的PHP环境已存在!'.format(ip))
        else:
            os.system(
                '/usr/bin/wget -P /tmp/ http://172.16.16.160/dw/lnmp/lnmp_{0}.tgz'
                .format(Ver))
            Ssh = SSH.ssh(user, ip)
            Ssh.Scp('/tmp/lnmp_{0}.tgz'.format(Ver),
                    '/home/work/lnmp_{0}.tgz'.format(Ver))
            os.system('/bin/rm -f /tmp/lnmp_{0}.tgz'.format(Ver))
            cmds = [
                '/bin/rm -rf /home/work/local',
                'cd /home/work && /bin/tar -zxvf lnmp_{0}.tgz'.format(Ver),
                '/bin/rm -f /home/work/lnmp_{0}.tgz'.format(Ver),
                '/usr/bin/pkill -9 {php,nginx}',
                '/home/work/local/php/sbin/php-fpm',
                '/home/work/local/nginx/sbin/nginx'
            ]
            for cmd in cmds:
                Ssh.Run(cmd)
            Ssh.Close()
            #修改资源池表
            db = db_op.server_pool
            db.query.filter(and_(db.user == user,
                                 db.ip == ip)).update({db.status: '1'})
            db_op.DB.session.commit()
            flash('PHP环境在{0}部署成功,NGINX虚拟主机部署后可正常访问!'.format(ip))
    except Exception as e:
        flash(e)
    return render_template('deploy_php.html', form=form)
Exemplo n.º 23
0
def login():
    form = MyForm.MyForm_login()
    form.name.label = '用户名:'
    form.password.label = '密码:'
    ym = time.strftime('%Y', time.localtime())
    if form.submit.data:
        if form.name.data and form.password.data:
            user = form.name.data
            pw = form.password.data
            try:
                Key_Incr = '%s_Incr' % user
                Key_Lock = 'Lock_login_%s' % user
                if Redis.exists(Key_Incr):
                    Incr = int(Redis.get(Key_Incr))
                else:
                    Incr = 1
                if Redis.exists(Key_Lock):
                    raise flash('该帐号异常登陆,已被锁定1分钟!')
                va_p = db_op.idc_users.query.filter(
                    and_(db_op.idc_users.name == user,
                         db_op.idc_users.passwd == Md5.Md5_make(pw))).first()
                produce.Async_log(user, request.url)
                if va_p:
                    URL = url_for('index.index')
                    if pw == app.config.get('INIT_OP_PASSWORD'):
                        URL = url_for('pw.pw')
                        flash('请修改初始密码!')
                    timestamp = None
                    if form.remember_me.data:
                        timestamp = check.timestamp(7)
                    ID = produce.Produce(length=24, chars=string.hexdigits)
                    app_resp = make_response(redirect(URL))
                    app_resp.set_cookie('user', user, expires=timestamp)
                    app_resp.set_cookie('ID', ID, expires=timestamp)
                    Redis.set('OP_ID_%s' % user, ID)
                    return app_resp
                else:
                    Redis.set(Key_Incr, Incr + 1)
                    if Incr >= 11:
                        Redis.incr(Key_Lock, 'True')
                        Redis.expire(Key_Lock, 60)
                    flash('用户名或者密码错误,还有%s次机会重试!' % (10 - int(Incr)))
                    URL = url_for('login.login')
                    app_resp = make_response(redirect(URL))
                    app_resp.set_cookie('user', user)
                    return app_resp
            except Exception as e:
                if 'old' not in str(e):
                    flash(str(e))
    return render_template('login.html', form=form, ym=ym)
Exemplo n.º 24
0
def deployment(context=None):
    try:
        form = MyForm.Form_k8s_contexts()
        valus = defaultdict()
        if context and context != 'moji':
            config.load_kube_config(config_file, context)
        else:
            _, active_contexts = config.list_kube_config_contexts(config_file)
            context = active_contexts['name']
        v1 = client.AppsV1Api()
        tables = ('name', 'namespace', 'replicas', 'strategy', 'containers',
                  'dns_policy', 'service_account', 'available')
        keys = ('namespace', 'replicas', 'strategy', 'containers',
                'dns_policy', 'service_account', 'available')
        ret = v1.list_deployment_for_all_namespaces()
        for i in ret.items:
            try:
                containers = []
                for info in i.spec.template.spec.containers:
                    containers.append(info.name)
                if not i.status.unavailable_replicas:
                    available = 100
                else:
                    available = int((float(i.spec.replicas) -
                                     float(i.status.unavailable_replicas)) /
                                    float(i.spec.replicas) * 100)
                valus[i.metadata.name] = {
                    'namespace': i.metadata.namespace,
                    'replicas': i.spec.replicas,
                    'strategy': i.spec.strategy.type,
                    'containers': containers,
                    'dns_policy': i.spec.template.spec.dns_policy,
                    'service_account': i.spec.template.spec.service_account,
                    'available': available
                }
            except Exception as e:
                logging.error(e)
    except Exception as e:
        logging.error(e)
    return render_template('k8s-resource.html',
                           valus=valus,
                           tables=tables,
                           keys=keys,
                           form=form,
                           context=context,
                           resource='Deployment')
Exemplo n.º 25
0
def publish():
    produce.Async_log(g.user, request.url)
    importlib.reload(MyForm)
    secret_key= tools.Produce(length=8, chars=string.digits)
    session['secret_key'] = secret_key
    K = '%s_%s' %(g.user,secret_key)
    Msg_Key = '%s_publish_msg' %K
    form = MyForm.MyForm_publish()
    if form.submit.data:
        try:
            if Redis.exists(Msg_Key):
                raise flash('上线操作过于频繁,请稍等%s秒......' %Redis.ttl(Msg_Key))
            package_url = form.package_url.data
            describe = form.describe.data
            package_md5 = form.package_md5.data
            package_type = form.package_type.data
            publish_type = form.publish_type.data
            check_url = form.check_url.data
            restart = form.restart.data
            execute = form.execute.data
            rb_project = form.project.data
            rb_version = form.version.data
            gray = form.gray.data
            if execute == 'rollback':
                if not rb_project and not rb_version:
                    raise logging.error("choice can not be empty!")
            if execute == 'publish':
                if not package_url or not package_md5 or not check_url or not describe:
                    raise logging.error("input can not be empty!")
                Package_name = package_url.split('/')[-1]
                package_name = Package_name.replace('.zip', '')
                rb_project = '-'.join(package_name.split('-')[:-1])
            INFOS = {'package_url': package_url, 'package_md5': package_md5, 'package_type': package_type,
                     'publish_type': publish_type,'user':g.user,'describe':describe.replace('"','').replace("'",''),'gray':int(gray),
                     'restart': restart, 'execute': execute, 'check_url': check_url.replace('https','http'), 'project': rb_project,
                     'version': rb_version,'channel':'web','callback_url':'None','token':'None','timestamp' :int(time.time())}
            #启动代码分发控制中心
            Scheduler = produce.Scheduler_publish()
            Scheduler = Scheduler.Scheduler_mem(task_publish.Publish_center,[INFOS,Msg_Key,K])
            Scheduler.start()
            return render_template('publish_show.html')
        except Exception as e:
            if 'old-style' not in str(e):
                logging.error(e)
    return render_template('publish.html',form=form)
Exemplo n.º 26
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.º 27
0
def service(context=None):
    try:
        form = MyForm.Form_k8s_contexts()
        valus = defaultdict()
        if context and context != 'moji':
            config.load_kube_config(config_file, context)
        else:
            _, active_contexts = config.list_kube_config_contexts(config_file)
            context = active_contexts['name']
        v1 = client.CoreV1Api()
        tables = ('name', 'namespace', 'cluster_ip', 'port', 'target_port',
                  'node_port', 'selector')
        keys = ('namespace', 'cluster_ip', 'port', 'target_port', 'node_port',
                'selector')
        ret = v1.list_service_for_all_namespaces()
        for i in ret.items:
            try:
                node_port = []
                port = []
                target_port = []
                for info in i.spec.ports:
                    node_port.append(str(info.node_port))
                    port.append(str(info.port))
                    target_port.append(str(info.target_port))
                valus[i.metadata.name] = {
                    'namespace': i.metadata.namespace,
                    'cluster_ip': i.spec.cluster_ip,
                    'node_port': ','.join(set(node_port)),
                    'port': ','.join(set(port)),
                    'target_port': ','.join(set(target_port)),
                    'selector': i.spec.selector
                }
            except Exception as e:
                logging.error(e)
    except Exception as e:
        logging.error(e)
    return render_template('k8s-resource.html',
                           valus=valus,
                           tables=tables,
                           keys=keys,
                           form=form,
                           context=context,
                           resource='Service')
Exemplo n.º 28
0
def daemonset(context=None):
    try:
        form = MyForm.Form_k8s_contexts()
        valus = defaultdict()
        if context and context != 'moji':
            config.load_kube_config(config_file, context)
        else:
            _, active_contexts = config.list_kube_config_contexts(config_file)
            context = active_contexts['name']
        v1 = client.AppsV1Api()
        tables = ('name', 'namespace', 'images', 'mount_path', 'dns_policy',
                  'service_account', 'number_ready')
        keys = ('namespace', 'images', 'mount_path', 'dns_policy',
                'service_account', 'number_ready')
        ret = v1.list_daemon_set_for_all_namespaces()
        for i in ret.items:
            try:
                mount_path = []
                for path in i.spec.template.spec.containers[0].volume_mounts:
                    mount_path.append(path.mount_path)
                number_ready = i.status.number_ready
                if number_ready == 0:
                    number_ready = 1
                valus[i.metadata.name] = {
                    'namespace': i.metadata.namespace,
                    'images': i.spec.template.spec.containers[0].image,
                    'mount_path': mount_path,
                    'dns_policy': i.spec.template.spec.dns_policy,
                    'service_account': i.spec.template.spec.service_account,
                    'number_ready': number_ready
                }
            except Exception as e:
                logging.error(e)
    except Exception as e:
        logging.error(e)
    return render_template('k8s-resource.html',
                           valus=valus,
                           tables=tables,
                           keys=keys,
                           form=form,
                           context=context,
                           resource='Daemonset')
Exemplo n.º 29
0
def update_php():
    produce.Async_log(g.user, request.url)
    K = '%s_%s' % (g.user, g.secret_key)
    Key = '%s_update_php' % K
    publish_key = '%s_update_key' % K
    form = MyForm.MyForm_php()
    if form.submit.data:
        try:
            if Redis.exists(Key):
                raise flash('项目上线操作正在执行,不能并行上线操作.请稍候......')
            Redis.lpush(Key, 'check env......')
            tm = time.strftime('%Y%m%d%H%M%S', time.localtime())
            Key_file_list = 'file_list_%s' % tm
            if form.text.data:
                List = form.text.data.strip().splitlines()
                Action = form.selectaction.data
                Gray = form.Gray.data
            else:
                return redirect(url_for('update_php.update_php'))
            lines = [line.strip() for line in List]
            lines = str(lines)
            Redis.set(Key_file_list, lines)
            Redis.expire(Key_file_list, 1800)
            Info = {}
            Type = 1
            Info['arg'] = Type
            Info['action'] = Action
            Info['Key_file_lis'] = Key_file_list
            Info['gray'] = Gray
            Redis.rpush(publish_key, str(Info))
            Redis.lpush(Key, '    --->check env pass!')
            Redis.lpush(Key, '-' * 80 + '\n')
            mysql_operation = Mysql.mysql_op(g.user, Action, Type, lines, Gray)
            mysql_operation.op_operation()
            Scheduler = produce.Scheduler_publish()
            Scheduler = Scheduler.Scheduler_mem(php_update.php_update,
                                                publish_key, Key)
            Scheduler.start()
        except Exception as e:
            Redis.lpush(Key, e)
        return render_template('php_update_show.html')
    return render_template('php_update.html', form=form)
Exemplo n.º 30
0
def slow_redis():
    form = MyForm.myform()
    if form.submit_redis.data:
        for ip in redis_ips:
            Redis = redis.StrictRedis(host=ip, port=6379, db=0, socket_timeout=1)
            Redis.slowlog_reset()
            Redis.config_set("slowlog-max-len", 100)
            Redis.config_set("slowlog-log-slower-than", 200000)
    for ip in redis_ips:
        try:
            Redis = redis.StrictRedis(host=ip,port=6379,db=0,socket_timeout=1)
            results = Redis.slowlog_get(100)
        except:
            logging.error('%s Timeout reading from socket!' %ip)
            continue
        if results:
            flash("redis server:%s" %ip)
            flash("slow log len:%s" %Redis.slowlog_len())
            flash(results)
    return render_template('slow_redis_show.html',Main_Infos=g.main_infos,form = form)
Exemplo n.º 31
0
def haproxy_reload(Type=None):
    form = MyForm.MyForm_Submit()
    crypto = Md5.crypto(crypto_key)
    code = choice([x for x in range(100)])
    internet = "/haproxy_reload/%s" %crypto.encrypt('internet|%i' %code)
    intranet = "/haproxy_reload/%s" %crypto.encrypt('intranet|%i' %code)
    URL = None
    HA_API = app.config.get('HAPROXY_API')
    if Type:
        Type = crypto.decrypt(Type).split('|')[0]
        if Type == 'internet':
            URL = "%s?type=cw&ip=127.0.0.1:80&domain=test.baihe.com" %HA_API
        if Type == 'intranet':
            URL = "%s?type=cw&ip=127.0.0.1:80&domain=test.baihe.com&intranet=True" %HA_API
        if URL:
            f = requests.get(URL,timeout=10,verify=False)
            Info = f.json()
            if 'result' in f.json():
                Info = f.json()['result']
            return render_template('qrcode.html', INFO=Info)
    return render_template('haproxy_reload.html',Main_Infos=g.main_infos,form=form,internet=internet,intranet=intranet)