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 )