Пример #1
0
def upload_user_stats():  

    #连接配置中心库
    db = Connection('/tmp/mysql3306.sock',
                    config.DB_NAME,
                    config.DB_USER,
                    config.DB_PASSWD,
                    time_zone='+8:00')

    db.execute('truncate table meta_table_statistics')  # 先truncate 再插入

    db.execute('truncate table meta_index_statistics')  # 先truncate 再插入

    


    # 由于id为64的E4S 服务器不在平台管辖,先手工剔除 b.id !=64
    v_sql = r"""SELECT b.ip,b.port,b.id as instance_id,a.id as schema_id,a.name as db_name from 
    resources_schema a,tag b where b.online_flag=1 and a.owner=b.id and b.id !=64 order by a.id,b.id"""

    #print v_sql

    upload_tables_list = db.query(v_sql)

    if upload_tables_list: # 对实例表进行循环

        i=0

        

        for upload_table in upload_tables_list:

            instance_id = upload_table['instance_id']

            schema_id = upload_table['schema_id']

            db_name = upload_table['db_name']

            host_ip = upload_table['ip']

            mysql_port = upload_table['port']

            v_host =host_ip + ':' + str(mysql_port)

            #连接远程实例
            db_remote = Connection(v_host,
                            'information_schema',
                            config.DBA_QUERY_USER,
                            config.DBA_QUERY_PASSWD,
                            time_zone='+8:00')

            # 取表的元信息然后插入

            v_pl = r"""SELECT table_schema,table_name,rows_read,rows_changed,rows_changed_x_indexes 
            from table_statistics where table_schema='%s' """ % (db_name)

            #print v_pl

            table_list = db_remote.query(v_pl)

            for table_row in table_list:

            

                table_schema = table_row['table_schema']

                table_name = table_row['table_name']

                rows_read = table_row['rows_read']

                rows_changed = table_row['rows_changed']


                rows_changed_x_indexes = table_row['rows_changed_x_indexes']

                
                
                #try:
                v_insert_sql='''insert into meta_table_statistics(instance_id,schema_id,table_schema,
                table_name,rows_read,rows_changed,rows_changed_x_indexes) 
                values(%d,%d,'%s','%s',%d,%d,%d)''' % (
                instance_id,schema_id,table_schema,
                table_name,rows_read,rows_changed,rows_changed_x_indexes
                )

                #print v_insert_sql

                db.execute(v_insert_sql.replace('%','%%'))

                    
                # except Exception, e:
                #     print e.message
                #     print v_insert_sql
                #     text = "insert meta tables error!," + e.message + ',' + v_insert_sql
                #     log_w(text)

            

            # 取索引的元信息,然后插入

            v_pl2 = r"""SELECT table_schema,table_name,index_name,rows_read from index_statistics 
            where TABLE_SCHEMA='%s' """ % (db_name)


            table_list2 = db_remote.query(v_pl2)

            for table_row2 in table_list2:

                

                table_schema = table_row2['table_schema']

                table_name = table_row2['table_name']

                index_name = table_row2['index_name']

                
                rows_read = table_row2['rows_read']

                
                #try:
                v_insert_sql2='''insert into meta_index_statistics(instance_id,schema_id,table_schema,
                table_name,index_name,rows_read) 
                values(%d,%d,'%s','%s','%s',%d)''' % (
                instance_id,schema_id,table_schema,
                table_name,index_name,rows_read
                )

                #print v_insert_sql

                db.execute(v_insert_sql2.replace('%','%%'))

                    
                # except Exception, e:
                #     print e.message
                #     print v_insert_sql
                #     text = "insert meta tables error!," + e.message + ',' + v_insert_sql
                #     log_w(text)



            db_remote.close()


            # 开始生成log_hot_tables 统计表数据

            # statistic_time 为统计数据的实际生成时间


            v_insert_sql3='''insert into log_hot_tables(instance_id,schema_id,table_schema,
                table_name,TABLE_COMMENT,TABLE_CREATE_TIME,rows_read,rows_changed,
                rows_changed_x_indexes) select a.instance_id,a.schema_id,a.TABLE_SCHEMA,
                a.TABLE_NAME,b.TABLE_COMMENT,b.CREATE_TIME,a.ROWS_READ,a.ROWS_CHANGED,
                a.ROWS_CHANGED_X_INDEXES from meta_table_statistics a,meta_tables b where 
                a.instance_id=%d and a.schema_id=%d and 
                a.TABLE_SCHEMA='%s' and a.instance_id=b.instance_id and a.TABLE_SCHEMA=b.TABLE_SCHEMA 
                and a.TABLE_NAME=b.TABLE_NAME''' % (
                instance_id,schema_id,table_schema
                )

            print v_insert_sql3

            db.execute(v_insert_sql3.replace('%','%%'))
            


            

            i=i+1


    db.close()

   # 开始远程flush 统计信息表

    # for remote execute

    os_user = '******'

    OS_APPS_PASSWD = config.OS_APPS_PASSWD

    DB_USER = config.DB_USER

    DB_PASSWD = config.DB_PASSWD

    #连接配置中心库
    db = Connection('/tmp/mysql3306.sock',
                    config.DB_NAME,
                    config.DB_USER,
                    config.DB_PASSWD,
                    time_zone='+8:00')

    # 由于id为64的E4S 服务器不在平台管辖,先手工剔除 b.id !=64
    v_sql = r"""SELECT distinct b.ip,b.port from 
    resources_schema a,tag b where b.online_flag=1 and a.owner=b.id and b.id !=64 order by a.id,b.id"""

    #print v_sql

    server_list = db.query(v_sql)

    if server_list: # 对实例表进行循环

        i=0

        for single_server in server_list:


            host_ip = single_server['ip']

            mysql_port = single_server['port']


            # 远程paramiko调用 在本机执行sql

            exe_sql = 'flush table_statistics;flush index_statistics;'  

            result = func.remote_exe_sql(host_ip,os_user,OS_APPS_PASSWD,mysql_port,'information_schema',exe_sql,DB_USER,DB_PASSWD)

            if result == '':
                result = '执行成功!'

            print result
Пример #2
0
def register_execute_cmd():
    if request.method == 'POST':
        text_db_ip = request.form['text_db_ip']
        text_db_port = request.form['text_db_port']
        text_db_sid = request.form['text_db_sid']
        text_db_niname = request.form['text_db_niname']
        text_db_master = request.form['text_db_master']
        s_db_type = request.form['s_db_type']
        s_db_inst_cnt = request.form['s_db_inst_cnt']
        belong_app = request.form['belong_app']
        text_app_name = request.form['text_app_name']
        text_app_code = request.form['text_app_code']
        text_app_manager = request.form['text_app_manager']
        product_dept = request.form['product_dept']
        is_new_app = request.form['is_new_app']
        os_oracle_username = request.form['os_oracle_username']
        os_oracle_password = request.form['os_oracle_password']
        app_oracle_username = request.form['app_oracle_username']
        app_oracle_password = request.form['app_oracle_password']

        exe_sql ="""select instance_name,host_name,version,startup_time,status,name,db_unique_name,log_mode,platform_name from v$instance,v$database;"""
        # 远程paramiko调用 在本机执行sql  
        print text_db_ip,os_oracle_username,os_oracle_password,text_db_port,text_db_sid,exe_sql,app_oracle_username,app_oracle_password
        result = func.remote_exe_sql(text_db_ip,os_oracle_username,os_oracle_password,text_db_port,text_db_sid,exe_sql,app_oracle_username,app_oracle_password)

        list_add_db = ''
        print is_new_app
        if result != 'ng' :
            result = '执行成功!'
            result_type = 1

            if is_new_app == '1':
                print text_app_code,text_app_name,text_app_manager,session['user_id'],product_dept;
                v_ins_app_sql = """insert into T_DB_APPS(app_code,app_name,app_manager,state,creator,plat_id) 
                values("%s","%s","%s",%d,%d,%d)""" % (
                    text_app_code,text_app_name,text_app_manager,1,int(session['user_id']),int(product_dept))
                print v_ins_app_sql
                #current_app.logger.info(v_log_sql)
                # 把 exe_sql 中可能包含的%字符串 替换为 %%, 避免因为本身的字符串%格式化倾向,而发生TypeError: not enough arguments for format string 错误
                v_pk_app_id = g.db.execute(v_ins_app_sql.replace('%','%%'))
                belong_app = v_pk_app_id;
            else:
                pass
            v_ins_db_sql = """insert into T_DB_DATABASES(db_name_en,db_unique_name,db_name_cn,db_type,db_version,app_id,is_cluster,is_archivelog,is_dataguard,os_platform,state,creator,db_master)
                        values("%s","%s","%s",%d,"%s",%d,%d,%d,%d,"%s",%d,%d,"%s")""" % (
                        'vv','vv','vv',int(s_db_type),'vv',int(belong_app),0,0,0,'vv',1,session['user_id'],text_db_master)
            v_pk_db_id = g.db.execute(v_ins_db_sql.replace('%','%%'))
            v_ins_inst_sql = """insert into T_DB_INSTANCES(database_id,ip,listen_port,instance_name,is_cluster,inst_id,host_name,instance_version,state,creator,os_oracle_username,os_oracle_password)
                        values(%d,"%s","%s","%s",%d,%d,"%s","%s",%d,%d,"%s","%s")""" % (
                        v_pk_db_id,text_db_ip,text_db_port,text_db_sid,0,1,'vv','vv',1,session['user_id'],os_oracle_username,os_oracle_password)
            v_pk_inst_id = g.db.execute(v_ins_inst_sql.replace('%','%%'))
            # 新增加的log记录返回给前端
            v_reg_add_list_sql = """select A.instance_id, concat(A.ip,':',A.listen_port) as ipport, A.instance_name, B.db_name_en, B.db_name_cn, B.is_cluster, A.inst_id, C.app_name, C.app_manager, D.plat_name, A.create_date from T_DB_INSTANCES A INNER JOIN T_DB_DATABASES B ON A.database_id=B.database_id INNER JOIN T_DB_APPS C ON B.app_id=C.app_id INNER JOIN T_DB_PLATS D ON C.plat_id=D.plat_id and A.instance_id= %d order by A.database_id,A.instance_id """ % (v_pk_inst_id) 
            list_add_db = g.db.query(v_reg_add_list_sql.replace('%','%%'))

        else:
            result = '执行失败!'
            result_type = 2   
                
            print list_add_db

            print  result;

    return jsonify(list_add_db=list_add_db)