Пример #1
0
    def __init__(self, manager):
        self.columnNames = [
            "Protocol", "ID", "Status", "Time", "ServiceGroup", "Destination",
            "TargetPorts", "LocalPort", "Address", "Information"
        ]

        self.statusMap = {SessionStatus.RUNNING:"Running", SessionStatus.STOPPED:"Stopped", SessionStatus.INITIAL:"Initial",\
                SessionStatus.CONNECTING:"Connecting", SessionStatus.NETWORKERROR:"Failed", SessionStatus.EXECPTION:"Execption",\
                SessionStatus.REMOVED:"Remove",\
                SessionStatus.SETUP:"Setup",
                SessionStatus.PAUSE: "Pause"}

        self.colourMap = {SessionStatus.RUNNING:"LimeGreen", SessionStatus.STOPPED:"SlateGray",\
                          SessionStatus.INITIAL:"RoyalBlue1",\
                          SessionStatus.SETUP: "YellowGreen",\
                          SessionStatus.CONNECTING:"yellow2",\
                          SessionStatus.NETWORKERROR:"red",SessionStatus.EXECPTION:"Orange",\
                          SessionStatus.REMOVED:"black",\
                          SessionStatus.PAUSE: "chocolate"}

        self.listStore = None
        self.treeView = None
        self.scrollWindow = None
        self.statics = None
        self.currentTime = None
        self.runTimeLable = gtk.Label("Time: 0:0")
        self.runningLabel = gtk.Label("Running: 0")
        self.pauseLabel = gtk.Label("Pause: 0")
        self.stoppedLabel = gtk.Label("Stopped: 0")
        self.initialLabel = gtk.Label("Initial: 0")
        self.failingLabel = gtk.Label("Failed: 0")
        self.setupLabel = gtk.Label("Setup: 0")
        self.totalLabel = gtk.Label("Total: 0")
        self.connectingLabel = gtk.Label("Connecting: 0")
        self.exceptionLabel = gtk.Label("Exception: 0")
        self.manager = manager

        # accelerate finding the session in session view.
        self.accelerate = {}
        self.updateWorker = UpdateStatisticsWorker(self, manager)
        self.lock = threading.Lock()

        self.RightKeyMenu = SessionRightKeyMenu(manager)
Пример #2
0
 def __init__(self, manager=None):
     self.statusMap = {
         SessionStatus.RUNNING: "Running",
         SessionStatus.STOPPED: 'Stopped',
         SessionStatus.INITIAL: 'Initial',
         SessionStatus.CONNECTING: 'Connecting',
         SessionStatus.NETWORKERROR: 'Failed',
         SessionStatus.EXECPTION: 'Exception',
         SessionStatus.REMOVED: 'Remove',
         SessionStatus.PAUSE: 'Pause',
         SessionStatus.SETUP: 'Setup',
     }
     self.session_records = []
     self.statics = None
     self.manager = manager
     self.accelerate = {}
     self.updateWorker = UpdateStatisticsWorker(self, manager)
     self.lock = threading.Lock()
     self.info = ""
     self.count = 0
Пример #3
0
 def __init__(self,manager = None):    
     self.statusMap = {
         SessionStatus.RUNNING:"Running",
         SessionStatus.STOPPED:'Stopped',
         SessionStatus.INITIAL:'Initial',
         SessionStatus.CONNECTING:'Connecting',
         SessionStatus.NETWORKERROR:'Failed',
         SessionStatus.EXECPTION:'Exception',
         SessionStatus.REMOVED:'Remove',
         SessionStatus.PAUSE:'Pause',
         SessionStatus.SETUP:'Setup',
     }
     self.session_records = []
     self.statics = None
     self.manager = manager
     self.accelerate = {}
     self.updateWorker = UpdateStatisticsWorker(self,manager)
     self.lock = threading.Lock()
     self.info = ""
     self.count = 0
Пример #4
0
    def __init__(self, manager):
        self.columnNames = ["Protocol","ID","Status","Time","ServiceGroup","Destination", "TargetPorts", "LocalPort", "Address", "Information"]
        
        self.statusMap = {SessionStatus.RUNNING:"Running", SessionStatus.STOPPED:"Stopped", SessionStatus.INITIAL:"Initial",\
                SessionStatus.CONNECTING:"Connecting", SessionStatus.NETWORKERROR:"Failed", SessionStatus.EXECPTION:"Execption",\
                SessionStatus.REMOVED:"Remove",\
                SessionStatus.SETUP:"Setup",
                SessionStatus.PAUSE: "Pause"}

        self.colourMap = {SessionStatus.RUNNING:"LimeGreen", SessionStatus.STOPPED:"SlateGray",\
                          SessionStatus.INITIAL:"RoyalBlue1",\
                          SessionStatus.SETUP: "YellowGreen",\
                          SessionStatus.CONNECTING:"yellow2",\
                          SessionStatus.NETWORKERROR:"red",SessionStatus.EXECPTION:"Orange",\
                          SessionStatus.REMOVED:"black",\
                          SessionStatus.PAUSE: "chocolate"}

        
        self.listStore    = None
        self.treeView     = None
        self.scrollWindow = None
        self.statics      = None
        self.currentTime  = None
        self.runTimeLable = gtk.Label("Time: 0:0")
        self.runningLabel = gtk.Label("Running: 0")
        self.pauseLabel   = gtk.Label("Pause: 0")
        self.stoppedLabel = gtk.Label("Stopped: 0")
        self.initialLabel = gtk.Label("Initial: 0")
        self.failingLabel = gtk.Label("Failed: 0")
        self.setupLabel   = gtk.Label("Setup: 0")
        self.totalLabel   = gtk.Label("Total: 0")
        self.connectingLabel = gtk.Label("Connecting: 0")
        self.exceptionLabel  = gtk.Label("Exception: 0")
        self.manager = manager
        
        # accelerate finding the session in session view.
        self.accelerate = {}
        self.updateWorker = UpdateStatisticsWorker(self, manager)
        self.lock = threading.Lock()
        
        self.RightKeyMenu = SessionRightKeyMenu(manager)
Пример #5
0
def startWatchDog(manager, win):
    watchDog = WatchDog()
    worker = UpdateStatisticsWorker(watchDog, manager)
    worker.setScheduleTime(10)
    worker.start()
Пример #6
0
def startWatchDog(manager,win):
    watchDog = WatchDog()
    worker = UpdateStatisticsWorker(watchDog,manager)
    worker.setScheduleTime(10)
    worker.start()
Пример #7
0
class ui_term(Observer,UpdateInterface):
    def __init__(self,manager = None):    
        self.statusMap = {
            SessionStatus.RUNNING:"Running",
            SessionStatus.STOPPED:'Stopped',
            SessionStatus.INITIAL:'Initial',
            SessionStatus.CONNECTING:'Connecting',
            SessionStatus.NETWORKERROR:'Failed',
            SessionStatus.EXECPTION:'Exception',
            SessionStatus.REMOVED:'Remove',
            SessionStatus.PAUSE:'Pause',
            SessionStatus.SETUP:'Setup',
        }
        self.session_records = []
        self.statics = None
        self.manager = manager
        self.accelerate = {}
        self.updateWorker = UpdateStatisticsWorker(self,manager)
        self.lock = threading.Lock()
        self.info = ""
        self.count = 0

    def __format(self,array):
        array[0] = ansi['darkblue'] + str(array[0]) + " " * (WIDTH["PROTOCOL"] - len(str(array[0]))) + ansi['default'] 
        array[1] = ansi['darkyellow'] + str(array[1]) + " " * (WIDTH["ID"] - len(str(array[1]))) + ansi['default']
        array[2] = ansi['white'] + str(array[2]) + " " * (WIDTH["ADDR"] - len(str(array[2]))) + ansi['default'] 
        array[3] = ansi['darkgreen'] + str(array[3]) + " " * (WIDTH["TIME"] - len(str(array[3]))) + ansi['default']
        if array[4].find("Failed") == -1:
            array[4] = ansi['darkgreen'] + str(array[4]) + " " * (WIDTH["STATUS"] - len(str(array[4]))) + ansi['default']
        else:
            array[4] = ansi['darkred'] + str(array[4]) + " " * (WIDTH["STATUS"] - len(str(array[4]))) + ansi['default']
        array[5] = ansi['default'] + str(array[5]) + " " * (WIDTH["DESTINATION"] - len(str(array[5])))
        array[6] = ansi['darkyellow'] + str(array[6]) + " " * (WIDTH["CLIENT_PORT"] - len(str(array[6]))) + ansi['default']
        arraystr = ""
        for each in array:
            arraystr += str(each)
        return arraystr

    def restore_scrn(self):
        sys.stdout.write(ansi['default'])

    def display_head(self):
        string = self.__format(HEAD)        
        sys.stdout.write(string + '\n')

    def display_info(self):
        sys.stdout.write(ansi['white'] + self.info + '\n')
        
    def display_line(self,array):
        string = self.__format(array)    
        sys.stdout.write(string + '\n')

    def __del__(self):
        self.manager.stop()
    
    def createView(self):     
        self.display_head()
        self.updateWorker.start()

    def update(self,statics):
        total   = statics.total()
        setup   = statics[SessionStatus.SETUP]
        run     = statics[SessionStatus.RUNNING] 
        stop    = statics[SessionStatus.STOPPED]
        fail    = statics[SessionStatus.NETWORKERROR]
        connect = statics[SessionStatus.CONNECTING]
        paused  = statics[SessionStatus.PAUSE]
        initial = statics[SessionStatus.INITIAL]

        
        self.info = str("\nTotal = %d   Initial = %d   Connect = %d   Setup = %d   Run = %d   Paused = %d   Failed = %d   Stop = %d\n" 
                        % (total, initial, connect, setup, run, paused, fail, stop))

    def addNewSession(self,status):
        protocol = status.getProtocol()
        id = status.getId()
        sessionStatus = self.statusMap[status.getStatus()]
        runTime = status.getTime()
        address = status.getAddress()
        params = status.getParamsFromRemote()
        destination = "NoAddress"
        port = "NoPort"
        session_record = [protocol,id,address,runTime,sessionStatus,destination,port]
        self.accelerate[id] = session_record
        self.session_records.append(session_record)
        self.display_line(session_record)

    def __clearStoppedSession(self,id):
        del self.accelerate[id]
        self.session_records.remove[id]

    def updateSessionStatus(self,status):
        self.lock.acquire()
        if status.getId() in self.accelerate.keys():
            id = status.getId()
            self.accelerate[id][STATUS] = self.statusMap[status.getStatus()]
            self.accelerate[id][TIME] = status.getTime()
            if self.accelerate[id][STATUS] == "Setup":
                self.accelerate[id][DESTINATION] = status.getParamsFromRemote()['destination']
                self.accelerate[id][CLIENT_PORT] = status.getParamsFromRemote()['client_port']
            self.count += 1
            if self.count > len(self.accelerate.keys()):
                for each in self.session_records:
                    self.display_line(each)
                self.display_info()
                time.sleep(1.5)
                self.count = 0
        else:
            self.addNewSession(status)
        self.lock.release()  

    def updateView(self,status):
        self.updateSessionStatus(status)
Пример #8
0
class SessionView(Observer, UpdateInterface):
    def __init__(self, manager):
        self.columnNames = [
            "Protocol", "ID", "Status", "Time", "ServiceGroup", "Destination",
            "TargetPorts", "LocalPort", "Address", "Information"
        ]

        self.statusMap = {SessionStatus.RUNNING:"Running", SessionStatus.STOPPED:"Stopped", SessionStatus.INITIAL:"Initial",\
                SessionStatus.CONNECTING:"Connecting", SessionStatus.NETWORKERROR:"Failed", SessionStatus.EXECPTION:"Execption",\
                SessionStatus.REMOVED:"Remove",\
                SessionStatus.SETUP:"Setup",
                SessionStatus.PAUSE: "Pause"}

        self.colourMap = {SessionStatus.RUNNING:"LimeGreen", SessionStatus.STOPPED:"SlateGray",\
                          SessionStatus.INITIAL:"RoyalBlue1",\
                          SessionStatus.SETUP: "YellowGreen",\
                          SessionStatus.CONNECTING:"yellow2",\
                          SessionStatus.NETWORKERROR:"red",SessionStatus.EXECPTION:"Orange",\
                          SessionStatus.REMOVED:"black",\
                          SessionStatus.PAUSE: "chocolate"}

        self.listStore = None
        self.treeView = None
        self.scrollWindow = None
        self.statics = None
        self.currentTime = None
        self.runTimeLable = gtk.Label("Time: 0:0")
        self.runningLabel = gtk.Label("Running: 0")
        self.pauseLabel = gtk.Label("Pause: 0")
        self.stoppedLabel = gtk.Label("Stopped: 0")
        self.initialLabel = gtk.Label("Initial: 0")
        self.failingLabel = gtk.Label("Failed: 0")
        self.setupLabel = gtk.Label("Setup: 0")
        self.totalLabel = gtk.Label("Total: 0")
        self.connectingLabel = gtk.Label("Connecting: 0")
        self.exceptionLabel = gtk.Label("Exception: 0")
        self.manager = manager

        # accelerate finding the session in session view.
        self.accelerate = {}
        self.updateWorker = UpdateStatisticsWorker(self, manager)
        self.lock = threading.Lock()

        self.RightKeyMenu = SessionRightKeyMenu(manager)

    def __del__(self):
        self.manager.stop()

    def onRightMouseClick(self, widget, event, selection):
        RIGHT_BUTTON = 3
        if event.button == RIGHT_BUTTON:
            self.treeView.grab_focus()
            (model, path) = selection.get_selected_rows()
            ids = []
            for p in path:
                ids.append(model[p][ID])
            self.RightKeyMenu.createPopupMenu(self.manager, ids, event)

    def createView(self):
        """ protocol, id, status, time, address"""
        hBox = gtk.HBox(False, 9)
        hBox.pack_start(self.totalLabel, True, False, 5)
        hBox.pack_start(self.runTimeLable, True, False, 5)
        hBox.pack_start(self.setupLabel, True, False, 5)
        hBox.pack_start(self.runningLabel, True, False, 5)
        hBox.pack_start(self.pauseLabel, True, False, 5)
        hBox.pack_start(self.failingLabel, True, False, 5)
        hBox.pack_start(self.exceptionLabel, True, False, 5)
        hBox.pack_start(self.stoppedLabel, True, False, 5)
        hBox.pack_start(self.connectingLabel, True, False, 5)
        hBox.pack_start(self.initialLabel, True, False, 5)

        vBox = gtk.VBox()
        self.listStore = gtk.ListStore(str, int, str, int, str, str, str, str,
                                       str, str, str)
        self.treeView = gtk.TreeView(self.listStore)
        self.selection = self.treeView.get_selection()
        self.selection.set_mode(gtk.SELECTION_MULTIPLE)
        self.treeView.connect("button-press-event", self.onRightMouseClick,
                              self.selection)
        i = 0
        for name in self.columnNames:
            cell = gtk.CellRendererText()
            column = gtk.TreeViewColumn(name)
            column.pack_start(cell, True)
            column.add_attribute(cell, "text", i)
            column.add_attribute(cell, "background", BACKGROUND)
            self.treeView.append_column(column)
            i = i + 1

        self.scrollWindow = gtk.ScrolledWindow()
        self.scrollWindow.set_policy(gtk.POLICY_AUTOMATIC,
                                     gtk.POLICY_AUTOMATIC)
        self.scrollWindow.add(self.treeView)
        vBox.pack_start(self.scrollWindow, True)
        vBox.pack_start(hBox, False)

        self.updateWorker.start()
        return vBox

    def update(self, statics):
        self.initialLabel.set_text("Initial: %d" %
                                   statics[SessionStatus.INITIAL])
        self.connectingLabel.set_text("Connecting: %d" %
                                      statics[SessionStatus.CONNECTING])
        self.runningLabel.set_text("Running: %d" %
                                   statics[SessionStatus.RUNNING])
        self.stoppedLabel.set_text("Stopped: %d" %
                                   statics[SessionStatus.STOPPED])
        self.failingLabel.set_text("Failing: %d" %
                                   statics[SessionStatus.NETWORKERROR])
        self.pauseLabel.set_text("Pause: %d" % statics[SessionStatus.PAUSE])
        self.exceptionLabel.set_text("Exception: %d" %
                                     statics[SessionStatus.EXECPTION])
        self.setupLabel.set_text("Setup: %d" % statics[SessionStatus.SETUP])
        total = statics.total()
        self.totalLabel.set_text("Total: %d" % total)
        self.displayTime(statics)

    def displayTime(self, statics):
        if statics[SessionStatus.RUNNING] > 0 or statics[
                SessionStatus.PAUSE] > 0:
            if self.currentTime == None:
                self.currentTime = time.time()
            seconds = (int)(time.time() - self.currentTime)
            self.runTimeLable.set_text("Time: %d:%d" % ((seconds / 3600),
                                                        (seconds % 3600) / 60))
        else:
            self.currentTime = None

    def addNewSession(self, status):
        protocol = status.getProtocol()
        id = status.getId()
        sessionStatus = self.statusMap[status.getStatus()]
        runTime = status.getTime()
        address = status.getAddress()
        colour = self.colourMap[status.getStatus()]
        param = status.getParam()
        localport = "NoPort"
        ports = "NoPort"
        destination = "NoAddress"
        errorInfo = ""
        iterator = self.listStore.append([
            protocol, id, sessionStatus, runTime, param, destination, ports,
            localport, address, errorInfo, colour
        ])
        self.accelerate[id] = iterator

    def __getListStoreIter(self, id):
        if self.accelerate.has_key(id) == True:
            return self.accelerate[id]
        return None

    def __clearStoppedSession(self, id, iterator):
        del self.accelerate[id]
        self.listStore.remove(iterator)

    def __setParams(self, iterator, params):
        if params.has_key('client_port'):
            self.listStore.set(iterator, PORTS, params['client_port'])

        if params.has_key('destination'):
            self.listStore.set(iterator, DESTINATION, params['destination'])

    def __setError(self, iterator, error):
        self.listStore.set(iterator, ERRORINFO, error)

    def updateSessionStatus(self, status):
        self.lock.acquire()
        iterator = self.__getListStoreIter(status.getId())
        if iterator != None and status.getStatus() != SessionStatus.INITIAL:
            id = self.listStore.get(iterator, ID)[0]
            if id == status.getId():
                self.listStore.set(iterator, TIME, status.getTime())
                self.listStore.set(iterator, STATUS,
                                   self.statusMap[status.getStatus()])

                if status.getStatus() & SessionStatus.SETUP:
                    self.__setError(iterator, "")
                    self.__setParams(iterator, status.getParamsFromRemote())
                    localPort = status.getLocalPort()
                    self.listStore.set(iterator, LOCALPORT, localPort)

                if status.getStatus() & SessionStatus.NETWORKERROR:
                    self.__setError(iterator, status.getErrorInfo())

                self.listStore.set(iterator, BACKGROUND,
                                   self.colourMap[status.getStatus()])

        if status.getStatus() == SessionStatus.REMOVED:
            self.__clearStoppedSession(status.getId(), iterator)
            self.lock.release()
            return

        if iterator == None and status.getStatus() == SessionStatus.INITIAL:
            self.addNewSession(status)
        self.lock.release()

    #Implement the Observer interface to update the session view
    def updateView(self, status):
        self.updateSessionStatus(status)
Пример #9
0
class SessionView(Observer, UpdateInterface):
    def __init__(self, manager):
        self.columnNames = ["Protocol","ID","Status","Time","ServiceGroup","Destination", "TargetPorts", "LocalPort", "Address", "Information"]
        
        self.statusMap = {SessionStatus.RUNNING:"Running", SessionStatus.STOPPED:"Stopped", SessionStatus.INITIAL:"Initial",\
                SessionStatus.CONNECTING:"Connecting", SessionStatus.NETWORKERROR:"Failed", SessionStatus.EXECPTION:"Execption",\
                SessionStatus.REMOVED:"Remove",\
                SessionStatus.SETUP:"Setup",
                SessionStatus.PAUSE: "Pause"}

        self.colourMap = {SessionStatus.RUNNING:"LimeGreen", SessionStatus.STOPPED:"SlateGray",\
                          SessionStatus.INITIAL:"RoyalBlue1",\
                          SessionStatus.SETUP: "YellowGreen",\
                          SessionStatus.CONNECTING:"yellow2",\
                          SessionStatus.NETWORKERROR:"red",SessionStatus.EXECPTION:"Orange",\
                          SessionStatus.REMOVED:"black",\
                          SessionStatus.PAUSE: "chocolate"}

        
        self.listStore    = None
        self.treeView     = None
        self.scrollWindow = None
        self.statics      = None
        self.currentTime  = None
        self.runTimeLable = gtk.Label("Time: 0:0")
        self.runningLabel = gtk.Label("Running: 0")
        self.pauseLabel   = gtk.Label("Pause: 0")
        self.stoppedLabel = gtk.Label("Stopped: 0")
        self.initialLabel = gtk.Label("Initial: 0")
        self.failingLabel = gtk.Label("Failed: 0")
        self.setupLabel   = gtk.Label("Setup: 0")
        self.totalLabel   = gtk.Label("Total: 0")
        self.connectingLabel = gtk.Label("Connecting: 0")
        self.exceptionLabel  = gtk.Label("Exception: 0")
        self.manager = manager
        
        # accelerate finding the session in session view.
        self.accelerate = {}
        self.updateWorker = UpdateStatisticsWorker(self, manager)
        self.lock = threading.Lock()
        
        self.RightKeyMenu = SessionRightKeyMenu(manager)
         
    def __del__(self):
        self.manager.stop()
    
    def onRightMouseClick(self, widget, event, selection):
        RIGHT_BUTTON = 3
        if event.button == RIGHT_BUTTON:
            self.treeView.grab_focus()
            (model, path) = selection.get_selected_rows()
            ids = []
            for p in path:
                ids.append(model[p][ID])
            self.RightKeyMenu.createPopupMenu(self.manager, ids, event)
    
    def createView(self):
        """ protocol, id, status, time, address"""
        hBox = gtk.HBox(False, 9)
        hBox.pack_start(self.totalLabel,  True,False,5)
        hBox.pack_start(self.runTimeLable,True,False,5)
        hBox.pack_start(self.setupLabel,  True,False,5)
        hBox.pack_start(self.runningLabel,True,False,5)
        hBox.pack_start(self.pauseLabel,  True,False,5)
        hBox.pack_start(self.failingLabel,True,False,5)
        hBox.pack_start(self.exceptionLabel, True,False,5)
        hBox.pack_start(self.stoppedLabel, True, False,5)
        hBox.pack_start(self.connectingLabel,True, False,5)
        hBox.pack_start(self.initialLabel, True,False,5)
        
        vBox = gtk.VBox()
        self.listStore = gtk.ListStore(str, int, str, int, str, str, str, str, str, str, str) 
        self.treeView = gtk.TreeView(self.listStore)
        self.selection = self.treeView.get_selection()
        self.selection.set_mode(gtk.SELECTION_MULTIPLE)
        self.treeView.connect("button-press-event", self.onRightMouseClick, self.selection)
        i = 0
        for name in self.columnNames:
            cell = gtk.CellRendererText()
            column = gtk.TreeViewColumn(name)
            column.pack_start(cell, True)
            column.add_attribute(cell, "text", i)
            column.add_attribute(cell,"background",BACKGROUND)
            self.treeView.append_column(column)
            i = i + 1

        self.scrollWindow = gtk.ScrolledWindow()
        self.scrollWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.scrollWindow.add(self.treeView)
        vBox.pack_start(self.scrollWindow,True)
        vBox.pack_start(hBox,False)
        
        self.updateWorker.start()
        return vBox
    
    def update(self, statics):  
        self.initialLabel.set_text("Initial: %d" % statics[SessionStatus.INITIAL])
        self.connectingLabel.set_text("Connecting: %d" % statics[SessionStatus.CONNECTING])
        self.runningLabel.set_text("Running: %d" % statics[SessionStatus.RUNNING])
        self.stoppedLabel.set_text("Stopped: %d" % statics[SessionStatus.STOPPED])
        self.failingLabel.set_text("Failing: %d" % statics[SessionStatus.NETWORKERROR])
        self.pauseLabel.set_text("Pause: %d" % statics[SessionStatus.PAUSE])
        self.exceptionLabel.set_text("Exception: %d" % statics[SessionStatus.EXECPTION])
        self.setupLabel.set_text("Setup: %d" % statics[SessionStatus.SETUP])
        total = statics.total()
        self.totalLabel.set_text("Total: %d" % total)
        self.displayTime(statics)

    def displayTime(self, statics):
        if statics[SessionStatus.RUNNING] > 0 or statics[SessionStatus.PAUSE] > 0:
            if self.currentTime == None:
                self.currentTime = time.time()
            seconds = (int)(time.time() - self.currentTime)
            self.runTimeLable.set_text("Time: %d:%d" % ((seconds / 3600), (seconds % 3600) / 60))
        else:
            self.currentTime = None


    def addNewSession(self, status):
        protocol = status.getProtocol()
        id = status.getId()
        sessionStatus = self.statusMap[status.getStatus()]
        runTime = status.getTime()
        address = status.getAddress()
        colour = self.colourMap[status.getStatus()]
        param = status.getParam()
        localport = "NoPort"         
        ports = "NoPort"
        destination = "NoAddress"
        errorInfo = ""
        iterator = self.listStore.append([protocol, id, sessionStatus, runTime, param, destination, ports, localport, address, errorInfo, colour])
        self.accelerate[id] = iterator
        
    def __getListStoreIter(self, id):
        if self.accelerate.has_key(id) == True:
            return self.accelerate[id]
        return None
    
    def __clearStoppedSession(self,id,iterator):
        del self.accelerate[id]
        self.listStore.remove(iterator)
    
    def __setParams(self, iterator, params):
        if params.has_key('client_port'):
            self.listStore.set(iterator, PORTS, params['client_port'])
        
        if params.has_key('destination'):
            self.listStore.set(iterator, DESTINATION, params['destination'])
    
    def __setError(self, iterator, error):
        self.listStore.set(iterator, ERRORINFO, error)

    def updateSessionStatus(self, status):
        self.lock.acquire()
        iterator = self.__getListStoreIter(status.getId())
        if iterator != None and status.getStatus() != SessionStatus.INITIAL:
            id = self.listStore.get(iterator, ID)[0]
            if id == status.getId():
                self.listStore.set(iterator, TIME, status.getTime())
                self.listStore.set(iterator, STATUS, self.statusMap[status.getStatus()])
                
                if status.getStatus() & SessionStatus.SETUP:
                   self.__setError(iterator, "")
                   self.__setParams(iterator, status.getParamsFromRemote())
                   localPort = status.getLocalPort()
                   self.listStore.set(iterator, LOCALPORT, localPort)
                   
                if status.getStatus() & SessionStatus.NETWORKERROR:
                    self.__setError(iterator, status.getErrorInfo())
                    
                self.listStore.set(iterator, BACKGROUND, self.colourMap[status.getStatus()])
        
        if status.getStatus() == SessionStatus.REMOVED:
            self.__clearStoppedSession(status.getId(), iterator)
            self.lock.release()
            return

        if iterator == None and status.getStatus() == SessionStatus.INITIAL:
            self.addNewSession(status)
        self.lock.release()

    #Implement the Observer interface to update the session view
    def updateView(self, status):
        self.updateSessionStatus(status)
Пример #10
0
class ui_term(Observer, UpdateInterface):
    def __init__(self, manager=None):
        self.statusMap = {
            SessionStatus.RUNNING: "Running",
            SessionStatus.STOPPED: 'Stopped',
            SessionStatus.INITIAL: 'Initial',
            SessionStatus.CONNECTING: 'Connecting',
            SessionStatus.NETWORKERROR: 'Failed',
            SessionStatus.EXECPTION: 'Exception',
            SessionStatus.REMOVED: 'Remove',
            SessionStatus.PAUSE: 'Pause',
            SessionStatus.SETUP: 'Setup',
        }
        self.session_records = []
        self.statics = None
        self.manager = manager
        self.accelerate = {}
        self.updateWorker = UpdateStatisticsWorker(self, manager)
        self.lock = threading.Lock()
        self.info = ""
        self.count = 0

    def __format(self, array):
        array[0] = ansi['darkblue'] + str(array[0]) + " " * (
            WIDTH["PROTOCOL"] - len(str(array[0]))) + ansi['default']
        array[1] = ansi['darkyellow'] + str(array[1]) + " " * (
            WIDTH["ID"] - len(str(array[1]))) + ansi['default']
        array[2] = ansi['white'] + str(array[2]) + " " * (
            WIDTH["ADDR"] - len(str(array[2]))) + ansi['default']
        array[3] = ansi['darkgreen'] + str(array[3]) + " " * (
            WIDTH["TIME"] - len(str(array[3]))) + ansi['default']
        if array[4].find("Failed") == -1:
            array[4] = ansi['darkgreen'] + str(array[4]) + " " * (
                WIDTH["STATUS"] - len(str(array[4]))) + ansi['default']
        else:
            array[4] = ansi['darkred'] + str(array[4]) + " " * (
                WIDTH["STATUS"] - len(str(array[4]))) + ansi['default']
        array[5] = ansi['default'] + str(
            array[5]) + " " * (WIDTH["DESTINATION"] - len(str(array[5])))
        array[6] = ansi['darkyellow'] + str(array[6]) + " " * (
            WIDTH["CLIENT_PORT"] - len(str(array[6]))) + ansi['default']
        arraystr = ""
        for each in array:
            arraystr += str(each)
        return arraystr

    def restore_scrn(self):
        sys.stdout.write(ansi['default'])

    def display_head(self):
        string = self.__format(HEAD)
        sys.stdout.write(string + '\n')

    def display_info(self):
        sys.stdout.write(ansi['white'] + self.info + '\n')

    def display_line(self, array):
        string = self.__format(array)
        sys.stdout.write(string + '\n')

    def __del__(self):
        self.manager.stop()

    def createView(self):
        self.display_head()
        self.updateWorker.start()

    def update(self, statics):
        total = statics.total()
        setup = statics[SessionStatus.SETUP]
        run = statics[SessionStatus.RUNNING]
        stop = statics[SessionStatus.STOPPED]
        fail = statics[SessionStatus.NETWORKERROR]
        connect = statics[SessionStatus.CONNECTING]
        paused = statics[SessionStatus.PAUSE]
        initial = statics[SessionStatus.INITIAL]

        self.info = str(
            "\nTotal = %d   Initial = %d   Connect = %d   Setup = %d   Run = %d   Paused = %d   Failed = %d   Stop = %d\n"
            % (total, initial, connect, setup, run, paused, fail, stop))

    def addNewSession(self, status):
        protocol = status.getProtocol()
        id = status.getId()
        sessionStatus = self.statusMap[status.getStatus()]
        runTime = status.getTime()
        address = status.getAddress()
        params = status.getParamsFromRemote()
        destination = "NoAddress"
        port = "NoPort"
        session_record = [
            protocol, id, address, runTime, sessionStatus, destination, port
        ]
        self.accelerate[id] = session_record
        self.session_records.append(session_record)
        self.display_line(session_record)

    def __clearStoppedSession(self, id):
        del self.accelerate[id]
        self.session_records.remove[id]

    def updateSessionStatus(self, status):
        self.lock.acquire()
        if status.getId() in self.accelerate.keys():
            id = status.getId()
            self.accelerate[id][STATUS] = self.statusMap[status.getStatus()]
            self.accelerate[id][TIME] = status.getTime()
            if self.accelerate[id][STATUS] == "Setup":
                self.accelerate[id][DESTINATION] = status.getParamsFromRemote(
                )['destination']
                self.accelerate[id][CLIENT_PORT] = status.getParamsFromRemote(
                )['client_port']
            self.count += 1
            if self.count > len(self.accelerate.keys()):
                for each in self.session_records:
                    self.display_line(each)
                self.display_info()
                time.sleep(1.5)
                self.count = 0
        else:
            self.addNewSession(status)
        self.lock.release()

    def updateView(self, status):
        self.updateSessionStatus(status)