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