{"action":"created","comment":{"url":"https://api.github.com/repos/softdevteam/krun/pulls/comments/128259372","pull_request_review_id":50921758,"id":128259372,"diff_hunk":"@@ -0,0 +1,246 @@\n+#!/usr/bin/env python2.7\n+#\n+# Copyright (c) 2017 King's College London\n+# created by the Software Development Team <http://soft-dev.org/>\n+#\n+# The Universal Permissive License (UPL), Version 1.0\n+#\n+# Subject to the condition set forth below, permission is hereby granted to any\n+# person obtaining a copy of this software, associated documentation and/or\n+# data (collectively the \"Software\"), free of charge and under any and all\n+# copyright rights in the Software, and any and all patent rights owned or\n+# freely licensable by each licensor hereunder covering either (i) the\n+# unmodified Software as contributed to or provided by such licensor, or (ii)\n+# the Larger Works (as defined below), to deal in both\n+#\n+# (a) the Software, and\n+# (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n+# one is included with the Software (each a \"Larger Work\" to which the Software\n+# is contributed by such licensors),\n+#\n+# without restriction, including without limitation the rights to copy, create\n+# derivative works of, display, perform, and distribute the Software and make,\n+# use, sell, offer for sale, import, export, have made, and have sold the\n+# Software and the Larger Work(s), and to sublicense the foregoing rights on\n+# either these or other terms.\n+#\n+# This license is subject to the following condition: The above copyright\n+# notice and either this complete permission notice or at a minimum a reference\n+# to the UPL must be included in all copies or substantial portions of the\n+# Software.\n+#\n+# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+# SOFTWARE.\n+\n+\"\"\"\n+Draw plots to help you decide a suitable APERF/MPERF tolerance.\n+\n+usages:\n+   calibrate_amperf_tolerance.py compute <result-file> <aperf-estimate>\")\n+   calibrate_amperf_tolerance.py plot-hist <amstat-file>\")\n+   calibrate_amperf_tolerance.py plot-dropoff <amstat-file>\")\n+\n+First use \"compute\" mode to analyse the results, then use one of the \"plot-*\"\n+modes to generate plots from the analysed data.\n+\"\"\"\n+\n+import json\n+import sys\n+import os\n+import bz2\n+from collections import OrderedDict\n+\n+sys.path.append(os.path.join(os.path.dirname(__file__), \"..\"))\n+from krun.amperf import check_amperf_ratios\n+\n+\n+TOLERANCES = [(i + 1) * 0.0005 for i in xrange(80)]\n+\n+\n+def compute(jsn, busy_thresh, output_filename):","path":"scripts/calibrate_amperf_tolerance.py","position":65,"original_position":65,"commit_id":"78557a1e6fc77d2633d6a66e0b840094670eaed0","original_commit_id":"78557a1e6fc77d2633d6a66e0b840094670eaed0","user":{"login":"vext01","id":604955,"avatar_url":"https://avatars2.githubusercontent.com/u/604955?v=4","gravatar_id":"","url":"https://api.github.com/users/vext01","html_url":"https://github.com/vext01","followers_url":"https://api.github.com/users/vext01/followers","following_url":"https://api.github.com/users/vext01/following{/other_user}","gists_url":"https://api.github.com/users/vext01/gists{/gist_id}","starred_url":"https://api.github.com/users/vext01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vext01/subscriptions","organizations_url":"https://api.github.com/users/vext01/orgs","repos_url":"https://api.github.com/users/vext01/repos","events_url":"https://api.github.com/users/vext01/events{/privacy}","received_events_url":"https://api.github.com/users/vext01/received_events","type":"User","site_admin":false},"body":"thing is, it also computes the busy ratios.\r\n\r\n`analyse_amperf` ok?","created_at":"2017-07-19T14:18:37Z","updated_at":"2017-07-19T14:18:37Z","html_url":"https://github.com/softdevteam/krun/pull/316#discussion_r128259372","pull_request_url":"https://api.github.com/repos/softdevteam/krun/pulls/316","_links":{"self":{"href":"https://api.github.com/repos/softdevteam/krun/pulls/comments/128259372"},"html":{"href":"https://github.com/softdevteam/krun/pull/316#discussion_r128259372"},"pull_request":{"href":"https://api.github.com/repos/softdevteam/krun/pulls/316"}}},"pull_request":{"url":"https://api.github.com/repos/softdevteam/krun/pulls/316","id":130364642,"html_url":"https://github.com/softdevteam/krun/pull/316","diff_url":"https://github.com/softdevteam/krun/pull/316.diff","patch_url":"https://github.com/softdevteam/krun/pull/316.patch","issue_url":"https://api.github.com/repos/softdevteam/krun/issues/316","number":316,"state":"open","locked":false,"title":"Online amperf ratio checks","user":{"login":"vext01","id":604955,"avatar_url":"https://avatars2.githubusercontent.com/u/604955?v=4","gravatar_id":"","url":"https://api.github.com/users/vext01","html_url":"https://github.com/vext01","followers_url":"https://api.github.com/users/vext01/followers","following_url":"https://api.github.com/users/vext01/following{/other_user}","gists_url":"https://api.github.com/users/vext01/gists{/gist_id}","starred_url":"https://api.github.com/users/vext01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vext01/subscriptions","organizations_url":"https://api.github.com/users/vext01/orgs","repos_url":"https://api.github.com/users/vext01/repos","events_url":"https://api.github.com/users/vext01/events{/privacy}","received_events_url":"https://api.github.com/users/vext01/received_events","type":"User","site_admin":false},"body":"Let's start looking at this.\r\n\r\nGoal: Check APERF/MPERF ratios after each process execution and restart if one of more in-process iteration has a ratio outside of a configurable bound.\r\n\r\nNotes:\r\n\r\n * This duplicates a fair amount of code from the warmup_experiment repo, so I think the next step should probably be to flip the remaining uses to importing the krun versions and killing the originals.\r\n\r\n * We compute the outliers, and then discard them. We should consider (although in another PR) the ability to write the outliers into the results file directly, thus removing the need for the `mark_outliers_in_json` script.\r\n\r\n * You always receive an email if a process execution has a bad ratio.\r\n\r\n * After receiving and email, the system reboots without updating the reboot count, and without updating the manifest, thus re-running the process execution. \r\n\r\n * There are three new config variables to control outliers and ratios.\r\n\r\n * Needs testing on OpenBSD. I will do that next.\r\n\r\n * We can kill the old amperf check script in the warmup repo too, but we are likely to need it later for the 0.9 data prior to this change. Perhaps we should add a git tag that we can get back to later?\r\n\r\nUnit tests implemented for the routines, but system testing is awkward, so I've done that manually by adding scratch code to make ratios appear bad every so often:\r\n\r\n```\r\n\r\n        # XXX testing code\r\n        import random\r\n        xxx = random.randint(0, 39)\r\n        if xxx == 0:\r\n            ratio = 0.5\r\n            norm_aval = busy_threshold * 2\r\n        elif xxx == 1:\r\n            ratio = 1.5\r\n            norm_aval = busy_threshold * 2\r\n```\r\n\r\nSample debug log snippet:\r\n\r\n```\r\n...\r\n[2017-07-13 11:17:03: DEBUG] sync disks...                                      \r\n[2017-07-13 11:17:03: WARNING] SIMULATED: `time.sleep(30)` (--quick)            \r\n[2017-07-13 11:17:03: INFO] stderr: [iterations_runner.py] iteration 1/5        \r\n[2017-07-13 11:17:04: INFO] stderr: [iterations_runner.py] iteration 2/5        \r\n[2017-07-13 11:17:05: INFO] stderr: [iterations_runner.py] iteration 3/5        \r\n[2017-07-13 11:17:06: INFO] stderr: [iterations_runner.py] iteration 4/5        \r\n[2017-07-13 11:17:07: INFO] stderr: [iterations_runner.py] iteration 5/5        \r\n[2017-07-13 11:17:08: DEBUG] Finding outliers with window size 200              \r\n[2017-07-13 11:17:08: WARNING] APERF/MPERF ratio badness detected               \r\n  in_proc_iter=4, core=2, type=turbo, ratio=1.5                                 \r\n[2017-07-13 11:17:08: DEBUG] Sending email to 'vext01' subject line '[krun:bencher2] Benchmark needs to be re-run: dummy:CPython:defaul\r\nt-python'\r\n[2017-07-13 11:17:08: INFO] Finished 'dummy(1000)' (default-python variant) under 'CPython'\r\n[2017-07-13 11:17:08: INFO] Rebooting to re-run previous process execution      \r\n[2017-07-13 11:17:08: WARNING] SIMULATED: reboot (--hardware-reboots is OFF)    \r\n[2017-07-13 11:17:08: DEBUG] Simulated reboot with args: ../krun.py --debug debug --quick example.krun --no-tickless-check\r\n[2017-07-13 11:17:08: DEBUG] Attached log file: example_20170713_111523.log     \r\n...\r\n```\r\n\r\nSample email:\r\n\r\n```\r\nSubject: [krun:bencher2] Benchmark needs to be re-run:\r\n dummy:CPython:default-python\r\nFrom: noreply@bencher2\r\nTo: vext01@bencher2.soft-dev.org\r\nDate: Thu, 13 Jul 2017 14:04:38 +0100 (BST)\r\n\r\nMessage from krun running on bencher2:\r\n\r\nAPERF/MPERF ratio badness detected\r\n  in_proc_iter=1, core=2, type=throttle, ratio=0.5\r\n  in_proc_iter=1, core=3, type=throttle, ratio=0.5\r\n\r\nThe process execution will be retried until the ratios are OK.\r\n```\r\n\r\nComments?","created_at":"2017-07-13T13:01:54Z","updated_at":"2017-07-19T14:18:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f1865b5bb509ef9b43a55bb51c1657f9b0e7c24a","assignee":{"login":"ltratt","id":20318,"avatar_url":"https://avatars1.githubusercontent.com/u/20318?v=4","gravatar_id":"","url":"https://api.github.com/users/ltratt","html_url":"https://github.com/ltratt","followers_url":"https://api.github.com/users/ltratt/followers","following_url":"https://api.github.com/users/ltratt/following{/other_user}","gists_url":"https://api.github.com/users/ltratt/gists{/gist_id}","starred_url":"https://api.github.com/users/ltratt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ltratt/subscriptions","organizations_url":"https://api.github.com/users/ltratt/orgs","repos_url":"https://api.github.com/users/ltratt/repos","events_url":"https://api.github.com/users/ltratt/events{/privacy}","received_events_url":"https://api.github.com/users/ltratt/received_events","type":"User","site_admin":false},"assignees":[{"login":"ltratt","id":20318,"avatar_url":"https://avatars1.githubusercontent.com/u/20318?v=4","gravatar_id":"","url":"https://api.github.com/users/ltratt","html_url":"https://github.com/ltratt","followers_url":"https://api.github.com/users/ltratt/followers","following_url":"https://api.github.com/users/ltratt/following{/other_user}","gists_url":"https://api.github.com/users/ltratt/gists{/gist_id}","starred_url":"https://api.github.com/users/ltratt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ltratt/subscriptions","organizations_url":"https://api.github.com/users/ltratt/orgs","repos_url":"https://api.github.com/users/ltratt/repos","events_url":"https://api.github.com/users/ltratt/events{/privacy}","received_events_url":"https://api.github.com/users/ltratt/received_events","type":"User","site_admin":false},{"login":"snim2","id":97674,"avatar_url":"https://avatars2.githubusercontent.com/u/97674?v=4","gravatar_id":"","url":"https://api.github.com/users/snim2","html_url":"https://github.com/snim2","followers_url":"https://api.github.com/users/snim2/followers","following_url":"https://api.github.com/users/snim2/following{/other_user}","gists_url":"https://api.github.com/users/snim2/gists{/gist_id}","starred_url":"https://api.github.com/users/snim2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snim2/subscriptions","organizations_url":"https://api.github.com/users/snim2/orgs","repos_url":"https://api.github.com/users/snim2/repos","events_url":"https://api.github.com/users/snim2/events{/privacy}","received_events_url":"https://api.github.com/users/snim2/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/softdevteam/krun/pulls/316/commits","review_comments_url":"https://api.github.com/repos/softdevteam/krun/pulls/316/comments","review_comment_url":"https://api.github.com/repos/softdevteam/krun/pulls/comments{/number}","comments_url":"https://api.github.com/repos/softdevteam/krun/issues/316/comments","statuses_url":"https://api.github.com/repos/softdevteam/krun/statuses/78557a1e6fc77d2633d6a66e0b840094670eaed0","head":{"label":"softdevteam:online-amperf","ref":"online-amperf","sha":"78557a1e6fc77d2633d6a66e0b840094670eaed0","user":{"login":"softdevteam","id":10271085,"avatar_url":"https://avatars0.githubusercontent.com/u/10271085?v=4","gravatar_id":"","url":"https://api.github.com/users/softdevteam","html_url":"https://github.com/softdevteam","followers_url":"https://api.github.com/users/softdevteam/followers","following_url":"https://api.github.com/users/softdevteam/following{/other_user}","gists_url":"https://api.github.com/users/softdevteam/gists{/gist_id}","starred_url":"https://api.github.com/users/softdevteam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/softdevteam/subscriptions","organizations_url":"https://api.github.com/users/softdevteam/orgs","repos_url":"https://api.github.com/users/softdevteam/repos","events_url":"https://api.github.com/users/softdevteam/events{/privacy}","received_events_url":"https://api.github.com/users/softdevteam/received_events","type":"Organization","site_admin":false},"repo":{"id":36661834,"name":"krun","full_name":"softdevteam/krun","owner":{"login":"softdevteam","id":10271085,"avatar_url":"https://avatars0.githubusercontent.com/u/10271085?v=4","gravatar_id":"","url":"https://api.github.com/users/softdevteam","html_url":"https://github.com/softdevteam","followers_url":"https://api.github.com/users/softdevteam/followers","following_url":"https://api.github.com/users/softdevteam/following{/other_user}","gists_url":"https://api.github.com/users/softdevteam/gists{/gist_id}","starred_url":"https://api.github.com/users/softdevteam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/softdevteam/subscriptions","organizations_url":"https://api.github.com/users/softdevteam/orgs","repos_url":"https://api.github.com/users/softdevteam/repos","events_url":"https://api.github.com/users/softdevteam/events{/privacy}","received_events_url":"https://api.github.com/users/softdevteam/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/softdevteam/krun","description":"Soft-dev benchmark runner in Python.","fork":false,"url":"https://api.github.com/repos/softdevteam/krun","forks_url":"https://api.github.com/repos/softdevteam/krun/forks","keys_url":"https://api.github.com/repos/softdevteam/krun/keys{/key_id}","collaborators_url":"https://api.github.com/repos/softdevteam/krun/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/softdevteam/krun/teams","hooks_url":"https://api.github.com/repos/softdevteam/krun/hooks","issue_events_url":"https://api.github.com/repos/softdevteam/krun/issues/events{/number}","events_url":"https://api.github.com/repos/softdevteam/krun/events","assignees_url":"https://api.github.com/repos/softdevteam/krun/assignees{/user}","branches_url":"https://api.github.com/repos/softdevteam/krun/branches{/branch}","tags_url":"https://api.github.com/repos/softdevteam/krun/tags","blobs_url":"https://api.github.com/repos/softdevteam/krun/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/softdevteam/krun/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/softdevteam/krun/git/refs{/sha}","trees_url":"https://api.github.com/repos/softdevteam/krun/git/trees{/sha}","statuses_url":"https://api.github.com/repos/softdevteam/krun/statuses/{sha}","languages_url":"https://api.github.com/repos/softdevteam/krun/languages","stargazers_url":"https://api.github.com/repos/softdevteam/krun/stargazers","contributors_url":"https://api.github.com/repos/softdevteam/krun/contributors","subscribers_url":"https://api.github.com/repos/softdevteam/krun/subscribers","subscription_url":"https://api.github.com/repos/softdevteam/krun/subscription","commits_url":"https://api.github.com/repos/softdevteam/krun/commits{/sha}","git_commits_url":"https://api.github.com/repos/softdevteam/krun/git/commits{/sha}","comments_url":"https://api.github.com/repos/softdevteam/krun/comments{/number}","issue_comment_url":"https://api.github.com/repos/softdevteam/krun/issues/comments{/number}","contents_url":"https://api.github.com/repos/softdevteam/krun/contents/{+path}","compare_url":"https://api.github.com/repos/softdevteam/krun/compare/{base}...{head}","merges_url":"https://api.github.com/repos/softdevteam/krun/merges","archive_url":"https://api.github.com/repos/softdevteam/krun/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/softdevteam/krun/downloads","issues_url":"https://api.github.com/repos/softdevteam/krun/issues{/number}","pulls_url":"https://api.github.com/repos/softdevteam/krun/pulls{/number}","milestones_url":"https://api.github.com/repos/softdevteam/krun/milestones{/number}","notifications_url":"https://api.github.com/repos/softdevteam/krun/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/softdevteam/krun/labels{/name}","releases_url":"https://api.github.com/repos/softdevteam/krun/releases{/id}","deployments_url":"https://api.github.com/repos/softdevteam/krun/deployments","created_at":"2015-06-01T13:17:06Z","updated_at":"2017-06-27T22:35:05Z","pushed_at":"2017-07-19T13:51:44Z","git_url":"git://github.com/softdevteam/krun.git","ssh_url":"git@github.com:softdevteam/krun.git","clone_url":"https://github.com/softdevteam/krun.git","svn_url":"https://github.com/softdevteam/krun","homepage":"","size":1855,"stargazers_count":6,"watchers_count":6,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":11,"forks":1,"open_issues":11,"watchers":6,"default_branch":"master"}},"base":{"label":"softdevteam:master","ref":"master","sha":"a959213888d6e70915d6b9e1125dd7530b14daf7","user":{"login":"softdevteam","id":10271085,"avatar_url":"https://avatars0.githubusercontent.com/u/10271085?v=4","gravatar_id":"","url":"https://api.github.com/users/softdevteam","html_url":"https://github.com/softdevteam","followers_url":"https://api.github.com/users/softdevteam/followers","following_url":"https://api.github.com/users/softdevteam/following{/other_user}","gists_url":"https://api.github.com/users/softdevteam/gists{/gist_id}","starred_url":"https://api.github.com/users/softdevteam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/softdevteam/subscriptions","organizations_url":"https://api.github.com/users/softdevteam/orgs","repos_url":"https://api.github.com/users/softdevteam/repos","events_url":"https://api.github.com/users/softdevteam/events{/privacy}","received_events_url":"https://api.github.com/users/softdevteam/received_events","type":"Organization","site_admin":false},"repo":{"id":36661834,"name":"krun","full_name":"softdevteam/krun","owner":{"login":"softdevteam","id":10271085,"avatar_url":"https://avatars0.githubusercontent.com/u/10271085?v=4","gravatar_id":"","url":"https://api.github.com/users/softdevteam","html_url":"https://github.com/softdevteam","followers_url":"https://api.github.com/users/softdevteam/followers","following_url":"https://api.github.com/users/softdevteam/following{/other_user}","gists_url":"https://api.github.com/users/softdevteam/gists{/gist_id}","starred_url":"https://api.github.com/users/softdevteam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/softdevteam/subscriptions","organizations_url":"https://api.github.com/users/softdevteam/orgs","repos_url":"https://api.github.com/users/softdevteam/repos","events_url":"https://api.github.com/users/softdevteam/events{/privacy}","received_events_url":"https://api.github.com/users/softdevteam/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/softdevteam/krun","description":"Soft-dev benchmark runner in Python.","fork":false,"url":"https://api.github.com/repos/softdevteam/krun","forks_url":"https://api.github.com/repos/softdevteam/krun/forks","keys_url":"https://api.github.com/repos/softdevteam/krun/keys{/key_id}","collaborators_url":"https://api.github.com/repos/softdevteam/krun/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/softdevteam/krun/teams","hooks_url":"https://api.github.com/repos/softdevteam/krun/hooks","issue_events_url":"https://api.github.com/repos/softdevteam/krun/issues/events{/number}","events_url":"https://api.github.com/repos/softdevteam/krun/events","assignees_url":"https://api.github.com/repos/softdevteam/krun/assignees{/user}","branches_url":"https://api.github.com/repos/softdevteam/krun/branches{/branch}","tags_url":"https://api.github.com/repos/softdevteam/krun/tags","blobs_url":"https://api.github.com/repos/softdevteam/krun/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/softdevteam/krun/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/softdevteam/krun/git/refs{/sha}","trees_url":"https://api.github.com/repos/softdevteam/krun/git/trees{/sha}","statuses_url":"https://api.github.com/repos/softdevteam/krun/statuses/{sha}","languages_url":"https://api.github.com/repos/softdevteam/krun/languages","stargazers_url":"https://api.github.com/repos/softdevteam/krun/stargazers","contributors_url":"https://api.github.com/repos/softdevteam/krun/contributors","subscribers_url":"https://api.github.com/repos/softdevteam/krun/subscribers","subscription_url":"https://api.github.com/repos/softdevteam/krun/subscription","commits_url":"https://api.github.com/repos/softdevteam/krun/commits{/sha}","git_commits_url":"https://api.github.com/repos/softdevteam/krun/git/commits{/sha}","comments_url":"https://api.github.com/repos/softdevteam/krun/comments{/number}","issue_comment_url":"https://api.github.com/repos/softdevteam/krun/issues/comments{/number}","contents_url":"https://api.github.com/repos/softdevteam/krun/contents/{+path}","compare_url":"https://api.github.com/repos/softdevteam/krun/compare/{base}...{head}","merges_url":"https://api.github.com/repos/softdevteam/krun/merges","archive_url":"https://api.github.com/repos/softdevteam/krun/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/softdevteam/krun/downloads","issues_url":"https://api.github.com/repos/softdevteam/krun/issues{/number}","pulls_url":"https://api.github.com/repos/softdevteam/krun/pulls{/number}","milestones_url":"https://api.github.com/repos/softdevteam/krun/milestones{/number}","notifications_url":"https://api.github.com/repos/softdevteam/krun/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/softdevteam/krun/labels{/name}","releases_url":"https://api.github.com/repos/softdevteam/krun/releases{/id}","deployments_url":"https://api.github.com/repos/softdevteam/krun/deployments","created_at":"2015-06-01T13:17:06Z","updated_at":"2017-06-27T22:35:05Z","pushed_at":"2017-07-19T13:51:44Z","git_url":"git://github.com/softdevteam/krun.git","ssh_url":"git@github.com:softdevteam/krun.git","clone_url":"https://github.com/softdevteam/krun.git","svn_url":"https://github.com/softdevteam/krun","homepage":"","size":1855,"stargazers_count":6,"watchers_count":6,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":11,"forks":1,"open_issues":11,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/softdevteam/krun/pulls/316"},"html":{"href":"https://github.com/softdevteam/krun/pull/316"},"issue":{"href":"https://api.github.com/repos/softdevteam/krun/issues/316"},"comments":{"href":"https://api.github.com/repos/softdevteam/krun/issues/316/comments"},"review_comments":{"href":"https://api.github.com/repos/softdevteam/krun/pulls/316/comments"},"review_comment":{"href":"https://api.github.com/repos/softdevteam/krun/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/softdevteam/krun/pulls/316/commits"},"statuses":{"href":"https://api.github.com/repos/softdevteam/krun/statuses/78557a1e6fc77d2633d6a66e0b840094670eaed0"}}}}
{"actor":{"display_login":"vext01"}}