diff --git a/docs/api/api_data.js b/docs/api/api_data.js index c88b981927..c3a4f8f9c1 100644 --- a/docs/api/api_data.js +++ b/docs/api/api_data.js @@ -1 +1 @@ -define({ "api": [ { "type": "post", "url": "/batch", "title": "Bus Factor", "description": "

Returns results of batch requests

", "name": "Batch", "group": "Batch_POST_JSON_of_api_requests", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Batch_POST_JSON_of_api_requests" }, { "type": "get", "url": "/:owner/:repo/committer_locations", "title": "Commits and Location by User", "name": "CommitterLocations", "description": "

Metric Undefined

", "group": "Diversity_Inclusion", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Diversity_Inclusion" }, { "type": "get", "url": "/:owner/:repo/linking_websites", "title": "Linking Websites", "name": "LinkingWebsites", "description": "

Returns an array of websites and their rank according to http://publicwww.com/

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"url\": \"missouri.edu\",\n \"rank\": \"1\"\n },\n {\n \"url\": \"unomaha.edu\",\n \"rank\": \"2\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/commits/comments", "title": "count of commit comments weekly", "name": "CommitComments", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"comments\":2.0\n },", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/commits?group_by=:group_by", "title": "Commits", "name": "Commits", "group": "Growth_Maturity_Decline", "description": "

/github.CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"commits\": 153\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"commits\": 192\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/community_age", "title": "Timeline of events to determine the age of a community", "name": "CommunityAge", "description": "

Metric Undefined

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/community_engagement", "title": "", "name": "Community_Engagement", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2009-04-01T00:00:00.000Z\",\n \"issues_opened\": 1.0,\n \"issues_closed\": 0.0,\n \"pull_requests_opened\": 0.0,\n \"pull_requests_merged\": 0.0,\n \"pull_requests_closed\": 0.0,\n \"issues_opened_total\": 2.0,\n \"issues_closed_total\": 0.0,\n \"issues_closed_rate_this_window\": 0.0,\n \"issues_closed_rate_total\": 0.0,\n \"issues_delta\": 1.0,\n \"issues_open\": 2.0,\n \"pull_requests_opened_total\": 0.0,\n \"pull_requests_closed_total\": 0.0,\n \"pull_requests_closed_rate_this_window\": null,\n \"pull_requests_closed_rate_total\": null,\n \"pull_requests_delta\": 0.0,\n \"pull_requests_open\": 0.0\n }, \n {\n \"date\": \"2009-04-16T00:00:00.000Z\",\n \"issues_opened\": 2.0,\n \"issues_closed\": 1.0,\n \"pull_requests_opened\": 1.0,\n \"pull_requests_merged\": 1.0,\n \"pull_requests_closed\": 1.0,\n \"issues_opened_total\": 3.0,\n \"issues_closed_total\": 5.0,\n \"issues_closed_rate_this_window\": 4.0,\n \"issues_closed_rate_total\": 6.0,\n \"issues_delta\": 1.0,\n \"issues_open\": 2.0,\n \"pull_requests_opened_total\": 3.0,\n \"pull_requests_closed_total\": 5.0,\n \"pull_requests_closed_rate_this_window\": null,\n \"pull_requests_closed_rate_total\": null,\n \"pull_requests_delta\": 2.0,\n \"pull_requests_open\": 1.0\n } \n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/dependents", "title": "List of dependants from libraries.io", "name": "Dependents", "description": "

Metric Undefined

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/downloads", "title": "Number of downloads", "description": "

Timeseries of downloads from package manager

", "name": "Downloads", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"downlads\": 235\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"dowloads\": 327\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/forks?group_by=:group_by", "title": "Forks", "name": "Forks", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "description": "

CHAOSS Metric Definition

", "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"forks\": 13\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"forks\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/response_time", "title": "Issue Response Time", "name": "IssueResponseTime", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"created_at\": \"2013-09-16T17:00:54.000Z\",\n \"responded_at\": \"2013-09-16T17:20:58.000Z\"\n },\n {\n \"created_at\": \"2013-09-16T09:31:34.000Z\",\n \"responded_at\": \"2013-09-16T09:43:03.000Z\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/activity", "title": "Issues Activity", "name": "Issues", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 0.0,\n \"action\": \"closed\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 2.0,\n \"action\": \"opened\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 8.0,\n \"action\": \"reopened\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 12.0,\n \"action\": \"open\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues", "title": "Issues", "name": "Issues", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "description": "

CHAOSS Metric Definition

", "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"issues\":13\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"issues\":15\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/issue_comment_time", "title": "", "name": "Issues", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"id\": 2,\n \"opened\": \"2012-01-19T05:24:55.000Z\",\n \"first_commented\": \"2012-01-19T05:30:13.000Z\",\n \"pull_request\": 0,\n \"minutes_to_comment\": 5.0\n },\n {\n \"id\": 3,\n \"opened\": \"2012-01-26T15:07:56.000Z\",\n \"first_commented\": \"2012-01-26T15:09:28.000Z\",\n \"pull_request\": 0,\n \"minutes_to_comment\": 1.0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/issue_close_time", "title": "Issue Close Time", "name": "Issues", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"id\": 136603,\n \"repo_id\": 1334,\n \"opened\": \"2010-09-08 19:09:56\",\n \"pull_request\": 1,\n \"minutes_to_close\": 1264.0,\n \"average_minutes_to_close_as_of_close\": 1264.0,\n \"average_minutes_to_close_past_30_days\": 1264.0,\n \"z-score\": -0.3152279792\n },\n {\n \"id\": 136602,\n \"repo_id\": 1334,\n \"opened\": \"2010-09-09 04:33:23\",\n \"pull_request\": 1,\n \"minutes_to_close\": 701.0,\n \"average_minutes_to_close_as_of_close\": 982.5,\n \"average_minutes_to_close_past_30_days\": 982.5,\n \"z-score\": -0.3184596776\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/closed", "title": "Issues Closed", "name": "Issues", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2011-03-19T00:00:00.000Z\",\n \"issues_closed\": 3\n },\n {\n \"date\": \"2011-03-20T00:00:00.000Z\",\n \"issues_closed\": 0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/lines_changed", "title": "Net number of lines of code changed", "description": "

CHAOSS Metric Definition

", "name": "LinesChanged", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n 'date': '2015-11-01T00:00:00Z', \n 'lines_changed': 396137.0\n },\n {\n 'date': '2015-11-08T00:00:00Z', \n 'lines_changed': 3896.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/tags/major", "title": "Tags for major releases timeseries", "description": "

Metric Undefined

", "name": "Major_Release_Tags", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"release\": 1.0.0\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"release\": 2.0.0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pulls/acceptance_rate", "title": "Pull Request Acceptance Rate by Week", "description": "

CHAOSS Metric Definition

", "name": "PullRequestAcceptanceRate", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"rate\": 0.5\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"rate\": 0.33\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pull_request_comments", "title": "count of new pull request comments weekly", "name": "PullRequestComments", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"comments\":2.0\n },", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pulls", "title": "Pull Requests by Week", "name": "PullRequestsByWeek", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"pull_requests\": 1\n \"comments\": 11\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"pull_requests\": 2\n \"comments\": 31\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/stargazers?group_by=:group_by", "title": "Stargazers", "name": "Stargazers", "group": "Growth_Maturity_Decline", "description": "

Metric Undefined

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"watchers\": 133\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"watchers\": 54\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/tags", "title": "Tags release timeseries", "description": "

Metric Undefined

", "name": "Tags", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"release\": 0.5\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"release\": 0.5.1\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/pulls/maintainer_response_time", "title": "Time to First Maintainer Response to Merge Request", "description": "

CHAOSS Metric Definition

", "name": "TimeToFirstMaintainerResponseToMergeRequest", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"response_time\":11044366.0\n },\n {\n \"response_time\":11044955.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/contributors", "title": "Total Contributions by User", "name": "TotalContributions", "description": "

CHAOSS Metric Definition

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"foo\",\n \"location\": \"Springfield\",\n \"commits\": 1337.0,\n \"pull_requests\": 60.0,\n \"issues\": null,\n \"commit_comments\": 158.0,\n \"pull_request_comments\": 718.0,\n \"issue_comments\": 1668.0\n },\n {\n \"login\": \"bar\",\n \"location\": null,\n \"commits\": 3968.0,\n \"pull_requests\": null,\n \"issues\": 12.0,\n \"commit_comments\": 158.0,\n \"pull_request_comments\": 718.0,\n \"issue_comments\": 1568.0\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/total_committers", "title": "count of new committers weekly", "name": "UniqueCommitters", "description": "

Metric Undefined

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"total_total_committers\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"total_total_committers\":2.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issue_comments", "title": "Count of New Comments", "name": "uniqueCommenters", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"total_unique_comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"total_unique_comments\":2.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/dependencies", "title": "List of dependencies from libraries.io", "name": "Dependencies", "description": "

Metric Undefined

", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"full_name\": \"rails/rails\"\n \"description\": \"Ruby on Rails\", \n \"fork\": false, \"created_at\": \"2008-04-11T02:19:47.000Z\", \n \"updated_at\": \"2017-09-20T20:16:47.181Z\", \n \"pushed_at\": \"2017-09-20T19:39:08.000Z\", \n \"homepage\": \"http://rubyonrails.org\", \n \"size\": 155199, \"stargazers_count\": 36993, \n \"language\": \"Ruby\", \"has_issues\": true, \n \"has_wiki\": false, \n \"has_pages\": false, \n \"forks_count\": 15130, \n \"mirror_url\": null, \n \"open_issues_count\": 1157, \n \"default_branch\": \"master\", \n \"subscribers_count\": 2452,\n \"uuid\": \"8514\", \"source_name\": null, \n \"license\": \"MIT\", \"private\": false, \n \"contributions_count\": 2616, \n \"has_readme\": \"README.md\", \n \"has_changelog\": null, \n \"has_contributing\": \"CONTRIBUTING.md\", \n \"has_license\": \"MIT-LICENSE\", \n \"has_coc\": \"CODE_OF_CONDUCT.md\", \n \"has_threat_model\": null, \n \"has_audit\": null, \n \"status\": null, \n \"last_synced_at\": \"2017-09-20T20:16:47.153Z\", \n \"rank\": 28, \"host_type\": \"GitHub\", \n \"host_domain\": null, \n \"name\": null, \n \"scm\": \"git\", \n \"fork_policy\": null,\n \"github_id\": \"8514\", \n \"pull_requests_enabled\": null, \n \"logo_url\": null, \n \"github_contributions_count\": 2616, \n \"keywords\": [\"activejob\", \"activerecord\", \"html\", \"mvc\", \"rails\", \"ruby\"], \n \"dependencies\": [\n { \"project_name\": \"websocket-driver\", \n \"name\": \"websocket-driver\", \n \"platform\": \"rubygems\", \n \"requirements\": \"~> 0.6.1\", \n \"latest_stable\": \"0.7.0\", \n \"latest\": \"0.7.0\", \n \"deprecated\": false, \"outdated\": true, \n \"filepath\": \"actioncable/actioncable.gemspec\", \"\n kind\": \"runtime\"\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/dependency_stats", "title": "List of libraries.io stats", "name": "DependencyStats", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"dependencies\": \"10\", \n \"dependent_projects\": \"10.6K\", \n \"dependent_repositories\": \"392K\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/bus_factor", "title": "Bus Factor", "name": "GitHub", "description": "

Returns an integer that is the number of developers that have a summed percentage of contributions higher than the threshold

", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"best\": \"5\",\n \"worst\": \"1\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/watchers", "title": "", "name": "Community_Engagement", "group": "Users", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"watchers\": 40349\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Users" }, { "type": "get", "url": "/ghtorrent_range", "title": "Range of dates covered by GHTorrent", "name": "GhtorrentRange", "group": "Utility", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Utility" }, { "type": "get", "url": "/", "title": "API Status", "name": "Status", "group": "Utility", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Utility" }, { "type": "get", "url": "/:owner/:repo/timeseries/contributions", "title": "Contributions by Week", "name": "ContributionsByWeek", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ], "String": [ { "group": "String", "optional": false, "field": "user", "description": "

Limit results to the given user's contributions

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"commits\": 37.0,\n \"pull_requests\": null,\n \"issues\": null,\n \"commit_comments\": 7.0,\n \"pull_request_comments\": 8.0,\n \"issue_comments\": 17.0\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"commits\": 68.0,\n \"pull_requests\": null,\n \"issues\": 12.0,\n \"commit_comments\": 18.0,\n \"pull_request_comments\": 13.0,\n \"issue_comments\": 28.0\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "group": "_Users_howderek_Projects_Python_augur_augur_server_py", "groupTitle": "_Users_howderek_Projects_Python_augur_augur_server_py" } ] }); +define({ "api": [ { "type": "get", "url": "/:owner/:repo/bus_factor", "title": "Bus Factor", "name": "GitHub", "description": "

Returns an integer that is the number of developers that have a summed percentage of contributions higher than the threshold

", "group": "Activity", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"best\": \"5\",\n \"worst\": \"1\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Activity" }, { "type": "get", "url": "/:owner/:repo/timeseries/issue_comments", "title": "Count of New Comments", "name": "uniqueCommenters", "group": "Activity", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"total_unique_comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"total_unique_comments\":2.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Activity" }, { "type": "post", "url": "/batch", "title": "Bus Factor", "description": "

Returns results of batch requests

", "name": "Batch", "group": "Batch_POST_JSON_of_api_requests", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Batch_POST_JSON_of_api_requests" }, { "type": "get", "url": "/:owner/:repo/committer_locations", "title": "Commits and Location by User", "name": "CommitterLocations", "description": "

Metric Undefined

", "group": "Diversity_Inclusion", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Diversity_Inclusion" }, { "type": "get", "url": "/:owner/:repo/timeseries/commits/comments", "title": "count of commit comments weekly", "name": "CommitComments", "group": "Experimental", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"comments\":2.0\n },", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/community_age", "title": "Timeline of events to determine the age of a community", "name": "CommunityAge", "description": "

Metric Undefined

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/community_engagement", "title": "", "name": "Community_Engagement", "group": "Experimental", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2009-04-01T00:00:00.000Z\",\n \"issues_opened\": 1.0,\n \"issues_closed\": 0.0,\n \"pull_requests_opened\": 0.0,\n \"pull_requests_merged\": 0.0,\n \"pull_requests_closed\": 0.0,\n \"issues_opened_total\": 2.0,\n \"issues_closed_total\": 0.0,\n \"issues_closed_rate_this_window\": 0.0,\n \"issues_closed_rate_total\": 0.0,\n \"issues_delta\": 1.0,\n \"issues_open\": 2.0,\n \"pull_requests_opened_total\": 0.0,\n \"pull_requests_closed_total\": 0.0,\n \"pull_requests_closed_rate_this_window\": null,\n \"pull_requests_closed_rate_total\": null,\n \"pull_requests_delta\": 0.0,\n \"pull_requests_open\": 0.0\n },\n {\n \"date\": \"2009-04-16T00:00:00.000Z\",\n \"issues_opened\": 2.0,\n \"issues_closed\": 1.0,\n \"pull_requests_opened\": 1.0,\n \"pull_requests_merged\": 1.0,\n \"pull_requests_closed\": 1.0,\n \"issues_opened_total\": 3.0,\n \"issues_closed_total\": 5.0,\n \"issues_closed_rate_this_window\": 4.0,\n \"issues_closed_rate_total\": 6.0,\n \"issues_delta\": 1.0,\n \"issues_open\": 2.0,\n \"pull_requests_opened_total\": 3.0,\n \"pull_requests_closed_total\": 5.0,\n \"pull_requests_closed_rate_this_window\": null,\n \"pull_requests_closed_rate_total\": null,\n \"pull_requests_delta\": 2.0,\n \"pull_requests_open\": 1.0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/dependents", "title": "List of dependants from libraries.io", "name": "Dependents", "description": "

Metric Undefined

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/downloads", "title": "Number of downloads", "description": "

Timeseries of downloads from package manager

", "name": "Downloads", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"downlads\": 235\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"dowloads\": 327\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/issue_close_time", "title": "Issue Close Time", "name": "Issues", "group": "Experimental", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"id\": 136603,\n \"repo_id\": 1334,\n \"opened\": \"2010-09-08 19:09:56\",\n \"pull_request\": 1,\n \"minutes_to_close\": 1264.0,\n \"average_minutes_to_close_as_of_close\": 1264.0,\n \"average_minutes_to_close_past_30_days\": 1264.0,\n \"z-score\": -0.3152279792\n },\n {\n \"id\": 136602,\n \"repo_id\": 1334,\n \"opened\": \"2010-09-09 04:33:23\",\n \"pull_request\": 1,\n \"minutes_to_close\": 701.0,\n \"average_minutes_to_close_as_of_close\": 982.5,\n \"average_minutes_to_close_past_30_days\": 982.5,\n \"z-score\": -0.3184596776\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/activity", "title": "Issues Activity", "name": "Issues", "group": "Experimental", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 0.0,\n \"action\": \"closed\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 2.0,\n \"action\": \"opened\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 8.0,\n \"action\": \"reopened\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 12.0,\n \"action\": \"open\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/lines_changed", "title": "Net number of lines of code changed", "description": "

CHAOSS Metric Definition

", "name": "LinesChanged", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n 'date': '2015-11-01T00:00:00Z',\n 'lines_changed': 396137.0\n },\n {\n 'date': '2015-11-08T00:00:00Z',\n 'lines_changed': 3896.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/linking_websites", "title": "Linking Websites", "name": "LinkingWebsites", "description": "

Returns an array of websites and their rank according to http://publicwww.com/

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"url\": \"missouri.edu\",\n \"rank\": \"1\"\n },\n {\n \"url\": \"unomaha.edu\",\n \"rank\": \"2\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/tags/major", "title": "Tags for major releases timeseries", "description": "

Metric Undefined

", "name": "Major_Release_Tags", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"release\": 1.0.0\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"release\": 2.0.0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/pulls/acceptance_rate", "title": "Pull Request Acceptance Rate by Week", "description": "

CHAOSS Metric Definition

", "name": "PullRequestAcceptanceRate", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"rate\": 0.5\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"rate\": 0.33\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/tags", "title": "Tags release timeseries", "description": "

Metric Undefined

", "name": "Tags", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"release\": 0.5\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"release\": 0.5.1\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/contributors", "title": "Total Contributions by User", "name": "TotalContributions", "description": "

CHAOSS Metric Definition

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"foo\",\n \"location\": \"Springfield\",\n \"commits\": 1337.0,\n \"pull_requests\": 60.0,\n \"issues\": null,\n \"commit_comments\": 158.0,\n \"pull_request_comments\": 718.0,\n \"issue_comments\": 1668.0\n },\n {\n \"login\": \"bar\",\n \"location\": null,\n \"commits\": 3968.0,\n \"pull_requests\": null,\n \"issues\": 12.0,\n \"commit_comments\": 158.0,\n \"pull_request_comments\": 718.0,\n \"issue_comments\": 1568.0\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/commits?group_by=:group_by", "title": "Commits", "name": "Commits", "group": "Growth_Maturity_Decline", "description": "

/github.CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"commits\": 153\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"commits\": 192\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/forks?group_by=:group_by", "title": "Forks", "name": "Forks", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "description": "

CHAOSS Metric Definition

", "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"forks\": 13\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"forks\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/response_time", "title": "Issue Response Time", "name": "IssueResponseTime", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"created_at\": \"2013-09-16T17:00:54.000Z\",\n \"responded_at\": \"2013-09-16T17:20:58.000Z\"\n },\n {\n \"created_at\": \"2013-09-16T09:31:34.000Z\",\n \"responded_at\": \"2013-09-16T09:43:03.000Z\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues", "title": "Issues", "name": "Issues", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "description": "

CHAOSS Metric Definition

", "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"issues\":13\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"issues\":15\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/closed", "title": "Issues Closed", "name": "Issues", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2011-03-19T00:00:00.000Z\",\n \"issues_closed\": 3\n },\n {\n \"date\": \"2011-03-20T00:00:00.000Z\",\n \"issues_closed\": 0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pull_request_comments", "title": "count of new pull request comments weekly", "name": "PullRequestComments", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"comments\":2.0\n },", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pulls", "title": "Pull Requests by Week", "name": "PullRequestsByWeek", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"pull_requests\": 1\n \"comments\": 11\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"pull_requests\": 2\n \"comments\": 31\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/pulls/maintainer_response_time", "title": "Time to First Maintainer Response to Merge Request", "description": "

CHAOSS Metric Definition

", "name": "TimeToFirstMaintainerResponseToMergeRequest", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"response_time\":11044366.0\n },\n {\n \"response_time\":11044955.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/total_committers", "title": "count of new committers weekly", "name": "UniqueCommitters", "description": "

Metric Undefined

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"total_total_committers\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"total_total_committers\":2.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/dependencies", "title": "List of dependencies from libraries.io", "name": "Dependencies", "description": "

Metric Undefined

", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"full_name\": \"rails/rails\"\n \"description\": \"Ruby on Rails\",\n \"fork\": false, \"created_at\": \"2008-04-11T02:19:47.000Z\",\n \"updated_at\": \"2017-09-20T20:16:47.181Z\",\n \"pushed_at\": \"2017-09-20T19:39:08.000Z\",\n \"homepage\": \"http://rubyonrails.org\",\n \"size\": 155199, \"stargazers_count\": 36993,\n \"language\": \"Ruby\", \"has_issues\": true,\n \"has_wiki\": false,\n \"has_pages\": false,\n \"forks_count\": 15130,\n \"mirror_url\": null,\n \"open_issues_count\": 1157,\n \"default_branch\": \"master\",\n \"subscribers_count\": 2452,\n \"uuid\": \"8514\", \"source_name\": null,\n \"license\": \"MIT\", \"private\": false,\n \"contributions_count\": 2616,\n \"has_readme\": \"README.md\",\n \"has_changelog\": null,\n \"has_contributing\": \"CONTRIBUTING.md\",\n \"has_license\": \"MIT-LICENSE\",\n \"has_coc\": \"CODE_OF_CONDUCT.md\",\n \"has_threat_model\": null,\n \"has_audit\": null,\n \"status\": null,\n \"last_synced_at\": \"2017-09-20T20:16:47.153Z\",\n \"rank\": 28, \"host_type\": \"GitHub\",\n \"host_domain\": null,\n \"name\": null,\n \"scm\": \"git\",\n \"fork_policy\": null,\n \"github_id\": \"8514\",\n \"pull_requests_enabled\": null,\n \"logo_url\": null,\n \"github_contributions_count\": 2616,\n \"keywords\": [\"activejob\", \"activerecord\", \"html\", \"mvc\", \"rails\", \"ruby\"],\n \"dependencies\": [\n { \"project_name\": \"websocket-driver\",\n \"name\": \"websocket-driver\",\n \"platform\": \"rubygems\",\n \"requirements\": \"~> 0.6.1\",\n \"latest_stable\": \"0.7.0\",\n \"latest\": \"0.7.0\",\n \"deprecated\": false, \"outdated\": true,\n \"filepath\": \"actioncable/actioncable.gemspec\", \"\n kind\": \"runtime\"\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/dependency_stats", "title": "List of libraries.io stats", "name": "DependencyStats", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"dependencies\": \"10\",\n \"dependent_projects\": \"10.6K\",\n \"dependent_repositories\": \"392K\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/bus_factor", "title": "Bus Factor", "name": "GitHub", "description": "

Returns an integer that is the number of developers that have a summed percentage of contributions higher than the threshold

", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"best\": \"5\",\n \"worst\": \"1\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/git/lines_changed/:git_repo_url", "title": "Lines Changed", "name": "Lines_Changed__no_whitespace_", "description": "

Shows detailed information about each file changed by each commit

", "group": "Uncategorized", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"additions\":2,\n \"author_date\":\"2018-05-14 10:09:57 -0500\",\n \"author_email\":\"s@goggins.com\",\n \"author_name\":\"Sean P. Goggins\",\n \"commit_date\":\"2018-05-16 10:12:22 -0500\",\n \"committer_email\":\"derek@howderek.com\",\n \"committer_name\":\"Derek Howard\",\n \"deletions\":0,\n \"hash\":\"77e603a\",\n \"message\":\"merge dev\",\n \"parents\":\"b8ec0ed\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Uncategorized" }, { "type": "get", "url": "/git/lines_changed/:git_repo_url", "title": "Lines Changed", "name": "Lines_Changed__no_whitespace_", "description": "

Shows detailed information about each file changed by each commit

", "group": "Uncategorized", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"additions\":2,\n \"author_date\":\"2018-05-14 10:09:57 -0500\",\n \"author_email\":\"s@goggins.com\",\n \"author_name\":\"Sean P. Goggins\",\n \"commit_date\":\"2018-05-16 10:12:22 -0500\",\n \"committer_email\":\"derek@howderek.com\",\n \"committer_name\":\"Derek Howard\",\n \"deletions\":0,\"hash\":\"77e603a\",\n \"message\":\"merge dev\",\n \"parents\":\"b8ec0ed\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Uncategorized" }, { "type": "get", "url": "/:owner/:repo/watchers", "title": "", "name": "Community_Engagement", "group": "Users", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"watchers\": 40349\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Users" }, { "type": "get", "url": "/ghtorrent_range", "title": "Range of dates covered by GHTorrent", "name": "GhtorrentRange", "group": "Utility", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Utility" }, { "type": "get", "url": "/:owner/:repo/timeseries/contributions", "title": "Contributions by Week", "name": "ContributionsByWeek", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ], "String": [ { "group": "String", "optional": false, "field": "user", "description": "

Limit results to the given user's contributions

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"commits\": 37.0,\n \"pull_requests\": null,\n \"issues\": null,\n \"commit_comments\": 7.0,\n \"pull_request_comments\": 8.0,\n \"issue_comments\": 17.0\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"commits\": 68.0,\n \"pull_requests\": null,\n \"issues\": 12.0,\n \"commit_comments\": 18.0,\n \"pull_request_comments\": 13.0,\n \"issue_comments\": 28.0\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "group": "_Volumes_SeansRAIDBaby_augur_augur_server_py", "groupTitle": "_Volumes_SeansRAIDBaby_augur_augur_server_py" } ] }); diff --git a/docs/api/api_data.json b/docs/api/api_data.json index 936db0d855..24413edb53 100644 --- a/docs/api/api_data.json +++ b/docs/api/api_data.json @@ -1 +1 @@ -[ { "type": "post", "url": "/batch", "title": "Bus Factor", "description": "

Returns results of batch requests

", "name": "Batch", "group": "Batch_POST_JSON_of_api_requests", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Batch_POST_JSON_of_api_requests" }, { "type": "get", "url": "/:owner/:repo/committer_locations", "title": "Commits and Location by User", "name": "CommitterLocations", "description": "

Metric Undefined

", "group": "Diversity_Inclusion", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Diversity_Inclusion" }, { "type": "get", "url": "/:owner/:repo/linking_websites", "title": "Linking Websites", "name": "LinkingWebsites", "description": "

Returns an array of websites and their rank according to http://publicwww.com/

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"url\": \"missouri.edu\",\n \"rank\": \"1\"\n },\n {\n \"url\": \"unomaha.edu\",\n \"rank\": \"2\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/commits/comments", "title": "count of commit comments weekly", "name": "CommitComments", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"comments\":2.0\n },", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/commits?group_by=:group_by", "title": "Commits", "name": "Commits", "group": "Growth_Maturity_Decline", "description": "

/github.CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"commits\": 153\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"commits\": 192\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/community_age", "title": "Timeline of events to determine the age of a community", "name": "CommunityAge", "description": "

Metric Undefined

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/community_engagement", "title": "", "name": "Community_Engagement", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2009-04-01T00:00:00.000Z\",\n \"issues_opened\": 1.0,\n \"issues_closed\": 0.0,\n \"pull_requests_opened\": 0.0,\n \"pull_requests_merged\": 0.0,\n \"pull_requests_closed\": 0.0,\n \"issues_opened_total\": 2.0,\n \"issues_closed_total\": 0.0,\n \"issues_closed_rate_this_window\": 0.0,\n \"issues_closed_rate_total\": 0.0,\n \"issues_delta\": 1.0,\n \"issues_open\": 2.0,\n \"pull_requests_opened_total\": 0.0,\n \"pull_requests_closed_total\": 0.0,\n \"pull_requests_closed_rate_this_window\": null,\n \"pull_requests_closed_rate_total\": null,\n \"pull_requests_delta\": 0.0,\n \"pull_requests_open\": 0.0\n }, \n {\n \"date\": \"2009-04-16T00:00:00.000Z\",\n \"issues_opened\": 2.0,\n \"issues_closed\": 1.0,\n \"pull_requests_opened\": 1.0,\n \"pull_requests_merged\": 1.0,\n \"pull_requests_closed\": 1.0,\n \"issues_opened_total\": 3.0,\n \"issues_closed_total\": 5.0,\n \"issues_closed_rate_this_window\": 4.0,\n \"issues_closed_rate_total\": 6.0,\n \"issues_delta\": 1.0,\n \"issues_open\": 2.0,\n \"pull_requests_opened_total\": 3.0,\n \"pull_requests_closed_total\": 5.0,\n \"pull_requests_closed_rate_this_window\": null,\n \"pull_requests_closed_rate_total\": null,\n \"pull_requests_delta\": 2.0,\n \"pull_requests_open\": 1.0\n } \n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/dependents", "title": "List of dependants from libraries.io", "name": "Dependents", "description": "

Metric Undefined

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/downloads", "title": "Number of downloads", "description": "

Timeseries of downloads from package manager

", "name": "Downloads", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"downlads\": 235\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"dowloads\": 327\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/forks?group_by=:group_by", "title": "Forks", "name": "Forks", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "description": "

CHAOSS Metric Definition

", "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"forks\": 13\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"forks\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/response_time", "title": "Issue Response Time", "name": "IssueResponseTime", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"created_at\": \"2013-09-16T17:00:54.000Z\",\n \"responded_at\": \"2013-09-16T17:20:58.000Z\"\n },\n {\n \"created_at\": \"2013-09-16T09:31:34.000Z\",\n \"responded_at\": \"2013-09-16T09:43:03.000Z\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/activity", "title": "Issues Activity", "name": "Issues", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 0.0,\n \"action\": \"closed\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 2.0,\n \"action\": \"opened\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 8.0,\n \"action\": \"reopened\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 12.0,\n \"action\": \"open\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues", "title": "Issues", "name": "Issues", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "description": "

CHAOSS Metric Definition

", "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"issues\":13\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"issues\":15\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/issue_comment_time", "title": "", "name": "Issues", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"id\": 2,\n \"opened\": \"2012-01-19T05:24:55.000Z\",\n \"first_commented\": \"2012-01-19T05:30:13.000Z\",\n \"pull_request\": 0,\n \"minutes_to_comment\": 5.0\n },\n {\n \"id\": 3,\n \"opened\": \"2012-01-26T15:07:56.000Z\",\n \"first_commented\": \"2012-01-26T15:09:28.000Z\",\n \"pull_request\": 0,\n \"minutes_to_comment\": 1.0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/issue_close_time", "title": "Issue Close Time", "name": "Issues", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"id\": 136603,\n \"repo_id\": 1334,\n \"opened\": \"2010-09-08 19:09:56\",\n \"pull_request\": 1,\n \"minutes_to_close\": 1264.0,\n \"average_minutes_to_close_as_of_close\": 1264.0,\n \"average_minutes_to_close_past_30_days\": 1264.0,\n \"z-score\": -0.3152279792\n },\n {\n \"id\": 136602,\n \"repo_id\": 1334,\n \"opened\": \"2010-09-09 04:33:23\",\n \"pull_request\": 1,\n \"minutes_to_close\": 701.0,\n \"average_minutes_to_close_as_of_close\": 982.5,\n \"average_minutes_to_close_past_30_days\": 982.5,\n \"z-score\": -0.3184596776\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/closed", "title": "Issues Closed", "name": "Issues", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2011-03-19T00:00:00.000Z\",\n \"issues_closed\": 3\n },\n {\n \"date\": \"2011-03-20T00:00:00.000Z\",\n \"issues_closed\": 0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/lines_changed", "title": "Net number of lines of code changed", "description": "

CHAOSS Metric Definition

", "name": "LinesChanged", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n 'date': '2015-11-01T00:00:00Z', \n 'lines_changed': 396137.0\n },\n {\n 'date': '2015-11-08T00:00:00Z', \n 'lines_changed': 3896.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/tags/major", "title": "Tags for major releases timeseries", "description": "

Metric Undefined

", "name": "Major_Release_Tags", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"release\": 1.0.0\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"release\": 2.0.0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pulls/acceptance_rate", "title": "Pull Request Acceptance Rate by Week", "description": "

CHAOSS Metric Definition

", "name": "PullRequestAcceptanceRate", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"rate\": 0.5\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"rate\": 0.33\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pull_request_comments", "title": "count of new pull request comments weekly", "name": "PullRequestComments", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"comments\":2.0\n },", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pulls", "title": "Pull Requests by Week", "name": "PullRequestsByWeek", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"pull_requests\": 1\n \"comments\": 11\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"pull_requests\": 2\n \"comments\": 31\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/stargazers?group_by=:group_by", "title": "Stargazers", "name": "Stargazers", "group": "Growth_Maturity_Decline", "description": "

Metric Undefined

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"watchers\": 133\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"watchers\": 54\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/tags", "title": "Tags release timeseries", "description": "

Metric Undefined

", "name": "Tags", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"release\": 0.5\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"release\": 0.5.1\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/pulls/maintainer_response_time", "title": "Time to First Maintainer Response to Merge Request", "description": "

CHAOSS Metric Definition

", "name": "TimeToFirstMaintainerResponseToMergeRequest", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"response_time\":11044366.0\n },\n {\n \"response_time\":11044955.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/contributors", "title": "Total Contributions by User", "name": "TotalContributions", "description": "

CHAOSS Metric Definition

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"foo\",\n \"location\": \"Springfield\",\n \"commits\": 1337.0,\n \"pull_requests\": 60.0,\n \"issues\": null,\n \"commit_comments\": 158.0,\n \"pull_request_comments\": 718.0,\n \"issue_comments\": 1668.0\n },\n {\n \"login\": \"bar\",\n \"location\": null,\n \"commits\": 3968.0,\n \"pull_requests\": null,\n \"issues\": 12.0,\n \"commit_comments\": 158.0,\n \"pull_request_comments\": 718.0,\n \"issue_comments\": 1568.0\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/total_committers", "title": "count of new committers weekly", "name": "UniqueCommitters", "description": "

Metric Undefined

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"total_total_committers\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"total_total_committers\":2.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issue_comments", "title": "Count of New Comments", "name": "uniqueCommenters", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"total_unique_comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"total_unique_comments\":2.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/dependencies", "title": "List of dependencies from libraries.io", "name": "Dependencies", "description": "

Metric Undefined

", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"full_name\": \"rails/rails\"\n \"description\": \"Ruby on Rails\", \n \"fork\": false, \"created_at\": \"2008-04-11T02:19:47.000Z\", \n \"updated_at\": \"2017-09-20T20:16:47.181Z\", \n \"pushed_at\": \"2017-09-20T19:39:08.000Z\", \n \"homepage\": \"http://rubyonrails.org\", \n \"size\": 155199, \"stargazers_count\": 36993, \n \"language\": \"Ruby\", \"has_issues\": true, \n \"has_wiki\": false, \n \"has_pages\": false, \n \"forks_count\": 15130, \n \"mirror_url\": null, \n \"open_issues_count\": 1157, \n \"default_branch\": \"master\", \n \"subscribers_count\": 2452,\n \"uuid\": \"8514\", \"source_name\": null, \n \"license\": \"MIT\", \"private\": false, \n \"contributions_count\": 2616, \n \"has_readme\": \"README.md\", \n \"has_changelog\": null, \n \"has_contributing\": \"CONTRIBUTING.md\", \n \"has_license\": \"MIT-LICENSE\", \n \"has_coc\": \"CODE_OF_CONDUCT.md\", \n \"has_threat_model\": null, \n \"has_audit\": null, \n \"status\": null, \n \"last_synced_at\": \"2017-09-20T20:16:47.153Z\", \n \"rank\": 28, \"host_type\": \"GitHub\", \n \"host_domain\": null, \n \"name\": null, \n \"scm\": \"git\", \n \"fork_policy\": null,\n \"github_id\": \"8514\", \n \"pull_requests_enabled\": null, \n \"logo_url\": null, \n \"github_contributions_count\": 2616, \n \"keywords\": [\"activejob\", \"activerecord\", \"html\", \"mvc\", \"rails\", \"ruby\"], \n \"dependencies\": [\n { \"project_name\": \"websocket-driver\", \n \"name\": \"websocket-driver\", \n \"platform\": \"rubygems\", \n \"requirements\": \"~> 0.6.1\", \n \"latest_stable\": \"0.7.0\", \n \"latest\": \"0.7.0\", \n \"deprecated\": false, \"outdated\": true, \n \"filepath\": \"actioncable/actioncable.gemspec\", \"\n kind\": \"runtime\"\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/dependency_stats", "title": "List of libraries.io stats", "name": "DependencyStats", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"dependencies\": \"10\", \n \"dependent_projects\": \"10.6K\", \n \"dependent_repositories\": \"392K\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/bus_factor", "title": "Bus Factor", "name": "GitHub", "description": "

Returns an integer that is the number of developers that have a summed percentage of contributions higher than the threshold

", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"best\": \"5\",\n \"worst\": \"1\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/watchers", "title": "", "name": "Community_Engagement", "group": "Users", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"watchers\": 40349\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Users" }, { "type": "get", "url": "/ghtorrent_range", "title": "Range of dates covered by GHTorrent", "name": "GhtorrentRange", "group": "Utility", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Utility" }, { "type": "get", "url": "/", "title": "API Status", "name": "Status", "group": "Utility", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Utility" }, { "type": "get", "url": "/:owner/:repo/timeseries/contributions", "title": "Contributions by Week", "name": "ContributionsByWeek", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ], "String": [ { "group": "String", "optional": false, "field": "user", "description": "

Limit results to the given user's contributions

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"commits\": 37.0,\n \"pull_requests\": null,\n \"issues\": null,\n \"commit_comments\": 7.0,\n \"pull_request_comments\": 8.0,\n \"issue_comments\": 17.0\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"commits\": 68.0,\n \"pull_requests\": null,\n \"issues\": 12.0,\n \"commit_comments\": 18.0,\n \"pull_request_comments\": 13.0,\n \"issue_comments\": 28.0\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "group": "_Users_howderek_Projects_Python_augur_augur_server_py", "groupTitle": "_Users_howderek_Projects_Python_augur_augur_server_py" } ] +[ { "type": "get", "url": "/:owner/:repo/bus_factor", "title": "Bus Factor", "name": "GitHub", "description": "

Returns an integer that is the number of developers that have a summed percentage of contributions higher than the threshold

", "group": "Activity", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"best\": \"5\",\n \"worst\": \"1\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Activity" }, { "type": "get", "url": "/:owner/:repo/timeseries/issue_comments", "title": "Count of New Comments", "name": "uniqueCommenters", "group": "Activity", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"total_unique_comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"total_unique_comments\":2.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Activity" }, { "type": "post", "url": "/batch", "title": "Bus Factor", "description": "

Returns results of batch requests

", "name": "Batch", "group": "Batch_POST_JSON_of_api_requests", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Batch_POST_JSON_of_api_requests" }, { "type": "get", "url": "/:owner/:repo/committer_locations", "title": "Commits and Location by User", "name": "CommitterLocations", "description": "

Metric Undefined

", "group": "Diversity_Inclusion", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Diversity_Inclusion" }, { "type": "get", "url": "/:owner/:repo/timeseries/commits/comments", "title": "count of commit comments weekly", "name": "CommitComments", "group": "Experimental", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"comments\":2.0\n },", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/community_age", "title": "Timeline of events to determine the age of a community", "name": "CommunityAge", "description": "

Metric Undefined

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/community_engagement", "title": "", "name": "Community_Engagement", "group": "Experimental", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2009-04-01T00:00:00.000Z\",\n \"issues_opened\": 1.0,\n \"issues_closed\": 0.0,\n \"pull_requests_opened\": 0.0,\n \"pull_requests_merged\": 0.0,\n \"pull_requests_closed\": 0.0,\n \"issues_opened_total\": 2.0,\n \"issues_closed_total\": 0.0,\n \"issues_closed_rate_this_window\": 0.0,\n \"issues_closed_rate_total\": 0.0,\n \"issues_delta\": 1.0,\n \"issues_open\": 2.0,\n \"pull_requests_opened_total\": 0.0,\n \"pull_requests_closed_total\": 0.0,\n \"pull_requests_closed_rate_this_window\": null,\n \"pull_requests_closed_rate_total\": null,\n \"pull_requests_delta\": 0.0,\n \"pull_requests_open\": 0.0\n },\n {\n \"date\": \"2009-04-16T00:00:00.000Z\",\n \"issues_opened\": 2.0,\n \"issues_closed\": 1.0,\n \"pull_requests_opened\": 1.0,\n \"pull_requests_merged\": 1.0,\n \"pull_requests_closed\": 1.0,\n \"issues_opened_total\": 3.0,\n \"issues_closed_total\": 5.0,\n \"issues_closed_rate_this_window\": 4.0,\n \"issues_closed_rate_total\": 6.0,\n \"issues_delta\": 1.0,\n \"issues_open\": 2.0,\n \"pull_requests_opened_total\": 3.0,\n \"pull_requests_closed_total\": 5.0,\n \"pull_requests_closed_rate_this_window\": null,\n \"pull_requests_closed_rate_total\": null,\n \"pull_requests_delta\": 2.0,\n \"pull_requests_open\": 1.0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/dependents", "title": "List of dependants from libraries.io", "name": "Dependents", "description": "

Metric Undefined

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"bonnie\",\n \"location\": \"Rowena, TX\",\n \"commits\": 12\n },\n {\n \"login\":\"clyde\",\n \"location\":\"Ellis County, TX\",\n \"commits\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/downloads", "title": "Number of downloads", "description": "

Timeseries of downloads from package manager

", "name": "Downloads", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"downlads\": 235\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"dowloads\": 327\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/issue_close_time", "title": "Issue Close Time", "name": "Issues", "group": "Experimental", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"id\": 136603,\n \"repo_id\": 1334,\n \"opened\": \"2010-09-08 19:09:56\",\n \"pull_request\": 1,\n \"minutes_to_close\": 1264.0,\n \"average_minutes_to_close_as_of_close\": 1264.0,\n \"average_minutes_to_close_past_30_days\": 1264.0,\n \"z-score\": -0.3152279792\n },\n {\n \"id\": 136602,\n \"repo_id\": 1334,\n \"opened\": \"2010-09-09 04:33:23\",\n \"pull_request\": 1,\n \"minutes_to_close\": 701.0,\n \"average_minutes_to_close_as_of_close\": 982.5,\n \"average_minutes_to_close_past_30_days\": 982.5,\n \"z-score\": -0.3184596776\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/activity", "title": "Issues Activity", "name": "Issues", "group": "Experimental", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 0.0,\n \"action\": \"closed\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 2.0,\n \"action\": \"opened\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 8.0,\n \"action\": \"reopened\"\n },\n {\n \"date\": \"2010-12-23T00:00:00.000Z\",\n \"count\": 12.0,\n \"action\": \"open\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/lines_changed", "title": "Net number of lines of code changed", "description": "

CHAOSS Metric Definition

", "name": "LinesChanged", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n 'date': '2015-11-01T00:00:00Z',\n 'lines_changed': 396137.0\n },\n {\n 'date': '2015-11-08T00:00:00Z',\n 'lines_changed': 3896.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/linking_websites", "title": "Linking Websites", "name": "LinkingWebsites", "description": "

Returns an array of websites and their rank according to http://publicwww.com/

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"url\": \"missouri.edu\",\n \"rank\": \"1\"\n },\n {\n \"url\": \"unomaha.edu\",\n \"rank\": \"2\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/tags/major", "title": "Tags for major releases timeseries", "description": "

Metric Undefined

", "name": "Major_Release_Tags", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"release\": 1.0.0\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"release\": 2.0.0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/pulls/acceptance_rate", "title": "Pull Request Acceptance Rate by Week", "description": "

CHAOSS Metric Definition

", "name": "PullRequestAcceptanceRate", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"rate\": 0.5\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"rate\": 0.33\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/tags", "title": "Tags release timeseries", "description": "

Metric Undefined

", "name": "Tags", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"release\": 0.5\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"release\": 0.5.1\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/contributors", "title": "Total Contributions by User", "name": "TotalContributions", "description": "

CHAOSS Metric Definition

", "group": "Experimental", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"login\": \"foo\",\n \"location\": \"Springfield\",\n \"commits\": 1337.0,\n \"pull_requests\": 60.0,\n \"issues\": null,\n \"commit_comments\": 158.0,\n \"pull_request_comments\": 718.0,\n \"issue_comments\": 1668.0\n },\n {\n \"login\": \"bar\",\n \"location\": null,\n \"commits\": 3968.0,\n \"pull_requests\": null,\n \"issues\": 12.0,\n \"commit_comments\": 158.0,\n \"pull_request_comments\": 718.0,\n \"issue_comments\": 1568.0\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Experimental" }, { "type": "get", "url": "/:owner/:repo/timeseries/commits?group_by=:group_by", "title": "Commits", "name": "Commits", "group": "Growth_Maturity_Decline", "description": "

/github.CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"commits\": 153\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"commits\": 192\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/forks?group_by=:group_by", "title": "Forks", "name": "Forks", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "description": "

CHAOSS Metric Definition

", "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"forks\": 13\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"forks\": 12\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/response_time", "title": "Issue Response Time", "name": "IssueResponseTime", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"created_at\": \"2013-09-16T17:00:54.000Z\",\n \"responded_at\": \"2013-09-16T17:20:58.000Z\"\n },\n {\n \"created_at\": \"2013-09-16T09:31:34.000Z\",\n \"responded_at\": \"2013-09-16T09:43:03.000Z\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues", "title": "Issues", "name": "Issues", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "group_by", "description": "

(Default to week) Allows for results to be grouped by day, week, month, or year

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "description": "

CHAOSS Metric Definition

", "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"issues\":13\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"issues\":15\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/issues/closed", "title": "Issues Closed", "name": "Issues", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2011-03-19T00:00:00.000Z\",\n \"issues_closed\": 3\n },\n {\n \"date\": \"2011-03-20T00:00:00.000Z\",\n \"issues_closed\": 0\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pull_request_comments", "title": "count of new pull request comments weekly", "name": "PullRequestComments", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"comments\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"comments\":2.0\n },", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/pulls", "title": "Pull Requests by Week", "name": "PullRequestsByWeek", "group": "Growth_Maturity_Decline", "description": "

CHAOSS Metric Definition

", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"pull_requests\": 1\n \"comments\": 11\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"pull_requests\": 2\n \"comments\": 31\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/pulls/maintainer_response_time", "title": "Time to First Maintainer Response to Merge Request", "description": "

CHAOSS Metric Definition

", "name": "TimeToFirstMaintainerResponseToMergeRequest", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"response_time\":11044366.0\n },\n {\n \"response_time\":11044955.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/timeseries/total_committers", "title": "count of new committers weekly", "name": "UniqueCommitters", "description": "

Metric Undefined

", "group": "Growth_Maturity_Decline", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"date\":\"2009-02-16T00:00:00.000Z\",\n \"total_total_committers\":1.0\n },\n { \"date\":\"2009-07-12T00:00:00.000Z\",\n \"total_total_committers\":2.0\n },\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Growth_Maturity_Decline" }, { "type": "get", "url": "/:owner/:repo/dependencies", "title": "List of dependencies from libraries.io", "name": "Dependencies", "description": "

Metric Undefined

", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n { \"full_name\": \"rails/rails\"\n \"description\": \"Ruby on Rails\",\n \"fork\": false, \"created_at\": \"2008-04-11T02:19:47.000Z\",\n \"updated_at\": \"2017-09-20T20:16:47.181Z\",\n \"pushed_at\": \"2017-09-20T19:39:08.000Z\",\n \"homepage\": \"http://rubyonrails.org\",\n \"size\": 155199, \"stargazers_count\": 36993,\n \"language\": \"Ruby\", \"has_issues\": true,\n \"has_wiki\": false,\n \"has_pages\": false,\n \"forks_count\": 15130,\n \"mirror_url\": null,\n \"open_issues_count\": 1157,\n \"default_branch\": \"master\",\n \"subscribers_count\": 2452,\n \"uuid\": \"8514\", \"source_name\": null,\n \"license\": \"MIT\", \"private\": false,\n \"contributions_count\": 2616,\n \"has_readme\": \"README.md\",\n \"has_changelog\": null,\n \"has_contributing\": \"CONTRIBUTING.md\",\n \"has_license\": \"MIT-LICENSE\",\n \"has_coc\": \"CODE_OF_CONDUCT.md\",\n \"has_threat_model\": null,\n \"has_audit\": null,\n \"status\": null,\n \"last_synced_at\": \"2017-09-20T20:16:47.153Z\",\n \"rank\": 28, \"host_type\": \"GitHub\",\n \"host_domain\": null,\n \"name\": null,\n \"scm\": \"git\",\n \"fork_policy\": null,\n \"github_id\": \"8514\",\n \"pull_requests_enabled\": null,\n \"logo_url\": null,\n \"github_contributions_count\": 2616,\n \"keywords\": [\"activejob\", \"activerecord\", \"html\", \"mvc\", \"rails\", \"ruby\"],\n \"dependencies\": [\n { \"project_name\": \"websocket-driver\",\n \"name\": \"websocket-driver\",\n \"platform\": \"rubygems\",\n \"requirements\": \"~> 0.6.1\",\n \"latest_stable\": \"0.7.0\",\n \"latest\": \"0.7.0\",\n \"deprecated\": false, \"outdated\": true,\n \"filepath\": \"actioncable/actioncable.gemspec\", \"\n kind\": \"runtime\"\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/dependency_stats", "title": "List of libraries.io stats", "name": "DependencyStats", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"dependencies\": \"10\",\n \"dependent_projects\": \"10.6K\",\n \"dependent_repositories\": \"392K\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/:owner/:repo/bus_factor", "title": "Bus Factor", "name": "GitHub", "description": "

Returns an integer that is the number of developers that have a summed percentage of contributions higher than the threshold

", "group": "Risk", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"best\": \"5\",\n \"worst\": \"1\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Risk" }, { "type": "get", "url": "/git/lines_changed/:git_repo_url", "title": "Lines Changed", "name": "Lines_Changed__no_whitespace_", "description": "

Shows detailed information about each file changed by each commit

", "group": "Uncategorized", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"additions\":2,\n \"author_date\":\"2018-05-14 10:09:57 -0500\",\n \"author_email\":\"s@goggins.com\",\n \"author_name\":\"Sean P. Goggins\",\n \"commit_date\":\"2018-05-16 10:12:22 -0500\",\n \"committer_email\":\"derek@howderek.com\",\n \"committer_name\":\"Derek Howard\",\n \"deletions\":0,\n \"hash\":\"77e603a\",\n \"message\":\"merge dev\",\n \"parents\":\"b8ec0ed\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Uncategorized" }, { "type": "get", "url": "/git/lines_changed/:git_repo_url", "title": "Lines Changed", "name": "Lines_Changed__no_whitespace_", "description": "

Shows detailed information about each file changed by each commit

", "group": "Uncategorized", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"additions\":2,\n \"author_date\":\"2018-05-14 10:09:57 -0500\",\n \"author_email\":\"s@goggins.com\",\n \"author_name\":\"Sean P. Goggins\",\n \"commit_date\":\"2018-05-16 10:12:22 -0500\",\n \"committer_email\":\"derek@howderek.com\",\n \"committer_name\":\"Derek Howard\",\n \"deletions\":0,\"hash\":\"77e603a\",\n \"message\":\"merge dev\",\n \"parents\":\"b8ec0ed\"\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Uncategorized" }, { "type": "get", "url": "/:owner/:repo/watchers", "title": "", "name": "Community_Engagement", "group": "Users", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"watchers\": 40349\n }\n]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Users" }, { "type": "get", "url": "/ghtorrent_range", "title": "Range of dates covered by GHTorrent", "name": "GhtorrentRange", "group": "Utility", "version": "0.0.0", "filename": "../augur/server.py", "groupTitle": "Utility" }, { "type": "get", "url": "/:owner/:repo/timeseries/contributions", "title": "Contributions by Week", "name": "ContributionsByWeek", "parameter": { "fields": { "Parameter": [ { "group": "Parameter", "type": "String", "optional": false, "field": "owner", "description": "

Username of the owner of the GitHub repository

" }, { "group": "Parameter", "type": "String", "optional": false, "field": "repo", "description": "

Name of the GitHub repository

" } ], "String": [ { "group": "String", "optional": false, "field": "user", "description": "

Limit results to the given user's contributions

" } ] } }, "success": { "examples": [ { "title": "Success-Response:", "content": "[\n {\n \"date\": \"2015-01-01T00:00:00.000Z\",\n \"commits\": 37.0,\n \"pull_requests\": null,\n \"issues\": null,\n \"commit_comments\": 7.0,\n \"pull_request_comments\": 8.0,\n \"issue_comments\": 17.0\n },\n {\n \"date\": \"2015-01-08T00:00:00.000Z\",\n \"commits\": 68.0,\n \"pull_requests\": null,\n \"issues\": 12.0,\n \"commit_comments\": 18.0,\n \"pull_request_comments\": 13.0,\n \"issue_comments\": 28.0\n }\n ]", "type": "json" } ] }, "version": "0.0.0", "filename": "../augur/server.py", "group": "_Volumes_SeansRAIDBaby_augur_augur_server_py", "groupTitle": "_Volumes_SeansRAIDBaby_augur_augur_server_py" } ] diff --git a/docs/api/api_project.js b/docs/api/api_project.js index e9bfd18763..94448c5477 100644 --- a/docs/api/api_project.js +++ b/docs/api/api_project.js @@ -1,14 +1 @@ -define({ - "name": "", - "version": "0.0.0", - "description": "", - "sampleUrl": false, - "defaultVersion": "0.0.0", - "apidoc": "0.3.0", - "generator": { - "name": "apidoc", - "time": "2018-05-11T19:12:21.742Z", - "url": "http://apidocjs.com", - "version": "0.17.6" - } -}); +define({ "name": "", "version": "0.0.0", "description": "", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2018-06-05T16:17:32.568Z", "url": "http://apidocjs.com", "version": "0.17.6" } }); diff --git a/docs/api/api_project.json b/docs/api/api_project.json index 764dbaf121..eb059dc20b 100644 --- a/docs/api/api_project.json +++ b/docs/api/api_project.json @@ -1,14 +1 @@ -{ - "name": "", - "version": "0.0.0", - "description": "", - "sampleUrl": false, - "defaultVersion": "0.0.0", - "apidoc": "0.3.0", - "generator": { - "name": "apidoc", - "time": "2018-05-11T19:12:21.742Z", - "url": "http://apidocjs.com", - "version": "0.17.6" - } -} +{ "name": "", "version": "0.0.0", "description": "", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2018-06-05T16:17:32.568Z", "url": "http://apidocjs.com", "version": "0.17.6" } } diff --git a/docs/dev-guide/dev-guide-overview.md b/docs/dev-guide/dev-guide-overview.md new file mode 100644 index 0000000000..fe3a496646 --- /dev/null +++ b/docs/dev-guide/dev-guide-overview.md @@ -0,0 +1,69 @@ +# Augur Development Guide: Making Contributions + +## Getting Started +See our [Contributing to Augur](/CONTRIBUTING.md) guide for specifics on how we review pull requests. tl;dr: Fork our repo. Make a change. Use the mailing list for [CHAOSS](https://lists.linuxfoundation.org/mailman/listinfo/oss-health-metrics), Submit a pull request. + +## Building Changes +After making your changes, run +```bash +make build +``` +to update the docs and frontend before adding them to your staging area. +``` +``` + +## Augur Development Overview + +### tl;dr + 1. [Back End Development Guide](/docs/dev-guide-pt1.md) + 2. [Front End Development Guide](/docs/dev-guide-pt2.md) +--------------------- + +### Augur's Design Value System +Augur's architecture is designed with an eye toward fulfilling its primary missions of rapid open source software metric prototyping and using data visualization to facilitate discussions among folks who manage open source communities. + +**Core aims: ** + 1. Rapid metrics prototyping + 2. Using data visualization to support discussion + +**Our visualization design follows two principles:** + 1. Allow comparisons across projects + 2. Where logical, show trends over time on a metric + +Project comparison helps people understand what a metric tells them. If I show you total commits in a month or a year, what does that tell you about the health of an open source project? If you are able to compare a project you are managing with a project or two in the same space that you are familiar with, is that helpful? In most cases the answers are yes. We aim to produce not only metrics, but enough information for consumers of Augur to construct meaning. Which then helps the CHAOSS community build better, more useful metrics. + +Time is, in effect, a project focused type of comparison. If you can see the changes in different metrics on your project over time, its easier to maintain awareness of how metrics compare with results. + +-------------------------------- + +## Augur's Architecture +In our aspiration to implement our value system for metrics in software, we seperate concerns pragmatically. Any metrics dashboard system has to do 4 things: 1) Ingest data, 2) store data, 3) reshape data for analysis and 4) present data. Of course, these "dashboard requirements" can be interpreted and circumvented. For example, if robust API's are available, like the [GitHub Version 4 API](https://developer.github.com/v4/), persistence can be considered optional. + +Right now, Augur satisfies the enumerated dashboard system requirements in concrete ways we describe in the following four sections. + +### Augur Data Ingestion +We use the GHTorrent database, or its MSR14 little brother to help you get up and running quickly. You may find this dataset insufficient for a particular metric you want to build. API's available from a number of places can be accessed from Augur. + +Inside your Augur system root directory there is another directory named Augur. This is where the python files that you can modify live. + +1. **downloads.py** : gathers download statistics for github repositories. Currently configured for npm and ruby gems download data. +2. **ghtorrent.py** : reads the ghtorrent database you installed. There are two functions at the top of this file that allow you to do counts on the GHTorrent Schema tables quickly using Python. + - def __single_table_count_by_date(self, table, repo_col='project_id', user_col='author_id', group_by="week"): Generates query string to count occurances of rows per date for a given table. + - def __sub_table_count_by_date(self, parent_table, sub_table, parent_id, sub_id, project_id): Generates query string to count occurances of rows per date for a given query sub-table. A query sub-table is a table that describes in more detail a specfic asset of another query table-for example, the table "pull_request_comments" is a sub table of "pull_request", where the query is pull requests. +3. **ghtorrentplus.py** : Accesses the aggregate tables Augur creates for GHTorrent. +4. **githubapi.py** : Pulls data from the GitHub API +5. **librariesio.py** : Pulls data from the libraries.io API (Package manager download data) +6. **localcsv.py** : Pulls data from a .csv file you persist. +7. **publicwww.py** : Pulls download data from the https://publicwww.com website. + +If you want to ingest substantial amounts of new data, you may want to contribute to the [Augur-OSSifragae](https://github.com/OSSHealth/augur-ossifragae) project, which focuses on systematic, structured ingestion of open source respository data from heterogeneous sources. (Note: an [Ossifragae](https://en.wikipedia.org/wiki/Bearded_Vulture) is a bearded vulture that is one of a handful of birds said to yield valid signs for ancient Roman Augurs (visionaries) to follow. We think the existance of "OSS" at the beginning of the birds name is a sign. We took it.) + +### Augur Data Storage +The database system that you built with GHTorrent or MSR14 is our principle data storage environment right now. We have added a few small details to the GHTorrent database in a seperate schema called GHTorrent_Plus. This schema is built on deployment, and supports aggregations of the GHTorrent Schema information so that metrics can be generated more quickly in a few cases. + +### Augur Data Reshaping for Analysis +Now that you understand the basic structure of Augur, our [Back End Development Guide](/docs/dev-guide-pt1.md) will be the place to start for reshaping data and building out analysis endpoints. The end result of new back end code is a **REST API Endpoint.** + +### Augur Data Presentation +Once you have a **REST API Endpoint**, you can stop and say, "I have built an endpoint. Here is my pull request". OR, you can build front end visualizations for those endpoints, following our [Front End Development Guide](/docs/dev-guide-pt2.md). + diff --git a/docs/dev-guide/dev-guide-pt1.md b/docs/dev-guide/dev-guide-pt1.md new file mode 100644 index 0000000000..ecfdd09c10 --- /dev/null +++ b/docs/dev-guide/dev-guide-pt1.md @@ -0,0 +1,101 @@ +# Developer Guide Part 1 - The Backend + +## Structure of the Backend + +Augur uses the Flask framework for its backend, which is stored in the directory `augur`. `augur/__init__.py`, `augur/server.py`, `augur/deploy.py`, and `augur/util.py` contain the components. The other `augur/*.py`files contain python funtions that return dataframes to be serialzed into json by the functions in `augur/server.py`. The titles of those files are the data sources the metrics use. + +## Setting up your environment + +Before you begin, make sure to activate the augur Anaconda environment by running `conda activate augur`. If this environment doesn't exist, try running `make install-dev` again and watch out for any errors. + +## Writing a Function for Augur + +### Should I create a new .py file? + +If your python function uses a new data source, create a new Python file. If you use an already implemented data source, create your new functions under that file. For instance, if you were to create a metric using data from the GitHub API, you would write a function in [`augur/githubapi.py`](https://github.com/OSSHealth/augur/blob/master/augur/githubapi.py) + +#### Adding a new .py file + +In the file, create a class to put your functions into, then in `augur/__init__.py` add a line with the following format + +```python +from .file_name import Class +``` +For example if I added a file named `augur/chaoss.py` that contains the class `Chaoss` the addition to `augur/__init__.py` would be + +```python +from .choass import Chaoss +``` + +### Writing a function + +In Augur there are metrics and timeseries metrics. For all metrics, the function should return a Dataframe that can be serialized into json. For timeseries metrics, the Dataframe needs to have a column named `date` that holds timestamps. + +#### Adding dependencies + +If you need to add a dependency to Augur for your function, simply add the import statment to the file as usual, then in `setup.py` add the dependency to the `install_requires` list. For example, if my new function uses a package called `mizzou`, I would find the `install_requires` list: + +```python +install_requires=['beautifulsoup4', 'flask', 'flask-cors', 'PyMySQL', 'requests', 'python-dateutil', 'sqlalchemy', 'pandas', 'pytest', 'PyGithub', 'pyevent', 'gunicorn'], +``` + +and add `mizzou` as such: + +```python +install_requires=['beautifulsoup4', 'flask', 'flask-cors', 'PyMySQL', 'requests', 'python-dateutil', 'sqlalchemy', 'pandas', 'pytest', 'PyGithub', 'pyevent', 'gunicorn', 'mizzou'], +``` + +#### Adding tests + +Augur uses pytest for tests. Tests are in the `test` directory. If you created a new file for your data source, you will also need to create a new file to test it. You can use pytest fixtures and environment variables to pass data to tests. + +```python +@pytest.fixture +def chaoss(): + import augur + chaossServer = os.getenv("CHAOSS_TEST_URL") + assert chaossServer is not None and len(chaossServer) > 8 + return augur.Chaoss(chaossServer) +``` + +Now any test that tests functions in the Chaoss class will be able to access an instance of the class + +```python +def test_data_source(chaoss): + assert chaoss.data_source('argument').isin(['expected_value']).any +``` + +Make sure every function you write has a test. + +## Creating an endpoint for a function + +If you created a new data source, make sure you create an instance of your class, loading any configuration you need with the `read_config` function. + +To create an endpoint for a function, in [`augur/server.py`](https://github.com/OSSHealth/augur/blob/master/augur/server.py), call `addMetric()` or `addTimeseries()` + +```python +addTimeseries(app, file_name.function_name, 'function_name') +``` +for a function `foo()` in `augur/bar.py` + +```python +addTimeseries(app, bar.foo, 'foo') +``` +If the metric is not a timeseries metric, replace `AddTimeseries()` with `AddMetric()` + +```bash + +## Using the Python Debugger + +The server in Augur has a built-in IPython debugger to make testing your functions easier during development. + +After you have added an instance of your class to server.py, you can test it by running: + +```bash +export AUGUR_INTERACTIVE=1 +augur +```` + +Augur will load configuration and create instances of all the classes, but will drop down to IPDB shell instead of running the Flask server. + +To disable the IPDB shell, simply export ```bash export AUGUR_INTERACTIVE=0``` and run `augur`. \ No newline at end of file diff --git a/docs/dev-guide/dev-guide-pt2.md b/docs/dev-guide/dev-guide-pt2.md new file mode 100644 index 0000000000..37287681a3 --- /dev/null +++ b/docs/dev-guide/dev-guide-pt2.md @@ -0,0 +1,131 @@ +# Developer Guide Part 2 - The Frontend + +## Structure +Augur uses Vue.js, MetricsGraphics, Kube for its frontend. The frontend is stored in the `frontend` directory, but the parts that are relevant to adding new metrics are in the `frontend/app/` directory, which contains the following parts: +* `frontend/app/AugurAPI.js` which interfaces with the backend +* `frontend/app/AugurStats.js` which performs statistical operations on the data +* `frontend/app/Augur.js` which renders the page +* `frontend/app/assets/` which contains the assets, such as images, for the frontend +* `frontend/app/include/` which contains the Kube and MetricsGraphics resources +* `frontend/styles/` which contains the stylesheet for Augur +* `frontend/components/` which contains the Vue.js components + * `frontend/components/charts/` contains the different chart templetes + * `frontend/components/BaseRepoActivityCard.vue` contains the repo activity time series charts + +## How to add a new timeseries metric + +### Adding an endpoint + +In `frontend/app/AugurAPI.js`, add an attribute to the repo class that holds a times eries object at the end of the file like this +```javascript +repo. = Timeseries('endpoint_name') +``` +So if your endpoint name is `foo_bar` then the attribute would be +```javascript +repo. = Timeseries('foo_bar') +``` + +### Adding a chart +In `frontend/app/components/BaseRepoActivityCard.vue`, in the template in the section tag, add a div like this +```html +
+
+ +
+``` +The recommended width is 6 for half width and 12 for full width. So if I wanted to add the `foo_bar`chart, it would look like this +```html +
+
+ +
+``` +### Adding Comparison Functionality +In `frontend/app/components/ComparedRepoActivityCard.vue` in the template in the section tag, add a div like this +```html +
+
+ +
+``` +The recommended width is 6 for half width and 12 for full width. So if I wanted to add the `foo_bar`chart, it would look like this +```html +
+
+ +
+``` +## How to add a new nontimeseries metric + +### Adding an endpoint + +In `frontend/app/AugurAPI.js`, add an attribute to the repo class that holds an endpoint object at the end of the file like this +```javascript +repo. = Endpoint('endpoint_name') +``` +So if your endpoint name is `foo_bar` then the attribute would be +```javascript +repo. = Endpoint('foo_bar') +``` + +### Adding a chart +In the `frontend/app/components/charts` directory define a chart for the metric + +In `frontend/app/components/BaseRepoActivityCard.vue` or `frontend/app/components/BaseRepoEcosystemCard.vue` import the chart at the bottom and export it + +In the same file, in the template in the section tag, add a div like this +```html +
+
+ + +
+... +import ChartType from './charts/ChartType' + +module.exports = { + components: { + ChartType + } +}; +``` +The recommended width is 6 for half width and 12 for full width. So if I wanted to add the `foo_bar` chart, it would look like this +```html +
+
+ + +
+... +import FooBar from './charts/FooBar' + +module.exports = { + components: { + FooBar + } +}; +``` diff --git a/docs/dev-guide/ghtorrent-restore.md b/docs/dev-guide/ghtorrent-restore.md new file mode 100644 index 0000000000..1c8b8f6e05 --- /dev/null +++ b/docs/dev-guide/ghtorrent-restore.md @@ -0,0 +1,5 @@ +-- Create Database and Grant Access +create database ghtorrent_blue; +grant all on ghtorrent_blue.* to 'ghtorrent'@'%'; +grant all on ghtorrent_blue.* to 'ghtorrent'@'localhost'; +grant file on *.* to 'ghtorrent'@'localhost' diff --git a/docs/dev-install.md b/docs/dev-install.md new file mode 100644 index 0000000000..3096956bcf --- /dev/null +++ b/docs/dev-install.md @@ -0,0 +1,159 @@ +Local Installation (For Development) +----------------------------------------------------- + +### 1. Install Dependencies (OS Specific Instructions Below) +- Anaconda +- NodeJS Version 8.0 or newer, which includes `npm` + +[*Also remember the database dependency in the README.md file*](http://ghtorrent.org/msr14.html) + +1. [Dependency Installation for Ubuntu](#Ubuntu) +1. [Dependency Installation for Fedora](#Fedora) +1. [Dependency Installation for OS X](#MacOSX) + +### 2. [Install Augur](#Install) + +===================================================== + +#### Ubuntu Dependency Installation Instructions + +```bash +# Install NodeSource +curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - + +# Install NodeJS +sudo apt-get install -y nodejs + +# Install MariaDB (if needed on the same machine for the GHTorrent/msr14 dataset) +sudo apt-get install -y mariadb-server + +# Install Anaconda +curl https://repo.anaconda.com/archive/Anaconda3-5.1.0-Linux-x86_64.sh > Anaconda.sh +chmod +x Anaconda.sh + +# You must agree to Anaconda's license terms to proceed +./Anaconda.sh -b +rm Anaconda.sh + +# [Install Augur](#Install) +``` + +#### Fedora Dependency Installation Instructions + +```bash +# Install NodeSource +curl -sL https://rpm.nodesource.com/setup_10.x | sudo -E bash - +sudo yum install -y nodejs + + +# Install NodeJS +sudo apt-get install -y nodejs + +# Install MariaDB (if needed on the same machine for the GHTorrent/msr14 dataset) +sudo apt-get install -y mariadb-server + +# Install Anaconda +curl https://repo.anaconda.com/archive/Anaconda3-5.1.0-Linux-x86_64.sh > Anaconda.sh +chmod +x Anaconda.sh + +# You must agree to Anaconda's license terms to proceed +./Anaconda.sh -b +rm Anaconda.sh + +# [Install Augur](#Install) +``` + + +#### Mac OSX Dependency Installation Instructions + +```bash +# Install Homebrew +/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + +# Install NodeJS +brew install wget node + +# Install MariaDB (if needed on the same machine for the GHTorrent/msr14 dataset) +brew install wget mariadb + +# Install Anaconda +cd ~/Downloads +wget https://repo.anaconda.com/archive/Anaconda3-5.1.0-MacOSX-x86_64.pkg +open Anaconda3-5.1.0-MacOSX-x86_64.pkg + +# [Install Augur](#Install) +``` + + +## Augur Installation Instructions + +Clone the repo and install the libraries and tools needed by Augur + +```bash +git clone https://github.com/OSSHealth/augur/ + +## Assume you are in the root from which you cloned augur + +cd augur ## To get into the project directory root + +cd augur ## To get into the augur directory under the augur root, where the make files live + +# If you are going to do active development, please use the dev branch +git checkout dev + + +# Install the Python and Node tools and libraries needed +make install-dev-admin # some libraries require a root install. + +# Ignore node-pre-gyp install errors asking for cairo library or install cairo library. Augur works either way. + +``` + +**Make sure you have a database user that has select access to the database where you installed [GHTorrent](http://ghtorrent.org/) and all priviledges on another database for Augur.** + +```sql +CREATE USER 'augur'@'localhost' IDENTIFIED BY 'password'; +GRANT SELECT ON ghtorrent.* TO 'augur'@'localhost'; + +CREATE DATABASE augur; +GRANT ALL PRIVILEDGES ON augur.* TO 'augur'@'localhost'; +``` + +**Augur runs in an Anaconda environment. To get started, you need to run 'augur' to create the augur.cfg file** + +```bash +conda activate augur +augur +``` + +Edit the augur.cfg file with the the required information for database and API connections. + +For all the API's and visualiazations to work, you will need to include: + +- A [GitHub](https://developer.github.com/v3/) API Key, +- A [PublicWWW](https://publicwww.com/) API Key, and +- A [LibrariesIO](https://libraries.io/) API Key. + +You **CAN** get off the ground without those API keys though. + +**You're ready to rock! To start both the frontend and backend, run:** + ```bash + make dev + ``` + + + + +## macOS High Sierra (and possibly older OS X Versions) Errata: + +1. If you check the logs/frontend.log and find that "brunch" was not found: + ```bash + brew install npm + npm install -g brunch + brew install yarn + ``` +1. If the logs look good but the webpage at localhost:3333 is empty, it could be that Yarn installed the wrong version of some libraries. In that case: + ```bash + cd frontend + npm install + ``` diff --git a/docs/docker-install.md b/docs/docker-install.md new file mode 100644 index 0000000000..62b85bda16 --- /dev/null +++ b/docs/docker-install.md @@ -0,0 +1,45 @@ +Installation with Docker (easy to get up and running) +----------------------------------------------------- +Before we begin, make sure you have everything you need installed: [Git](https://git-scm.com/downloads), [Docker](https://www.docker.com/community-edition), [Docker Compose](https://docs.docker.com/compose/install/) + +[*Also remember the database dependency in the README.md file*](http://ghtorrent.org/msr14.html) + +Now, to install: + +1. Clone the repo and enter its directory: + +```bash +git clone https://github.com/OSSHealth/augur +cd augur +``` + +2. Set the following variables in your environment: + +```bash +#Most likely required +AUGUR_DB_USER +AUGUR_DB_PASS +AUGUR_DB_HOST +AUGUR_DB_PORT +AUGUR_DB_NAME +AUGUR_GHTORRENT_PLUS_USER +AUGUR_GHTORRENT_PLUS_PASS +AUGUR_GHTORRENT_PLUS_HOST +AUGUR_GHTORRENT_PLUS_PORT +AUGUR_GHTORRENT_PLUS_NAME +AUGUR_GITHUB_API_KEY + +# Optional +AUGUR_HOST +AUGUR_PORT +AUGUR_PUBLIC_WWW_API_KEY +AUGUR_LIBRARIESIO_API_KEY +``` + + docker-compose will automatically pass the relevant variables from the local environment to the container. + + +3. Build the container with `docker-compose build` +4. Launch the container with `docker-compose up` + + diff --git a/docs/metrics/status.json b/docs/metrics/status.json new file mode 100644 index 0000000000..aea8be7b30 --- /dev/null +++ b/docs/metrics/status.json @@ -0,0 +1,29 @@ +{ + "open-issues": "implemented", + "closed-issues": "implemented", + "issue-resolution-efficiency": "implemented", + "open-issue-age": "implemented", + "first-response-to-issue-duration": "in_progress", + "closed-issue-resolution-duration": "in_progress", + "code-commits": "implemented", + "lines-of-code-changed": "implemented", + "code-merge-duration": "implemented", + "contributors": "implemented", + "new-contributors": "implemented", + "community-activity": "implemented", + "pull-requests-open": "implemented", + "pull-requests-over-time": "implemented", + "total-contributors": "implemented", + "contribution-acceptance": "implemented", + "issues-submitted-closed": "implemented", + "pull-requests-comment-duration": "in_progress", + "issue-comments": "implemented", + "forks": "implemented", + "followers": "implemented", + "watchers": "implemented", + "watchers": "implemented", + + + "metricschema": "printed", + "metric-template": "printed" +} \ No newline at end of file diff --git a/docs/metrics/status.py b/docs/metrics/status.py new file mode 100644 index 0000000000..3378dd88b6 --- /dev/null +++ b/docs/metrics/status.py @@ -0,0 +1,85 @@ +import os +import re +import json +import glob +import webbrowser +from flask import Flask, request, Response + +metric_files = ['upstream/1_Diversity-Inclusion.md', 'upstream/2_Growth-Maturity-Decline.md', 'upstream/3_Risk.md', 'upstream/4_Value.md'] + +metric_type_by_file = { + 'upstream/1_Diversity-Inclusion.md': 'Diversity and Inclusion', + 'upstream/2_Growth-Maturity-Decline.md': 'Growth, Maturity, and Decline', + 'upstream/3_Risk.md': 'Risk', + 'upstream/4_Value.md': 'Value', +} + +color_by_status = { + 'unimplemented': 'unimplemented', + 'in_progress': 'in progress', + 'implemented': 'implemented' +} + +statusMap = json.loads(open('status.json', 'r').read()) +statusHTML = """ + + + Augur Metrics Status + + + +

Augur Metrics Status

+ +""" + +def getFileID(path): + return os.path.splitext(os.path.basename(path))[0] + +def printMetric(title, path): + global statusHTML + status = 'unimplemented' + fileID = getFileID(path) + if fileID in statusMap: + status = statusMap[fileID] + if status != 'printed': + statusHTML += '{} {} ({})'.format(color_by_status[status], path, title, fileID) + statusMap[fileID] = 'printed' + return fileID + +# Iterate through the category Markdown files to categorize links +for filename in metric_files: + file = open(filename, 'r') + matches = re.findall(r'\[(.*?)\]\((.*?\.md)\)', file.read()) + if len(matches) > 0: + statusHTML += '

' + metric_type_by_file[filename] + '

' + for match in matches: + printMetric(match[0], match[1]) + statusHTML += '
statusmetric
' + + +# Iterate through the files in activity-metrics to find uncategorized metrics +statusHTML += '

Uncategorized

' +for filename in glob.iglob('upstream/activity-metrics/*.md'): + printMetric(getFileID(filename).replace('-', ' ').title(), 'activity-metrics/' + getFileID(filename) + '.md') + + +statusHTML += """ +
statusmetric
+ + +""" + +app = Flask(__name__) + +@app.route("/") +def root(): + return statusHTML + +def run(): + webbrowser.open_new_tab('http://localhost:5001/') + app.run(port=5001) + +if __name__ == "__main__": + run() diff --git a/docs/python/build/doctrees/environment.pickle b/docs/python/build/doctrees/environment.pickle index bacf005d37..68b8dd8eb8 100644 Binary files a/docs/python/build/doctrees/environment.pickle and b/docs/python/build/doctrees/environment.pickle differ diff --git a/docs/python/build/doctrees/index.doctree b/docs/python/build/doctrees/index.doctree index 8e5a8fcc1d..a3ac01a4f9 100644 Binary files a/docs/python/build/doctrees/index.doctree and b/docs/python/build/doctrees/index.doctree differ diff --git a/docs/python/build/html/.buildinfo b/docs/python/build/html/.buildinfo index b49b047be2..ab4377a123 100644 --- a/docs/python/build/html/.buildinfo +++ b/docs/python/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: e980886d919c80a50e3ca7d63f89984c +config: bb6bef2223677de99d52bcfff243a226 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/python/build/html/_static/basic.css b/docs/python/build/html/_static/basic.css index 19ced1057a..6f408303f8 100644 --- a/docs/python/build/html/_static/basic.css +++ b/docs/python/build/html/_static/basic.css @@ -82,21 +82,9 @@ div.sphinxsidebar input { } div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; + width: 170px; } - img { border: 0; max-width: 100%; @@ -211,11 +199,6 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ -div.body { - min-width: 450px; - max-width: 800px; -} - div.body p, div.body dd, div.body li, div.body blockquote { -moz-hyphens: auto; -ms-hyphens: auto; @@ -349,11 +332,6 @@ table.docutils { border-collapse: collapse; } -table.align-center { - margin-left: auto; - margin-right: auto; -} - table caption span.caption-number { font-style: italic; } diff --git a/docs/python/build/html/_static/doctools.js b/docs/python/build/html/_static/doctools.js index d8928926bf..0c15c0099b 100644 --- a/docs/python/build/html/_static/doctools.js +++ b/docs/python/build/html/_static/doctools.js @@ -70,9 +70,7 @@ jQuery.fn.highlightText = function(text, className) { if (node.nodeType === 3) { var val = node.nodeValue; var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { var span; var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); if (isInSVG) { diff --git a/docs/python/build/html/_static/jquery.js b/docs/python/build/html/_static/jquery.js index 644d35e274..f6a6a99e60 100644 --- a/docs/python/build/html/_static/jquery.js +++ b/docs/python/build/html/_static/jquery.js @@ -1,4 +1,4 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="
",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + @@ -23,7 +31,8 @@ - + +