Merge in RR/pyinfra from containerized_tests to master
Squashed commit of the following:
commit 63f016a7f76af9c91602cf958639ad7fd9b4e832
Merge: 3b399ca 11c9f8a
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 15:07:25 2022 +0100
Merge branch 'master' into containerized_tests
commit 3b399ca873c1625cde5a34c3b34fd11653af36e4
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 15:03:32 2022 +0100
removed obsolete log
commit f854695fc22a9853449a1377d5285cc0cd60caf8
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 15:01:22 2022 +0100
refactoring of imports
commit 72b5c597aa3e5b8ce7c16fb1abeaca8e48015597
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 15:00:37 2022 +0100
removed obsolete code
commit ee9b0117f6c86fc23be9316b2c3690773c914e79
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:59:42 2022 +0100
removed obsolete code
commit 020cad6e5b7cdb8e2ad867f5bcc51d5114b281f4
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:54:09 2022 +0100
undo debug intentional crash
commit 65b77cffd319bc5230ead26391dc6b841ad8e12e
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:51:46 2022 +0100
debug intentional crash
commit 06133189bc6ecafd0c5a9bc74b8c08b9c097a321
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:49:03 2022 +0100
fixed syntax error in sconarscan
commit 7468c0738fe7ddabf72baaa07e7422a23c2a6f00
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:43:43 2022 +0100
failing sonar job if coverage.xml not present as proxcy for failed tests
commit ebcee7ff2a53c643efb64b835f99640567da224b
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:36:34 2022 +0100
simplified copying of coverage.xml and removing of testcontainer
commit 1fb24d67f10aebe2747b76a4990a3c9fe2c0b00b
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:18:30 2022 +0100
RABBITMQ_DISK_FREE_ABSOLUTE_LIMIT=20Gi
commit 07873d607097308c5371029a74e115895266d30c
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:12:51 2022 +0100
RABBITMQ_DISK_FREE_RELATIVE_LIMIT=5%
commit d8eb294fb18c5b0b2418d8a397ef66ef133081bf
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:11:00 2022 +0100
RABBITMQ_DISK_FREE_RELATIVE_LIMIT=100%
commit f9010ed998f2a5da3940ad3f0d8a2a8cff209b0d
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 14:04:35 2022 +0100
RABBITMQ_VM_MEMORY_HIGH_WATERMARK=100%
commit 41e9f8046aae66fc9a7248b7c6194fe7e9e9c814
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 13:42:34 2022 +0100
RABBITMQ_VM_MEMORY_HIGH_WATERMARK=0
commit 301ba05d66452cf5b85511527a35582cd1396803
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 13:19:10 2022 +0100
set AMPQ heartbeat
commit 9f4dfb9781847bed6077d49e931719c04460e88c
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 10:42:21 2022 +0100
channel and connection closing experimenting
commit e3812725acff1df2a26e337dbc88df11cd6b8b22
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 10:12:15 2022 +0100
pika tearndown adjusted
commit 0206be86669c9f4b70bb21d416d6f10ce5e8731a
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 09:58:18 2022 +0100
return instead of yield in Consumer.consume
commit 17e11adf7822916dd3ece201529796e4dfd89032
Author: Matthias Bisping <matthias.bisping@iqser.com>
Date: Thu Mar 24 09:51:52 2022 +0100
processing log added to test
... and 26 more commits
83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
import logging
|
|
from multiprocessing import Process
|
|
|
|
import requests
|
|
from retry import retry
|
|
|
|
from pyinfra.config import CONFIG
|
|
from pyinfra.exceptions import AnalysisFailure, ConsumerError
|
|
from pyinfra.flask import run_probing_webserver, set_up_probing_webserver
|
|
from pyinfra.queue.consumer import Consumer
|
|
from pyinfra.queue.queue_manager.pika_queue_manager import PikaQueueManager
|
|
from pyinfra.storage.storages import get_storage
|
|
from pyinfra.utils.banner import show_banner
|
|
from pyinfra.visitor import QueueVisitor, StorageStrategy
|
|
|
|
|
|
def make_callback(analysis_endpoint):
|
|
def callback(message):
|
|
def perform_operation(operation):
|
|
endpoint = f"{analysis_endpoint}/{operation}"
|
|
try:
|
|
logging.debug(f"Requesting analysis from {endpoint}...")
|
|
analysis_response = requests.post(endpoint, data=message["data"])
|
|
analysis_response.raise_for_status()
|
|
analysis_response = analysis_response.json()
|
|
logging.debug(f"Received response.")
|
|
return analysis_response
|
|
except Exception as err:
|
|
logging.warning(f"Exception caught when calling analysis endpoint {endpoint}.")
|
|
raise AnalysisFailure() from err
|
|
|
|
operations = message.get("operations", ["/"])
|
|
results = map(perform_operation, operations)
|
|
result = dict(zip(operations, results))
|
|
if list(result.keys()) == ["/"]:
|
|
result = list(result.values())[0]
|
|
return result
|
|
|
|
return callback
|
|
|
|
|
|
def main():
|
|
show_banner()
|
|
|
|
webserver = Process(target=run_probing_webserver, args=(set_up_probing_webserver(),))
|
|
logging.info("Starting webserver...")
|
|
webserver.start()
|
|
|
|
callback = make_callback(CONFIG.rabbitmq.callback.analysis_endpoint)
|
|
storage = get_storage(CONFIG.storage.backend)
|
|
response_strategy = StorageStrategy(storage)
|
|
visitor = QueueVisitor(storage, callback, response_strategy)
|
|
|
|
queue_manager = PikaQueueManager(CONFIG.rabbitmq.queues.input, CONFIG.rabbitmq.queues.output)
|
|
|
|
@retry(ConsumerError, tries=3, delay=5, jitter=(1, 3))
|
|
def consume():
|
|
consumer = Consumer(visitor, queue_manager)
|
|
try:
|
|
consumer.consume_and_publish()
|
|
except Exception as err:
|
|
raise ConsumerError() from err
|
|
|
|
try:
|
|
consume()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
except ConsumerError:
|
|
webserver.terminate()
|
|
raise
|
|
|
|
webserver.join()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
logging_level = CONFIG.service.logging_level
|
|
logging.basicConfig(level=logging_level)
|
|
logging.getLogger("pika").setLevel(logging.ERROR)
|
|
logging.getLogger("flask").setLevel(logging.ERROR)
|
|
logging.getLogger("urllib3").setLevel(logging.ERROR)
|
|
|
|
main()
|