# -*- coding: ISO-8859-1 -*- ################################## # @program smon # @description simulation monitor # @copyright Copyright “(c)2009 Centre National de la Recherche Scientifique CNRS. # All Rights Reserved” # @svn_file $Id: repo_io.py 2599 2013-03-24 19:01:23Z jripsl $ # @version $Rev: 2599 $ # @lastrevision $Date: 2013-03-24 20:01:23 +0100 (Sun, 24 Mar 2013) $ # @license CeCILL (http://dods.ipsl.jussieu.fr/jripsl/smon/LICENSE) ################################## """ This module contains repository I/O code """ import sys # line below is to include Prodiguer database I/O library in the search path sys.path.append("/home/jripsl/snapshot/src") # import Prodiguer database I/O library import elixir import prodiguer_shared # -- methods -- # def init(): if mode==CSTE_MODE_LOCAL_REPO: repo.connect() elif mode==CSTE_MODE_REMOTE_REPO: _CONNECTION = "postgresql://postgres:Silence107!@localhost:5432/prodiguer" prodiguer_shared.connect(_CONNECTION) elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR004 - incorrect mode") def free(): if mode==CSTE_MODE_LOCAL_REPO: repo.close() elif mode==CSTE_MODE_REMOTE_REPO: #prodiguer_shared.close() pass elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR009 - incorrect mode") def test(): repo.create_message("test2", 2, "bla2") commit() repo.update_simulation_status('1pctCO22', 'ERROR') commit() repo.create_message("test3", 3, "bla3") rollback() def commit(): if mode==CSTE_MODE_LOCAL_REPO: repo.commit() elif mode==CSTE_MODE_REMOTE_REPO: elixir.session.commit() elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR002 - incorrect mode") def rollback(): if mode==CSTE_MODE_LOCAL_REPO: repo.rollback() elif mode==CSTE_MODE_REMOTE_REPO: elixir.session.rollback() elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR003 - incorrect mode") def retrieve_simulation(name): simulation=None if mode==CSTE_MODE_LOCAL_REPO: simulation=repo.retrieve_simulation(name) elif mode==CSTE_MODE_REMOTE_REPO: # prepare args # .. # execute s=repo.retrieve_simulation(name) # process return values simulation=smon.types.Simulation(exec_start_date=s.ExecutionStartDate,exec_end_date=s.ExecutionEndDate,status=s.ExecutionState) # ExecutionState example: EXECUTION_STATE_RUNNING, EXECUTION_STATE_SET.. elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR014 - incorrect mode") return simulation def delete_simulation(name): if mode==CSTE_MODE_LOCAL_REPO: repo.delete_simulation(name) elif mode==CSTE_MODE_REMOTE_REPO: # prepare args # .. # execute repo.delete_simulation(name) # process return values # .. elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR015 - incorrect mode") def create_simulation(simulation): if mode==CSTE_MODE_LOCAL_REPO: repo.create_simulation(simulation) elif mode==CSTE_MODE_REMOTE_REPO: # prepare args # .. # execute repo.create_simulation(activity) # process return values # .. elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR016 - incorrect mode") def update_simulation_status(simulation): if mode==CSTE_MODE_LOCAL_REPO: repo.update_simulation_status(simulation) elif mode==CSTE_MODE_REMOTE_REPO: # prepare args # .. # execute repo.update_simulation_status(name) # process return values # .. elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR017 - incorrect mode") def retrieve_messages(simulation): message=None if mode==CSTE_MODE_LOCAL_REPO: message=repo.retrieve_messages(simulation) elif mode==CSTE_MODE_REMOTE_REPO: # prepare args # .. # execute repo.retrieve_messages(name) # process return values # .. elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR018 - incorrect mode") return message def delete_messages(simulation): if mode==CSTE_MODE_LOCAL_REPO: repo.delete_messages(name) elif mode==CSTE_MODE_REMOTE_REPO: # prepare args # .. # execute repo.delete_messages(name) # process return values # .. elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR019 - incorrect mode") def create_message(message): if mode==CSTE_MODE_LOCAL_REPO: repo.create_message(message) elif mode==CSTE_MODE_REMOTE_REPO: # prepare args # .. # execute repo.create_message() # process return values # .. elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR020 - incorrect mode") def retrieve_last_message(simulation): message=None if mode==CSTE_MODE_LOCAL_REPO: message=repo.retrieve_last_message(simulation) elif mode==CSTE_MODE_REMOTE_REPO: # prepare args # .. # execute repo.retrieve_last_message(simulation) # process return values # .. elif mode==CSTE_MODE_REMOTE_REPO_STUB: pass else: raise Exception("ERR021 - incorrect mode") return message # --- higher level methods --- # def get_running_simulations(): running_simulation=[] for s in retrieve_simulation(): if s.status=="running": running_simulation.append(s) return running_simulation # --- module init --- # CSTE_MODE_LOCAL_REPO="local_repo" CSTE_MODE_REMOTE_REPO="remote_repo" CSTE_MODE_REMOTE_REPO_STUB="remote_repo_stub" # set mode mode=CSTE_MODE_LOCAL_REPO # CSTE_MODE_LOCAL_REPO, CSTE_MODE_REMOTE_REPO, CSTE_MODE_REMOTE_REPO_STUB # set repository driver if mode==CSTE_MODE_REMOTE_REPO_STUB: import prodiguer_shared.repo.mq.hooks_stub as repo elif mode==CSTE_MODE_REMOTE_REPO: import prodiguer_shared.repo.mq.hooks as repo elif mode==CSTE_MODE_LOCAL_REPO: import local_repo as repo else: raise Exception("ERR001 - incorrect mode") # note that by putting init() call here, it will only be called when first imported by the first import statement init()