Ejemplo n.º 1
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
Ejemplo n.º 2
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