예제 #1
0
    def start(self):
        try:
            with open(config.statusFile, "r") as f:
                if f.read() == config.STATUS_LINE:
                    return
        except:
            pass
        try:
            with open(config.statusFile, "w") as f:
                f.write(config.STATUS_LINE)
        except IOError as e:
            print >>sys.stderr, e
            return

        if self.daemonize():
            return

        self.startTime = datetime.now()
        self.storage = Storage()
        self.btserver = BtServer(self.storage)
        self.retriever = Retriever(self.storage)
        self.btserver.start()
        self.retriever.start()

        daemon = Pyro4.Daemon(port=config.pyroPort)
        uri = daemon.register(self, config.PNAME)
        log.info("Eris daemon URI: [{}]".format(uri))
        self.running = True
        daemon.requestLoop(loopCondition=lambda: self.running)

        daemon.unregister(config.PNAME)
        daemon.close()
예제 #2
0
class Eris:
    def __init__(self):
        self.output = os.path.join(config.logsDir, "output.log")

    def start(self):
        try:
            with open(config.statusFile, "r") as f:
                if f.read() == config.STATUS_LINE:
                    return
        except:
            pass
        try:
            with open(config.statusFile, "w") as f:
                f.write(config.STATUS_LINE)
        except IOError as e:
            print >>sys.stderr, e
            return

        if self.daemonize():
            return

        self.startTime = datetime.now()
        self.storage = Storage()
        self.btserver = BtServer(self.storage)
        self.retriever = Retriever(self.storage)
        self.btserver.start()
        self.retriever.start()

        daemon = Pyro4.Daemon(port=config.pyroPort)
        uri = daemon.register(self, config.PNAME)
        log.info("Eris daemon URI: [{}]".format(uri))
        self.running = True
        daemon.requestLoop(loopCondition=lambda: self.running)

        daemon.unregister(config.PNAME)
        daemon.close()

    def stop(self):
        log.info("Closing eris")
        try:
            self.btserver.kill()
            self.retriever.kill()
            self.retriever.join(1.0)
            self.btserver.join(1.0)

            with open(config.statusFile, "w"):
                pass
        except:
            log.exception("Something went wrong while shutting down")
        self.running = False

    def status(self):
        pid = os.getpid()
        proc = psutil.Process(pid)
        cpu = proc.get_cpu_percent()
        mem = proc.get_memory_percent()
        uptime = datetime.now() - self.startTime
        du = self.storage.size()
        return (pid, cpu, mem, uptime, du)

    def put(self, packets):
        self.storage.put(packets)

    def get(self, since=0, to=0, limit=0):
        connId, _ = self.storage.get(since, to, limit)
        return self.storage.fetchall(connId)

    def count(self):
        return self.storage.rowcount()

    def ping(self):
        return config.PNAME

    def daemonize(self):
        try:
            pid = os.fork()
            if pid > 0:
                return True
        except OSError as e:
            sys.stderr.write("Fork #1 failed: {} ({})\n".format(e.errno, e.strerror))
            sys.exit(1)

        os.chdir("/")
        os.setsid()

        try:
            pid = os.fork()
            if pid > 0:
                sys.exit(0)
        except OSError as e:
            sys.stderr.write("Fork #2 failed: {} ({})\n".format(e.errno, e.strerror))
            sys.exit(1)

        sys.stdout.flush()
        sys.stderr.flush()
        with open(self.output, "w"):
            pass
        out = file(self.output, "a+", 1)
        os.dup2(out.fileno(), sys.stdout.fileno())
        os.dup2(out.fileno(), sys.stderr.fileno())
        return False

    @staticmethod
    def getProxy():
        uri = "PYRO:{}@localhost:{}".format(config.PNAME, config.pyroPort)
        return Pyro4.Proxy(uri)
예제 #3
0
from btserver import BtServer
import time
'''
This is the main function that is
called and runs the code
'''

if __name__ == "__main__":
    btServer = BtServer()
    btServer.start_listening()