示例#1
0
    def launch_write(self, filename, bot, rule):

        # launch file actor if needed
        try:
            wfile = self.writers[filename]
        except KeyError:
            wactor, wargs = self.wactors[0]
            wfile = ZActor(self.ctx, wactor, filename, wargs)
            waddr = wfile.pipe.recv_string()
            if not waddr:
                err = f"ruleset: failed to bind any {self.addrpat} for {filename}"
                log.error(err)
                raise RuntimeError(err)
            wfile.addr = waddr # copascetic?
            log.debug(f"ruleset: made writer actor for {filename}")
            self.writers[filename] = wfile

        # the client handler
        wactor, wargs = self.wactors[1]

        actor = ZActor(self.ctx, wactor,
                       bot, rule, 
                       wfile.addr, *wargs)
        self.handlers.append(actor)
        return True
示例#2
0
def test_broker():

    ctx = zmq.Context()

    # note: normally, app goes through zio.Node
    sport = zio.Port("server", zmq.SERVER);
    sport.bind(server_address)
    sport.do_binds()
    sport.online()

    client = ZActor(ctx, client_actor)

    factory = Factory(server_address)
    backend = ZActor(ctx, spawner, factory)
    broker = Broker(sport, backend.pipe)

    for count in range(30):
        print (f"main: poll [{count}]")
        ok = broker.poll(1000)      # client->handler
        if not ok:
            break

    print ("main: stopping")
    broker.stop()
    client.pipe.signal()
示例#3
0
def test_dumper():
    
    ctx = zmq.Context()

    node = zio.Node("dumper")
    server = node.port("server", zmq.SERVER)
    server_address = "tcp://127.0.0.1:5678"
    server.bind(server_address)
    node.online()

    client = ZActor(ctx, client_actor, server_address)

    factory = Factory(server_address)
    broker = Broker(server, factory)

    for count in range(10):
        log.debug (f"main: poll [{count}]")
        try:
            broker.poll(1000)
        except TimeoutError as te:
            log.info('broker is lonely, quitting')
            
            break

    log.debug (f"main: stop broker")
    broker.stop()
    log.debug (f"main: node offline")
    node.offline()
    log.debug (f"main: stop client")
    client.pipe.signal()
示例#4
0
 def __call__(self, bot):
     fobj = bot.label_object
     if fobj['direction'] == 'extract': # my direction.
         return                         # only handle inject
     actor = ZActor(self.ctx, dumper, bot, self.address)
     self.handlers.append(actor)
     return True
示例#5
0
    def __init__(self):
        self.dont_ip = os.environ.get('DONT_IP', '').split(' ')
        self.other_repeaters = []
        self.consul = Consul(sys.argv[1])

        self.ctx = zmq.Context()
        self.poller = zmq.Poller()
        
        self.repeater_pub_port = REPEATER_PUB_PORT
        self.pub = self.ctx.socket(zmq.PUB)
        self.pub.bind('tcp://*:%d' % self.repeater_pub_port)

        self.sub = self.ctx.socket(zmq.SUB)
        self.sub.setsockopt(zmq.SUBSCRIBE, b'')
        self.poller.register(self.sub, zmq.POLLIN)

        self.beacon = ZActor(self.ctx, ZBeacon)
        self.beacon.send_unicode('CONFIGURE', zmq.SNDMORE)
        self.beacon.send(struct.pack('I', ZRE_DISCOVERY_PORT))
        self.address = self.beacon.recv_unicode() # Hostname
        filter_ = struct.pack('ccc', b'Z', b'R', b'E')
        self.beacon.send_unicode('SUBSCRIBE',zmq.SNDMORE)
        self.beacon.send(filter_)
        self.beacon_socket = self.beacon.resolve()
        self.poller.register(self.beacon_socket, zmq.POLLIN)
示例#6
0
def test_cbsfhwf():
    ctx = zmq.Context()

    server_address = "tcp://127.0.0.1:5678"
    ruleset = [
        dict(
            attr=dict(testname="cbsfhwf"),  # just because
            rw="w",
            rule='(= stream "client1")',
            filepat="test-{testname}.hdf",
            grouppat="{stream}"),
    ]

    client1 = ZActor(ctx, flow_depos, 10, "client1", server_address)
    broker = make_broker(ctx, ruleset, server_address)

    log.debug("start broker poll")
    while True:
        ok = broker.poll(1000)
        if ok is None:
            log.debug(f'broker is too lonely')
            break

    log.debug("broker stop")
    broker.stop()
    log.debug("client1 pipe signal")
    client1.pipe.signal()
    log.debug("test done")
示例#7
0
 def launch_read(self, filename, bot, rule):
     # fixme: for now assume file format allows for simultaneous
     # reading so file and client handlers are merged into one.
     ractor, rargs = self.ractor
     log.debug(f'launch_read: {ractor}, {rargs}')
     actor = ZActor(self.ctx, ractor, bot, rule, filename, *rargs)
     self.handlers.append(actor)
     return True
示例#8
0
    def setUp(self, *args, **kwargs):
        ctx = zmq.Context()
        ctx = zmq.Context()
        # two beacon frames
        self.transmit1 = struct.pack('cccb16sH', b'Z', b'R', b'E', 1,
                                     uuid.uuid4().bytes, socket.htons(9999))
        self.transmit2 = struct.pack('cccb16sH', b'Z', b'R', b'E', 1,
                                     uuid.uuid4().bytes, socket.htons(9999))

        self.node1 = ZActor(ctx, ZBeacon)
        self.node1.send_unicode("VERBOSE")
        self.node1.send_unicode("CONFIGURE", zmq.SNDMORE)
        self.node1.send(struct.pack("I", 9999))
        print("Hostname 1:", self.node1.recv_unicode())

        self.node2 = ZActor(ctx, ZBeacon)
        self.node2.send_unicode("VERBOSE")
        self.node2.send_unicode("CONFIGURE", zmq.SNDMORE)
        self.node2.send(struct.pack("I", 9999))
        print("Hostname 2:", self.node2.recv_unicode())
示例#9
0
    def spawn(self, actor_func, bot):
        '''
        Spawn actor function.

        Function must take a flow and the BOT.
        '''
        port = Port("handler", zmq.CLIENT,'')
        port.connect(self.server_address)
        port.online(None)
        flow = Flow(port)
        actor = ZActor(self.ctx, actor_func, flow, bot)
        return actor
示例#10
0
 def setUp(self, *args, **kwargs):
     ctx = zmq.Context()
     self.actor = ZActor(ctx, zactor.echo_actor, "Hello, World")