예제 #1
0
async def plaintext_tcpclient(output_cfg, queue, start_shutdown):
    host, port = output_cfg["remote-address"], output_cfg["remote-port"]
    clogger.debug("Output handler: connection to %s:%s" % (host, port))
    reader, tcp_writer = await asyncio.open_connection(host, port)
    clogger.debug("Output handler: connected")

    # consume queue
    while not start_shutdown.is_set():
        # read item from queue
        tapmsg = await queue.get()

        # convert dnstap message
        msg = transform.convert_dnstap(fmt=output_cfg["format"], tapmsg=tapmsg)

        # write & add delimiter
        tcp_writer.write(msg + output_cfg["delimiter"].encode())

        # connection lost ? exit and try to reconnect
        if tcp_writer.transport._conn_lost:
            break

        # done continue to next item
        queue.task_done()

    # something
    if not start_shutdown.is_set():
        clogger.error("Output handler: connection lost")
예제 #2
0
async def handle(output_cfg, queue, metrics, start_shutdown):
    """handle output"""
    server_address = (output_cfg["remote-address"], output_cfg["remote-port"])
    loop = asyncio.get_event_loop()

    # syslog tcp
    if output_cfg["transport"] == "tcp":
        clogger.debug("Output handler: syslog TCP enabled")
        while not start_shutdown.is_set():
            try:
                await syslog_tcpclient(output_cfg, queue, start_shutdown)
            except ConnectionRefusedError:
                clogger.error(
                    'Output handler: connection to syslog server failed!')
            except asyncio.TimeoutError:
                clogger.error(
                    'Output handler: connection to syslog server timed out!')
            else:
                clogger.error(
                    'Output handler: connection to server is closed.')

            clogger.debug("'Output handler: retry to connect every %ss" %
                          output_cfg["retry"])
            if not start_shutdown.is_set():
                await asyncio.sleep(output_cfg["retry"])

    # syslog udp
    else:
        clogger.debug("Output handler: syslog UDP enabled with %s" %
                      str(server_address))
        transport, _ = await loop.create_datagram_endpoint(
            asyncio.DatagramProtocol, remote_addr=server_address)

        # consume the queue
        while not start_shutdown.is_set():
            # read item from queue
            tapmsg = await queue.get()

            # convert dnstap message
            msg = transform.convert_dnstap(fmt=output_cfg["format"],
                                           tapmsg=tapmsg)

            # send msg
            transport.sendto(msg)

            # all done
            queue.task_done()
async def handle(output_cfg, queue, metrics):
    """stdout output handler"""

    # init output logger
    setup_logger(output_cfg)

    while True:
        # read item from queue
        tapmsg = await queue.get()

        # convert dnstap message
        msg = transform.convert_dnstap(fmt=output_cfg["format"], tapmsg=tapmsg)

        # print to stdout
        file_logger.info(msg.decode())

        # all done
        queue.task_done()
예제 #4
0
async def handle(output_cfg, queue, metrics, start_shutdown):
    start_shutdown_producer = asyncio.Event()
    producer = Producer(output_cfg['rdkafka-config'], output_cfg['topic'],
                        start_shutdown_producer)

    clogger.info("Output handler: kafka: Enabled")
    while not start_shutdown.is_set():
        try:
            tapmsg = await asyncio.wait_for(queue.get(), timeout=0.5)
        except asyncio.TimeoutError:
            continue
        msg = transform.convert_dnstap(fmt=output_cfg["format"], tapmsg=tapmsg)

        producer.produce(msg)
        queue.task_done()

    # tell producer to shut down
    clogger.info("Output handler: kafka: Triggering producer shutdown")
    start_shutdown_producer.set()
예제 #5
0
async def handle(output_cfg, queue, metrics, start_shutdown):
    """stdout output handler"""

    # init logger
    setup_logger()

    while not start_shutdown.is_set():
        # read item from queue
        try:
            tapmsg = await asyncio.wait_for(queue.get(), timeout=0.5)
        except asyncio.TimeoutError:
            continue

        # convert dnstap message
        msg = transform.convert_dnstap(fmt=output_cfg["format"], tapmsg=tapmsg)

        # print to stdout
        tap_logger.info(msg.decode())

        # all done
        queue.task_done()