Beispiel #1
0
def main():
    'For CLI use, see usage in __doc__.'
    import os.path
    from sys import argv, exit
    from json import load
    from os.path import exists
    from itertools import imap
    from collections import deque
    HERE = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
    args = deque(argv[1:])
    if len(args) < 3:
        exit(__doc__)
    conf = HERE + '/log.json'
    level = args.popleft()
    if exists(level):
        conf = level
        level = args.popleft()
    with open(conf) as fin:
        conf = load(fin)['log']
    sender = args.popleft()
    if args[0] == '-':
        messages = ZeroSetup.iter_stdin()
    else:
        messages = iter(args)
    messages = imap(lambda x: ZLogger.format(sender, level, x), messages)
    z = Zero(ZeroSetup('push', conf['port']))
    for msg in messages:
        z(msg)
Beispiel #2
0
def main():
    'For CLI use, see usage in __doc__.'
    import os.path
    from sys import argv, exit
    from json import load
    from os.path import exists
    from itertools import imap
    from collections import deque
    HERE = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
    args = deque(argv[1:])
    if len(args) < 3:
        exit(__doc__)
    conf = HERE + '/log.json'
    level = args.popleft()
    if exists(level):
        conf = level
        level = args.popleft()
    with open(conf) as fin:
        conf = load(fin)['log']
    sender = args.popleft()
    if args[0] == '-':
        messages = ZeroSetup.iter_stdin()
    else:
        messages = iter(args)
    messages = imap(lambda x: ZLogger.format(sender, level, x), messages)
    z = Zero(ZeroSetup('push', conf['port']))
    for msg in messages:
        z(msg)
Beispiel #3
0
def main():
    import os.path
    from sys import argv
    from json import load
    from zero import Zero, ZeroSetup
    HERE = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
    conf = HERE + '/log.json'
    if len(argv) > 1:
        conf = argv[1]
    print 'Loading config from', conf
    with open(conf) as fin:
        conf = load(fin)['log']
    setup = ZeroSetup('pull', conf['port'])
    path = conf['file']
    if path[0] != '/':
        path = HERE + '/' + path
    print 'Logger started for', setup
    print 'Logging to', path
    with open(path, 'a', 1) as fout:
        logout = Logout(conf)
        try:
            for line in Zero(setup):
                fout.write(line)
                fout.write('\n')
                logout.tty(line)
        except KeyboardInterrupt:
            print 'Logger quitting.'
    print 'Logger stopped on', setup
Beispiel #4
0
def zrpc(sysconfig, workertype):
    """ Returns an activated Zero with RPC worker of type workertype as specified in sysconfig.
        >>> from .test import _get_test_config
        >>> from zero import zbg
        >>> from itertools import izip
        >>> from socket import gethostname
        >>> from time import time
        >>> cfg = _get_test_config()
        >>> z = zrpc(cfg, 'common')
        >>> o = z.opposite()
        >>> z  # doctest: +ELLIPSIS
        Zero(ZeroSetup('rep', 8000).binding(True)).activated(<zero.test.CommonRPC object at ...>)
        >>> o
        Zero(ZeroSetup('req', 8000).binding(False))
        >>> t = zbg(o, [['ping'], ['echo', {'msg': 'Hello'}], ['hostname'], ['time']], lambda x: x)
        >>> reps = []
        >>> for _, msg in izip(range(4), z):  # doctest: +ELLIPSIS
        ...     reps.append(msg)
        ...     z(msg)
        >>> reps[0]
        'pong'
        >>> reps[1]
        u'Hello'
        >>> reps[2] == gethostname()
        True
        >>> abs(time() - reps[3]) < 1
        True
        >>> t.join()
    """
    from zero import Zero, ZeroSetup

    wconf = sysconfig["workers"][workertype]
    zconf = wconf["zmq"]
    setup = ZeroSetup(zconf["method"], zconf["port"]).debugging(zconf.get("debug", False))
    if "bind" in zconf:
        setup.binding(zconf["bind"])
    if "host" in zconf and not setup.bind:
        setup._point = "tcp://%(host)s:%(port)s" % zconf
    mod = __import__(wconf["module"])
    for modpart in wconf["module"].split(".")[1:]:
        mod = getattr(mod, modpart)
    klass = getattr(mod, wconf["class"])
    return Zero(setup).activated(klass(sysconfig, workertype))
Beispiel #5
0
def zrpc(sysconfig, workertype):
    ''' Returns an activated Zero with RPC worker of type workertype as specified in sysconfig.
        >>> from .test import _get_test_config
        >>> from zero import zbg
        >>> from itertools import izip
        >>> from socket import gethostname
        >>> from time import time
        >>> cfg = _get_test_config()
        >>> z = zrpc(cfg, 'common')
        >>> o = z.opposite()
        >>> z  # doctest: +ELLIPSIS
        Zero(ZeroSetup('rep', 8000).binding(True)).activated(<zero.test.CommonRPC object at ...>)
        >>> o
        Zero(ZeroSetup('req', 8000).binding(False))
        >>> t = zbg(o, [['ping'], ['echo', {'msg': 'Hello'}], ['hostname'], ['time']], lambda x: x)
        >>> reps = []
        >>> for _, msg in izip(range(4), z):  # doctest: +ELLIPSIS
        ...     reps.append(msg)
        ...     z(msg)
        >>> reps[0]
        'pong'
        >>> reps[1]
        u'Hello'
        >>> reps[2] == gethostname()
        True
        >>> abs(time() - reps[3]) < 1
        True
        >>> t.join()
    '''
    from zero import Zero, ZeroSetup
    wconf = sysconfig['workers'][workertype]
    zconf = wconf['zmq']
    setup = ZeroSetup(zconf['method'],
                      zconf['port']).debugging(zconf.get('debug', False))
    if 'bind' in zconf:
        setup.binding(zconf['bind'])
    if 'host' in zconf and not setup.bind:
        setup._point = 'tcp://%(host)s:%(port)s' % zconf
    mod = __import__(wconf['module'])
    for modpart in wconf['module'].split('.')[1:]:
        mod = getattr(mod, modpart)
    klass = getattr(mod, wconf['class'])
    return Zero(setup).activated(klass(sysconfig, workertype))
Beispiel #6
0
def main():
    import sys
    if len(sys.argv) > 1 and sys.argv[1] == 'test':
        # Running tests, not zeros
        import doctest
        sys.path.insert(0, '..')
        import zero
        import zero.rpc
        fails, tests = doctest.testmod(zero)
        fails2, tests2 = doctest.testmod(zero.rpc)
        tests += tests2
        if fails + fails2:
            msg = 'Completed %d tests, %d failed. Run zero test -v for more information.'
            sys.exit(msg % (tests, fails + fails2))
        print 'Successfully completed %d tests.' % tests
        return

    import json
    from zero import Zero, ZeroSetup, zauto, UnsupportedZmqMethod
    try:
        # Regular zero run
        setup, loop = ZeroSetup.argv()
        zero = Zero(setup)

        for msg in zauto(zero, loop, setup.args['--wait']):
            sys.stdout.write(json.dumps(msg) + '\n')
            sys.stdout.flush()
    except UnsupportedZmqMethod, e:
        args = e.args[2]
        if args['rpc']:
            # Configured RPC not supported by zauto
            from zero.rpc import zrpc
            with open(args['<config>']) as fin:
                config = json.load(fin)
            if len(args['<type>']) == 1:
                zero = zrpc(config, args['<type>'][0])
                setup = zero.setup
                if args['--dbg']:
                    setup.debugging(True)
                for msg in zero:
                    if setup.transmits:
                        zero(msg)
            else:
                raise ValueError('Multiple RPC workers not yet supported.',
                                 args['<type>'])
        else:
            # Something happened...
            raise e
        if setup.args['--wait']:
            raw_input('Press enter when done.')
        zero.close()
Beispiel #7
0
def main():
    import sys
    if len(sys.argv) > 1 and sys.argv[1] == 'test':
        # Running tests, not zeros
        import doctest
        sys.path.insert(0, '..')
        import zero
        import zero.rpc
        fails, tests = doctest.testmod(zero)
        fails2, tests2 = doctest.testmod(zero.rpc)
        tests += tests2
        if fails + fails2:
            msg = 'Completed %d tests, %d failed. Run zero test -v for more information.'
            sys.exit(msg % (tests, fails + fails2))
        print 'Successfully completed %d tests.' % tests
        return

    import json
    from zero import Zero, ZeroSetup, zauto, UnsupportedZmqMethod
    try:
        # Regular zero run
        setup, loop = ZeroSetup.argv()
        zero = Zero(setup)

        for msg in zauto(zero, loop, setup.args['--wait']):
            sys.stdout.write(json.dumps(msg) + '\n')
            sys.stdout.flush()
    except UnsupportedZmqMethod, e:
        args = e.args[2]
        if args['rpc']:
            # Configured RPC not supported by zauto
            from zero.rpc import zrpc
            with open(args['<config>']) as fin:
                config = json.load(fin)
            if len(args['<type>']) == 1:
                zero = zrpc(config, args['<type>'][0])
                setup = zero.setup
                if args['--dbg']:
                    setup.debugging(True)
                for msg in zero:
                    if setup.transmits:
                        zero(msg)
            else:
                raise ValueError('Multiple RPC workers not yet supported.', args['<type>'])
        else:
            # Something happened...
            raise e
        if setup.args['--wait']:
            raw_input('Press enter when done.')
        zero.close()
Beispiel #8
0
def zlogger(config, sender):
    ''' Convenience function for setting up a ZLogger and queue. Returns a ZLogger
        object with .fyi, .wtf, .omg functions as specified in config['log']['levels'].
    '''
    from Queue import Queue
    from threading import Thread
    logq = Queue()
    slog = Zero(
        ZeroSetup('push', 'tcp://%(host)s:%(port)s' % config).nonblocking())

    def thread(slog=slog):
        for t in iter(logq.get, ''):
            slog(t)

    t = Thread(target=thread)
    t.daemon = True
    t.start()
    return ZLogger(config, logq, sender, gethostname())
Beispiel #9
0
    def _test_rpc():
        ''' For doctest
            >>> from zero.rpc import ZeroRPC
            >>> ZeroRPC._test_rpc()
            REP u'hello'
            REP 100
        '''
        from zero import Zero, ZeroSetup

        class Z(ZeroRPC):
            def hi(self):
                return "hello"

            def sqr(self, x):
                return x * x

        def listen():
            zero = Zero(ZeroSetup('rep', 8000)).activated(Z())
            for _, msg in izip(range(2), zero):
                zero(msg)
            zero.close()

        from threading import Thread
        t = Thread(name='TestRPC', target=listen)
        t.daemon = True
        t.start()

        zero = Zero(ZeroSetup('req', 8000))
        msg = ['hi']
        rep = zero(msg)
        print 'REP %r' % rep
        msg = ['sqr', {'x': 10}]
        rep = zero(msg)
        print 'REP %r' % rep
        zero.close()
        t.join()
Beispiel #10
0
 def listen():
     zero = Zero(ZeroSetup('rep', 8000)).activated(Z())
     for _, msg in izip(range(2), zero):
         zero(msg)
     zero.close()