{ "info": { "author": "Matthieu Simonin", "author_email": "matthieu.simonin@inria.fr", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Topic :: Scientific/Engineering", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: System :: Networking" ], "description": "# Message bus evaluation framework\n\n## Context\n\nThis is a framework to benchmark the communication middleware supported by [oslo.messaging](https://docs.openstack.org/oslo.messaging/latest/). It's primary goal is to address the evaluation of https://docs.openstack.org/performance-docs/latest/test_plans/massively_distribute_rpc/plan.html.\n\nIt is build on top of: \n\n- [EnOSlib](https://github.com/beyondtheclouds/enoslib). This library helps to describe the experimental workflow and enforce it : from the deployment to the performance metrics analysis.\n- [ombt](https://github.com/kgiusti/ombt). This will coordinate the benchmark once all the agents are up and running.\n\nFrom a high level point of view the framework is able to deploy\n\n* a communication bus (e.g RabbitMQ, qdr aka qpid-dispatch-router), \n* a set of client/server that will communicate\n* start a benchmark while gathering metrics\n\n\nA typical test consists in the following components:\n\n```\nClient 1---------+ +----------------------+ +-----> Server 1\n | | | |\n +----> | Communication | ----+-----> Server 2\nClient 2--------------> | Middleware | |\n +----> | (e.g qdr, rabbitms) | |\n... | | | |\n | +----------------------+ +------> Server n\nClient n---------+ | /\n \\ /\n \\ | / \n \\ -- -- -- -- -- Monitoring -- -- -- -- --\n```\n\n## Installation\n\n* Clone the repository: \n\n```\ngit clone https://github.com/msimonin/ombt-orchestrator\ncd ombt-orchestrator\n```\n\n* Install the dependencies\n\n```\npip install -U pip\npip install -e .\n```\n\n> On Grid'5000 you can launch this command from any frontend.\n\n## Configuration\n\nThe default configurations are currently defined in the `conf.yaml` file.\n\n## Command line interface\n\n```\n> oo\nUsage: oo [OPTIONS] COMMAND [ARGS]...\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n backup Backup environment logs [after test_case_*].\n campaign Perform a TEST according to the (swept)...\n deploy Claim resources from a PROVIDER and configure...\n destroy Destroy all the running dockers (keeping...\n g5k Claim resources on Grid'5000 (frontend).\n inventory Generate the Ansible inventory [after g5k,...\n prepare Configure available resources [after g5k,...\n test_case_1 Run the test case 1: one single large...\n test_case_2 Run the test case 2: multiple distributed...\n test_case_3 Run the test case 3: one single large...\n test_case_4 Run the test case 4: multiple distributed...\n vagrant Claim resources on vagrant (localhost).\n```\n\n## Workflow to run a test case\n\n\n* Deploying and launching the benchmark (default driver `broker` is defined in the configuration file)\n\n```\n# default confs.yaml on $PWD will be read\n> oo deploy --driver=broker vagrant\n\n# Launch the one benchmark\n> oo test_case_1 --nbr_clients 10 --nbr_servers 2\n```\n\n> Adapt to the relevant provider (e.g `g5k`)\n\n* Real-time metrics visualisation\n\nGrafana is available on the port 3000 of the control node (check the inventory file).\n\n* Backuping the environment\n\n```\n> oo backup\n```\n\n> The files retrieved by this action are located in `current/backup` dir by default.\n\n* Some cleaning and preparation for the next run\n\n```\n# Preparing the next run by cleaning the environment\n> oo destroy\n> oo deploy vagrant\n\n# Next run\n> oo test_case_1 --nbr_clients 20 --nbr_servers 2\n```\n\n> It's possible to force an experimentation dir with `--env mydir`\n\n> Note also that scripting from python is also possible using the function defined in `task.py`\n\n\n##\u00a0Workflow to run a campaign\n\n* A campaign is a batch execution of several configurations for a given test case.\n Deployment and execution of a benchmark is read from a configuration file. For example,\n to run the first test case enabled on the framework run: \n\n``` shell\n> oo campaign --provider g5k test_case_1\n``` \n\n* Alternatively a campaign can be executed in a _incremental_ mode in which deployments are\n performed only when a different `driver` or `call_type` is defined. Incremental campaigns\n are executed with a different semantic on the parameters defined in the configuration.\n With the incremental option the semantics is based on the combination of parameters by \n means of a dot product between a set of them in the configuration file (i.e., a `zip` \n operation between the lists of parameters). These parameters are defined by test case\n as follows:\n\n * Test case 1: `nbr_clients`, `nbr_servers` and `pause`\n * Test case 2: `nbr_topics` and `pause`\n * Test case 3: `nbr_clients`, `nbr_servers` and `pause` (only `rpc-cast` calls)\n * Test case 4: `nbr_topics` and `pause` (only `rpc-cast` calls)\n\n* To execute an incremental campaign be sure to use the ombt version `msimonin/ombt:singleton`\n instead of the default and execute: \n\n``` shell\n> oo campaign --incremental --provider g5k test_case_1\n``` \n\n## Misc.\n\n* Bound clients or servers to specific bus agents:\n\nTo bind ombt-clients to a specific bus instance you can declare the following\n`roles: [bus, bus-client]`. \n\nFollowing the same idea ombt-servers can be bound to a specific bus instance using \n`roles: [bus, bus-server]`\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/msimonin/ombt-orchestrator/", "keywords": "benchmark,oslo messaging,RPC", "license": "", "maintainer": "", "maintainer_email": "", "name": "ombt-orchestrator", "package_url": "https://pypi.org/project/ombt-orchestrator/", "platform": "", "project_url": "https://pypi.org/project/ombt-orchestrator/", "project_urls": { "Bug Reports": "https://github.com/msimonin/ombt-orchestrator/issues", "Homepage": "https://github.com/msimonin/ombt-orchestrator/", "Source": "https://github.com/msimonin/ombt-orchestrator/" }, "release_url": "https://pypi.org/project/ombt-orchestrator/1.1.1/", "requires_dist": [ "PyYAML", "networkx (==2.1)", "click (<7,>=6.7)", "enoslib (>=1.4.0)", "pathlib2; python_version < \"3\"" ], "requires_python": "", "summary": "Oslo messaging benchmarking orchestrator", "version": "1.1.1" }, "last_serial": 3965197, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "ffcf26692a55688caa65070557ba186a", "sha256": "de9733e7474a985d0e6995a4626faec7a34cc883f6b7b99237b41b4161b3ab86" }, "downloads": -1, "filename": "ombt_orchestrator-1.0.0-py27-none-any.whl", "has_sig": false, "md5_digest": "ffcf26692a55688caa65070557ba186a", "packagetype": "bdist_wheel", "python_version": "py27", "requires_python": null, "size": 64831, "upload_time": "2018-04-10T15:59:56", "url": "https://files.pythonhosted.org/packages/77/75/c0a0d779e6294cc352661825831677911e06c57921eb3aed911941c55786/ombt_orchestrator-1.0.0-py27-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "90f05c5ac4c8f7ec3efd85bc7ffb358e", "sha256": "9ea7aec15d625d83f033f77e84b146b1d94adff547a912e69886fab393e27e3b" }, "downloads": -1, "filename": "ombt_orchestrator-1.0.1-py27-none-any.whl", "has_sig": false, "md5_digest": "90f05c5ac4c8f7ec3efd85bc7ffb358e", "packagetype": "bdist_wheel", "python_version": "py27", "requires_python": null, "size": 65521, "upload_time": "2018-04-17T15:32:06", "url": "https://files.pythonhosted.org/packages/17/94/8b4c0cd02c01a6686f62bb64926117436c6ab5dc6e44664a84819fca1f9a/ombt_orchestrator-1.0.1-py27-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "1fe7deda0be545b734277a13389dffd6", "sha256": "e1be403ca166491a6dff15d4136621eb329b8f1720435c480e7b8779e1c7b9ce" }, "downloads": -1, "filename": "ombt_orchestrator-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1fe7deda0be545b734277a13389dffd6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 67065, "upload_time": "2018-06-01T12:53:46", "url": "https://files.pythonhosted.org/packages/e6/16/b73cafa6221f934b04d12eab761755025cafc916d34e013b460f28c7ef1c/ombt_orchestrator-1.0.2-py2.py3-none-any.whl" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "5de00130d4c030685a1986fccd531786", "sha256": "651483a97f9ec5ebc3ceef288264b1e9bf9dfb09a56148aeb51639a291518ce1" }, "downloads": -1, "filename": "ombt_orchestrator-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5de00130d4c030685a1986fccd531786", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 67080, "upload_time": "2018-06-01T12:57:25", "url": "https://files.pythonhosted.org/packages/b8/24/23da4f74104c011aabe39dada70c6d3a430a5784fc86d5447163cbede332/ombt_orchestrator-1.0.3-py2.py3-none-any.whl" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "2eabac658ff25d96d2d50508e2c86c5b", "sha256": "c33a7fad25b2ea44bbeaadd6514475043d4fee43d3c5146100b8568dfed64d1f" }, "downloads": -1, "filename": "ombt_orchestrator-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2eabac658ff25d96d2d50508e2c86c5b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 67182, "upload_time": "2018-06-12T15:40:05", "url": "https://files.pythonhosted.org/packages/d6/db/a92c89158e3b39478e1a6952fb8ca979cbd6c0f0c2de50178357fcf28e11/ombt_orchestrator-1.1.0-py2.py3-none-any.whl" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "efa01468b51f5d38f553e57192f1b24b", "sha256": "e2384a050ee9d9ea5cadd422441173bee63c06769c5c9f7748588d2bc2a3b803" }, "downloads": -1, "filename": "ombt_orchestrator-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "efa01468b51f5d38f553e57192f1b24b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 66796, "upload_time": "2018-06-15T15:12:53", "url": "https://files.pythonhosted.org/packages/8c/e1/8e39f18d21e3e9b974c81aea321602d59ab6e43eb398312cc49724939487/ombt_orchestrator-1.1.1-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "efa01468b51f5d38f553e57192f1b24b", "sha256": "e2384a050ee9d9ea5cadd422441173bee63c06769c5c9f7748588d2bc2a3b803" }, "downloads": -1, "filename": "ombt_orchestrator-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "efa01468b51f5d38f553e57192f1b24b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 66796, "upload_time": "2018-06-15T15:12:53", "url": "https://files.pythonhosted.org/packages/8c/e1/8e39f18d21e3e9b974c81aea321602d59ab6e43eb398312cc49724939487/ombt_orchestrator-1.1.1-py2.py3-none-any.whl" } ] }