Example #1
0
    def discover_cluster_databases(self,make_observable=True):
	if not self.__prod_conn:
	    if not self.__set_self_db_conn():
		logger.error("Did not obtain Prod database conection for cluster {0} in discover_cluster_databases method ".format(self.db_fields['hostname']))
		return
	cur=self.__prod_conn.cursor()
	try:
	    cur.execute("SELECT oid,datname FROM pg_database WHERE NOT datistemplate AND datname !='postgres'")
	except Exception as e:
	    logger.error("Cannot execute database discovery query: {0}".format(e))
	    cur.close()
	    return
	prod_dbs=cur.fetchall()
	cur.close()
	self.cursor.execute("SELECT obj_oid,db_name,id FROM database_name WHERE hc_id={0} AND alive".format(self.id))
	local_dbs=self.cursor.fetchall()
	for l_db in local_dbs:
	    for p_db in prod_dbs:
		if l_db[0]==p_db[0] and l_db[1]==p_db[1]:
		    break
	    else:
		old_db=DatabaseName(l_db[2],self.return_conn_string(dbname=l_db[1]))
		old_db.retire()
		logger.info("Retired database {0} in cluster {1}".format(l_db[1],self.db_fields['hostname']))
	for p_db in prod_dbs:
	    for l_db in local_dbs:
		if l_db[0]==p_db[0] and l_db[1]==p_db[1]:
		    break
	    else:
		new_db=DatabaseName()
		new_db.set_fields(hc_id=self.id,obj_oid=p_db[0],db_name=p_db[1],observable=make_observable)
		new_db.create()
		new_db.truncate()
		logger.info("Create new database {0} for cluster {1}".format(p_db[1],self.db_fields['hostname']))
Example #2
0
 def runtime_stat(self, in_time_id):
     if not super(HostCluster, self).runtime_stat(in_time_id):
         logger.error("Returned from HC.runtime_stat")
         return False
     dep_dn = self.get_dependants(True)
     if not dep_dn:
         logger.error("Returned from HC.runtime_stat no dependants returned")
         return False
     for dn_set in dep_dn:
         dn = DatabaseName(self.db_conn, dn_set["db_dsn"], dn_set["id"])
         if not dn.runtime_stat(in_time_id):
             logger.error("Error in HC.runtime_stat False from db.stat")
         dn.__del__()
     return True
Example #3
0

lt=LogTime()

work_cursor=database.db_conn.cursor()
work_cursor.execute("SELECT id FROM host_cluster WHERE alive AND observable")



for hc_id in work_cursor.fetchall():
    hc=HostCluster(hc_id[0])
    hc.discover_cluster_params()
    hc.stat(lt.id)
    for dbs in hc.get_dependants(obs=True):
	db_conn_string=hc.return_conn_string(dbs['db_name'])
	dn=DatabaseName(dbs['id'],db_conn_string)
	dn.stat(lt.id)
	db_cursor=dn.get_prod_cursor()
	if db_cursor:
	    for sn_id in dn.get_dependants(obs=True):
		sn=SchemaName(sn_id)
		sn.discover_tables(db_cursor)
		sn.discover_functions(db_cursor)
		for tbl_id in sn.get_tables():
		    tn=TableName(tbl_id)
		    tn.stat(lt.id,db_cursor)
		    tn.va_stat(lt.id,db_cursor)
		    tn.discover_indexes(db_cursor)
		    for ind_id in tn.get_dependants():
			ind=IndexName(ind_id)
			ind.stat(lt.id,db_cursor)
Example #4
0
    def discover_databases(self):
        p_cur = self._get_p_cursor()
        if not p_cur:
            logger.error("Return from discover_databases. No p_cur obtained")
            return False
        try:
            p_cur.execute("SELECT oid,datname FROM pg_database WHERE NOT datistemplate AND datname !='postgres'")
        except Exception as e:
            logger.error("Cannot execute database discovery query on Prod: {0}".format(e.pgerror))
            p_cur.close()
            return False
        prod_dbs = p_cur.fetchall()
        p_cur.close()

        cur = self._get_cursor()
        if not cur:
            logger.error("Return from discover_databases. No cur obtained")
            return False
        cur = self.db_conn.cursor()
        try:
            cur.execute("SELECT obj_oid,db_name,id FROM database_name WHERE hc_id={0} AND alive".format(self.id))
        except Exception as e:
            logger.error("Cannot execute database discovery query on Local: {0}".format(e.pgerror))
            cur.close()
            return False
        local_dbs = cur.fetchall()
        cur.close()
        for l_db in local_dbs:
            for p_db in prod_dbs:
                if l_db[0] == p_db[0] and l_db[1] == p_db[1]:
                    old_db = DatabaseName(self.db_conn, self.get_conn_string(l_db[1]), l_db[2])
                    if not old_db.discover_schemas():
                        logger.error("HC.discover_databases. False from discover_schemas() for old")
                    old_db.__del__()
                    break
            else:
                old_db = DatabaseName(self.db_conn, self.get_conn_string(l_db[1]), l_db[2])
                if old_db.retire():
                    logger.info("Retired database {0} in cluster {1}".format(l_db[1], self.db_fields["hostname"]))
                else:
                    logger.error("HC.discover_databases() cannot retire old")
                old_db.__del__()
        for p_db in prod_dbs:
            for l_db in local_dbs:
                if l_db[0] == p_db[0] and l_db[1] == p_db[1]:
                    break
            else:
                new_db = DatabaseName(self.db_conn, self.get_conn_string(p_db[1]))
                new_db.set_fields(hc_id=self.id, obj_oid=p_db[0], db_name=p_db[1])
                if new_db._create():
                    logger.info("Create new database {0} for cluster {1}".format(p_db[1], self.db_fields["hostname"]))
                    if not new_db.discover_schemas():
                        logger.error("HC.discover_databases. False from discover_schemas() for new")
                else:
                    logger.error("HC.discover_databases(). Canot create new")
                new_db.__del__()
        return True