{"action":"created","comment":{"url":"https://api.github.com/repos/PBSPro/pbspro/pulls/comments/189131913","pull_request_review_id":121237652,"id":189131913,"diff_hunk":"@@ -0,0 +1,153 @@\n+# coding: utf-8\n+# Copyright (C) 1994-2018 Altair Engineering, Inc.\n+# For more information, contact Altair at www.altair.com.\n+#\n+# This file is part of the PBS Professional (\"PBS Pro\") software.\n+#\n+# Open Source License Information:\n+#\n+# PBS Pro is free software. You can redistribute it and/or modify it under the\n+# terms of the GNU Affero General Public License as published by the Free\n+# Software Foundation, either version 3 of the License, or (at your option) any\n+# later version.\n+#\n+# PBS Pro is distributed in the hope that it will be useful, but WITHOUT ANY\n+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n+# FOR A PARTICULAR PURPOSE.\n+# See the GNU Affero General Public License for more details.\n+#\n+# You should have received a copy of the GNU Affero General Public License\n+# along with this program.  If not, see <http://www.gnu.org/licenses/>.\n+#\n+# Commercial License Information:\n+#\n+# For a copy of the commercial license terms and conditions,\n+# go to: (http://www.pbspro.com/UserArea/agreement.html)\n+# or contact the Altair Legal Department.\n+#\n+# Altair’s dual-license business model allows companies, individuals, and\n+# organizations to create proprietary derivative works of PBS Pro and\n+# distribute them - whether embedded or bundled with other software -\n+# under a commercial license agreement.\n+#\n+# Use of Altair’s trademarks, including but not limited to \"PBS™\",\n+# \"PBS Professional®\", and \"PBS Pro™\" and Altair’s logos is subject to Altair's\n+# trademark licensing policies.\n+\n+from tests.functional import *\n+\n+\n+class HighResLoggingTestSuite(TestFunctional):\n+\n+    \"\"\"\n+    TestSuite for High resolution logging in PBS\n+    \"\"\"\n+    tm_micro_re = re.compile(\n+        r'(\\d{2,2}/\\d{2,2}/\\d{4,4}\\s\\d{2,2}:\\d{2,2}:\\d{2,2}.\\d{6,6})')\n+\n+    def test_disabled(self):\n+        \"\"\"\n+        Default High resolution should be disabled (logfile version)\n+        \"\"\"\n+        j = Job(TEST_USER)\n+        jid = self.server.submit(j)\n+        self.server.expect(JOB, {ATTR_state: 'R'}, id=jid)\n+        lines = self.server.log_lines(logtype=self.server,\n+                                      starttime=self.server.ctime)\n+        ok = True\n+        for line in lines:\n+            m = self.tm_micro_re.match(line)\n+            if m is not None:\n+                ok = False\n+        _msg = 'Found high resolution time stamp in log,' \\\n+               ' it shouldn\\'t be there'\n+        self.assertTrue(ok, _msg)\n+        _msg = self.server.shortname + \\\n+            ': High resolution time stamp not found in log'\n+        self.logger.info(_msg)\n+\n+    def test_disabled_tracejob(self):\n+        \"\"\"\n+        Default High resolution should be disabled (tracejob version)\n+        \"\"\"\n+        j = Job(TEST_USER)\n+        jid = self.server.submit(j)\n+        self.server.expect(JOB, {ATTR_state: 'R'}, id=jid)\n+        lines = self.server.log_lines(logtype='tracejob', id=jid, n='ALL')\n+        if len(lines) > 1:\n+            # Remove first line as it is not log line\n+            lines = lines[1:]\n+        ok = True\n+        for line in lines:\n+            m = self.tm_micro_re.match(line)\n+            if m is not None:\n+                ok = False\n+        _msg = 'Found high resolution time stamp in tracejob, ' \\\n+            'it should not be there'\n+        self.assertTrue(ok, _msg)\n+        _msg = self.server.shortname + \\\n+            ': High resolution time stamp not found in tracejob output'\n+        self.logger.info(_msg)\n+\n+    def test_basic(self):\n+        \"\"\"\n+        Enable High resolution logging, restart server\n+        and look for high resolution time stamp in server log\n+        \"\"\"\n+        a = {'PBS_LOG_HIGHRES_TIMESTAMP': 1}\n+        self.du.set_pbs_config(confs=a, append=True)\n+        _msg = 'Failed to restart server: %s' % (self.server.shortname)\n+        self.assertTrue(self.server.restart(), _msg)\n+        j = Job(TEST_USER)\n+        jid = self.server.submit(j)\n+        self.server.expect(JOB, {ATTR_state: 'R'}, id=jid)\n+        lines = self.server.log_lines(logtype=self.server, n=20)\n+        ok = True\n+        for line in lines:\n+            m = self.tm_micro_re.match(line)\n+            if m is None:\n+                ok = False\n+        _msg = 'Not Found high resolution time stamp in log'\n+        self.assertTrue(ok, _msg)\n+        _msg = self.server.shortname + \\\n+            ': High resolution time stamp found in log'\n+        self.logger.info(_msg)\n+\n+    def test_basic_tracejob(self):\n+        \"\"\"\n+        Enable High resolution logging, restart PBS Daemons\n+        and look for high resolution time stamp in tracejob output\n+        \"\"\"\n+        a = {'PBS_LOG_HIGHRES_TIMESTAMP': 1}\n+        self.du.set_pbs_config(confs=a, append=True)\n+        PBSInitServices().restart()\n+        self.assertTrue(self.server.isUp(), 'Failed to restart PBS Daemons')\n+        j = Job(TEST_USER)\n+        jid = self.server.submit(j)\n+        self.server.expect(JOB, {ATTR_state: 'R'}, id=jid)\n+        lines = self.server.log_lines(logtype='tracejob', id=jid, n='ALL')\n+        if len(lines) > 1:\n+            # Remove first line as it is not log line\n+            lines = lines[1:]\n+        ok = True\n+        for line in lines:\n+            m = self.tm_micro_re.match(line)\n+            if m is None:\n+                # If this is accounting log, ignore it as\n+                # Accounting log does not have high res logging\n+                line = line.split()\n+                if (len(line) >= 3) and (line[2].strip() != 'A'):\n+                    ok = False\n+        _msg = 'Not Found high resolution time stamp in log'\n+        self.assertTrue(ok, _msg)\n+        _msg = self.server.shortname + \\\n+            ': High resolution time stamp found in log'\n+        self.logger.info(_msg)\n+\n+    def tearDown(self):\n+        confs = self.du.parse_pbs_config()\n+        if 'PBS_LOG_HIGHRES_TIMESTAMP' in confs:","path":"test/tests/functional/pbs_highreslog.py","position":149,"original_position":149,"commit_id":"74ba6fd3f93e8e1188953a2c3c85913ee4b2f866","original_commit_id":"2551383703ad3c35baa22af252d0bc9e15592b93","user":{"login":"arungrover","id":17924134,"avatar_url":"https://avatars0.githubusercontent.com/u/17924134?v=4","gravatar_id":"","url":"https://api.github.com/users/arungrover","html_url":"https://github.com/arungrover","followers_url":"https://api.github.com/users/arungrover/followers","following_url":"https://api.github.com/users/arungrover/following{/other_user}","gists_url":"https://api.github.com/users/arungrover/gists{/gist_id}","starred_url":"https://api.github.com/users/arungrover/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arungrover/subscriptions","organizations_url":"https://api.github.com/users/arungrover/orgs","repos_url":"https://api.github.com/users/arungrover/repos","events_url":"https://api.github.com/users/arungrover/events{/privacy}","received_events_url":"https://api.github.com/users/arungrover/received_events","type":"User","site_admin":false},"body":"Shouldn't this be added as part of default setup? why are you removing it here?","created_at":"2018-05-17T23:46:52Z","updated_at":"2018-05-17T23:51:15Z","html_url":"https://github.com/PBSPro/pbspro/pull/693#discussion_r189131913","pull_request_url":"https://api.github.com/repos/PBSPro/pbspro/pulls/693","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/PBSPro/pbspro/pulls/comments/189131913"},"html":{"href":"https://github.com/PBSPro/pbspro/pull/693#discussion_r189131913"},"pull_request":{"href":"https://api.github.com/repos/PBSPro/pbspro/pulls/693"}}},"pull_request":{"url":"https://api.github.com/repos/PBSPro/pbspro/pulls/693","id":188554938,"html_url":"https://github.com/PBSPro/pbspro/pull/693","diff_url":"https://github.com/PBSPro/pbspro/pull/693.diff","patch_url":"https://github.com/PBSPro/pbspro/pull/693.patch","issue_url":"https://api.github.com/repos/PBSPro/pbspro/issues/693","number":693,"state":"open","locked":false,"title":"PP-261: Microsecond Logging","user":{"login":"bhroam","id":17993078,"avatar_url":"https://avatars3.githubusercontent.com/u/17993078?v=4","gravatar_id":"","url":"https://api.github.com/users/bhroam","html_url":"https://github.com/bhroam","followers_url":"https://api.github.com/users/bhroam/followers","following_url":"https://api.github.com/users/bhroam/following{/other_user}","gists_url":"https://api.github.com/users/bhroam/gists{/gist_id}","starred_url":"https://api.github.com/users/bhroam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhroam/subscriptions","organizations_url":"https://api.github.com/users/bhroam/orgs","repos_url":"https://api.github.com/users/bhroam/repos","events_url":"https://api.github.com/users/bhroam/events{/privacy}","received_events_url":"https://api.github.com/users/bhroam/received_events","type":"User","site_admin":false},"body":"<!--- Please review your changes in preview mode -->\r\n<!--- Provide a general summary of your changes in the Title above -->\r\n\r\n#### Bug/feature Description\r\n* This PR implements the RFE for microsecond logging.  \r\n*  [PP-261](https://pbspro.atlassian.net/browse/PP-261)\r\n* PTL bug where the dshutils functions pbs_set_config(), pbs_unset_config(), and pbs_set_environment() would only work if the test was run as root.  Plus there wasn't pbs_unset_environment(), so that was implemented.\r\n* Fixed test pbs_init_script.py to be able to be run as non-root.\r\n\r\n#### Cause / Analysis / Design\r\n* Design: https://pbspro.atlassian.net/wiki/spaces/PD/pages/50836942/PP-261+micro-second+time+stamp+for+daemon+logging\r\n* Discussion: http://community.pbspro.org/t/pp-261-micro-second-time-stamp-for-daemon-logging/467\r\n\r\n#### Solution Description\r\n* PTL bug: The root cause was that all the functions called an internal function called _set_file().  _set_file() would call run_copy() without sudo=True.  I fixed it by adding a sudo argument to _set_file() which is passed to run_copy().  In all the affected functions, I pass sudo=True.\r\n* Test bug: The test didn't call run_cmd() with sudo=True.  This meant the init script wouldn't be able to stop/start PBS.  Also, the env argument to run_cmd() won't work with the sudo argument.  It will pass the environmental variables to the sudo process which strips them from the real command.  I had to pass the environmental variables on the command line.\r\n#### Testing logs/output\r\n*  [ptl.log](https://github.com/PBSPro/pbspro/files/2010743/ptl.log)\r\n* Other tests that use affected functions:  [ptl2.log](https://github.com/PBSPro/pbspro/files/2011259/ptl2.log)\r\n\r\n\r\n\r\n#### Checklist:\r\n<!--- Use the preview button to see the checkboxes/links properly. -->\r\n<!--- Go over the following points, and put an `x` (without spaces around it) in the boxes that apply. -->\r\n<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->\r\n- [X] I have joined the **[pbspro community forum](http://community.pbspro.org/)**.\r\n- [X] My pull request contains a **single, signed** commit. See **[setting up gpg signature](https://pbspro.atlassian.net/wiki/display/DG/Signing+Your+Git+Commits)**.\r\n- [X] My code follows the **[coding style](https://pbspro.atlassian.net/wiki/display/DG/Coding+Standards)** of this project.\r\n- [X] My change requires project documentation. See **[required documentation checklist](https://pbspro.atlassian.net/wiki/display/DG/Checklist+for+Developing+Features+and+Bug+Fixes)** for details.\r\n   - [X] I have added documentation in the **[project documentation area](https://pbspro.atlassian.net/wiki/display/PD)**.\r\n- [X] I have added new **PTL test(s) to my commit**. (See **[using PTL for testing](https://pbspro.atlassian.net/wiki/display/DG/Using+PTL+for+Testing)**) *(or)*\r\n   - [ ] I have added  **manual test(s) to this pull request and explained why PTL is not appropriate** for this case.\r\n- [X] All new and existing automated tests have passed. (See **[running automated PTL tests](https://pbspro.atlassian.net/wiki/display/DG/PTL+Quick+Start+Guide)**).\r\n- [X] I have attached **test logs to this pull request** as evidence of testing/verification.\r\n\r\n\r\n__***For further information please visit the [Developer Guide Home](https://pbspro.atlassian.net/wiki/display/DG/Developer+Guide+Home).***__\r\n","created_at":"2018-05-16T20:45:27Z","updated_at":"2018-05-17T23:51:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2112a9da06ed58cfc9f36fe5668e16710b44e946","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/PBSPro/pbspro/pulls/693/commits","review_comments_url":"https://api.github.com/repos/PBSPro/pbspro/pulls/693/comments","review_comment_url":"https://api.github.com/repos/PBSPro/pbspro/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PBSPro/pbspro/issues/693/comments","statuses_url":"https://api.github.com/repos/PBSPro/pbspro/statuses/74ba6fd3f93e8e1188953a2c3c85913ee4b2f866","head":{"label":"bhroam:PP-261","ref":"PP-261","sha":"74ba6fd3f93e8e1188953a2c3c85913ee4b2f866","user":{"login":"bhroam","id":17993078,"avatar_url":"https://avatars3.githubusercontent.com/u/17993078?v=4","gravatar_id":"","url":"https://api.github.com/users/bhroam","html_url":"https://github.com/bhroam","followers_url":"https://api.github.com/users/bhroam/followers","following_url":"https://api.github.com/users/bhroam/following{/other_user}","gists_url":"https://api.github.com/users/bhroam/gists{/gist_id}","starred_url":"https://api.github.com/users/bhroam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhroam/subscriptions","organizations_url":"https://api.github.com/users/bhroam/orgs","repos_url":"https://api.github.com/users/bhroam/repos","events_url":"https://api.github.com/users/bhroam/events{/privacy}","received_events_url":"https://api.github.com/users/bhroam/received_events","type":"User","site_admin":false},"repo":{"id":61060466,"name":"pbspro","full_name":"bhroam/pbspro","owner":{"login":"bhroam","id":17993078,"avatar_url":"https://avatars3.githubusercontent.com/u/17993078?v=4","gravatar_id":"","url":"https://api.github.com/users/bhroam","html_url":"https://github.com/bhroam","followers_url":"https://api.github.com/users/bhroam/followers","following_url":"https://api.github.com/users/bhroam/following{/other_user}","gists_url":"https://api.github.com/users/bhroam/gists{/gist_id}","starred_url":"https://api.github.com/users/bhroam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhroam/subscriptions","organizations_url":"https://api.github.com/users/bhroam/orgs","repos_url":"https://api.github.com/users/bhroam/repos","events_url":"https://api.github.com/users/bhroam/events{/privacy}","received_events_url":"https://api.github.com/users/bhroam/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bhroam/pbspro","description":null,"fork":true,"url":"https://api.github.com/repos/bhroam/pbspro","forks_url":"https://api.github.com/repos/bhroam/pbspro/forks","keys_url":"https://api.github.com/repos/bhroam/pbspro/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bhroam/pbspro/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bhroam/pbspro/teams","hooks_url":"https://api.github.com/repos/bhroam/pbspro/hooks","issue_events_url":"https://api.github.com/repos/bhroam/pbspro/issues/events{/number}","events_url":"https://api.github.com/repos/bhroam/pbspro/events","assignees_url":"https://api.github.com/repos/bhroam/pbspro/assignees{/user}","branches_url":"https://api.github.com/repos/bhroam/pbspro/branches{/branch}","tags_url":"https://api.github.com/repos/bhroam/pbspro/tags","blobs_url":"https://api.github.com/repos/bhroam/pbspro/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bhroam/pbspro/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bhroam/pbspro/git/refs{/sha}","trees_url":"https://api.github.com/repos/bhroam/pbspro/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bhroam/pbspro/statuses/{sha}","languages_url":"https://api.github.com/repos/bhroam/pbspro/languages","stargazers_url":"https://api.github.com/repos/bhroam/pbspro/stargazers","contributors_url":"https://api.github.com/repos/bhroam/pbspro/contributors","subscribers_url":"https://api.github.com/repos/bhroam/pbspro/subscribers","subscription_url":"https://api.github.com/repos/bhroam/pbspro/subscription","commits_url":"https://api.github.com/repos/bhroam/pbspro/commits{/sha}","git_commits_url":"https://api.github.com/repos/bhroam/pbspro/git/commits{/sha}","comments_url":"https://api.github.com/repos/bhroam/pbspro/comments{/number}","issue_comment_url":"https://api.github.com/repos/bhroam/pbspro/issues/comments{/number}","contents_url":"https://api.github.com/repos/bhroam/pbspro/contents/{+path}","compare_url":"https://api.github.com/repos/bhroam/pbspro/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bhroam/pbspro/merges","archive_url":"https://api.github.com/repos/bhroam/pbspro/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bhroam/pbspro/downloads","issues_url":"https://api.github.com/repos/bhroam/pbspro/issues{/number}","pulls_url":"https://api.github.com/repos/bhroam/pbspro/pulls{/number}","milestones_url":"https://api.github.com/repos/bhroam/pbspro/milestones{/number}","notifications_url":"https://api.github.com/repos/bhroam/pbspro/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bhroam/pbspro/labels{/name}","releases_url":"https://api.github.com/repos/bhroam/pbspro/releases{/id}","deployments_url":"https://api.github.com/repos/bhroam/pbspro/deployments","created_at":"2016-06-13T18:35:25Z","updated_at":"2018-05-14T21:53:11Z","pushed_at":"2018-05-17T18:19:07Z","git_url":"git://github.com/bhroam/pbspro.git","ssh_url":"git@github.com:bhroam/pbspro.git","clone_url":"https://github.com/bhroam/pbspro.git","svn_url":"https://github.com/bhroam/pbspro","homepage":null,"size":15164,"stargazers_count":0,"watchers_count":0,"language":"C","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":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"PBSPro:master","ref":"master","sha":"637ba43c7ea71811c0031d867c8876301ca7c2a3","user":{"login":"PBSPro","id":19280436,"avatar_url":"https://avatars2.githubusercontent.com/u/19280436?v=4","gravatar_id":"","url":"https://api.github.com/users/PBSPro","html_url":"https://github.com/PBSPro","followers_url":"https://api.github.com/users/PBSPro/followers","following_url":"https://api.github.com/users/PBSPro/following{/other_user}","gists_url":"https://api.github.com/users/PBSPro/gists{/gist_id}","starred_url":"https://api.github.com/users/PBSPro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PBSPro/subscriptions","organizations_url":"https://api.github.com/users/PBSPro/orgs","repos_url":"https://api.github.com/users/PBSPro/repos","events_url":"https://api.github.com/users/PBSPro/events{/privacy}","received_events_url":"https://api.github.com/users/PBSPro/received_events","type":"Organization","site_admin":false},"repo":{"id":59082072,"name":"pbspro","full_name":"PBSPro/pbspro","owner":{"login":"PBSPro","id":19280436,"avatar_url":"https://avatars2.githubusercontent.com/u/19280436?v=4","gravatar_id":"","url":"https://api.github.com/users/PBSPro","html_url":"https://github.com/PBSPro","followers_url":"https://api.github.com/users/PBSPro/followers","following_url":"https://api.github.com/users/PBSPro/following{/other_user}","gists_url":"https://api.github.com/users/PBSPro/gists{/gist_id}","starred_url":"https://api.github.com/users/PBSPro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PBSPro/subscriptions","organizations_url":"https://api.github.com/users/PBSPro/orgs","repos_url":"https://api.github.com/users/PBSPro/repos","events_url":"https://api.github.com/users/PBSPro/events{/privacy}","received_events_url":"https://api.github.com/users/PBSPro/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/PBSPro/pbspro","description":"An HPC workload manager and job scheduler for desktops, clusters, and clouds.","fork":false,"url":"https://api.github.com/repos/PBSPro/pbspro","forks_url":"https://api.github.com/repos/PBSPro/pbspro/forks","keys_url":"https://api.github.com/repos/PBSPro/pbspro/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PBSPro/pbspro/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PBSPro/pbspro/teams","hooks_url":"https://api.github.com/repos/PBSPro/pbspro/hooks","issue_events_url":"https://api.github.com/repos/PBSPro/pbspro/issues/events{/number}","events_url":"https://api.github.com/repos/PBSPro/pbspro/events","assignees_url":"https://api.github.com/repos/PBSPro/pbspro/assignees{/user}","branches_url":"https://api.github.com/repos/PBSPro/pbspro/branches{/branch}","tags_url":"https://api.github.com/repos/PBSPro/pbspro/tags","blobs_url":"https://api.github.com/repos/PBSPro/pbspro/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PBSPro/pbspro/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PBSPro/pbspro/git/refs{/sha}","trees_url":"https://api.github.com/repos/PBSPro/pbspro/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PBSPro/pbspro/statuses/{sha}","languages_url":"https://api.github.com/repos/PBSPro/pbspro/languages","stargazers_url":"https://api.github.com/repos/PBSPro/pbspro/stargazers","contributors_url":"https://api.github.com/repos/PBSPro/pbspro/contributors","subscribers_url":"https://api.github.com/repos/PBSPro/pbspro/subscribers","subscription_url":"https://api.github.com/repos/PBSPro/pbspro/subscription","commits_url":"https://api.github.com/repos/PBSPro/pbspro/commits{/sha}","git_commits_url":"https://api.github.com/repos/PBSPro/pbspro/git/commits{/sha}","comments_url":"https://api.github.com/repos/PBSPro/pbspro/comments{/number}","issue_comment_url":"https://api.github.com/repos/PBSPro/pbspro/issues/comments{/number}","contents_url":"https://api.github.com/repos/PBSPro/pbspro/contents/{+path}","compare_url":"https://api.github.com/repos/PBSPro/pbspro/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PBSPro/pbspro/merges","archive_url":"https://api.github.com/repos/PBSPro/pbspro/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PBSPro/pbspro/downloads","issues_url":"https://api.github.com/repos/PBSPro/pbspro/issues{/number}","pulls_url":"https://api.github.com/repos/PBSPro/pbspro/pulls{/number}","milestones_url":"https://api.github.com/repos/PBSPro/pbspro/milestones{/number}","notifications_url":"https://api.github.com/repos/PBSPro/pbspro/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PBSPro/pbspro/labels{/name}","releases_url":"https://api.github.com/repos/PBSPro/pbspro/releases{/id}","deployments_url":"https://api.github.com/repos/PBSPro/pbspro/deployments","created_at":"2016-05-18T04:31:29Z","updated_at":"2018-05-15T04:18:18Z","pushed_at":"2018-05-17T22:53:11Z","git_url":"git://github.com/PBSPro/pbspro.git","ssh_url":"git@github.com:PBSPro/pbspro.git","clone_url":"https://github.com/PBSPro/pbspro.git","svn_url":"https://github.com/PBSPro/pbspro","homepage":"www.pbspro.org","size":15144,"stargazers_count":164,"watchers_count":164,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":137,"mirror_url":null,"archived":false,"open_issues_count":8,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":137,"open_issues":8,"watchers":164,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/PBSPro/pbspro/pulls/693"},"html":{"href":"https://github.com/PBSPro/pbspro/pull/693"},"issue":{"href":"https://api.github.com/repos/PBSPro/pbspro/issues/693"},"comments":{"href":"https://api.github.com/repos/PBSPro/pbspro/issues/693/comments"},"review_comments":{"href":"https://api.github.com/repos/PBSPro/pbspro/pulls/693/comments"},"review_comment":{"href":"https://api.github.com/repos/PBSPro/pbspro/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PBSPro/pbspro/pulls/693/commits"},"statuses":{"href":"https://api.github.com/repos/PBSPro/pbspro/statuses/74ba6fd3f93e8e1188953a2c3c85913ee4b2f866"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"arungrover"}}