{ "info": { "author": "Launchpad Developers", "author_email": "launchpad-dev@lists.launchpad.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Affero General Public License v3", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "..\n This file is part of oopstools\n\n Copyright 2009-2011 Canonical Ltd. All rights reserved.\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU Affero General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License\n along with this program. If not, see .\n\nOOPS Tools\n==========\n\nThis is a Django application to analyze OOPS reports\n(see https://launchpad.net/python-oops).\n\nPlease see https://dev.launchpad.net/LazrStyleGuide and\nhttps://dev.launchpad.net/Hacking for how to develop in this\npackage.\n\nDependencies\n============\n\nOOPStools uses buildout for configuration.\n\nAll dependencies (except for the database packages) are available from the\nlazr-source-dependencies branch on Launchpad. Simply typing make will set-up\nthe download-cache of dependencies eggs and then create the buildout.\n\nIf you already have that shared eggs cache branch available locally (to share\nbetween branches of the Lazr project), simply set the LAZR_SOURCEDEPS_DIR to\nthe directory containing the download-cache and eggs directories before\ninvoking make.\n\nTo run under apache with mod_wsgi (recommended)\n\n * libapache2-mod-wsgi package\n\nTo run under apache with mod_python\n\n * libapache2-mod-python package\n\nDeployment using mod_wsgi\n=========================\n\nCreate a custom cfg file - start with production.cfg and take a copy. Update\nyour copy with your database configuration and the paths to your OOPS\ndirectories:\n\n[configuration]\ndb-name = /path/to/your/oops.db\nindex-template = 'index.html'\noopsdir = /path/where/rsynced/oopses/are/found\n /another/such/path\n\nUpdate settings.py setting a custom SECRET_KEY, and appropriate AMQP connection\ndetails (so that the oops-tools web site itself can report errors, should they\noccur).\n\nTo deploy oops tools make sure all the dependecies are installed.\n\n * bin/buildout -c yourfilename.cfg\n\n * Run bin/django syncdb\n\n * Run bin/django migrate\n\n * Copy apache/oops-tools.dev.mod_wsgi to /etc/apache2/sites-available/\n\nAMQP Integration\n================\n\nThe script bin/amqp2disk is an AMQP handler that will receive OOPS reports over\nAMQP and publish them locally to disk as well as loading the metadata directly\ninto the oops-tools database. To use this you will need to config your OOPS\ncreation to publish over AMQP. If you are using Python then the oops-amqp\nmodule will help you do this.\n\nThe Django web UI also integrates with AMQP to report errors that occur\nrendering or searching for OOPS reports. The settings to control this are in\nsettings.py (or in your configuration file which buildout compiles into a\nsettings.py).\n\nRunning locally\n===============\n\nSometimes Launchpad developers want to run oops-tools to help analyse locally\ngenerated OOPS reports.\n\nThe first step is to setup the local database.\n\nLocal PostgreSQL setup\n++++++++++++++++++++++\n\nIf you do Launchpad development, you probably have PostgreSQL already running\non port 5432. You'll need another cluster to run the oops-tools database.\n\nCreate a new cluster for lpoops:\n\n $ LC_ALL=C sudo pg_createcluster 9.1 lpoops --encoding UNICODE --port 5433\n\nApply the following patch to /etc/postgresql/9.1/lpoops/pg_hba.conf. Note that\nthis configuration change needs to be before the \"DO NOT DISABLE!\" line in the\npg_hba.conf file.\n\n sudo patch /etc/postgresql/9.1/lpoops/pg_hba.conf <<'EOF'\n --- pg_hba.conf 2005-11-02 17:33:08.000000000 -0800\n +++ /tmp/pg_hba.conf 2005-11-03 07:32:46.932400423 -0800\n @@ -58,7 +58,9 @@\n # on a non-local interface via the listen_addresses configuration parameter,\n # or via the -i or -h command line switches.\n #\n -\n +# Oops-tools users\n +local all all trust\n +host all all 127.0.0.1/32 trust\n\n\n EOF\n\nIn case localhost is using IPv6, you'll need an extra line just below the one above.\n\n host all all ::1/128 trust\n\nStart the cluster.\n\n $ sudo pg_ctlcluster 9.1 lpoops start\n\nAdd your own user to the cluster:\n\n $ sudo -u postgres createuser -a -d $USER --port 5433\n\nTo create the new db:\n\n $ createuser lpoops --createdb --no-superuser --no-createrole --port 5433\n $ createdb -O lpoops lpoops --port 5433\n\nNote that this command creates a password-less database. Use --password to\ncreate a db with a password.\n\nTo delete the db:\n\n $ dropdb lpoops --port 5433\n $ dropuser lpoops --port 5433\n\nConfiguration changes\n+++++++++++++++++++++\n\nIf you used a different port than 5433 for the PostgreSQL setup, pass the\nDBPORT variable to make and it'll build the configuration files using the\nvalue provided.\n\n * `make DBPORT=$PORT`\n * Run bin/django syncdb\n * Run bin/django migrate\n * `make run` at the root of the oops-tools directory\n * Point your browser to http://localhost:8000/oops\n\n===================\nNEWS for oopstools\n===================\n\nNEXT\n====\n\n0.6.7\n=====\n\n* Permit multiple project/project groups to be supplied to prune.\n (Robert Collins, #1003627)\n\n0.6.6\n=====\n\nThe brown paper bag edition.\n\n* Fix typos that prevented the new timeline-django code installing or working\n properly. (Robert Collins)\n\n0.6.5\n=====\n\n* Dependency bump to non-broken version of timeline-django. (Robert Collins)\n\n0.6.4\n=====\n\n* Oops-tools now depends on newer djangorecipe, django 1.3.3 and\n oops-datedir-repo 0.0.19. The -repo dependency bump gets the analogous fix\n for 1050722 for the on-disk purging. (Robert Collins).\n\n* Oops reports generated by oops-tools itself will now include django event\n data from timeline_django. This can be disabled if needed by disabling the\n oops_timeline hook in oopstools.wsgi. (Robert Collins)\n\n* When pruning, look for OOPS references up to now rather than up to\n prune_until. Otherwise we miss any references created in the last\n week, probably only finding references within 24 hours of the OOPS\n occurring. (William Grant, #1050722)\n\n0.6.3\n=====\n\n* Reports have a per-report email address that can be set, to allow different\n reports to go to different addresses. (Robert Collins)\n\n* HTML reports can be created for non-ascii OOPS topics.\n (Robert Collins, #1048470)\n\n0.6.2\n=====\n\n* Corrupt timeline objects are handled more gracefully if they are not a list,\n or the list rows are too short or too long. (Robert Collins, #890001)\n\n* Failures in processing an AMQP sourced OOPS will now write out the path to\n the disk copy of the failed OOPS, to ease debugging.\n (Robert Collins, #892914)\n\n* Failures in the Django web UI will now raise an OOPS over AMQP, making\n oops-tools an oops-tools consumer. (Robert Collins)\n\n* Flush stdout when logging an OOPS receipt in amqp2disk.\n (Robert Collins, #884569)\n\n* Hostnames are now shown in the OOPS detail page. This makes it possible to\n figure out if one host in particular is having trouble. (Robert Collins)\n\n* Long oops ids - which are likely hashes - no longer have the old appserver id\n heuristic applied to them: if they have a missing or empty reporter, they are\n associated with the instance 'unknown'. (Robert Collins, #889982)\n\n* Mixed case OOPS reports can now be looked up in the web UI without their\n OOPS-prefix (if they had one). (Robert Collins, #884571)\n\n* Now uses the lp source dependencies rather than lazr, as part of simplifying\n the maintenance of the many related LP projects. (Robert Collins)\n\n* Old OOPS reports can be cleaned out using the new script bin/prune.\n (Robert Collins)\n\n* OOPS reports that don't meet the normal rules for req_vars are handled\n a bit better.\n (Robert Collins, William Grant, Roman Yepishev, #885416, #884265)\n\n* Report timelines now include a backtrace for each event, making it easier to\n determine the origin of the event (e.g. why something is looked up).\n Timelines without this information will show 'unknown' in the relevant\n column on the OOPS page. (Robert Collins, #890976)\n\n* The OOPS reporter field - or prefix as it was known - is now shown\n in the OOPS details page. (Robert Collins)\n\n* The prefix and appinstance values can now be up to 100 characters long.\n (Robert Collins, #892917)\n\n* The req_vars variable in OOPS reports may now be a dict.\n (Robert Collins, #888866)\n\n0.6.1\n=====\n\n* Added AMQP support via the bin/amqp2disk script. (Robert Collins)\n\n* Bumped oops-amqp rev to 0.0.3 for bugfixes. (Robert Collins)\n\n* amqp2disk now creates a fanout exchange if --bind-to is supplied.\n (Robert Collins)\n\n* amqp2disk -v will print the received OOPS ids on the console, for\n entertainment and delight. (Robert Collins)\n\n* OOPS reports with non-ascii URL values are handled by url escaping the URL\n bytestring (this is separate to handling of unicode URL values).\n (Roman Yepishev, Robert Collins, #881400)\n\n* OOPS reports with unicode URL values are now handled during oops loading: the\n unicode string is utf8 encoded (an arbitrary choice) and url escaped.\n (Robert Collins, #879309)\n\n* OOPS reports with no topic (formerlly called pageid) will no longer use their\n url instead. Rather '' is used, and reports will show Unknown for empty\n pageids. (Robert Collins, #880641)\n\n0.6\n===\n\n* Initial release\n\n* Add dependency on testtools and fixtures for cleaner tests.\n\n* Fix race conditions with oops loading and non-sequential oopses. These can\n occur when e.g. rsync is writing at the same time as oops loading, or if a\n non-sequential publisher is used. (Robert Collins, #667373)\n\n* Update to oops-datedir-repo 0.0.7 and add reading of bson serialized oopses\n (which are more extensible and more easily parsed). (Robert Collins)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "oops-tools", "package_url": "https://pypi.org/project/oops-tools/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/oops-tools/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/oops-tools/0.6.7/", "requires_dist": null, "requires_python": null, "summary": "=================", "version": "0.6.7" }, "last_serial": 5354867, "releases": { "0.6": [], "0.6.1": [ { "comment_text": "", "digests": { "md5": "6518ba8da3dc89a7b8961119198a08fb", "sha256": "231e440ff7124db66644064ddfa46e0201629fd00d1e789b49bd6e5158e1da7f" }, "downloads": -1, "filename": "oops-tools-0.6.1.tar.gz", "has_sig": true, "md5_digest": "6518ba8da3dc89a7b8961119198a08fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64929, "upload_time": "2011-10-31T03:42:39", "url": "https://files.pythonhosted.org/packages/ce/c9/dbf19ecc226d97523f1830bb65b3aa40be3ca41b318ec6344cf5920ba9c9/oops-tools-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "4676d42874019f26a6e7e19b355b5eb3", "sha256": "1c336946a769a647fa593ae2b16ac8dcebda82b9b036ac0a9d976ac8ad159ed7" }, "downloads": -1, "filename": "oops-tools-0.6.2.tar.gz", "has_sig": true, "md5_digest": "4676d42874019f26a6e7e19b355b5eb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67319, "upload_time": "2012-02-01T06:02:25", "url": "https://files.pythonhosted.org/packages/af/2e/c6ba03e9902e27178760d82d3bb35d701124354fb41894c159fcdd01bf87/oops-tools-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "30b47e6442a473ccbb6efc9bc2eb2f0b", "sha256": "880fdb868e5d3e4e0cfac241c43322d902c5c481e57ca9dd0dc037ce9f5d527f" }, "downloads": -1, "filename": "oops-tools-0.6.3.tar.gz", "has_sig": true, "md5_digest": "30b47e6442a473ccbb6efc9bc2eb2f0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67828, "upload_time": "2012-09-11T09:27:27", "url": "https://files.pythonhosted.org/packages/be/08/49feb6484074a30beb1680d07b76e62eb4abeeaa124e50ced66017bb01c2/oops-tools-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "b28b18a6d3c62b760dce6b0b33c433be", "sha256": "7ccdfe2557f0f88964ce907bd2d5541f9cd703c0b4889ebd59fbc497bec0d903" }, "downloads": -1, "filename": "oops-tools-0.6.4.tar.gz", "has_sig": true, "md5_digest": "b28b18a6d3c62b760dce6b0b33c433be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68258, "upload_time": "2012-09-20T06:04:59", "url": "https://files.pythonhosted.org/packages/6a/76/d0c3ece696d9ee8957022758745de9b4d0164a0ea31164dcfbc80755822f/oops-tools-0.6.4.tar.gz" } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "3191dd07be5fcabfeb406617c91356dd", "sha256": "ebbe6a3aa78dc3dfe0753a801e819a8efae55f9005427293bc18627fdc6d912e" }, "downloads": -1, "filename": "oops-tools-0.6.5.tar.gz", "has_sig": true, "md5_digest": "3191dd07be5fcabfeb406617c91356dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68281, "upload_time": "2012-09-24T00:16:11", "url": "https://files.pythonhosted.org/packages/69/52/806b3c41f7db6ed9993be40c95e408ee9e448d9fe1132a6233a1dfa51932/oops-tools-0.6.5.tar.gz" } ], "0.6.6": [ { "comment_text": "", "digests": { "md5": "ecda4385fe94b24a07392336e51aea1e", "sha256": "260ad351950f9343825cad0638a36b65554407a71ac288fbaefe7a6373ab9b9d" }, "downloads": -1, "filename": "oops-tools-0.6.6.tar.gz", "has_sig": true, "md5_digest": "ecda4385fe94b24a07392336e51aea1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68346, "upload_time": "2012-09-25T07:38:19", "url": "https://files.pythonhosted.org/packages/c4/b8/c6271ea2c5854784270bfe0629d607a00c90520a4437d20e8abbc552f4d3/oops-tools-0.6.6.tar.gz" } ], "0.6.7": [ { "comment_text": "", "digests": { "md5": "c3c4162f7d68afa3b9d4ea6daf74be83", "sha256": "9ec270a3f55700b4b917bd88ffd962f6c53d89b512df63472c4fb1a4d5b2656b" }, "downloads": -1, "filename": "oops-tools-0.6.7.tar.gz", "has_sig": true, "md5_digest": "c3c4162f7d68afa3b9d4ea6daf74be83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68375, "upload_time": "2012-09-26T08:04:40", "url": "https://files.pythonhosted.org/packages/a5/1e/56f7f1b1a051941d8705ff789d3172f91f0ee1bec64315d590b926986491/oops-tools-0.6.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c3c4162f7d68afa3b9d4ea6daf74be83", "sha256": "9ec270a3f55700b4b917bd88ffd962f6c53d89b512df63472c4fb1a4d5b2656b" }, "downloads": -1, "filename": "oops-tools-0.6.7.tar.gz", "has_sig": true, "md5_digest": "c3c4162f7d68afa3b9d4ea6daf74be83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68375, "upload_time": "2012-09-26T08:04:40", "url": "https://files.pythonhosted.org/packages/a5/1e/56f7f1b1a051941d8705ff789d3172f91f0ee1bec64315d590b926986491/oops-tools-0.6.7.tar.gz" } ] }