{ "info": { "author": "Thomas Rausch", "author_email": "t.rausch@dsg.tuwien.ac.at", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "symmetry\n========\n\nCluster management tool for the MC2.\n\nBuild\n-----\n\nTo create a virtual environment and install the requirements, run (by default it uses `python3.7`, you can change that\nin the `Makefile` variable `VENV_BIN`)\n\n make venv\n\n\nBuild the Docker image for local use (may need `sudo`)\n\n make docker-build\n\n\nRun Symmetry with Docker\n------------------------\n\nPopulate `etc/nodes.ini` with the information from your cluster.\nThe application can then be started with\n\n make start\n\n\nAnd point your browser to http://localhost:5000/ui/dashboard\n\nStop with\n\n make stop\n\nBoth commands use `docker-compose` on `docker/symmetry/docker-compose.yml`, and may need `sudo`\n\nRun Symmetry components manually\n--------------------------------\n\n### Prerequisites\n\nMake sure the virtualenv is activated\n\n source .venv/bin/activate\n\nSymmetry publishes and reads telemetry data to and from [redis](http://redis.io),\nso you need a running redis instance first:\n\n redis-server\n\n### Start the telemetry deamon\n\nStart the telemetry daemon in the activated virtualenv via\n\n python -m symmetry.cli.telemd\n\n`telemd` also takes various arguments to control runtime aspects (activate the `-h` flag).\nFor exampe, to disable power monitoring and probe nodes every 0.5 seconds, run\n\n python -m symmetry.cli.telemd --power-disable --agent-interval=.5\n\nYou can verify that the telemetry daemon sends data by suscribing to the topic\nvia the redis CLI:\n\n redis-cli psubscribe \"telemetry:*\"\n\n\n### Start the cluster deamon\n\nStart the cluster daemon (which controls the cluster state)\n\n python -m symmetry.cli.clusterd\n\n\n### Websocket server\n\nTo start the websocket server for the dashboard:\n\n python -m symmetry.cli.websocket\n\nThe websocket is running on port ```8082``` and automatically connects to the local redis-server on `localhost:6379`.\nConnect with ```ws://ip:8082/topic``` to receive all published messages for the given ```topic```. \n\n\n### Run the dashboard\n\nServe the app with gunicorn\n\n gunicorn -w 4 --preload -b 0.0.0.0:5000 \\\n -c symmetry/webapp/gunicorn.conf.py \\\n symmetry.webapp.wsgi:api\n\nPoint your browser to http://localhost:5000/ui/dashboard.\n\nUsing Symmetry\n--------------\n\n### Creating services\n\nTo create a new service in the cluster a `POST` request must be sent to the\n`api/services/{service_id}` endpoint, with `service_id` being the new service.\n\nThe `POST` request has one optional \n([tar-exported docker image](https://docs.docker.com/engine/reference/commandline/save/)) and one mandatory (service \ndescription) body element.\n\nThe service description is structured this way:\n\n```yaml\n%YAML 1.2\n---\nid: #must be same id as in endpoint\nmaintainer: #the uploader of the service\nname: #\"Pretty\" version of the name\nversion: #any version number\ndescription: #simple description\nimage_tag: #if docker image uploaded then this tag must be provided by the image. otherwise it is pulled \nport: #the port which is exposed by the service\n``` \n\nAfter correct execution the answer should look somewhat like this:\n\n```json\n{\n \"name\": \"Test Service\",\n \"version\": \"1.0.0\",\n \"desc\": \"This is a simple test_service\",\n \"maintainer\": \"silvio\",\n \"10.0.0.3\": \"1\"\n}\n```\n\n\nOther Client Scripts\n--------------------\n\n### Recording telemetry data\n\nYou can use the telemetry client `cli.telemc` to consume telemetry data in\nvarious ways.\n\n # prints to system out\n python -m symmetry.cli.telemc\n\n # writes to a csv file\n python -m symmetry.cli.telemc --file /tmp/telemetry-results.csv\n\n### Arduino Power Meter\n\nTo sample wattage from the arduino power monitor every 0.5 seconds call:\n\n python -m symmetry.cli.power --interval 0.5\n\nThis will write the data into the Redis instance like the telemetry daemon.\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://git.dsg.tuwien.ac.at/mc2/symmetry", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "mc2-symmetry", "package_url": "https://pypi.org/project/mc2-symmetry/", "platform": "", "project_url": "https://pypi.org/project/mc2-symmetry/", "project_urls": { "Homepage": "https://git.dsg.tuwien.ac.at/mc2/symmetry" }, "release_url": "https://pypi.org/project/mc2-symmetry/0.3.0/", "requires_dist": [ "falcon (==2.0.0)", "falcon-cors", "falcon-multipart (>=0.2.0)", "gunicorn (==19.9.0)", "paramiko (==2.6.0)", "wakeonlan (==1.1.6)", "redis (==3.2.1)", "pyserial (==3.4)", "websockets (==7.0)", "aioredis (==1.2.0)", "pyyaml (==5.1)", "requests (==2.20.1)", "click (==7.0)", "Jinja2 (>=2.10.1)", "docker (==4.0.2)", "pymq (>=0.2.0)" ], "requires_python": "", "summary": "Symmetry - A cluster management system for micro-clusters", "version": "0.3.0" }, "last_serial": 5897378, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "95f5de10ec3e9a5e63a031e3818dcec8", "sha256": "7bd87ef7536371283b519e85a327d0408a3549df23f1f6a82fbb0527f1b5cdd1" }, "downloads": -1, "filename": "mc2_symmetry-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "95f5de10ec3e9a5e63a031e3818dcec8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 61800, "upload_time": "2019-08-23T22:55:02", "url": "https://files.pythonhosted.org/packages/ee/f5/a60829f03136f45bf246d31319c95e192bd37c2dde9015eabb69a15e691d/mc2_symmetry-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6e111a32e13cd02c519325d9be3a729", "sha256": "3f994971aefa035f71c25a9ba597b3467846f17f9d6fb5675cd7d160b67a1f37" }, "downloads": -1, "filename": "mc2-symmetry-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c6e111a32e13cd02c519325d9be3a729", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43781, "upload_time": "2019-08-23T22:55:05", "url": "https://files.pythonhosted.org/packages/c2/17/c2b28f9e173fced106928d8714f96f76a49b83ef6aae997943b4dc1dd751/mc2-symmetry-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "43370c88b2eea9d40c7be40ad67f87a1", "sha256": "ab1997b403b40289eba771909b205b62c027482f72ca5a6ff429c42bc175f9b0" }, "downloads": -1, "filename": "mc2_symmetry-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "43370c88b2eea9d40c7be40ad67f87a1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 64115, "upload_time": "2019-09-07T06:41:29", "url": "https://files.pythonhosted.org/packages/35/77/ddbc34609127067072092f0b660de81561bbdf2eb6e3fe5e9e5b99ad4516/mc2_symmetry-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dda881352c140095fe95a1c01ac3d7a9", "sha256": "f6d2b7bbbee91301a9e4a9d479bda3bc1880cbfbb1f598fa524b9b5a03aadf3f" }, "downloads": -1, "filename": "mc2-symmetry-0.2.0.tar.gz", "has_sig": false, "md5_digest": "dda881352c140095fe95a1c01ac3d7a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45627, "upload_time": "2019-09-07T06:41:31", "url": "https://files.pythonhosted.org/packages/a4/3c/84a15a1590d35b0715cb8be03979ff29b5f93b04893ca073a7a66e492caa/mc2-symmetry-0.2.0.tar.gz" } ], "0.2.0.dev2": [ { "comment_text": "", "digests": { "md5": "aa9c9e8bb0c253eca9f3ec52d6878ae7", "sha256": "027784963bd3cc2b9f0edd7866cf6e5b0a13533815634c96ebace9e2580d426b" }, "downloads": -1, "filename": "mc2_symmetry-0.2.0.dev2-py3-none-any.whl", "has_sig": false, "md5_digest": "aa9c9e8bb0c253eca9f3ec52d6878ae7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 62363, "upload_time": "2019-09-04T01:05:40", "url": "https://files.pythonhosted.org/packages/fc/12/b2a929e9732a02a6b835095181fb590805b3684cc74ba43e9f62a5343601/mc2_symmetry-0.2.0.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "18bdc6859b9374803eede1e3c8dd98a6", "sha256": "a003530a4247487388a7428204f9a1e60f01b2f23fb7115f1b1eb582547f2c0a" }, "downloads": -1, "filename": "mc2-symmetry-0.2.0.dev2.tar.gz", "has_sig": false, "md5_digest": "18bdc6859b9374803eede1e3c8dd98a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44178, "upload_time": "2019-09-04T01:05:43", "url": "https://files.pythonhosted.org/packages/d8/de/3a430bad19fcb7663117390d84d96a0a8d789560890469f6bbb71f3fad01/mc2-symmetry-0.2.0.dev2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "fdb9aa521549ba60f402953a7c6c6981", "sha256": "fd3661156426b04461cbb61db46327cb51fbd2296c885538cc575f59c06f7c57" }, "downloads": -1, "filename": "mc2_symmetry-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fdb9aa521549ba60f402953a7c6c6981", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 68080, "upload_time": "2019-09-24T16:00:12", "url": "https://files.pythonhosted.org/packages/59/4f/25f2f9cfa1698db925b758439d2fb9273bb66cee5aa50d2eaeddd93e9234/mc2_symmetry-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "34cc0e125951714c9a96abed0dade672", "sha256": "a20bcca6471ff09f55b3e984c17ab4b592a75b55c58cf66b192f8ac22ffa6f2d" }, "downloads": -1, "filename": "mc2-symmetry-0.3.0.tar.gz", "has_sig": false, "md5_digest": "34cc0e125951714c9a96abed0dade672", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48518, "upload_time": "2019-09-24T16:00:13", "url": "https://files.pythonhosted.org/packages/40/7b/227b5d01c8875461558a5e89e477838c94fb01dc8ec69f3448bcb6f62294/mc2-symmetry-0.3.0.tar.gz" } ], "0.4.0.dev3": [ { "comment_text": "", "digests": { "md5": "eace382e1ba7a35cb6b3fb22a17863bc", "sha256": "8af0dac92488235ee4e577c84a3353a9f8d1dd8e3831a1292ea8566f2af5f615" }, "downloads": -1, "filename": "mc2_symmetry-0.4.0.dev3-py3-none-any.whl", "has_sig": false, "md5_digest": "eace382e1ba7a35cb6b3fb22a17863bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 68958, "upload_time": "2019-09-27T18:02:16", "url": "https://files.pythonhosted.org/packages/8e/cf/98f443346c841a09c029917ca5bef42c5384f01f79c3a86af69e3035b105/mc2_symmetry-0.4.0.dev3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22b72f6bdbc6e43407d2a7af0ca81f66", "sha256": "b49a52a0bd50613648e372eca62771d4286dd16aa76531dd25c0fa7ef696b968" }, "downloads": -1, "filename": "mc2-symmetry-0.4.0.dev3.tar.gz", "has_sig": false, "md5_digest": "22b72f6bdbc6e43407d2a7af0ca81f66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49394, "upload_time": "2019-09-27T18:02:18", "url": "https://files.pythonhosted.org/packages/f1/b8/3bd44c126266a339657229bc65c0cdcea6e7def5aca2606deed55a9c46fe/mc2-symmetry-0.4.0.dev3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fdb9aa521549ba60f402953a7c6c6981", "sha256": "fd3661156426b04461cbb61db46327cb51fbd2296c885538cc575f59c06f7c57" }, "downloads": -1, "filename": "mc2_symmetry-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fdb9aa521549ba60f402953a7c6c6981", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 68080, "upload_time": "2019-09-24T16:00:12", "url": "https://files.pythonhosted.org/packages/59/4f/25f2f9cfa1698db925b758439d2fb9273bb66cee5aa50d2eaeddd93e9234/mc2_symmetry-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "34cc0e125951714c9a96abed0dade672", "sha256": "a20bcca6471ff09f55b3e984c17ab4b592a75b55c58cf66b192f8ac22ffa6f2d" }, "downloads": -1, "filename": "mc2-symmetry-0.3.0.tar.gz", "has_sig": false, "md5_digest": "34cc0e125951714c9a96abed0dade672", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48518, "upload_time": "2019-09-24T16:00:13", "url": "https://files.pythonhosted.org/packages/40/7b/227b5d01c8875461558a5e89e477838c94fb01dc8ec69f3448bcb6f62294/mc2-symmetry-0.3.0.tar.gz" } ] }