{"action":"created","comment":{"url":"https://api.github.com/repos/apache/trafficcontrol/pulls/comments/244461170","pull_request_review_id":188398042,"id":244461170,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0NDQ2MTE3MA==","diff_hunk":"@@ -42,3 +45,48 @@ func (to *Session) CreateDeliveryServiceServers(dsID int, serverIDs []int, repla\n \t}\n \treturn &resp.Response, nil\n }\n+\n+func (to *Session) DeleteDeliveryServiceServer(dsID int, serverID int) (tc.Alerts, ReqInf, error) {\n+\troute := apiBase + `/deliveryservice_server/` + strconv.Itoa(dsID) + \"/\" + strconv.Itoa(serverID)\n+\treqResp, remoteAddr, err := to.request(http.MethodDelete, route, nil)\n+\treqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}\n+\tif err != nil {\n+\t\treturn tc.Alerts{}, reqInf, errors.New(\"requesting from Traffic Ops: \" + err.Error())\n+\t}\n+\tdefer reqResp.Body.Close()\n+\tresp := tc.Alerts{}\n+\tif err = json.NewDecoder(reqResp.Body).Decode(&resp); err != nil {\n+\t\treturn tc.Alerts{}, reqInf, errors.New(\"decoding response: \" + err.Error())\n+\t}\n+\treturn resp, reqInf, nil\n+}\n+\n+func (to *Session) GetDeliveryServiceServers() (tc.DeliveryServiceServerResponse, ReqInf, error) {\n+\troute := apiBase + `/deliveryserviceserver`\n+\treqResp, remoteAddr, err := to.request(http.MethodGet, route, nil)\n+\treqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}\n+\tif err != nil {\n+\t\treturn tc.DeliveryServiceServerResponse{}, reqInf, errors.New(\"requesting from Traffic Ops: \" + err.Error())\n+\t}\n+\tdefer reqResp.Body.Close()\n+\tresp := tc.DeliveryServiceServerResponse{}\n+\tif err = json.NewDecoder(reqResp.Body).Decode(&resp); err != nil {\n+\t\treturn tc.DeliveryServiceServerResponse{}, reqInf, errors.New(\"decoding response: \" + err.Error())\n+\t}\n+\treturn resp, reqInf, nil\n+}\n+\n+func (to *Session) GetDeliveryServiceServersN(n int) (tc.DeliveryServiceServerResponse, ReqInf, error) {\n+\troute := apiBase + `/deliveryserviceserver` + `?limit=` + strconv.Itoa(n)\n+\treqResp, remoteAddr, err := to.request(http.MethodGet, route, nil)\n+\treqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: remoteAddr}\n+\tif err != nil {\n+\t\treturn tc.DeliveryServiceServerResponse{}, reqInf, errors.New(\"requesting from Traffic Ops: \" + err.Error())\n+\t}\n+\tdefer reqResp.Body.Close()\n+\tresp := tc.DeliveryServiceServerResponse{}\n+\tif err = json.NewDecoder(reqResp.Body).Decode(&resp); err != nil {\n+\t\treturn tc.DeliveryServiceServerResponse{}, reqInf, errors.New(\"decoding response: \" + err.Error())\n+\t}\n+\treturn resp, reqInf, nil","path":"traffic_ops/client/deliveryserviceserver.go","position":56,"original_position":57,"commit_id":"3961cbbd480ee940785a8e582489c52783a720b6","original_commit_id":"bc59bb5b1308f5274e1b1d4f7b2fdb67682e2fbe","user":{"login":"rob05c","id":5113421,"node_id":"MDQ6VXNlcjUxMTM0MjE=","avatar_url":"https://avatars3.githubusercontent.com/u/5113421?v=4","gravatar_id":"","url":"https://api.github.com/users/rob05c","html_url":"https://github.com/rob05c","followers_url":"https://api.github.com/users/rob05c/followers","following_url":"https://api.github.com/users/rob05c/following{/other_user}","gists_url":"https://api.github.com/users/rob05c/gists{/gist_id}","starred_url":"https://api.github.com/users/rob05c/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rob05c/subscriptions","organizations_url":"https://api.github.com/users/rob05c/orgs","repos_url":"https://api.github.com/users/rob05c/repos","events_url":"https://api.github.com/users/rob05c/events{/privacy}","received_events_url":"https://api.github.com/users/rob05c/received_events","type":"User","site_admin":false},"body":"Ok, I changed them to use a common func. IMO the abstraction isn't worth the readability cost. So, I changed it in the safest way I could think of.\r\n\r\nA sigil (-1 or 0) would be confusing, since not passing a limit results in the default API limit of 20, not infinite (which is the bug adding a `N` func fixes); likewise passing the API limit would be bug-prone if the API changed; so, passing the query param itself seemed the safest and least confusing.","created_at":"2018-12-29T06:46:18Z","updated_at":"2018-12-29T06:46:18Z","html_url":"https://github.com/apache/trafficcontrol/pull/3163#discussion_r244461170","pull_request_url":"https://api.github.com/repos/apache/trafficcontrol/pulls/3163","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/apache/trafficcontrol/pulls/comments/244461170"},"html":{"href":"https://github.com/apache/trafficcontrol/pull/3163#discussion_r244461170"},"pull_request":{"href":"https://api.github.com/repos/apache/trafficcontrol/pulls/3163"}},"in_reply_to_id":244385609},"pull_request":{"url":"https://api.github.com/repos/apache/trafficcontrol/pulls/3163","id":240824541,"node_id":"MDExOlB1bGxSZXF1ZXN0MjQwODI0NTQx","html_url":"https://github.com/apache/trafficcontrol/pull/3163","diff_url":"https://github.com/apache/trafficcontrol/pull/3163.diff","patch_url":"https://github.com/apache/trafficcontrol/pull/3163.patch","issue_url":"https://api.github.com/repos/apache/trafficcontrol/issues/3163","number":3163,"state":"open","locked":false,"title":"Fix Traffic Ops Tenancy and Activity Bugs, Fix TO API Test Framework to work with Tenancy","user":{"login":"rob05c","id":5113421,"node_id":"MDQ6VXNlcjUxMTM0MjE=","avatar_url":"https://avatars3.githubusercontent.com/u/5113421?v=4","gravatar_id":"","url":"https://api.github.com/users/rob05c","html_url":"https://github.com/rob05c","followers_url":"https://api.github.com/users/rob05c/followers","following_url":"https://api.github.com/users/rob05c/following{/other_user}","gists_url":"https://api.github.com/users/rob05c/gists{/gist_id}","starred_url":"https://api.github.com/users/rob05c/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rob05c/subscriptions","organizations_url":"https://api.github.com/users/rob05c/orgs","repos_url":"https://api.github.com/users/rob05c/repos","events_url":"https://api.github.com/users/rob05c/events{/privacy}","received_events_url":"https://api.github.com/users/rob05c/received_events","type":"User","site_admin":false},"body":"This fixes major TO Tenancy bugs, as well as fixing the TO API framework to work with Tenancy enabled, and enabling it.\r\n\r\nUnfortunately, all the tenancy issues, and the test framework, are intimately related, and there isn't a good way to separate them; so this PR is unfortunately large.\r\n\r\nSpecifically:\r\n\r\n- Fix TO Tenancy checks to consider whether the user's tenant is active, not whether the resource's tenant is active.\r\n\r\n- Fix TO Tenancy to prevent access when parent tenants (of the \r\n  user's tenant) are inactive.\r\n\r\n- Add TO API Tests to verify tenancy, verify access is disabled when\r\n  parents or self are inactive.\r\n\r\n- Fix TO API Test user panic on test failure.\r\n\r\n- Fix TO API Test tenants to automatically delete children before\r\n  parents, rather than hard-coding.\r\n\r\n- Fix TO API Test parameters race condition, fixed to delete all\r\n  parameters not only first name+file.\r\n\r\n- Fix TO API Tests to enable Tenancy on all tests (by creating\r\n  Parameters, which creates the use_tenancy param).\r\n  The TO API Tests were completely broken with tenancy, due\r\n  to the above bugs. With the bugs fixed, the tests pass\r\n  with tenancy enabled.\r\n\r\nFixes #2732 \r\n\r\n#### What does this PR do?\r\n\r\nFixes #2732 \r\n\r\n#### Which TC components are affected by this PR?\r\n\r\n- [ ] Documentation\r\n- [ ] Grove\r\n- [ ] Traffic Analytics\r\n- [ ] Traffic Monitor\r\n- [x] Traffic Ops\r\n- [ ] Traffic Ops ORT\r\n- [ ] Traffic Portal\r\n- [ ] Traffic Router\r\n- [ ] Traffic Stats\r\n- [ ] Traffic Vault\r\n- [ ] Other _________\r\n\r\n#### What is the best way to verify this PR?\r\n\r\nRun API tests. Run TO with Tenancy enabled, verify resources are accessible as expected.\r\n\r\n#### Check all that apply\r\n\r\n- [x] This PR includes tests\r\n- [ ] This PR includes documentation updates\r\n- [ ] This PR includes an update to CHANGELOG.md\r\n- [ ] This PR includes all required license headers\r\n- [ ] This PR includes a database migration (ensure that migration sequence is correct)\r\n- [ ] This PR fixes a serious security flaw. Read more: [www.apache.org/security](http://www.apache.org/security/)\r\n\r\n<!--\r\n    Licensed to the Apache Software Foundation (ASF) under one\r\n    or more contributor license agreements.  See the NOTICE file\r\n    distributed with this work for additional information\r\n    regarding copyright ownership.  The ASF licenses this file\r\n    to you under the Apache License, Version 2.0 (the\r\n    \"License\"); you may not use this file except in compliance\r\n    with the License.  You may obtain a copy of the License at\r\n\r\n      http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n    Unless required by applicable law or agreed to in writing,\r\n    software distributed under the License is distributed on an\r\n    \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n    KIND, either express or implied.  See the License for the\r\n    specific language governing permissions and limitations\r\n    under the License.\r\n-->\r\n\r\n\r\n\r\n","created_at":"2018-12-25T02:47:05Z","updated_at":"2018-12-29T06:46:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f3813d778178ef8749a820bd1982dfc6acb7af38","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":675814919,"node_id":"MDU6TGFiZWw2NzU4MTQ5MTk=","url":"https://api.github.com/repos/apache/trafficcontrol/labels/Traffic%20Ops","name":"Traffic Ops","color":"808080","default":false},{"id":435396616,"node_id":"MDU6TGFiZWw0MzUzOTY2MTY=","url":"https://api.github.com/repos/apache/trafficcontrol/labels/bug","name":"bug","color":"ee0701","default":true},{"id":435396618,"node_id":"MDU6TGFiZWw0MzUzOTY2MTg=","url":"https://api.github.com/repos/apache/trafficcontrol/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":678937474,"node_id":"MDU6TGFiZWw2Nzg5Mzc0NzQ=","url":"https://api.github.com/repos/apache/trafficcontrol/labels/major","name":"major","color":"d93f0b","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/apache/trafficcontrol/pulls/3163/commits","review_comments_url":"https://api.github.com/repos/apache/trafficcontrol/pulls/3163/comments","review_comment_url":"https://api.github.com/repos/apache/trafficcontrol/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/trafficcontrol/issues/3163/comments","statuses_url":"https://api.github.com/repos/apache/trafficcontrol/statuses/3961cbbd480ee940785a8e582489c52783a720b6","head":{"label":"rob05c:to-fix-tenancy-inactivity","ref":"to-fix-tenancy-inactivity","sha":"3961cbbd480ee940785a8e582489c52783a720b6","user":{"login":"rob05c","id":5113421,"node_id":"MDQ6VXNlcjUxMTM0MjE=","avatar_url":"https://avatars3.githubusercontent.com/u/5113421?v=4","gravatar_id":"","url":"https://api.github.com/users/rob05c","html_url":"https://github.com/rob05c","followers_url":"https://api.github.com/users/rob05c/followers","following_url":"https://api.github.com/users/rob05c/following{/other_user}","gists_url":"https://api.github.com/users/rob05c/gists{/gist_id}","starred_url":"https://api.github.com/users/rob05c/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rob05c/subscriptions","organizations_url":"https://api.github.com/users/rob05c/orgs","repos_url":"https://api.github.com/users/rob05c/repos","events_url":"https://api.github.com/users/rob05c/events{/privacy}","received_events_url":"https://api.github.com/users/rob05c/received_events","type":"User","site_admin":false},"repo":{"id":71181197,"node_id":"MDEwOlJlcG9zaXRvcnk3MTE4MTE5Nw==","name":"trafficcontrol","full_name":"rob05c/trafficcontrol","private":false,"owner":{"login":"rob05c","id":5113421,"node_id":"MDQ6VXNlcjUxMTM0MjE=","avatar_url":"https://avatars3.githubusercontent.com/u/5113421?v=4","gravatar_id":"","url":"https://api.github.com/users/rob05c","html_url":"https://github.com/rob05c","followers_url":"https://api.github.com/users/rob05c/followers","following_url":"https://api.github.com/users/rob05c/following{/other_user}","gists_url":"https://api.github.com/users/rob05c/gists{/gist_id}","starred_url":"https://api.github.com/users/rob05c/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rob05c/subscriptions","organizations_url":"https://api.github.com/users/rob05c/orgs","repos_url":"https://api.github.com/users/rob05c/repos","events_url":"https://api.github.com/users/rob05c/events{/privacy}","received_events_url":"https://api.github.com/users/rob05c/received_events","type":"User","site_admin":false},"html_url":"https://github.com/rob05c/trafficcontrol","description":"Mirror of Apache Traffic Control (incubating)","fork":true,"url":"https://api.github.com/repos/rob05c/trafficcontrol","forks_url":"https://api.github.com/repos/rob05c/trafficcontrol/forks","keys_url":"https://api.github.com/repos/rob05c/trafficcontrol/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rob05c/trafficcontrol/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rob05c/trafficcontrol/teams","hooks_url":"https://api.github.com/repos/rob05c/trafficcontrol/hooks","issue_events_url":"https://api.github.com/repos/rob05c/trafficcontrol/issues/events{/number}","events_url":"https://api.github.com/repos/rob05c/trafficcontrol/events","assignees_url":"https://api.github.com/repos/rob05c/trafficcontrol/assignees{/user}","branches_url":"https://api.github.com/repos/rob05c/trafficcontrol/branches{/branch}","tags_url":"https://api.github.com/repos/rob05c/trafficcontrol/tags","blobs_url":"https://api.github.com/repos/rob05c/trafficcontrol/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rob05c/trafficcontrol/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rob05c/trafficcontrol/git/refs{/sha}","trees_url":"https://api.github.com/repos/rob05c/trafficcontrol/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rob05c/trafficcontrol/statuses/{sha}","languages_url":"https://api.github.com/repos/rob05c/trafficcontrol/languages","stargazers_url":"https://api.github.com/repos/rob05c/trafficcontrol/stargazers","contributors_url":"https://api.github.com/repos/rob05c/trafficcontrol/contributors","subscribers_url":"https://api.github.com/repos/rob05c/trafficcontrol/subscribers","subscription_url":"https://api.github.com/repos/rob05c/trafficcontrol/subscription","commits_url":"https://api.github.com/repos/rob05c/trafficcontrol/commits{/sha}","git_commits_url":"https://api.github.com/repos/rob05c/trafficcontrol/git/commits{/sha}","comments_url":"https://api.github.com/repos/rob05c/trafficcontrol/comments{/number}","issue_comment_url":"https://api.github.com/repos/rob05c/trafficcontrol/issues/comments{/number}","contents_url":"https://api.github.com/repos/rob05c/trafficcontrol/contents/{+path}","compare_url":"https://api.github.com/repos/rob05c/trafficcontrol/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rob05c/trafficcontrol/merges","archive_url":"https://api.github.com/repos/rob05c/trafficcontrol/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rob05c/trafficcontrol/downloads","issues_url":"https://api.github.com/repos/rob05c/trafficcontrol/issues{/number}","pulls_url":"https://api.github.com/repos/rob05c/trafficcontrol/pulls{/number}","milestones_url":"https://api.github.com/repos/rob05c/trafficcontrol/milestones{/number}","notifications_url":"https://api.github.com/repos/rob05c/trafficcontrol/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rob05c/trafficcontrol/labels{/name}","releases_url":"https://api.github.com/repos/rob05c/trafficcontrol/releases{/id}","deployments_url":"https://api.github.com/repos/rob05c/trafficcontrol/deployments","created_at":"2016-10-17T21:05:38Z","updated_at":"2018-12-29T06:11:29Z","pushed_at":"2018-12-29T06:40:22Z","git_url":"git://github.com/rob05c/trafficcontrol.git","ssh_url":"git@github.com:rob05c/trafficcontrol.git","clone_url":"https://github.com/rob05c/trafficcontrol.git","svn_url":"https://github.com/rob05c/trafficcontrol","homepage":null,"size":89656,"stargazers_count":0,"watchers_count":0,"language":"Perl","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"d7d9a5b963fa12e194f2a4b918b98a53d95965a8","user":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":67198520,"node_id":"MDEwOlJlcG9zaXRvcnk2NzE5ODUyMA==","name":"trafficcontrol","full_name":"apache/trafficcontrol","private":false,"owner":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/apache/trafficcontrol","description":"Apache Traffic Control","fork":false,"url":"https://api.github.com/repos/apache/trafficcontrol","forks_url":"https://api.github.com/repos/apache/trafficcontrol/forks","keys_url":"https://api.github.com/repos/apache/trafficcontrol/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/trafficcontrol/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/trafficcontrol/teams","hooks_url":"https://api.github.com/repos/apache/trafficcontrol/hooks","issue_events_url":"https://api.github.com/repos/apache/trafficcontrol/issues/events{/number}","events_url":"https://api.github.com/repos/apache/trafficcontrol/events","assignees_url":"https://api.github.com/repos/apache/trafficcontrol/assignees{/user}","branches_url":"https://api.github.com/repos/apache/trafficcontrol/branches{/branch}","tags_url":"https://api.github.com/repos/apache/trafficcontrol/tags","blobs_url":"https://api.github.com/repos/apache/trafficcontrol/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/trafficcontrol/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/trafficcontrol/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/trafficcontrol/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/trafficcontrol/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/trafficcontrol/languages","stargazers_url":"https://api.github.com/repos/apache/trafficcontrol/stargazers","contributors_url":"https://api.github.com/repos/apache/trafficcontrol/contributors","subscribers_url":"https://api.github.com/repos/apache/trafficcontrol/subscribers","subscription_url":"https://api.github.com/repos/apache/trafficcontrol/subscription","commits_url":"https://api.github.com/repos/apache/trafficcontrol/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/trafficcontrol/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/trafficcontrol/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/trafficcontrol/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/trafficcontrol/contents/{+path}","compare_url":"https://api.github.com/repos/apache/trafficcontrol/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/trafficcontrol/merges","archive_url":"https://api.github.com/repos/apache/trafficcontrol/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/trafficcontrol/downloads","issues_url":"https://api.github.com/repos/apache/trafficcontrol/issues{/number}","pulls_url":"https://api.github.com/repos/apache/trafficcontrol/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/trafficcontrol/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/trafficcontrol/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/trafficcontrol/labels{/name}","releases_url":"https://api.github.com/repos/apache/trafficcontrol/releases{/id}","deployments_url":"https://api.github.com/repos/apache/trafficcontrol/deployments","created_at":"2016-09-02T07:00:06Z","updated_at":"2018-12-28T16:51:42Z","pushed_at":"2018-12-29T06:40:24Z","git_url":"git://github.com/apache/trafficcontrol.git","ssh_url":"git@github.com:apache/trafficcontrol.git","clone_url":"https://github.com/apache/trafficcontrol.git","svn_url":"https://github.com/apache/trafficcontrol","homepage":"https://trafficcontrol.apache.org","size":80485,"stargazers_count":264,"watchers_count":264,"language":"Perl","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":148,"mirror_url":null,"archived":false,"open_issues_count":504,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":148,"open_issues":504,"watchers":264,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/trafficcontrol/pulls/3163"},"html":{"href":"https://github.com/apache/trafficcontrol/pull/3163"},"issue":{"href":"https://api.github.com/repos/apache/trafficcontrol/issues/3163"},"comments":{"href":"https://api.github.com/repos/apache/trafficcontrol/issues/3163/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/trafficcontrol/pulls/3163/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/trafficcontrol/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/trafficcontrol/pulls/3163/commits"},"statuses":{"href":"https://api.github.com/repos/apache/trafficcontrol/statuses/3961cbbd480ee940785a8e582489c52783a720b6"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"rob05c"}}