{"action":"created","comment":{"url":"https://api.github.com/repos/idaholab/moose/pulls/comments/191019425","pull_request_review_id":123524874,"id":191019425,"diff_hunk":"@@ -0,0 +1,43 @@\n+//* This file is part of the MOOSE framework\n+//* https://www.mooseframework.org\n+//*\n+//* All rights reserved, see COPYRIGHT for full restrictions\n+//* https://github.com/idaholab/moose/blob/master/COPYRIGHT\n+//*\n+//* Licensed under LGPL 2.1, please see LICENSE for details\n+//* https://www.gnu.org/licenses/lgpl-2.1.html\n+\n+#include \"PerfGraphInterface.h\"\n+\n+#include \"MooseApp.h\"\n+\n+template <>\n+InputParameters\n+validParams<PerfGraphInterface>()\n+{\n+  InputParameters params = emptyInputParameters();\n+  return params;\n+}\n+\n+PerfGraphInterface::PerfGraphInterface(const MooseObject * moose_object, std::string prefix)\n+  : _pg_params(&moose_object->parameters()),\n+    _perf_graph(_pg_params->get<MooseApp *>(\"_moose_app\")->perfGraph()),","path":"framework/src/interfaces/PerfGraphInterface.C","position":24,"original_position":24,"commit_id":"eb426a9f7b83f221ed9bdc3519b93e90f206c78e","original_commit_id":"eb426a9f7b83f221ed9bdc3519b93e90f206c78e","user":{"login":"friedmud","id":870705,"avatar_url":"https://avatars0.githubusercontent.com/u/870705?v=4","gravatar_id":"","url":"https://api.github.com/users/friedmud","html_url":"https://github.com/friedmud","followers_url":"https://api.github.com/users/friedmud/followers","following_url":"https://api.github.com/users/friedmud/following{/other_user}","gists_url":"https://api.github.com/users/friedmud/gists{/gist_id}","starred_url":"https://api.github.com/users/friedmud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/friedmud/subscriptions","organizations_url":"https://api.github.com/users/friedmud/orgs","repos_url":"https://api.github.com/users/friedmud/repos","events_url":"https://api.github.com/users/friedmud/events{/privacy}","received_events_url":"https://api.github.com/users/friedmud/received_events","type":"User","site_admin":false},"body":"I guess I didn't here because I don't have access to the \"normal\" one in MooseObject... but I didn't think about the fact that I could, of course, just call it directly... 🤦‍♂️ ","created_at":"2018-05-25T22:08:58Z","updated_at":"2018-05-25T22:08:58Z","html_url":"https://github.com/idaholab/moose/pull/11552#discussion_r191019425","pull_request_url":"https://api.github.com/repos/idaholab/moose/pulls/11552","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/idaholab/moose/pulls/comments/191019425"},"html":{"href":"https://github.com/idaholab/moose/pull/11552#discussion_r191019425"},"pull_request":{"href":"https://api.github.com/repos/idaholab/moose/pulls/11552"}},"in_reply_to_id":189622165},"pull_request":{"url":"https://api.github.com/repos/idaholab/moose/pulls/11552","id":189317840,"html_url":"https://github.com/idaholab/moose/pull/11552","diff_url":"https://github.com/idaholab/moose/pull/11552.diff","patch_url":"https://github.com/idaholab/moose/pull/11552.patch","issue_url":"https://api.github.com/repos/idaholab/moose/issues/11552","number":11552,"state":"open","locked":false,"title":"PerfGraph","user":{"login":"friedmud","id":870705,"avatar_url":"https://avatars0.githubusercontent.com/u/870705?v=4","gravatar_id":"","url":"https://api.github.com/users/friedmud","html_url":"https://github.com/friedmud","followers_url":"https://api.github.com/users/friedmud/followers","following_url":"https://api.github.com/users/friedmud/following{/other_user}","gists_url":"https://api.github.com/users/friedmud/gists{/gist_id}","starred_url":"https://api.github.com/users/friedmud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/friedmud/subscriptions","organizations_url":"https://api.github.com/users/friedmud/orgs","repos_url":"https://api.github.com/users/friedmud/repos","events_url":"https://api.github.com/users/friedmud/events{/privacy}","received_events_url":"https://api.github.com/users/friedmud/received_events","type":"User","site_admin":false},"body":"This is my initial implementation of an object to replace the old PerfLog for #11551  .  This is still pretty rough - but I want to put it here for discussion.  Please take a look if you have time...\r\n\r\nThere are 4 main objects that are added here:\r\n\r\n - `PerfGraph`: The actual graph object itself.  This holds the root node and is where you register new named sections.  This also holds the current call stack.\r\n - `PerfNode`: A node in the PerfGraph, basically just holds elapsed time and children pointers\r\n - `PerfGuard`: A \"scope guard\" that pushes a new node on the end of the stack and keeps track of the time it's alive - adding that time to the node.\r\n - `PerfGraphInterface`: An interface class for objects to inherit from to get access to the MooseApp's PerfGraph\r\n\r\nObjects that inherit from `PerfGraphInterface` can call `registerTimedSection()` to register a named section of code.  It returns an ID that the caller must hold onto.  Later, in the section to be timed `TIME_SECTION()` is called and the appropriate ID is passed in.\r\n\r\nThis works extremely well... but has one big drawback: the large number of member variables to hold timing IDs for some classes.  That said: I seriously can't see a way around it.  The advantages of going with registration like this are HUGE - and are only going to grow (I have a lot more features planned for registration such as log \"levels\").\r\n\r\nI haven't put any time into making the output look pretty yet.  I figure @permcody can help with that (need to do some sort of formatted table - where the first column is the indented set of registered names).\r\n\r\nIt currently produces output that looks like (for `simple_diffusion`):\r\n\r\n```\r\nroot self: 0.005468 children: 0.081396 total: 0.086864\r\n  MooseApp::run self: 2.7e-05 children: 0.081369 total: 0.081396\r\n    MooseApp::setupOptions self: 0.01663 children: 0 total: 0.01663\r\n    MooseApp::runInputFile self: 7.7e-05 children: 0.03704 total: 0.037117\r\n      Action::Mesh::act self: 0.000854 children: 0.006212 total: 0.007066\r\n        Mesh::init self: 0.006212 children: 0 total: 0.006212\r\n      Action::Mesh::uniformRefine self: 1e-06 children: 0.000577 total: 0.000578\r\n        Action::Mesh::uniformRefine self: 4e-06 children: 0.000573 total: 0.000577\r\n          Action::Mesh::uniformRefine self: 1.1e-05 children: 0 total: 1.1e-05\r\n          Mesh::prepare self: 8.9e-05 children: 0.000473 total: 0.000562\r\n            Mesh::update self: 1.8e-05 children: 0.000453 total: 0.000471\r\n              Mesh::buildNodeList self: 0.000364 children: 0 total: 0.000364\r\n              Mesh::buildBndElemList self: 3.3e-05 children: 0 total: 3.3e-05\r\n              Mesh::cacheInfo self: 5.6e-05 children: 0 total: 5.6e-05\r\n            Mesh::detectOrthogonalDimRanges self: 2e-06 children: 0 total: 2e-06\r\n      Action::u::act self: 4e-06 children: 0 total: 4e-06\r\n      Action::diff::act self: 0.001288 children: 0 total: 0.001288\r\n      Action::left::act self: 0.000652 children: 0 total: 0.000652\r\n      Action::right::act self: 0.000326 children: 0 total: 0.000326\r\n      Action::Executioner::act self: 0.001448 children: 0 total: 0.001448\r\n      Action::Outputs::act self: 0.00171 children: 0 total: 0.00171\r\n      Action::::act self: 0 children: 0 total: 0\r\n      Action::exodus::act self: 0.003735 children: 0.013982 total: 0.017717\r\n        Mesh::getActiveLocalElementRange self: 2.9e-05 children: 0 total: 2.9e-05\r\n        FEProblemBase::init self: 0.000389 children: 0.013216 total: 0.013605\r\n          Mesh::meshChanged self: 3e-06 children: 0.000156 total: 0.000159\r\n            Mesh::update self: 2e-05 children: 8.5e-05 total: 0.000105\r\n              Mesh::buildNodeList self: 2.3e-05 children: 0 total: 2.3e-05\r\n              Mesh::buildBndElemList self: 2.4e-05 children: 0 total: 2.4e-05\r\n              Mesh::cacheInfo self: 3.8e-05 children: 0 total: 3.8e-05\r\n            Mesh::getActiveLocalElementRange self: 1.1e-05 children: 0 total: 1.1e-05\r\n            Mesh::getActiveNodeRange self: 1.3e-05 children: 0 total: 1.3e-05\r\n            Mesh::getLocalNodeRange self: 1.3e-05 children: 0 total: 1.3e-05\r\n            Mesh::getBoundaryNodeRange self: 8e-06 children: 0 total: 8e-06\r\n            Mesh::getBoundaryElementRange self: 6e-06 children: 0 total: 6e-06\r\n          FEProblemBase::EquationSystems::Init self: 0.013057 children: 0 total: 0.013057\r\n        FEProblemBase::notifyWhenMeshChanges self: 0.000348 children: 0 total: 0.000348\r\n      Action::console::act self: 0.001098 children: 0 total: 0.001098\r\n      Action::FEProblem::act self: 0.005153 children: 0 total: 0.005153\r\n    MooseApp::executeExecutioner self: 6.6e-05 children: 0.027556 total: 0.027622\r\n      FEProblemBase::initialSetup self: 0.000795 children: 0.000388 total: 0.001183\r\n        Mesh::meshChanged self: 2e-06 children: 0.000175 total: 0.000177\r\n          Mesh::update self: 2.5e-05 children: 0.000103 total: 0.000128\r\n            Mesh::buildNodeList self: 3.4e-05 children: 0 total: 3.4e-05\r\n            Mesh::buildBndElemList self: 2.7e-05 children: 0 total: 2.7e-05\r\n            Mesh::cacheInfo self: 4.2e-05 children: 0 total: 4.2e-05\r\n          Mesh::getActiveLocalElementRange self: 1.3e-05 children: 0 total: 1.3e-05\r\n          Mesh::getActiveNodeRange self: 1e-05 children: 0 total: 1e-05\r\n          Mesh::getLocalNodeRange self: 1e-05 children: 0 total: 1e-05\r\n          Mesh::getBoundaryNodeRange self: 8e-06 children: 0 total: 8e-06\r\n          Mesh::getBoundaryElementRange self: 6e-06 children: 0 total: 6e-06\r\n        Mesh::updateActiveSemiLocalNodeRange self: 2.9e-05 children: 0 total: 2.9e-05\r\n        FEProblemBase::projectSolution self: 0.000174 children: 0 total: 0.000174\r\n        FEProblemBase::computeUserObjects self: 7e-06 children: 0 total: 7e-06\r\n        FEProblemBase::reinitBecauseOfGhostingOrNewGeomObjects self: 0 children: 0 total: 0\r\n        FEProblemBase::execMultiAppTransfers self: 1e-06 children: 0 total: 1e-06\r\n      FEProblemBase::computeUserObjects self: 1.4e-05 children: 0 total: 1.4e-05\r\n      FEProblemBase::updateActiveObjects self: 5.3e-05 children: 0 total: 5.3e-05\r\n      FEProblemBase::solve self: 0.01559 children: 0.004827 total: 0.020417\r\n        FEProblemBase::computeResidualSys self: 1.3e-05 children: 0.003774 total: 0.003787\r\n          FEProblemBase::computeResidualInternal self: 1e-05 children: 0.003764 total: 0.003774\r\n            FEProblemBase::computeResidualTags self: 0.003716 children: 4.8e-05 total: 0.003764\r\n              FEProblemBase::computeUserObjects self: 2.6e-05 children: 0 total: 2.6e-05\r\n              FEProblemBase::execMultiAppTransfers self: 1.2e-05 children: 0 total: 1.2e-05\r\n              FEProblemBase::checkExceptionAndStopSolve self: 1e-05 children: 0 total: 1e-05\r\n        FEProblemBase::computeJacobianInternal self: 4e-06 children: 0.001023 total: 0.001027\r\n          FEProblemBase::computeJacobianTags self: 0.001016 children: 7e-06 total: 0.001023\r\n            FEProblemBase::computeUserObjects self: 5e-06 children: 0 total: 5e-06\r\n            FEProblemBase::execMultiAppTransfers self: 1e-06 children: 0 total: 1e-06\r\n            FEProblemBase::checkExceptionAndStopSolve self: 1e-06 children: 0 total: 1e-06\r\n        FEProblemBase::checkNonlinearConvergence self: 7e-06 children: 0 total: 7e-06\r\n        FEProblemBase::checkLinearConvergence self: 6e-06 children: 0 total: 6e-06\r\n      FEProblemBase::advanceState self: 3.1e-05 children: 0 total: 3.1e-05\r\n      FEProblemBase::outputStep self: 0.005858 children: 0 total: 0.005858\r\n```\r\n\r\nI still have a lot of things planned including:\r\n\r\n - log levels: Not everything is of the same importance: in the registration, we can allow the specification of a \"log level\"... the lower the number the more \"important\"... this will allow filtering the tree output\r\n - only output if over a percentage of total time: This is something I've always wanted... a way to filter the perf log output to only show the nodes who's time reaches some threshold of the total time\r\n - Heaviest sections: Similar to Instruments \"invert call tree\"... find the top sections and list them in order\r\n - File format: come up with some file format so that the data can be postprocessed\r\n - GUI: Would be really cool to create a GUI (Peacock plugin?) that can slurp in the file format and display the tree (similar to Instruments)\r\n - Thread safety: this is actually harder than it sounds.  I have some ideas here.\r\n\r\nA note on performance: The actual bookkeeping inside PerfGraph itself is extremely fast.  I did some timings and using the PerfGuard and everything... there is very little overhead added.  Unfortunately though: `std::chrono::steady_clock::now()` is still a `syscall`... and incurs a pretty huge penalty.  That means that we still can't use this stuff in _really_ tight loops.  That said: it's not terrible, so we should feel free to sprinkle it around liberally...\r\n\r\nFinally: I don't expect this to pass anything.  It's nearly 3AM so I'm sure I've messed stuff up somewhere....","created_at":"2018-05-21T08:46:24Z","updated_at":"2018-05-25T22:08:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b749a243ba7b3c10262a4a47e82a41d91585f778","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":337680520,"url":"https://api.github.com/repos/idaholab/moose/labels/PR:%20Do%20Not%20Merge","name":"PR: Do Not Merge","color":"e11d21","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/idaholab/moose/pulls/11552/commits","review_comments_url":"https://api.github.com/repos/idaholab/moose/pulls/11552/comments","review_comment_url":"https://api.github.com/repos/idaholab/moose/pulls/comments{/number}","comments_url":"https://api.github.com/repos/idaholab/moose/issues/11552/comments","statuses_url":"https://api.github.com/repos/idaholab/moose/statuses/eb426a9f7b83f221ed9bdc3519b93e90f206c78e","head":{"label":"friedmud:perf_graph_11551","ref":"perf_graph_11551","sha":"eb426a9f7b83f221ed9bdc3519b93e90f206c78e","user":{"login":"friedmud","id":870705,"avatar_url":"https://avatars0.githubusercontent.com/u/870705?v=4","gravatar_id":"","url":"https://api.github.com/users/friedmud","html_url":"https://github.com/friedmud","followers_url":"https://api.github.com/users/friedmud/followers","following_url":"https://api.github.com/users/friedmud/following{/other_user}","gists_url":"https://api.github.com/users/friedmud/gists{/gist_id}","starred_url":"https://api.github.com/users/friedmud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/friedmud/subscriptions","organizations_url":"https://api.github.com/users/friedmud/orgs","repos_url":"https://api.github.com/users/friedmud/repos","events_url":"https://api.github.com/users/friedmud/events{/privacy}","received_events_url":"https://api.github.com/users/friedmud/received_events","type":"User","site_admin":false},"repo":{"id":17852546,"name":"moose","full_name":"friedmud/moose","owner":{"login":"friedmud","id":870705,"avatar_url":"https://avatars0.githubusercontent.com/u/870705?v=4","gravatar_id":"","url":"https://api.github.com/users/friedmud","html_url":"https://github.com/friedmud","followers_url":"https://api.github.com/users/friedmud/followers","following_url":"https://api.github.com/users/friedmud/following{/other_user}","gists_url":"https://api.github.com/users/friedmud/gists{/gist_id}","starred_url":"https://api.github.com/users/friedmud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/friedmud/subscriptions","organizations_url":"https://api.github.com/users/friedmud/orgs","repos_url":"https://api.github.com/users/friedmud/repos","events_url":"https://api.github.com/users/friedmud/events{/privacy}","received_events_url":"https://api.github.com/users/friedmud/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/friedmud/moose","description":"Multiphysics Object Oriented Simulation Environment","fork":true,"url":"https://api.github.com/repos/friedmud/moose","forks_url":"https://api.github.com/repos/friedmud/moose/forks","keys_url":"https://api.github.com/repos/friedmud/moose/keys{/key_id}","collaborators_url":"https://api.github.com/repos/friedmud/moose/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/friedmud/moose/teams","hooks_url":"https://api.github.com/repos/friedmud/moose/hooks","issue_events_url":"https://api.github.com/repos/friedmud/moose/issues/events{/number}","events_url":"https://api.github.com/repos/friedmud/moose/events","assignees_url":"https://api.github.com/repos/friedmud/moose/assignees{/user}","branches_url":"https://api.github.com/repos/friedmud/moose/branches{/branch}","tags_url":"https://api.github.com/repos/friedmud/moose/tags","blobs_url":"https://api.github.com/repos/friedmud/moose/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/friedmud/moose/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/friedmud/moose/git/refs{/sha}","trees_url":"https://api.github.com/repos/friedmud/moose/git/trees{/sha}","statuses_url":"https://api.github.com/repos/friedmud/moose/statuses/{sha}","languages_url":"https://api.github.com/repos/friedmud/moose/languages","stargazers_url":"https://api.github.com/repos/friedmud/moose/stargazers","contributors_url":"https://api.github.com/repos/friedmud/moose/contributors","subscribers_url":"https://api.github.com/repos/friedmud/moose/subscribers","subscription_url":"https://api.github.com/repos/friedmud/moose/subscription","commits_url":"https://api.github.com/repos/friedmud/moose/commits{/sha}","git_commits_url":"https://api.github.com/repos/friedmud/moose/git/commits{/sha}","comments_url":"https://api.github.com/repos/friedmud/moose/comments{/number}","issue_comment_url":"https://api.github.com/repos/friedmud/moose/issues/comments{/number}","contents_url":"https://api.github.com/repos/friedmud/moose/contents/{+path}","compare_url":"https://api.github.com/repos/friedmud/moose/compare/{base}...{head}","merges_url":"https://api.github.com/repos/friedmud/moose/merges","archive_url":"https://api.github.com/repos/friedmud/moose/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/friedmud/moose/downloads","issues_url":"https://api.github.com/repos/friedmud/moose/issues{/number}","pulls_url":"https://api.github.com/repos/friedmud/moose/pulls{/number}","milestones_url":"https://api.github.com/repos/friedmud/moose/milestones{/number}","notifications_url":"https://api.github.com/repos/friedmud/moose/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/friedmud/moose/labels{/name}","releases_url":"https://api.github.com/repos/friedmud/moose/releases{/id}","deployments_url":"https://api.github.com/repos/friedmud/moose/deployments","created_at":"2014-03-18T03:31:09Z","updated_at":"2016-01-12T03:09:49Z","pushed_at":"2018-05-25T21:58:39Z","git_url":"git://github.com/friedmud/moose.git","ssh_url":"git@github.com:friedmud/moose.git","clone_url":"https://github.com/friedmud/moose.git","svn_url":"https://github.com/friedmud/moose","homepage":null,"size":246471,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"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":"devel"}},"base":{"label":"idaholab:devel","ref":"devel","sha":"508ebe4f186501c134200fa16ccff5014f45bc90","user":{"login":"idaholab","id":3855370,"avatar_url":"https://avatars0.githubusercontent.com/u/3855370?v=4","gravatar_id":"","url":"https://api.github.com/users/idaholab","html_url":"https://github.com/idaholab","followers_url":"https://api.github.com/users/idaholab/followers","following_url":"https://api.github.com/users/idaholab/following{/other_user}","gists_url":"https://api.github.com/users/idaholab/gists{/gist_id}","starred_url":"https://api.github.com/users/idaholab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/idaholab/subscriptions","organizations_url":"https://api.github.com/users/idaholab/orgs","repos_url":"https://api.github.com/users/idaholab/repos","events_url":"https://api.github.com/users/idaholab/events{/privacy}","received_events_url":"https://api.github.com/users/idaholab/received_events","type":"Organization","site_admin":false},"repo":{"id":16851223,"name":"moose","full_name":"idaholab/moose","owner":{"login":"idaholab","id":3855370,"avatar_url":"https://avatars0.githubusercontent.com/u/3855370?v=4","gravatar_id":"","url":"https://api.github.com/users/idaholab","html_url":"https://github.com/idaholab","followers_url":"https://api.github.com/users/idaholab/followers","following_url":"https://api.github.com/users/idaholab/following{/other_user}","gists_url":"https://api.github.com/users/idaholab/gists{/gist_id}","starred_url":"https://api.github.com/users/idaholab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/idaholab/subscriptions","organizations_url":"https://api.github.com/users/idaholab/orgs","repos_url":"https://api.github.com/users/idaholab/repos","events_url":"https://api.github.com/users/idaholab/events{/privacy}","received_events_url":"https://api.github.com/users/idaholab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/idaholab/moose","description":"Multiphysics Object Oriented Simulation Environment","fork":false,"url":"https://api.github.com/repos/idaholab/moose","forks_url":"https://api.github.com/repos/idaholab/moose/forks","keys_url":"https://api.github.com/repos/idaholab/moose/keys{/key_id}","collaborators_url":"https://api.github.com/repos/idaholab/moose/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/idaholab/moose/teams","hooks_url":"https://api.github.com/repos/idaholab/moose/hooks","issue_events_url":"https://api.github.com/repos/idaholab/moose/issues/events{/number}","events_url":"https://api.github.com/repos/idaholab/moose/events","assignees_url":"https://api.github.com/repos/idaholab/moose/assignees{/user}","branches_url":"https://api.github.com/repos/idaholab/moose/branches{/branch}","tags_url":"https://api.github.com/repos/idaholab/moose/tags","blobs_url":"https://api.github.com/repos/idaholab/moose/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/idaholab/moose/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/idaholab/moose/git/refs{/sha}","trees_url":"https://api.github.com/repos/idaholab/moose/git/trees{/sha}","statuses_url":"https://api.github.com/repos/idaholab/moose/statuses/{sha}","languages_url":"https://api.github.com/repos/idaholab/moose/languages","stargazers_url":"https://api.github.com/repos/idaholab/moose/stargazers","contributors_url":"https://api.github.com/repos/idaholab/moose/contributors","subscribers_url":"https://api.github.com/repos/idaholab/moose/subscribers","subscription_url":"https://api.github.com/repos/idaholab/moose/subscription","commits_url":"https://api.github.com/repos/idaholab/moose/commits{/sha}","git_commits_url":"https://api.github.com/repos/idaholab/moose/git/commits{/sha}","comments_url":"https://api.github.com/repos/idaholab/moose/comments{/number}","issue_comment_url":"https://api.github.com/repos/idaholab/moose/issues/comments{/number}","contents_url":"https://api.github.com/repos/idaholab/moose/contents/{+path}","compare_url":"https://api.github.com/repos/idaholab/moose/compare/{base}...{head}","merges_url":"https://api.github.com/repos/idaholab/moose/merges","archive_url":"https://api.github.com/repos/idaholab/moose/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/idaholab/moose/downloads","issues_url":"https://api.github.com/repos/idaholab/moose/issues{/number}","pulls_url":"https://api.github.com/repos/idaholab/moose/pulls{/number}","milestones_url":"https://api.github.com/repos/idaholab/moose/milestones{/number}","notifications_url":"https://api.github.com/repos/idaholab/moose/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/idaholab/moose/labels{/name}","releases_url":"https://api.github.com/repos/idaholab/moose/releases{/id}","deployments_url":"https://api.github.com/repos/idaholab/moose/deployments","created_at":"2014-02-14T22:26:15Z","updated_at":"2018-05-24T22:11:52Z","pushed_at":"2018-05-25T21:58:41Z","git_url":"git://github.com/idaholab/moose.git","ssh_url":"git@github.com:idaholab/moose.git","clone_url":"https://github.com/idaholab/moose.git","svn_url":"https://github.com/idaholab/moose","homepage":"http://www.mooseframework.org","size":246017,"stargazers_count":288,"watchers_count":288,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":432,"mirror_url":null,"archived":false,"open_issues_count":739,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":432,"open_issues":739,"watchers":288,"default_branch":"devel"}},"_links":{"self":{"href":"https://api.github.com/repos/idaholab/moose/pulls/11552"},"html":{"href":"https://github.com/idaholab/moose/pull/11552"},"issue":{"href":"https://api.github.com/repos/idaholab/moose/issues/11552"},"comments":{"href":"https://api.github.com/repos/idaholab/moose/issues/11552/comments"},"review_comments":{"href":"https://api.github.com/repos/idaholab/moose/pulls/11552/comments"},"review_comment":{"href":"https://api.github.com/repos/idaholab/moose/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/idaholab/moose/pulls/11552/commits"},"statuses":{"href":"https://api.github.com/repos/idaholab/moose/statuses/eb426a9f7b83f221ed9bdc3519b93e90f206c78e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"friedmud"}}