예제 #1
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('获取数据错误!')
예제 #2
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)
예제 #3
0
def mysqldb():
    try:
        t = ('主库', '端口', '数据库', '从库')
        db = db_idc.idc_mysqldb
        master_val = db.query.with_entities(
            db.ip, db.port,
            db.db).filter(db_idc.idc_mysqldb.master == '是').all()
        master_val = [list(v) for v in master_val]
        slave_val = db.query.with_entities(
            db.ip, db.port, db.Master_Host,
            db.Master_Port).filter(db.slave == '是').all()
        slave_val = [list(v) for v in slave_val]
        val = []
        for i in xrange(len(master_val)):
            slave = []
            for l in xrange(len(slave_val)):
                M_ip_port = master_val[i][0:2]
                S_ip_port = slave_val[l][2:]
                if M_ip_port == S_ip_port:
                    slave_info = ':'.join(slave_val[l][0:2])
                    slave.append(slave_info)
            info = master_val[i]
            info.append(slave)
            val.append(info)
        return render_template('mysqldb.html', values=val, tables=t)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
예제 #4
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)
예제 #5
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('获取数据错误!')
예제 #6
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)
예제 #7
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:
            loging.write('%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', form=form)
예제 #8
0
 def Get_arg(arg):
     # 解析请求参数
     loging.write(request.args)
     if arg in request.args:
         return request.args[arg].encode('utf-8')
     else:
         return None
예제 #9
0
 def Get_arg(arg):
     # 解析请求参数
     loging.write(request.args)
     if arg in request.args:
         return request.args[arg].encode('utf-8')
     else:
         return None
예제 #10
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('获取数据错误!')
예제 #11
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)
예제 #12
0
def mongodb_info():
    try:
        def Mongo_cli(ip,port):
            client = pymongo.MongoClient(ip,port,socketTimeoutMS=3000)
            return client
        mongo_client = Mongo_cli(Host,int(Port))
        mongo_db = mongo_client.config
        shards = {}
        #获取shard信息
        for info in mongo_db.shards.find():
            host_infos = info['host'].split('/')[1]
            shard = [host_info.split(':') for host_info in host_infos.split(',')]
            New_shard = []
            for host_info in shard:
                ip, port = host_info
                Mclient = Mongo_cli(ip,int(port))
                #判断primary状态
                if Mclient.is_primary:
                    host_info.append('primary')
                else:
                    host_info.append('slave')
                New_shard.append(host_info)
            shards[info['_id']] = New_shard
    except Exception as e:
        loging.write(e)
        return  render_template_string('数据获取错误!')
    return render_template('mongodb_show.html', shards=shards)
예제 #13
0
파일: Chart.py 프로젝트: znavy/opsweb
def charts():
    try:
        val_cli = {}
        val_ser = {}
        tt = int(time.strftime('%Y%m%d', time.localtime()))
        traffic_key = 'traffic_Keys_%s' % tt
        for key in RC.smembers(traffic_key):
            key = '{0}_old'.format(key)
            if RC.exists(key):
                data = eval(str(RC.get(key)))
                if data and isinstance(data, list):
                    va = int(reduce(lambda x, y: int(x) + int(y), data))
                    v = va * 8 / 1024 / 1024
                    key = key.split('_')
                    domain = str(key[-2])
                    if v > 1:
                        if 'traffic.client' in str(key[0]):
                            val_cli[domain] = v
                        if 'traffic.server' in str(key[0]):
                            val_ser[domain] = v
        DATA = [eval(v) for v in RC.lrange('internet_access', 0, -1)]
        DATA = [DATA[i] for i in xrange(0, len(DATA), 3)]
        INTERNET_ACCESS = [{'data': DATA, 'name': 'WEB_ACCESS'}]
        return render_template('chart.html',
                               val_cli=val_cli,
                               val_ser=val_ser,
                               INTERNET_ACCESS=INTERNET_ACCESS)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
예제 #14
0
 def info(*args, **kwargs):
     DB = db_op.rota
     g.main_infos = None
     date = time.strftime('%Y-%m-%d',time.localtime())
     ym = time.strftime('%Y',time.localtime())
     new_date = datetime.date.today()+datetime.timedelta(1)
     user = request.cookies.get('user')
     db = db_op.idc_users
     val = db.query.with_entities(db.grade).filter(db.name == user).all()
     grade = int(val[0][0]) if val else 10
     if user and  '@' in user:
         user = user.split('@')[0]
     data=[user]
     try:
         # 生成今日和明日的运维排班
         users = []
         duty = u'运维值班'
         pools = [u'李晓辉',u'周福成']
         for t in (date,new_date):
             VAL = DB.query.with_entities(DB.name).filter(and_(DB.date == t,DB.duty == duty)).all()
             if VAL:
                 user = VAL[0][0]
             else:
                 user = random.choice(pools)
                 c = DB(name = user,duty = duty,date = t)
                 db_op.DB.session.add(c)
                 db_op.DB.session.commit()
             pools.remove(user)
             users.append(user)
         data.extend(users)
         ip=request.headers.get('X-Forwarded-For')
         if not ip :
             ip = request.remote_addr
         if ',' in ip:
             ip = ip.split(',')[0]
         #获取页面菜单
         DB = db_op.op_menu
         nav_val = {}
         sub_val = {}
         Menu_val = DB.query.with_entities(DB.Menu_name, DB.id_name, DB.module_name, DB.action_name).filter(DB.grade >= grade).all()
         navMenu = DB.query.with_entities(distinct(DB.Menu_name)).filter(and_(DB.Menu == 'navMenu',DB.grade >= grade)).order_by(DB.Menu_id).all()
         navMenu = [Menu[0] for Menu in navMenu]
         for Menu in navMenu:
             val = [val[1:] for val in Menu_val if Menu in val]
             if val:
                 nav_val[Menu] = val
         submenu = DB.query.with_entities(distinct(DB.Menu_name)).filter(and_(DB.Menu == 'submenu',DB.grade >= grade)).order_by(DB.Menu_id).all()
         submenu = [menu[0] for menu in submenu]
         for menu in submenu:
             val = [val[2:] for val in Menu_val if menu in val]
             if val:
                 sub_val[menu] = val
         g.main_infos = {'datas':data,'navMenu':navMenu,'nav_val':nav_val,'submenu':submenu,'sub_val':sub_val,'ip':ip,'ym':ym}
         return func(*args, **kwargs)
     except Exception as e:
         loging.write(e)
         return func(*args, **kwargs)
     finally:
         db_op.DB.session.remove()
예제 #15
0
def store():
    try:
        t = ('机柜', '型号', 'IP', '公司部门', '使用状态', '备注')
        val = db_idc.idc_store.query.all()
        v = [str(v).encode('UTF-8').split(',') for v in val if v]
        return render_template('mysql.html', values=v, tables=t)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
예제 #16
0
def rack():
    try:
        t=('机柜','服务器数量')
        db = db_idc.idc_servers
        val = db.query.with_entities(db.cid,func.count(db.cid)).group_by(db.cid).order_by(func.count(db.cid)).all()
        return render_template('mysql.html',values=val,tables=t)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
예제 #17
0
def twemproxy():
    try:
        t=('代理TYPE','代理GROUP','后端IP','后端PORT','DB','KEYS','备注')
        val = db_idc.idc_twemproxy.query.order_by(db_idc.idc_twemproxy.serviceGroup).all()
        v = [str(v).encode('UTF-8').split(',') for v in val if v]
        return render_template('twemproxy.html',values=v,tables=t)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
예제 #18
0
 def Run(self):
     if HOST in TASK_BACKGROUD:
         self.scheduler.add_job(Task.count_es_logs,
                                'cron',
                                second='0',
                                minute='*',
                                id=Task.count_es_logs.__name__,
                                replace_existing=True)
         self.scheduler.start()
         loging.write("Scheduler backgroud start on %s ......" % HOST)
예제 #19
0
def kestrel():
    try:
        db = db_idc.idc_kestrel
        t = ('IP', 'PORT', 'KEY', 'ITEMS')
        val = db.query.order_by(desc(db.kestrel_num)).all()
        v = [str(v).encode('UTF-8').split(',') for v in val]
        return render_template('kestrel.html', values=v, tables=t)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
예제 #20
0
 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)
예제 #21
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)
예제 #22
0
 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('初始化失败!')
예제 #23
0
def chart_center_area():
    try:
        AREA_DATA = {}
        area_key = 'Area_Keys'
        for area in RC.smembers(area_key):
            Count = int(RC.get(area))
            if Count == 0:
                continue
            AREA_DATA[str(area.split('_')[2])] = Count
        AREA_DATA = json.dumps(AREA_DATA, encoding='utf-8',indent=4)
        return render_template('chart_center_area.html',AREA_DATA=AREA_DATA)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
예제 #24
0
 def Query(db, *ts):
     #生成用户列表
     user_list = []
     for name in ts[0]:
         try:
             val = db.query.with_entities(
                 db.user, db.password).filter(db.user == name).all()
             if val:
                 val = [v for v in val[0]]
                 for group in Redis.hgetall(Key):
                     Groups = eval(Redis.hget(Key, group))
                     if name in Groups:
                         val.append(group)
                 user_list.append(val)
         except Exception as e:
             loging.write(e)
             return render_template_string('获取数据错误!')
     return user_list
예제 #25
0
def chart_center_domain():
    try:
        INTERNET_DOMAIN = {}
        INTRANET_DOMAIN = {}
        for domain in RC.smembers('haproxy_topic'):
            Count = int(RC.get('haproxy_logs_%s' %domain))
            if Count == 0:
                continue
            INTERNET_DOMAIN[str(domain)] = Count
        for domain in RC.smembers('haproxy2_topic'):
            Count = int(RC.get('haproxy2_logs_%s' %domain))
            if Count == 0:
                continue
            INTRANET_DOMAIN[str(domain)] = Count
        return render_template('chart_center_domain.html',INTERNET_DOMAIN=INTERNET_DOMAIN,INTRANET_DOMAIN=INTRANET_DOMAIN)
    except Exception as e:
        loging.write(e)
        return render_template_string('获取数据错误!')
예제 #26
0
def kafka_info(topic_info=None):
    try:
        kafka = KafkaClient('%s:%s' % (host, port))
        Brokers = kafka.brokers
        Brokers = [(str(Brokers[k]).split(',')[1].split("'")[1])
                   for k in Brokers]
        if topic_info:
            partitions = kafka.topic_partitions
            partitions = eval(json.dumps(partitions))
            partitions = partitions[topic_info]
            return render_template('kafka_partition_show.html',
                                   topic_info=topic_info,
                                   partition_info=partitions)
        else:
            return render_template('kafka_show.html',
                                   topics=kafka.topics,
                                   brokes=Brokers)
    except Exception as e:
        loging.write(e)
        return render_template_string('数据获取错误!')
예제 #27
0
파일: svn_admin.py 프로젝트: znavy/opsweb
 def Query(db, *ts):
     #生成用户列表
     user_list = []
     for name in ts[0]:
         try:
             val = db.query.with_entities(
                 db.user, db.password).filter(db.user == name).all()
             if val:
                 val = [v for v in val[0]]
                 groups = [
                     group[0]
                     for group in db_groups.query.with_entities(
                         distinct(db_groups.groups)).filter(
                             db_groups.users == name).all()
                 ]
                 for group in groups:
                     val.append(group)
                 user_list.append(val)
         except Exception as e:
             loging.write(e)
             return render_template_string('获取数据错误!')
     return user_list
예제 #28
0
 def API_get(method, DATAS):
     # 调用zabbix的API接口
     url = "http://"
     header = {"Content-Type": "application/json"}
     data = json.dumps({
         "jsonrpc": "2.0",
         "method": method,
         "params": DATAS,
         "id": 0,
         "auth": ""
     })
     request = urllib2.Request(url, data)
     for key in header:
         request.add_header(key, header[key])
     try:
         result = urllib2.urlopen(request)
     except Exception as e:
         loging.write(e)
     else:
         response = json.loads(result.read())
         result.close()
     return response['result']
예제 #29
0
def Zookeeper_Info():
    def Get_arg(arg):
        #解析请求参数
        if arg in request.args:
            return request.args[arg]
        else:
            return None

    try:
        URL = None
        if 'info' in request.path:
            URL = Get_arg('path')
        zk.start()
        if URL:
            #匹配多级访问
            if '_' in URL:
                PATH = URL.replace(':', '/')
                URLS = PATH.split('/')
            else:
                #匹配一级访问
                URLS = (URL, )
                PATH = URL
        #匹配根访问
        else:
            URLS = ()
            PATH = ''
        DATAS = zk.get_children('/%s' % PATH)
        INFOS = None
        if not DATAS:
            INFOS = zk.get('/%s' % PATH)
        return render_template('zk_show.html',
                               DATAS=DATAS,
                               URLS=URLS,
                               URL=URL,
                               INFOS=INFOS)
    except Exception as e:
        loging.write(e)
        return render_template_string(str(e))
예제 #30
0
 def API_get(method, DATAS):
     # 调用zabbix的API接口
     url = "http://"
     header = {"Content-Type": "application/json"}
     data = json.dumps(
         {
             "jsonrpc": "2.0",
             "method": method,
             "params": DATAS,
             "id": 0,
             "auth": ""
         })
     request = urllib2.Request(url, data)
     for key in header:
         request.add_header(key, header[key])
     try:
         result = urllib2.urlopen(request)
     except Exception as e:
         loging.write(e)
     else:
         response = json.loads(result.read())
         result.close()
     return response['result']
예제 #31
0
def project_apply():
    form = MyForm.MyForm_project_apply()
    types = {'new':u'新增需求','bug':u'bug修复'}
    if form.submit.data:
        Project_types = form.Project_types.data
        Project_describe = form.Project_describe.data.strip()
        Project_content = form.Project_content.data.strip()
        Publish_conf = form.Publish_conf.data
        Front = form.Front.data
        Rollback_version = form.Rollback_version.data.strip()
        proposer = g.user
        if Project_describe and Project_content and Rollback_version:
            try:
                if Publish_conf == 'no':
                    raise flash('请确认资源配置是否正确?')
                if Project_content == Rollback_version:
                    raise flash('上线版本和回滚版本内容不能相同!')
                Projects = Project_content.splitlines()
                Rollback_version = Rollback_version.splitlines()
                if len(Projects) == 2 and len(Rollback_version) == 2:
                    Project = Projects[0].strip()
                    tag = Projects[1].strip()
                    if Project.endswith('git') or tag.startswith('tag'):
                        project = Project.split('/')[-1]
                        project = project.split('.')[0]
                    else:
                        raise flash('无效的路径格式!')
                else:
                    raise flash('无效的内容格式!')
                db_project_apply = db_op.project_apply
                VALS = db_project_apply.query.filter(and_(db_project_apply.content.like('{0};%'.format(Project)),db_project_apply.status <> '2')).all()
                if VALS:
                    raise flash('该项目已经提测,请勿重复提交!')
                db_project = db_op.project_level
                project_val = db_project.query.with_entities(db_project.level).filter(db_project.project == project).all()
                if project_val:
                    Project_level = int(project_val[0][0])
                else:
                    raise flash('没有找到%s项目的等级记录!' %project_val[0][0])
                Receiver = mails['test']
                msg = Message("%s项目提测申请" %project, sender=sender, recipients=[Receiver],cc=[sender])
                msg.html = '<p>1、项目等级:<strong>%s</strong></p>' \
                           '<p>2、项目类型:<strong>%s</strong></p>' \
                           '<p>3、项目描述:</p>'\
                           '<p><strong>%s</strong></p>' \
                           '<p>4、提测版本:</p>' \
                           '<p><strong>%s</strong></p>' \
                           '<p><strong>%s</strong></p>' \
                           '<p>5、前端相关项目是否上线?:<strong>%s</strong></p>' \
                           '<p>6、线上资源配置是否正确?:<strong>%s</strong></p>' \
                           '<p>7、回滚版本:</p>'\
                           '<p><strong>%s</strong></p>' \
                           '<p><strong>%s</strong></p>' \
                           '<p>8、申请人:<strong>%s</strong></p>' % (Project_level,types[Project_types],Project_describe,Projects[0].strip(),Projects[1].strip(),Front,Publish_conf,Rollback_version[0].strip(),Rollback_version[1].strip(),proposer)
                with app.app_context():
                    try:
                        mail.send(msg)
                    except Exception as e:
                        flash(e)
                        raise flash('提测申请邮件发送失败!')
                #执行预发布上线
                K = '%s_%s' % (g.user, g.secret_key)
                Key = '%s_publish_php' % K
                publish_key = '%s_publish_key' % K
                action = 'publish'
                Redis.lpush(Key, 'check security policy......')
                Redis.expire(Key, 30)
                Path = ';'.join(Projects).replace('http://', '')
                sip = ['172.16.1.246',]
                Gray = '0'
                Info = {}
                Info['action'] = action
                Info['path'] = Path
                Info['app'] = project
                Info['sip'] = sip
                Info['gray'] = Gray
                Redis.lpush(publish_key, Info)
                #记入数据库
                db = db_op.project_apply
                db_op.DB.session.add(db(project = project,types=types[Project_types],describe=Project_describe,content='%s;%s'%(Projects[0].strip(),Projects[1].strip()),Rollback='%s;%s'%(Rollback_version[0].strip(),Rollback_version[1].strip()),sender=proposer,status='0'))
                db_op.DB.session.commit()
                # 项目提测记录上线时间
                db_project = db_op.project_show
                tm = time.strftime('%Y%m%d', time.localtime())
                db_project.query.filter(db_project.project == project).update({db_project.test_time: tm})
                db_op.DB.session.commit()
                # 后台执行
                Scheduler = produce.Scheduler_publish()
                Scheduler = Scheduler.Scheduler_mem(php_publish.php_publish, publish_key, Key)
                Scheduler.start()
                Redis.lpush(Key, '    --->check pass!')
                Redis.lpush(Key, '-' * 80 + '\n')
                return render_template('php_publish_show.html', Main_Infos=g.main_infos)
            except Exception as e:
                loging.write(e)
                if 'old'not in str(e):
                    flash(e)
            return render_template('Message_static.html',Main_Infos=g.main_infos)
    return render_template('project_apply.html',Main_Infos=g.main_infos,form=form)
예제 #32
0
        val = str(val).replace("'", '')
    else:
        val = 'None'
    cmd = "update sql_scheduler set status = '已执行' ,results = '%s' where id = '%s';" % (
        val, id)
    Query_sql(user, password, host, port, db, cmd)


if __name__ == "__main__":
    t = time.strftime('%Y-%m-%d', time.localtime())
    Path = '/home/work/webroot/conf'
    conf = ConfigParser.ConfigParser()
    path = "%s/script_sql.conf" % Path
    conf.read(path)
    host = conf.get('MYSQLDB', 'HOST')
    port = conf.getint('MYSQLDB', 'PORT')
    user = conf.get('MYSQLDB', 'USER')
    password = conf.get('MYSQLDB', 'PASSWORD')
    db = conf.get('MYSQLDB', 'DB')
    cmd = "select * from sql_scheduler where status = '未执行' and time = '%s';" % t
    values = Query_sql(user, password, host, port, db, cmd)
    try:
        if values:
            # 并发执行
            POOLS = Third_pool(10)
            POOLS.map_async(Run_sql, values)
            POOLS.close()
            POOLS.join()
    except Exception as e:
        loging.write(e)
예제 #33
0
 def info(*args, **kwargs):
     DB = db_op.rota
     g.main_infos = None
     date = time.strftime('%Y-%m-%d', time.localtime())
     ym = time.strftime('%Y', time.localtime())
     new_date = datetime.date.today() + datetime.timedelta(1)
     user = request.cookies.get('user')
     db = db_op.idc_users
     val = db.query.with_entities(db.grade).filter(db.name == user).all()
     grade = int(val[0][0]) if val else 10
     if user and '@' in user:
         user = user.split('@')[0]
     data = [user]
     try:
         # 生成今日和明日的运维排班
         users = []
         duty = u'运维值班'
         pools = [u'李晓辉', u'周福成']
         for t in (date, new_date):
             VAL = DB.query.with_entities(DB.name).filter(
                 and_(DB.date == t, DB.duty == duty)).all()
             if VAL:
                 user = VAL[0][0]
             else:
                 user = random.choice(pools)
                 c = DB(name=user, duty=duty, date=t)
                 db_op.DB.session.add(c)
                 db_op.DB.session.commit()
             pools.remove(user)
             users.append(user)
         data.extend(users)
         ip = request.headers.get('X-Forwarded-For')
         if not ip:
             ip = request.remote_addr
         if ',' in ip:
             ip = ip.split(',')[0]
         #获取页面菜单
         DB = db_op.op_menu
         nav_val = {}
         sub_val = {}
         Menu_val = DB.query.with_entities(
             DB.Menu_name, DB.id_name, DB.module_name,
             DB.action_name).filter(DB.grade >= grade).all()
         navMenu = DB.query.with_entities(distinct(DB.Menu_name)).filter(
             and_(DB.Menu == 'navMenu',
                  DB.grade >= grade)).order_by(DB.Menu_id).all()
         navMenu = [Menu[0] for Menu in navMenu]
         for Menu in navMenu:
             val = [val[1:] for val in Menu_val if Menu in val]
             if val:
                 nav_val[Menu] = val
         submenu = DB.query.with_entities(distinct(DB.Menu_name)).filter(
             and_(DB.Menu == 'submenu',
                  DB.grade >= grade)).order_by(DB.Menu_id).all()
         submenu = [menu[0] for menu in submenu]
         for menu in submenu:
             val = [val[2:] for val in Menu_val if menu in val]
             if val:
                 sub_val[menu] = val
         g.main_infos = {
             'datas': data,
             'navMenu': navMenu,
             'nav_val': nav_val,
             'submenu': submenu,
             'sub_val': sub_val,
             'ip': ip,
             'ym': ym
         }
         return func(*args, **kwargs)
     except Exception as e:
         loging.write(e)
         return func(*args, **kwargs)
     finally:
         db_op.DB.session.remove()
예제 #34
0
 def GET_value(host,method):
     # 构造zabbix需要的json数据
     DATAS = {"output": "extend","filter": {"host": [host]}}
     value = API_get(method, DATAS)
     loging.write(value[0])
     return value[0]
예제 #35
0
def project_apply_show(ID=None):
    crypto_key = app.config.get('CRYPTO_KEY')
    crypto = Md5.crypto(crypto_key)
    db = db_op.project_apply
    if ID:
        if '&' in ID:
            id = crypto.decrypt(ID.split('&')[0])
            action = ID.split('&')[1].split('=')[-1]
            if action == 'fail':
                Infos = db.query.with_entities(db.project, db.describe, db.content, db.sender).filter(db.id == id).all()
                if Infos:
                    Infos = Infos[0]
                    Receiver = Infos[-1]
                    if '@' not in  Receiver:
                        Receiver = '*****@*****.**' %Receiver
                    Content = Infos[2].split(';')
                    msg = Message("提测项目%s被退回" % Infos[0], sender=sender, recipients=[Receiver], cc=[sender])
                    msg.html = '<p>1、项目描述:</p>' \
                               '<p><strong>%s</strong></p>' \
                               '<p>2、提测版本:</p>' \
                               '<p><strong>%s</strong></p>' \
                               '<p><strong>%s</strong></p>'  % (Infos[1],Content[0],Content[1])
                    with app.app_context():
                        try:
                            mail.send(msg)
                        except Exception as e:
                            loging.write(e)
                        else:
                            db.query.filter(db.id == int(id)).update({db.status:'2'})
                            db_op.DB.session.commit()
        else:
            ID = crypto.decrypt(ID)
            Infos = db.query.with_entities(db.project, db.describe, db.content, db.Rollback).filter(db.id == ID).all()
            if Infos:
                Infos = Infos[0]
                Content = Infos[2].split(';')
                Rollback = Infos[-1].split(';')
                msg = Message("%s项目申请上线" % Infos[0], sender=sender, recipients=[sender], cc=[mails['leader']])
                msg.html = '<p>1、项目描述:</p>' \
                           '<p><strong>%s</strong></p>' \
                           '<p>2、上线版本:</p>' \
                           '<p><strong>%s</strong></p>' \
                           '<p><strong>%s</strong></p>' \
                           '<p>3、回滚版本:</p>' \
                           '<p><strong>%s</strong></p>' \
                           '<p><strong>%s</strong></p>' % (Infos[1], Content[0], Content[1],Rollback[0],Rollback[1])
                with app.app_context():
                    try:
                        mail.send(msg)
                    except Exception as e:
                        loging.write(e)
                    else:
                        db.query.filter(db.id == int(ID)).update({db.status: '1'})
                        db_op.DB.session.commit()
    tables = ('提测项目', '类别', '项目描述', '提测版本', '发起人', '后续操作')
    Vals = db.query.with_entities(db.id,db.project,db.types,db.describe,db.content,db.sender).filter(db.status == '0').order_by(db.id).all()
    projects =[]
    for info in [list(info) for info in Vals]:
        info[0]= (crypto.encrypt(info[0]),'%s&result=fail'%crypto.encrypt(info[0]))
        projects.append(info)
    return render_template('project_apply_show.html',Main_Infos=g.main_infos,projects = projects,tables=tables)
예제 #36
0
def sql_scheduler():
    form = MyForm.MyForm_sql_scheduler()
    #查询前20个计划任务
    tables = ('服务器', '端口', '库名', '执行时间', '执行命令', '执行状态', '执行结果')
    db = db_op.sql_scheduler
    val_scheduler = db.query.with_entities(
        db.master_ip, db.master_port, db.db, db.time, db.sql_cmd, db.status,
        db.results).order_by(desc(db.id)).limit(20).all() or None
    if form.submit.data:
        #获取页面相关信息
        if form.sql_text.data:
            db_name = form.db_name.data.strip()
            Year = time.strftime('%Y-%m-%d', time.localtime())
            cmds = form.sql_text.data.strip()
            if cmds:
                try:
                    if cmds.endswith(';'):
                        cmds = cmds.split(';')
                        #获取库表对应的主库服务器信息
                        db = db_idc.idc_mysqldb
                        db_table = db_idc.idc_tableinfo
                        for sql_cmd in cmds:
                            if sql_cmd:
                                sql_cmd = sql_cmd.strip()
                                sql_cmd = '%s;' % sql_cmd
                                if 'update' in sql_cmd.lower(
                                ) or 'delete' in sql_cmd.lower(
                                ) or 'alter' in sql_cmd.lower():
                                    if sql_cmd.lower().startswith('update'):
                                        table_name = sql_cmd.split()[1]
                                    else:
                                        table_name = sql_cmd.split()[2]
                                    table_name = table_name.replace('`', '')
                                    val_ips = db.query.with_entities(
                                        db_table.ip).filter(
                                            and_(
                                                db_table.database_name ==
                                                db_name, db_table.table_name ==
                                                table_name)).all()
                                    if val_ips:
                                        val_ips = set(
                                            [ip[0] for ip in val_ips])
                                    else:
                                        raise flash('没有找到%s表相关数据库信息!' %
                                                    table_name)
                                    val = db.query.with_entities(
                                        db.ip, db.port, db.db).filter(
                                            and_(db.master == '是',
                                                 db.ip.in_(val_ips))).all()
                                    if val:
                                        for info in val:
                                            #将sql计划任务相关信息写入数据库
                                            master_ip, master_port, master_db = info
                                            if db_name in master_db.split('|'):
                                                c = db_op.sql_scheduler(
                                                    master_ip=master_ip,
                                                    master_port=master_port,
                                                    db=db_name,
                                                    time=Year,
                                                    sql_cmd=sql_cmd,
                                                    status='未执行',
                                                    results='None')
                                                db_op.DB.session.add(c)
                                                db_op.DB.session.commit()
                                    else:
                                        raise flash('没有找到%s数据库的相关服务器信息!' %
                                                    db_name)
                                else:
                                    raise flash("%s 不符合执行规则!" % sql_cmd)
                    else:
                        raise flash("每条sql语句需要以分号结尾!")
                except Exception as e:
                    #loging.write(e)
                    return render_template('Message_static.html')
            return redirect(url_for("sql_scheduler.sql_scheduler"))
        try:
            produce.Scheduler_sql_run()
        except Exception as e:
            loging.write(e)
    return render_template('mysql_scheduler.html',
                           form=form,
                           val_scheduler=val_scheduler,
                           tables=tables)