{ "info": { "author": "Karim Shehadeh", "author_email": "karim@karim.cloud", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3" ], "description": "# Augur Developer Metrics\n\nHelp team leads, managers and developers track progress, improvement, \ngaps by combing data from multiple tools into an easy to use dashboard\nusing the Augur Development Method.\n\nThis is a library that can be easily included into any client that wants to\ncollect data using ADM. \n\n# Augur Installation\n\nTo install, you can do one of the following:\n\n## Install on command line\n\n pip install augur \n\nWithout changing your global index, this will install augur using the custom index this once.\n\n## Install in requirements.txt\n\nThen include augur as you would any other package:\n\n augur==\n or\n augur\n\n# Augur Development\n\nTo upload a new version of augur, you can modify your .pypirc file with the following:\n\n [dist-utils]\n .... # whatever indexes you already had in there\n local\n\n ...\n\n [local]\n repository: https://artifacts.ua-ecm.com/artifactory/api/pypi/ua-pypi\n username: # must have publish rights\n password: \n\n\nYou can use fabric to build and publish. \n\n >> pip install -g fabric\n >> cd /path/to/augur\n >> fab publish:bump_version_type=,upload=,update_in_vcs=\n\nfab publish can perform all aspects of deployment optionally. By default, it will only build \na new package. But you can also have it automatically bump the version (major,minor or patch),\npublish the new build to whatever artifact repo you've configured in .pypirc and automically\ncommit and push the changes to git.\n\n## Testing\nTo run the very few tests that exist, create a file called fixtures.local.json in the \ntests/fixtures directory that looks like this:\n\n```json\n{\n \"connections\": {\n \"jira\": {\n \"server\": \"https://.atlassian.net/\",\n \"username\": \"\",\n \"password\": \"\"\n },\n \"db\": {\n \"type\": \"sqlite\",\n \"sqlite\": {\n \"path\": \"/augur/tests/fixtures/db.sqlite\"\n }\n }\n },\n \"context\": {\n \"group\": 1\n },\n \"jira_test_data\": {\n \"jql\": {\n \"created_last_three_days\":\"created > startOfDay(-3d)\"\n }\n }\n}\n```\n\nFrom the augur root source directory, run \n\n```bash\npython -m tests.test_objects\n```\n\n# Augur Integration\n\n## Settings\n\nIn order to use Augur there are some settings that it expects to be accessible\nvia environment variables. In some cases, there are defaults that are applied,\nin other cases, the initialization will fail if not specified.\n\n\n| Environment Variable | Purpose | Default | Example |\n| -------------------- |:-----------------------------------------|:----------: |--------------------------------|\n| JIRA_INSTANCE | The full url to the JIRA instance to use | Required | http://voltron.atlassian.net/ |\n| JIRA_USERNAME | The full url to the JIRA instance to use | Required | A username |\n| JIRA_PASSWORD | The full url to the JIRA instance to use | Required | It's a password |\n| JIRA_API_PATH | The relative path to the root of the rest endpoints | rest/api/2 | rest/api/2 |\n| CONFLUENCE_INSTANCE | The full url to the Confluence instance | JIRA_INSTANCE | http://voltron.atlassian.net/wiki |\n| CONFLUENCE_USERNAME | The full url to the Confluence instance | JIRA_USERNAME | A username |\n| CONFLUENCE_PASSWORD | The full url to the Confluence instance | JIRA_PASSWORD | Another password |\n| GITHUB_BASE_URL | The full url to the Github instance | Required | http://github.com/ |\n| GITHUB_LOGIN_TOKEN | The token of the user that should be used to access the API for the instance of github specificed in GITHUB_BASE_URL | Required | cbab75c171843afef555d9dcbc212e0b54681b32 |\n| GITHUB_CLIENT_ID | The client ID that has been registered for the client that is using this instance of the Augur library | Required | e3d808650b4f45f9ac03 |\n| GITHUB_CLIENT_SECRET | The client secret that has been registered for the client that is using this instance of the Augur library | Required | f3d80e650b4d45f9ad15 |\n\n\n# Integration with External Tools\n\n## Github\n\nThere is no explicit requirements for Github setup other than this: Augur was developed from the enterprise edition \n which means it's more acceptable for Github Organizations to be part of the hierarchy of the codebase.\n \n## Jira \n\n### Development ###\nA customized version of a python client is being used to retrieve Jira data via the REST API. You'll notice that the \nrequirements.txt file is pulling from our private pypi. The code for this customized version is found here:\n https://github.ua.com/kshehadeh/jira\n\nFor development locally, you can either get a clone of that repo then install it into your python environment:\n \n > cd /my/dev/folder\n > git clone git@github.ua.com:kshehadeh/jira.git\n > pip install -e /my/dev/folder/jira\n \nor you can download directly from the private pypi like so:\n\n > pip install jira -i https://pypi-reader:ThOgrAVultiA@artifacts.ua-ecm.com/artifactory/api/pypi/ua-pypi/simple\n \nThat user has read only access to the pypi repo only.\n\n### Groups, Workflows and Teams\nAugur now supports creation of custom workflows. To do this, a taxonomy of \nwas created to organize them. \n\n* Groups\n * Workflow\n * Projects\n * Teams\n * Staff\n* Vendors\n\n#### Groups\nA group in Augur is a group of people within an organization that share a common \nworkflow. For example, developers might use a workflow that is different than \nthat used by the marketing team. Groups are described by a single workflow and \na set of teams. \n\n#### Workflows\nWhile Augur workflows are closely tied to Jira workflows there's not a 1:1 comparison. \n\nA workflow is made up of:\n* Statuses - The various statuses that this workflow includes\n* Resolutions - fixed, completed, etc.\n* Projects - the Jira projects that are considered part of the workflow\n* Project Categories - A jira project category that should be included in this project\n* Issue Types - The types of issues that should be considered identified selected when making queries\n* Defect Projects - Which projects within the list of projects above are used for storing defects\n\n\n##### Statuses\nWithin a workflow, statuses can be of three types (open, in progress, resolved). This helps \nus understand what tickets are actively being worked on for metrics purposes.\n\n\n##### Resolutions\nWhen a ticket status is set to a resolved state, we look at the resolution types to understand\nthe success or failure of that issue. So each resolution type supported has a type\nas well: postive or negative. So a positived resolution would be \"fixed\" and a negative one \nwould be \"won't fix\"\n\n\n##### Projects\nWe can indicate which projects to include by either specifying the project keys individually\nor using JIRA's project categories which is a more easy to manage because you simply have\nto set the category of a project in JIRA and it will automatically be included in this workflow.\n\n##### Issue Types\nWe can also indicate which issue types we should pay attention to. This is helpful when \nprojects have issue types that are used for tracking information that has nothing\nto do with the workflow - like individual todo items, etc.\n\n##### Defect Projects\nFinally, defect projects are projects that we specifically call out for consisting\nentirely of bugs found in production. We can use this information to collect defect\nmetrics over time. A defect project is not necessarily just all tickets in the project\nbut can also be further filtered by the issue type.\n\n#### Teams\nTeams are made up of staff who have a long list of attributes associated with each. \nWe keep information about the staff such as who they work for, email, usernames\nfor different tools, etc.\n\n##### Sprints\nSprints are not stored in the augur db explicitly but the agile board ID is used\nto retrieve sprint information. To ensure that the correct sprints are being read, \nsprint names must follow a certain format: \n\n - Team \n \n Example:\n 001 - Team Voltron\n \nThis is to ensure that only sprints that are associated with the team are\nincluded in the metrics. Due to the way Jira works, it is possible for a \nsprint that is part of a different agile board to be included in the metrics\nif this formatting restriction is not used.\n\n##### Notifications\nThe Augur database supports notification settings for individual staff members. \n\nStaff can customize notifications by channel and by content. For example, we can turn off email or slack messages\nfor build notification but we can also specify what type of build notifications we want to get. \n\nIn the `notifications` table there are these fields:\n* build - Can be one or more of [slack,email] separated by commas\n* deploy - Can be one or more of [slack,email] separated by commas\n* build_types - Can be one or more of [all,upstream,myteam,otherteams] separated by commas\n\n*Build Types Explained*\nAll - If all is in there, then everything else is ignored and all build types are sent\nupstream - This means that notifications for builds that occur in a non-team org and are the master branch will be sent\nmyteam - This means that notification for builds that occur in the committers own team org will be sent\notherteams - This means that notifications for builds that occur in team orgs other than the committers will be sent.\n\n \n ", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/augur-ecosystem/augur/tree/master", "keywords": "metrics jira github development", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "augurlib", "package_url": "https://pypi.org/project/augurlib/", "platform": "", "project_url": "https://pypi.org/project/augurlib/", "project_urls": { "Homepage": "https://github.com/augur-ecosystem/augur/tree/master" }, "release_url": "https://pypi.org/project/augurlib/1.1.62/", "requires_dist": null, "requires_python": "", "summary": "A library for extracting actionable data from development tools ", "version": "1.1.62" }, "last_serial": 4349363, "releases": { "1.1.56": [ { "comment_text": "", "digests": { "md5": "131d0c161bdd49f35c27b80eafc94c51", "sha256": "c71d04437192850e64f63594fba3f1e77a0cd9b30db0ef40502eb7b8659e0fee" }, "downloads": -1, "filename": "augurlib-1.1.56.tar.gz", "has_sig": false, "md5_digest": "131d0c161bdd49f35c27b80eafc94c51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39385, "upload_time": "2018-04-02T17:59:12", "url": "https://files.pythonhosted.org/packages/51/38/4f90c84af947f65c7edff02f5c28b66d8e9c784b800c4b133a642934e063/augurlib-1.1.56.tar.gz" } ], "1.1.58": [ { "comment_text": "", "digests": { "md5": "4f5f89135e93197a32447a683701b529", "sha256": "1cc0c9df88d0e5c5038afbb5bbf8ab6c0a4a3bb14fc1cd9692bd89ca124607af" }, "downloads": -1, "filename": "augurlib-1.1.58.tar.gz", "has_sig": false, "md5_digest": "4f5f89135e93197a32447a683701b529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40569, "upload_time": "2018-10-05T13:12:10", "url": "https://files.pythonhosted.org/packages/10/fe/24d6a6ea284d87370b431e5b4ba9d5da96b1f2444df111f47e7913d602be/augurlib-1.1.58.tar.gz" } ], "1.1.60": [ { "comment_text": "", "digests": { "md5": "e2ef5fa5463854112ca53936eb6f8ea8", "sha256": "3aaa83910e39ca96a26c3e0bd6dbac434254fdca47b055e45f8ff3cc7c2eb918" }, "downloads": -1, "filename": "augurlib-1.1.60.tar.gz", "has_sig": false, "md5_digest": "e2ef5fa5463854112ca53936eb6f8ea8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40919, "upload_time": "2018-10-06T20:45:01", "url": "https://files.pythonhosted.org/packages/a1/bc/d4ef1bde496cfa2c87ae30183552ce5ea06e636caa26fa8b6fc4282f134c/augurlib-1.1.60.tar.gz" } ], "1.1.61": [ { "comment_text": "", "digests": { "md5": "3fffdec435feb0cbd622dc5409945104", "sha256": "6b76bcc5d147b3d84cfd2791ebf5601a79e8f1a7b6e6555a81647a05f3a7a1ca" }, "downloads": -1, "filename": "augurlib-1.1.61.tar.gz", "has_sig": false, "md5_digest": "3fffdec435feb0cbd622dc5409945104", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40896, "upload_time": "2018-10-06T20:52:53", "url": "https://files.pythonhosted.org/packages/7c/18/7b96a402c6971bad01e7514e7abd5cf996057754f6ce3149b907cd2dbb97/augurlib-1.1.61.tar.gz" } ], "1.1.62": [ { "comment_text": "", "digests": { "md5": "0949870499e9daa08e4cbb51e7315326", "sha256": "6493c6739d735825b9b1796c9d1a7c34cb4d3eb74cea3429eac8f98b6c1ab9a2" }, "downloads": -1, "filename": "augurlib-1.1.62.tar.gz", "has_sig": false, "md5_digest": "0949870499e9daa08e4cbb51e7315326", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40880, "upload_time": "2018-10-07T14:01:10", "url": "https://files.pythonhosted.org/packages/f1/ec/ee5e2a8d4c65d3abf195550085b55d79a9ced24c317df7b00d6ae2e64b2b/augurlib-1.1.62.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0949870499e9daa08e4cbb51e7315326", "sha256": "6493c6739d735825b9b1796c9d1a7c34cb4d3eb74cea3429eac8f98b6c1ab9a2" }, "downloads": -1, "filename": "augurlib-1.1.62.tar.gz", "has_sig": false, "md5_digest": "0949870499e9daa08e4cbb51e7315326", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40880, "upload_time": "2018-10-07T14:01:10", "url": "https://files.pythonhosted.org/packages/f1/ec/ee5e2a8d4c65d3abf195550085b55d79a9ced24c317df7b00d6ae2e64b2b/augurlib-1.1.62.tar.gz" } ] }