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))
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))
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))
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))