EMDIS-ECS

 view release on metacpan or  search on metacpan

script/ecs_amqp_recv.py  view on Meta::CPAN

#!/usr/bin/env python3
#
# Copyright (C) 2019-2026 National Marrow Donor Program. All rights reserved.
# See also LICENSE file.
#
# Usage example:
# ecs_amqp_recv.py --broker amqps://msg01.emdis.net:5672 --vhost default \
#  --address emdis.us.msg --truststore myKeyStore.pem \
#  --sslcert user-cert.pem --sslkey user-key.pem --sslpass PASSWORD \
#  --username emdis-us --password SECRET --outputdir messages
#
# See also:
# https://qpid.apache.org/releases/qpid-proton-0.37.0/
# https://qpid.apache.org/releases/qpid-proton-0.37.0/proton/python/docs/proton.html#proton.SSLDomain
# https://qpid.apache.org/releases/qpid-proton-0.37.0/proton/python/docs/proton.handlers.html#proton.handlers.MessagingHandler
# https://qpid.apache.org/releases/qpid-proton-0.37.0/proton/python/docs/proton.reactor.html#proton.reactor.Container
#
# Influenced by solace-samples-amqp-qpid-proton-python and cli-proton-python:
# https://github.com/SolaceSamples/solace-samples-amqp-qpid-proton-python
# https://github.com/rh-messaging/cli-proton-python
#
# Qpid Proton Python is dependent on the Qpid Proton C API.  E.g., Receiver.flow(n):
# https://qpid.apache.org/releases/qpid-proton-0.37.0/proton/python/docs/_modules/proton/_endpoints.html
# https://qpid.apache.org/releases/qpid-proton-0.37.0/proton/c/api/group__link.html
#
# The Red Hat Qpid Python documentation may also be informative:
# https://docs.redhat.com/en/documentation/red_hat_build_of_apache_qpid_proton_python/0.40/html/using_qpid_python/index
#

from __future__ import print_function
import optparse
import os
import shutil
import sys
import tempfile
import time
from proton import SSLDomain
from proton.handlers import MessagingHandler
from proton.reactor import Container

# helper function

def get_options():
    parser = optparse.OptionParser(usage="usage: %prog [options]")
    parser.add_option("-d", "--debug", type=int, default=0,
                  help="debug output level (default %default)")
    parser.add_option("-b", "--broker", default=None,
                  help="amqp message broker host url (e.g. amqps://localhost:5672)")
    parser.add_option("-v", "--vhost", default=None,
                  help="virtual host namespace on broker (e.g. default)")
    parser.add_option("-a", "--address", default=None,
                  help="topic or queue from which messages are received (e.g. test_queue)")
    parser.add_option("-s", "--truststore", default=None,
                  help="SSL trust store (e.g. cacert.pem)")
    parser.add_option("-c", "--sslcert", default=None,
                  help="client-side SSL certificate / public key (e.g. user-cert.pem)")
    parser.add_option("-k", "--sslkey", default=None,
                  help="client-side SSL private key (e.g. user-key.pem)")
    parser.add_option("-y", "--sslpass", default=None,
                  help="password for client-side SSL private key (overrides ECS_AMQP_SSLPASS env var)")
    parser.add_option("-u", "--username", default=None,
                  help="username for SASL authentication")
    parser.add_option("-p", "--password", default=None,
                  help="password for SASL authentication (overrides ECS_AMQP_PASSWORD env var)")
    parser.add_option("-t", "--timeout", type=int, default=5,
                  help="inactivity timeout threshold, in seconds (default %default)")
    parser.add_option("-o", "--outputdir", action="append", default=None,
                  help="file system directory for output files")
    parser.add_option("-x", "--suffix", default=".amqp.msg",
                  help="filename suffix for output files (default %default)")
    parser.add_option("-m", "--timelimit", type=int, default=-1,
                  help="execution time limit, in seconds, if non-negative (default %default)")

    opts, args = parser.parse_args()

    return opts

"""
Proton event handler class
Creates an amqp connection using ANONYMOUS or PLAIN authentication.
Then attaches a receiver link to consume messages from the broker.
"""
class Recv(MessagingHandler):



( run in 0.619 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )