def rebuildRoomReservationsIndex(): from MaKaC.common.db import DBMgr from MaKaC.rb_location import CrossLocationDB from MaKaC.rb_room import RoomBase from MaKaC.plugins.RoomBooking.default.dalManager import DALManager from BTrees.OOBTree import OOBTree DBMgr.getInstance().startRequest() CrossLocationDB.connect() root = DALManager.root resvEx = ReservationBase() resvEx.isConfirmed = None allResvs = CrossLocationQueries.getReservations( resvExample = resvEx ) print "There are " + str( len( allResvs ) ) + " resvs and pre-resvs to index..." c = 0 root[_ROOM_RESERVATIONS_INDEX] = OOBTree() print "Room => Reservations Index branch created" for resv in allResvs: roomReservationsIndexBTree = root[_ROOM_RESERVATIONS_INDEX] resvs = roomReservationsIndexBTree.get( resv.room.id ) if resvs == None: resvs = [] # New list of reservations for this room roomReservationsIndexBTree.insert( resv.room.id, resvs ) resvs.append( resv ) roomReservationsIndexBTree[resv.room.id] = resvs c += 1 if c % 100 == 0: print c CrossLocationDB.commit() CrossLocationDB.disconnect() DBMgr.getInstance().endRequest()
def _endRequestSpecific2RH( commit = True ): minfo = info.HelperMaKaCInfo.getMaKaCInfoInstance() if minfo.getRoomBookingModuleActive(): if commit: CrossLocationDB.commit() else: CrossLocationDB.rollback() CrossLocationDB.disconnect()
def play(): from MaKaC.rb_location import CrossLocationDB from MaKaC.rb_room import RoomBase from MaKaC.common.db import DBMgr DBMgr.getInstance().startRequest() CrossLocationDB.connect() roomEx = RoomBase() roomEx.isActive = False rooms = CrossLocationQueries.getRooms( roomExample = roomEx ) for r in rooms: print r CrossLocationDB.commit() CrossLocationDB.disconnect() DBMgr.getInstance().endRequest()
def indexByDay(): from MaKaC.rb_location import CrossLocationDB from MaKaC.rb_room import RoomBase from MaKaC.common.db import DBMgr DBMgr.getInstance().startRequest() CrossLocationDB.connect() # resvEx = ReservationBase() # resvEx.isConfirmed = None # resvs = CrossLocationQueries.getReservations( resvExample = resvEx ) # print "There are " + str( len( resvs ) ) + " resvs to index..." # c = 0 # for resv in resvs: # resv._addToDayReservationsIndex() # c += 1 # if c % 100 == 0: # print c CrossLocationDB.commit() CrossLocationDB.disconnect() DBMgr.getInstance().endRequest()
def execute(self): try: self._initLog() self._printOutput("***Starting execute***\n") ### Get the connection in order to avoid that to threads share the same one conn = db.DBMgr().getInstance() conn.startRequest() minfo = HelperMaKaCInfo.getMaKaCInfoInstance() if minfo.getRoomBookingModuleActive(): CrossLocationDB.connect() ### taskList = HelperTaskList().getTaskListInstance() tasks = taskList.getTasks() if len(tasks) == 0: self._printOutput("--->No tasks!") else: self._printOutput("Execute at %s\n" % datetime.now()) taskids = [i.getId() for i in tasks] for id in taskids: ### check if another thread have already removed the task conn.sync() if not id in taskList.listTask.keys(): continue task = taskList.getTaskById(id) ### if task.isRunning(): self._printOutput("\t--->Task <%s> already running" % task.getId()) else: try: self._printOutput("\t--->Running task <%s>" % task.getId()) if task.getStartDate( ) == None or task.getStartDate() < nowutc(): self._printOutput("\t (SINGLE RUN)") # the task is started if task.getInterval() == None or task.getLastDate( ) == None: # the task is run once or never runned task.setRunning(True) conn.commit() abort = task.prerun() if abort: self._printOutput( "\t<---Task <%s> was aborted." % task.getId()) task.setRunning(False) conn.commit() continue for obj in task.getObjList(): self._printOutput( "\t\tRunning object <%s> (start date: %s)" % (obj.getId(), task.getStartDate())) #task.setLastDate(datetime.now()) self._runObj(obj) self._printOutput("\t\tEnd object") task.setLastDate(nowutc()) task.setRunning(False) if task.getInterval() == None: # if run once, delete the task from list taskList.removeTask(task) self._printOutput("\t\tTask was removed") else: self._printOutput( "\t\tTask is periodic (getInterval: %s)" % task.getInterval()) else: self._printOutput("\t (PERIODIC TASK)") # the task is to be run multiple times if task.getLastDate() + task.getInterval( ) < nowutc(): task.setRunning(True) conn.commit() abort = task.prerun() if abort: self._printOutput( "\t<---Task <%s> was aborted." % task.getId()) task.setRunning(False) conn.commit() continue # it's time to launch the task!!! for obj in task.getObjList(): self._printOutput( "\tRunning object %s (last date: %s)" % (obj.getId(), task.getLastDate())) #task.setLastDate(datetime.now()) self._runObj(obj) self._printOutput("\t\tEnd object") if task.getLastDate() and task.getEndDate( ): if task.getLastDate( ) + task.getInterval( ) > task.getEndDate(): # the task is finish, delete it from list taskList.removeTask(task) self._printOutput( "\t\tTask was removed") task.setLastDate(nowutc()) task.setRunning(False) self._printOutput("\t<---end task <%s>\n" % task.getId()) conn.commit() except Exception, e: conn.sync() task.setRunning(False) conn.commit() ty, ex, tb = sys.exc_info() tracebackList = traceback.format_list( traceback.extract_tb(tb)) self._printOutput( "*****---->[ERROR]:%s\nTraceback:%s" % (e, "\n".join(tracebackList))) self._sendErrorEmail(e) if minfo.getRoomBookingModuleActive(): CrossLocationDB.commit() CrossLocationDB.disconnect() conn.endRequest() self._printOutput("***end execute***\n\n") self._closeLog()
def execute(self): try: self._initLog() self._printOutput("***Starting execute***\n") ### Get the connection in order to avoid that to threads share the same one conn = db.DBMgr().getInstance() conn.startRequest() minfo = HelperMaKaCInfo.getMaKaCInfoInstance() if minfo.getRoomBookingModuleActive(): CrossLocationDB.connect() ### taskList = HelperTaskList().getTaskListInstance() tasks = taskList.getTasks() if len(tasks) == 0: self._printOutput("--->No tasks!") else: self._printOutput("Execute at %s\n"%datetime.now()) taskids = [i.getId() for i in tasks] for id in taskids: ### check if another thread have already removed the task conn.sync() if not id in taskList.listTask.keys(): continue task = taskList.getTaskById(id) ### if task.isRunning(): self._printOutput("\t--->Task <%s> already running"%task.getId()) else: try: self._printOutput("\t--->Running task <%s>"%task.getId()) if task.getStartDate() == None or task.getStartDate() < nowutc(): self._printOutput("\t (SINGLE RUN)") # the task is started if task.getInterval() == None or task.getLastDate() == None: # the task is run once or never runned task.setRunning(True) conn.commit() abort=task.prerun() if abort: self._printOutput("\t<---Task <%s> was aborted."%task.getId()) task.setRunning(False) conn.commit() continue for obj in task.getObjList(): self._printOutput("\t\tRunning object <%s> (start date: %s)"%(obj.getId(),task.getStartDate())) #task.setLastDate(datetime.now()) self._runObj(obj) self._printOutput("\t\tEnd object") task.setLastDate(nowutc()) task.setRunning(False) if task.getInterval() == None: # if run once, delete the task from list taskList.removeTask(task) self._printOutput("\t\tTask was removed") else: self._printOutput("\t\tTask is periodic (getInterval: %s)" % task.getInterval()) else: self._printOutput("\t (PERIODIC TASK)") # the task is to be run multiple times if task.getLastDate() + task.getInterval() < nowutc(): task.setRunning(True) conn.commit() abort=task.prerun() if abort: self._printOutput("\t<---Task <%s> was aborted."%task.getId()) task.setRunning(False) conn.commit() continue # it's time to launch the task!!! for obj in task.getObjList(): self._printOutput("\tRunning object %s (last date: %s)"%(obj.getId(),task.getLastDate())) #task.setLastDate(datetime.now()) self._runObj(obj) self._printOutput("\t\tEnd object") if task.getLastDate() and task.getEndDate(): if task.getLastDate() + task.getInterval() > task.getEndDate(): # the task is finish, delete it from list taskList.removeTask(task) self._printOutput("\t\tTask was removed") task.setLastDate(nowutc()) task.setRunning(False) self._printOutput("\t<---end task <%s>\n"%task.getId()) conn.commit() except Exception, e: conn.sync() task.setRunning(False) conn.commit() ty, ex, tb = sys.exc_info() tracebackList = traceback.format_list( traceback.extract_tb( tb ) ) self._printOutput("*****---->[ERROR]:%s\nTraceback:%s"%(e,"\n".join(tracebackList))) self._sendErrorEmail(e) if minfo.getRoomBookingModuleActive(): CrossLocationDB.commit() CrossLocationDB.disconnect() conn.endRequest() self._printOutput("***end execute***\n\n") self._closeLog()