예제 #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))
예제 #5
0
            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))

        for dbi in prev_version:
            logger.info('[delete-check] %s' % (dbi.name))
            g = self._find_in_instances(dbi.name, instances)
            if g is None and not DBInstance.objects.deleted(dbi):
                del_dbi = DBInstance(
                    name=dbi.name,
                    region=dbi.region,
                    endpoint=dbi.endpoint,
                    port=dbi.port,
                    parameter_group_name=dbi.parameter_group_name,
                    db_instance_type=DBInstance.RDS,
                    parameters=None,
                    run_time=run_time,
                )
                del_dbi.save()
                self._snapshot_updated(cur_snapshot, del_dbi.id, dbi.id)
                logger.info("[deleted] %s" % (del_dbi.name))
        logger.info("[rds db instances end]")
        return prev_snapshot, cur_snapshot

    def non_rds_collect_config_file(self, run_time):
        logger.info('[config file start]')
        prev_snapshot = set(
            ConfigFile.objects.find_versions(
                'config_file', txn='latest').values_list('id', flat=True))
예제 #6
0
             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))
         
     for dbi in prev_version:
         logger.info('[delete-check] %s' % (dbi.name))
         g  = self._find_in_instances(dbi.name, instances)
         if g is None and not DBInstance.objects.deleted(dbi):
             del_dbi = DBInstance(
                 name=dbi.name,
                 region=dbi.region,
                 endpoint=dbi.endpoint,
                 port=dbi.port,
                 parameter_group_name=dbi.parameter_group_name,
                 db_instance_type=DBInstance.RDS,
                 parameters=None,
                 run_time=run_time,
             )
             del_dbi.save()
             self._snapshot_updated(cur_snapshot, del_dbi.id, dbi.id)
             logger.info("[deleted] %s" % (del_dbi.name))
     logger.info("[rds db instances end]")
     return prev_snapshot, cur_snapshot
     
 def non_rds_collect_config_file(self, run_time):
     logger.info('[config file start]')
     prev_snapshot = set(ConfigFile.objects.find_versions('config_file', txn='latest').values_list('id', flat=True))
     cur_snapshot = prev_snapshot.copy()
     prev_version = ConfigFile.objects.filter(id__in=prev_snapshot)