def inactive_cleanup(exit_event):
    while True:
        exit_event.wait(60.0)

        if exit_event.is_set():
            try:
                all_sessions = OpenOPC.get_sessions(host=opc_gate_host, port=opc_gate_port)
                for server, oid, ctime, xtime in all_sessions:
                    OpenOPC.close_session(oid, host=opc_gate_host, port=opc_gate_port)
            except Exception as e:
                servicemanager.LogInfoMsg('\n\nException %s happen when stop opc gateway service' % e)
            finally:
                exit_event.clear()
            return
        else:
            try:
                all_sessions = OpenOPC.get_sessions(host=opc_gate_host, port=opc_gate_port)
                if len(all_sessions) > max_clients:
                    stale_sessions = sorted(all_sessions, key=lambda s: s[3])[:-max_clients]
                else:

                    stale_sessions = [s for s in all_sessions if time.time() - s[3] > (inactive_timeout * 60)]
                for server, oid, ctime, xtime in stale_sessions:
                    OpenOPC.close_session(oid, host=opc_gate_host, port=opc_gate_port)
                    time.sleep(1)
            except Exception as e:
                servicemanager.LogInfoMsg('\n\nException %s happen when cleanup timeout session' % e)
예제 #2
0
def inactive_cleanup(exit_event):
    while True:
        exit_event.wait(60.0)

        if exit_event.is_set():
            all_sessions = OpenOPC.get_sessions(host=opc_gate_host,
                                                port=opc_gate_port)
            for oid, ip, ctime, xtime in all_sessions:
                OpenOPC.close_session(oid,
                                      host=opc_gate_host,
                                      port=opc_gate_port)
            exit_event.clear()
            return
        else:
            try:
                all_sessions = OpenOPC.get_sessions(host=opc_gate_host,
                                                    port=opc_gate_port)
            except Pyro.errors.ProtocolError:
                all_sessions = []
            if len(all_sessions) > max_clients:
                stale_sessions = sorted(all_sessions,
                                        key=lambda s: s[3])[:-max_clients]
            else:
                stale_sessions = [
                    s for s in all_sessions
                    if time.time() - s[3] > (inactive_timeout * 60)
                ]
            for oid, ip, ctime, xtime in stale_sessions:
                OpenOPC.close_session(oid,
                                      host=opc_gate_host,
                                      port=opc_gate_port)
                time.sleep(1)
예제 #3
0
def inactive_cleanup(exit_event):
    while True:
        exit_event.wait(60.0)

        if exit_event.is_set():
            all_sessions = OpenOPC.get_sessions(host=opc_gate_host, port=opc_gate_port)
            for oid, ip, ctime, xtime in all_sessions:
                OpenOPC.close_session(oid, host=opc_gate_host, port=opc_gate_port)
            exit_event.clear()
            return
        else:
            try:
                all_sessions = OpenOPC.get_sessions(host=opc_gate_host, port=opc_gate_port)
            except Pyro.errors.ProtocolError:
                all_sessions = []
            if len(all_sessions) > max_clients:
                stale_sessions = sorted(all_sessions, key=lambda s: s[3])[:-max_clients]
            else:
                stale_sessions = [s for s in all_sessions if time.time()-s[3] > (inactive_timeout*60)]
            for oid, ip, ctime, xtime in stale_sessions:
                OpenOPC.close_session(oid, host=opc_gate_host, port=opc_gate_port)                
                time.sleep(1)