예제 #1
0
    def rds_collect_db_instance(self, conn, run_time):
        region = conn.region.name
        logger.info('[rds db instances start]')
        instances = get_all_dbinstances(conn)
        prev_snapshot = set(
            DBInstance.objects.find_versions(
                'db_instance', txn='latest').filter(
                    db_instance_type=DBInstance.RDS).values_list('id',
                                                                 flat=True))
        cur_snapshot = prev_snapshot.copy()
        prev_version = DBInstance.objects.filter(id__in=prev_snapshot)
        for instance in instances:
            endpoint = instance.endpoint
            parameter_group = instance.parameter_group
            new_dbi = DBInstance(name=instance.id,
                                 region=region,
                                 endpoint=endpoint[0],
                                 port=endpoint[1],
                                 parameter_group_name=parameter_group.name,
                                 db_instance_type=DBInstance.RDS,
                                 run_time=run_time)
            try:
                mysql_conn = MySQLdb.connect(
                    host=new_dbi.endpoint,
                    port=new_dbi.port,
                    user=settings.MYSQL_USER,
                    passwd=settings.MYSQL_PASSWORD,
                    cursorclass=MySQLdb.cursors.DictCursor)
            except OperationalError, e:
                logger.error('[error] Unable to connect to RDS Instance %s' %
                             (instance.id))
                continue
            cursor = mysql_conn.cursor()
            cursor.execute('SHOW GLOBAL VARIABLES')
            rows = cursor.fetchall()
            parameters = {}
            for row in rows:
                parameters[row.get('Variable_name')] = row.get('Value')
            new_dbi.parameters = parameters
            old_dbi = DBInstance.objects.find_last(new_dbi.name)

            if old_dbi is None or old_dbi.parameters is None:
                new_dbi.save()
                cur_snapshot.add(new_dbi.id)
                logger.info('[new] %s' % (new_dbi.name))
            elif len(
                    DBInstance.objects.get_changed_parameters(
                        old_dbi, new_dbi)) > 0:
                new_dbi.save()
                self._snapshot_updated(cur_snapshot, new_dbi.id, old_dbi.id)
                logger.info('[changed] %s' % (new_dbi.name))
예제 #2
0
    def non_rds_collect_db_instance(self, run_time):
        logger.info('[non-rds db instances start]')
        prev_snapshot = set(
            DBInstance.objects.find_versions(
                'db_instance', txn='latest').filter(
                    db_instance_type=DBInstance.HOST).values_list('id',
                                                                  flat=True))
        cur_snapshot = prev_snapshot.copy()
        prev_version = DBInstance.objects.filter(id__in=prev_snapshot)
        for host in settings.NON_RDS_HOSTS:
            hostname = host.get('hostname')
            mysql_port = host.get('mysql_port', 3306)
            new_dbi = DBInstance(name=hostname,
                                 endpoint=hostname,
                                 port=mysql_port,
                                 db_instance_type=DBInstance.HOST,
                                 run_time=run_time)
            try:
                mysql_conn = MySQLdb.connect(
                    host=new_dbi.endpoint,
                    port=new_dbi.port,
                    user=settings.MYSQL_USER,
                    passwd=settings.MYSQL_PASSWORD,
                    cursorclass=MySQLdb.cursors.DictCursor)
            except OperationalError, e:
                logger.error('[error] Unable to connect to MySQL Instance %s' %
                             (new_dbi.name))
                continue
            cursor = mysql_conn.cursor()
            cursor.execute('SHOW GLOBAL VARIABLES')
            rows = cursor.fetchall()
            parameters = {}
            for row in rows:
                parameters[row.get('Variable_name')] = row.get('Value')
            new_dbi.parameters = parameters
            old_dbi = DBInstance.objects.find_last(new_dbi.name)

            if old_dbi is None or old_dbi.parameters is None:
                new_dbi.save()
                cur_snapshot.add(new_dbi.id)
                logger.info('[new] %s' % (new_dbi.name))
            elif len(
                    DBInstance.objects.get_changed_parameters(
                        old_dbi, new_dbi)) > 0:
                new_dbi.save()
                self._snapshot_updated(cur_snapshot, new_dbi.id, old_dbi.id)
                logger.info('[changed] %s' % (new_dbi.name))
예제 #3
0
 def rds_collect_db_instance(self, conn, run_time):
     region = conn.region.name
     logger.info('[rds db instances start]')
     instances = get_all_dbinstances(conn)
     prev_snapshot = set(DBInstance.objects.find_versions('db_instance', txn='latest').filter(db_instance_type=DBInstance.RDS).values_list('id', flat=True))
     cur_snapshot = prev_snapshot.copy()
     prev_version = DBInstance.objects.filter(id__in=prev_snapshot)
     for instance in instances:
         endpoint = instance.endpoint
         parameter_group = instance.parameter_group
         new_dbi = DBInstance(
             name=instance.id,
             region=region,
             endpoint=endpoint[0],
             port=endpoint[1],
             parameter_group_name=parameter_group.name,
             db_instance_type=DBInstance.RDS,
             run_time=run_time
         )
         try:
             mysql_conn = MySQLdb.connect(host=new_dbi.endpoint, port=new_dbi.port,
                                         user=settings.MYSQL_USER,
                                         passwd=settings.MYSQL_PASSWORD,
                                         cursorclass=MySQLdb.cursors.DictCursor)
         except OperationalError, e:
             logger.error('[error] Unable to connect to RDS Instance %s' % (instance.id))
             continue
         cursor = mysql_conn.cursor()
         cursor.execute('SHOW GLOBAL VARIABLES')
         rows = cursor.fetchall()
         parameters = {}
         for row in rows:
             parameters[row.get('Variable_name')] = row.get('Value')
         new_dbi.parameters = parameters
         old_dbi = DBInstance.objects.find_last(new_dbi.name)
         
         if old_dbi is None or old_dbi.parameters is None:
             new_dbi.save()
             cur_snapshot.add(new_dbi.id)
             logger.info('[new] %s' % (new_dbi.name))
         elif len(DBInstance.objects.get_changed_parameters(old_dbi, new_dbi)) > 0:
             new_dbi.save()
             self._snapshot_updated(cur_snapshot, new_dbi.id, old_dbi.id)
             logger.info('[changed] %s' % (new_dbi.name))
예제 #4
0
 def non_rds_collect_db_instance(self, run_time):
     logger.info('[non-rds db instances start]')
     prev_snapshot = set(DBInstance.objects.find_versions('db_instance', txn='latest').filter(db_instance_type=DBInstance.HOST).values_list('id', flat=True))
     cur_snapshot = prev_snapshot.copy()
     prev_version = DBInstance.objects.filter(id__in=prev_snapshot)
     for host in settings.NON_RDS_HOSTS:
         hostname = host.get('hostname')
         mysql_port = host.get('mysql_port', 3306)
         new_dbi = DBInstance(
             name=hostname,
             endpoint=hostname,
             port=mysql_port,
             db_instance_type=DBInstance.HOST,
             run_time=run_time
         )
         try:
             mysql_conn = MySQLdb.connect(host=new_dbi.endpoint, port=new_dbi.port,
                                         user=settings.MYSQL_USER,
                                         passwd=settings.MYSQL_PASSWORD,
                                         cursorclass=MySQLdb.cursors.DictCursor)
         except OperationalError, e:
             logger.error('[error] Unable to connect to MySQL Instance %s' % (new_dbi.name))
             continue
         cursor = mysql_conn.cursor()
         cursor.execute('SHOW GLOBAL VARIABLES')
         rows = cursor.fetchall()
         parameters = {}
         for row in rows:
             parameters[row.get('Variable_name')] = row.get('Value')
         new_dbi.parameters = parameters
         old_dbi = DBInstance.objects.find_last(new_dbi.name)
         
         if old_dbi is None or old_dbi.parameters is None:
             new_dbi.save()
             cur_snapshot.add(new_dbi.id)
             logger.info('[new] %s' % (new_dbi.name))
         elif len(DBInstance.objects.get_changed_parameters(old_dbi, new_dbi)) > 0:
             new_dbi.save()
             self._snapshot_updated(cur_snapshot, new_dbi.id, old_dbi.id)
             logger.info('[changed] %s' % (new_dbi.name))