{ "info": { "author": "Oisin Mulvihill", "author_email": "oisinmulvihill at gmail dot com", "bugtrack_url": null, "classifiers": [], "description": "Evasion Project\n===============\n\n.. contents::\n\nIntroduction\n------------\n\nThe evasion project allows the creation of programs from configuration.\n\nThis is achieved by loading \"controller sections\" from configuration. A\ncontroller is a Python package or module that provides some functionality.\nIt is given all the configuration inside its section. The evasion-director\nmanages controllers in a similar fashion to init.d on linux. The evasion\ndirector starts up and loads each of the sections.\n\nThe most common evasion-director controller used is the evasion agency. This\nmanages \"agents\". An agent is a Python package or Module. Agents are used to\ncontrol hardware devices or services. The agency provides a device tree of\nnodes which can be referred to in an abstract fashion.\n\nMessage passing between Controllers, Agents and all interested parties can be\ndone using the evasion-messenger. This project part is currently being rewritten\nto use ZeroMQ. Old versions used a combination of PyDispatch, Stomp, Morbid\nBroker and Twisted. This messaging is entirely optional.\n\nNote: The evasion-agency project has been merged with the director code base.\nThe \"evasion.agency\" package is now provided by the evasion-director code base.\n\nGithub:\n * https://github.com/oisinmulvihill/evasion-director\n\n\nOther Docs\n----------\n\nI'm in the process of bring together various documents. For the moment\ninformation can be found here:\n\nEvasionProject code documentation\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n * http://www.evasionproject.com/apidocs/\n\nEvasionProject Wiki\n~~~~~~~~~~~~~~~~~~~\n\n * http://www.evasionproject.com/\n\n\n\nBasic Examples\n--------------\n\nSimplest configuration\n~~~~~~~~~~~~~~~~~~~~~~\n\nThe most basic example is using the minimal configuration \"app.ini\"::\n\n [director]\n messaging = 'no'\n\nThis can then be run from the command line::\n\n $ director --config app.ini\n evasion.director.manager.Manager INFO main: running.\n evasion.director.manager.Manager INFO controllerSetup: loading controllers from config.\n evasion.director.manager.Manager INFO controllerSetup: 1 controller(s) recovered.\n evasion.director.manager.Manager WARNING Ctrl-C, Exiting.\n $\n\nThe only controller load is the \"director\" controller. This isn't very useful\nas nothing is run.\n\n\nRun a program\n~~~~~~~~~~~~~\n\nYou can run and manage any type of program using the commandline controller.\nFor example::\n\n [director]\n messaging = 'no'\n\n [command_line_example]\n # Set this to 'yes' to stop this controller from being used.\n disabled = 'no'\n\n # This is optional and allows the order in which controllers are started\n # to be set.\n order = 1\n\n # Where the \"Controller\" class is to be found.\n controller = 'evasion.director.controllers.commandline'\n\n # The command line specific options:\n #\n # The command to run.\n command = 'ls'\n # Where the command is to be run from.\n workingdir = '/tmp'\n\nRunning this configuration gets::\n\n $ director --config app.ini\n root WARNING No valid logging found in configuration. Using console logging.\n evasion.director.manager.Manager INFO main: running.\n evasion.director.manager.Manager INFO controllerSetup: loading controllers from config.\n evasion.director.manager.Manager INFO controllerSetup: 2 controller(s) recovered.\n evasion.director.controllers.commandline DEBUG setUp: command workingdir \n evasion.director.manager.Manager INFO appmain: The controller '' needs to be started.\n evasion.director.controllers.commandline INFO start: 'ls' running. PID 87808\n evasion.director.manager.Manager INFO appmain: Started ok 'command_line_example'? 'True'\n 1564b4fc7dd26 ics41562 icssuis1316027648 launch-0FvLcQ launch-7vMUyC launch-9uZ0bO launch-ASdWau launch-RUjEPx launchd-460.ZFsfn1\n evasion.director.manager.Manager INFO appmain: The controller '' needs to be started.\n evasion.director.controllers.commandline INFO start: 'ls' running. PID 87809\n evasion.director.manager.Manager INFO appmain: Started ok 'command_line_example'? 'True'\n 1564b4fc7dd26 ics41562 icssuis1316027648 launch-0FvLcQ launch-7vMUyC launch-9uZ0bO launch-ASdWau launch-RUjEPx launchd-460.ZFsfn1\n evasion.director.manager.Manager INFO appmain: The controller '' needs to be started.\n evasion.director.controllers.commandline INFO start: 'ls' running. PID 87810\n evasion.director.manager.Manager INFO appmain: Started ok 'command_line_example'? 'True'\n icssuis1316027648 launch-0FvLcQ launch-7vMUyC launch-9uZ0bO launch-ASdWau launch-RUjEPx launchd-460.ZFsfn1\n evasion.director.manager.Manager WARNING Ctrl-C, Exiting.\n evasion.director.controllers.commandline INFO stop: stopping the process PID:'87810' and all its children.\n evasion.director.tools.proc INFO kill: pid <87810>\n evasion.director.controllers.commandline WARNING pkill: call failure [Errno 3] No such process\n $\n\nThe director loads the controller sections. Th commandline controller is\nstarted. The \"ls\" command lists the contents of the \"/tmp\" directory. The\noutput is captured and logged. The director then notices that the command has\nexited needs running again and the process repeats. The director will keep\nrunning all \"controllers\" that make up the program.\n\n\nUse the Agency\n~~~~~~~~~~~~~~\n\nThe minimal Agency configuration is::\n\n [director]\n messaging = 'no'\n\n [agency]\n #disabled = 'yes'\n controller = 'evasion.director.controllers.agencyctrl'\n\n\nIf this is run you would see::\n\n $ director --config ../app.ini\n evasion.director.manager.Manager INFO main: running.\n evasion.director.manager.Manager INFO controllerSetup: loading controllers from config.\n evasion.director.manager.Manager INFO controllerSetup: 2 controller(s) recovered.\n evasion.director.controllers.agencyctrl INFO setUp: setting up the agency and recovering agents.\n evasion.agency.manager.Manager INFO load: 0 agent(s) present.\n evasion.agency.manager.Manager WARNING There are no agents to set up.\n evasion.director.controllers.agencyctrl INFO setUp: agents loaded '0'.\n evasion.director.manager.Manager INFO appmain: The controller '' needs to be started.\n evasion.agency.manager.Manager WARNING There are no agents to start.\n evasion.director.manager.Manager INFO appmain: Started ok 'agency'? 'True'\n evasion.director.manager.Manager WARNING Ctrl-C, Exiting.\n evasion.agency.manager.Manager WARNING There are no agents to stop.\n evasion.agency.manager.Manager WARNING There are no agents to tear down.\n\nThis loads the agency however there are no agents for it to manage.\n\nIf we add the test agent to give the agency something to managed, the\nconfiguration would now look like::\n\n [director]\n messaging = 'no'\n\n [agency]\n #disabled = 'yes'\n controller = 'evasion.director.controllers.agencyctrl'\n\n # indent is convention to visually distinguish agents from controllers.\n [testswipe]\n cat = 'swipe'\n agent = 'evasion.agency.agents.testing.fake'\n\nIf this is run you would see::\n\n $ director --config ../app.ini\n 2012-05-29 17:21:56,674 evasion.director.manager.Manager INFO main: running.\n 2012-05-29 17:21:56,675 evasion.director.manager.Manager INFO controllerSetup: loading controllers from config.\n 2012-05-29 17:21:56,711 evasion.director.manager.Manager INFO controllerSetup: 2 controller(s) recovered.\n 2012-05-29 17:21:56,711 evasion.director.controllers.agencyctrl INFO setUp: setting up the agency and recovering agents.\n 2012-05-29 17:21:56,712 evasion.agency.manager.Manager INFO load: 1 agent(s) present.\n 2012-05-29 17:21:56,712 evasion.director.controllers.agencyctrl INFO setUp: agents loaded '1'.\n 2012-05-29 17:21:56,712 evasion.director.manager.Manager INFO appmain: The controller '' needs to be started.\n 2012-05-29 17:21:56,712 evasion.director.manager.Manager INFO appmain: Started ok 'agency'? 'True'\n 2012-05-29 17:21:58,134 evasion.director.manager.Manager WARNING Ctrl-C, Exiting.\n $\n\n\n\nDevelopment Process\n-------------------\n\nThe source code mangement and release process follows roughly the gitflow\nprocess.\n\n * http://nvie.com/posts/a-successful-git-branching-model/\n * https://github.com/nvie/gitflow\n\n\nIssues\n------\n\nAll issues for the other evasion-* project parts should be logged on the\nevasion-director project.\n\n\nRelease Notes\n-------------\n\n1.1.6\n~~~~~\n\nThe evasion-agency repository code has been merged with the evasion-director.\nWhat this means in practice is the evasion-director now provides the\n\"evasion.agency\" namespace. The director no longer depends on the\n\"evasion-agency\".\n\n\n1.1.5:\n~~~~~~\n\nIn this release of fixed the issue \"default behaviour change: failed controller\n& agent imports cause exit.\". The director will now exit when a controller\nraises an exception.\n\n * https://github.com/oisinmulvihill/evasion-director/issues/7\n\n\n1.1.4:\n~~~~~~\n\nGitHub Milestone for this release https://github.com/oisinmulvihill/evasion-director/issues?milestone=1&state=closed\n\nFixed\n * Re-raising SystemExit, KeyboardInterrupt: https://github.com/oisinmulvihill/evasion-director/issues/5\n * Handling unhandled exceptions: https://github.com/oisinmulvihill/evasion-director/issues/2\n * Agency assumes 'log' attribute is present in Agent: https://github.com/oisinmulvihill/evasion-director/issues/1", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/oisinmulvihill/evasion-director/tarball/master#egg=evasion_director", "keywords": null, "license": "Evasion Project CDDL License", "maintainer": null, "maintainer_email": null, "name": "evasion-director", "package_url": "https://pypi.org/project/evasion-director/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/evasion-director/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/oisinmulvihill/evasion-director/tarball/master#egg=evasion_director" }, "release_url": "https://pypi.org/project/evasion-director/1.1.6/", "requires_dist": null, "requires_python": null, "summary": "The evasion-director allows the creation of programs from configuration.", "version": "1.1.6" }, "last_serial": 802970, "releases": { "1.0.0": [], "1.0.1": [ { "comment_text": "", "digests": { "md5": "3d03b58aa5966e4eab8bafd9a06e8bce", "sha256": "537e664b62e563a6a40d25799b6aca422103fa04410a9913bb509b7349379f4b" }, "downloads": -1, "filename": "evasion_director-1.0.1-py2.6.egg", "has_sig": false, "md5_digest": "3d03b58aa5966e4eab8bafd9a06e8bce", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 134292, "upload_time": "2010-07-30T14:00:01", "url": "https://files.pythonhosted.org/packages/1f/0c/b3078cd081a84c433c061238f739078f3869680089be83bdf0af21a6cce8/evasion_director-1.0.1-py2.6.egg" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "8b26ed347180db7a6d2579b6318b5554", "sha256": "396a81a642e69e7af0f9389de44329d3be6c2e71359516b2f84f2094718e036d" }, "downloads": -1, "filename": "evasion_director-1.1.3-py2.6.egg", "has_sig": false, "md5_digest": "8b26ed347180db7a6d2579b6318b5554", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 134493, "upload_time": "2011-10-27T20:44:37", "url": "https://files.pythonhosted.org/packages/79/c8/f0b747dc4a929adbe328a6057cc7962320f2f55754887951a0195cde6217/evasion_director-1.1.3-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "4293f86e1cf7f5a968ebd0af01f6bff5", "sha256": "463732064ffd8dcb5a34d3286ed72f1e09606eb3af06eac98839bc13c45cc99b" }, "downloads": -1, "filename": "evasion_director-1.1.3-py2.7.egg", "has_sig": false, "md5_digest": "4293f86e1cf7f5a968ebd0af01f6bff5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 134441, "upload_time": "2011-10-27T20:43:20", "url": "https://files.pythonhosted.org/packages/76/0c/21ddca6db7f8ca067928205f34b997515554964734d109c4ed5befca2023/evasion_director-1.1.3-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "8ff5bbccd912d99c12e16d69dec3cd32", "sha256": "d18109c7f60b69f0e634e05da2dfaf61c0602fa2bbcb236c1560c9c818e377d9" }, "downloads": -1, "filename": "evasion-director-1.1.3.tar.gz", "has_sig": false, "md5_digest": "8ff5bbccd912d99c12e16d69dec3cd32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42804, "upload_time": "2011-10-27T20:43:20", "url": "https://files.pythonhosted.org/packages/5f/79/fe6dded96355f268913ef642a3cc462feb41e96745c0548c34e56a131e6a/evasion-director-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "74f520350a8a82574be77a24a2ff4505", "sha256": "f8e785564e64ecda32e694c9aa8a2e24aa1fc8b1b224cb52cf1056d79e741bf4" }, "downloads": -1, "filename": "evasion_director-1.1.4-py2.7.egg", "has_sig": false, "md5_digest": "74f520350a8a82574be77a24a2ff4505", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 134387, "upload_time": "2011-12-21T13:53:24", "url": "https://files.pythonhosted.org/packages/82/17/ded461fdcbf285e47c2b46dc9b62b99db2879d6ff2c2222b742cdc84829e/evasion_director-1.1.4-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "788afca21d1d12bf56fb47ad4ddc731b", "sha256": "bbe73d9624916913cd5ae65734a505b705d2ecd63ac9125f455fbef7d4c5cc59" }, "downloads": -1, "filename": "evasion-director-1.1.4.tar.gz", "has_sig": false, "md5_digest": "788afca21d1d12bf56fb47ad4ddc731b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42876, "upload_time": "2011-12-21T13:53:24", "url": "https://files.pythonhosted.org/packages/85/5a/8f7e5277ab88806c541eff22b253d3b7099c21b0991dd00b68cf4892968b/evasion-director-1.1.4.tar.gz" } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "b8209978d57e9ff59180f4d750cf8425", "sha256": "154da3d9efa78b36ec3bacc4b023249f8477e765528c2e75294fc3e6cda2e2f2" }, "downloads": -1, "filename": "evasion-director-1.1.5.tar.gz", "has_sig": false, "md5_digest": "b8209978d57e9ff59180f4d750cf8425", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42987, "upload_time": "2012-05-18T17:31:47", "url": "https://files.pythonhosted.org/packages/b4/a5/1b91205887df2602a94eb36523f458a374b0849a021867aed245f20fae4d/evasion-director-1.1.5.tar.gz" } ], "1.1.6": [ { "comment_text": "", "digests": { "md5": "aef77b88376e5aa759bc9f7bb15c8797", "sha256": "239402280c514f7dc39f1aada2fbfd83bdae8b33487d5343d1d47bd346182a12" }, "downloads": -1, "filename": "evasion-director-1.1.6.tar.gz", "has_sig": false, "md5_digest": "aef77b88376e5aa759bc9f7bb15c8797", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52882, "upload_time": "2012-05-31T17:53:48", "url": "https://files.pythonhosted.org/packages/3b/c8/c52374a97e4ec8341e15f5b8fc2147f6c95c2b2376bb766d1e9e2baec688/evasion-director-1.1.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aef77b88376e5aa759bc9f7bb15c8797", "sha256": "239402280c514f7dc39f1aada2fbfd83bdae8b33487d5343d1d47bd346182a12" }, "downloads": -1, "filename": "evasion-director-1.1.6.tar.gz", "has_sig": false, "md5_digest": "aef77b88376e5aa759bc9f7bb15c8797", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52882, "upload_time": "2012-05-31T17:53:48", "url": "https://files.pythonhosted.org/packages/3b/c8/c52374a97e4ec8341e15f5b8fc2147f6c95c2b2376bb766d1e9e2baec688/evasion-director-1.1.6.tar.gz" } ] }