{"action":"created","comment":{"url":"https://api.github.com/repos/theforeman/smart-proxy/pulls/comments/223268089","pull_request_review_id":162351632,"id":223268089,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMzI2ODA4OQ==","diff_hunk":"@@ -52,30 +53,68 @@ def add(severity, message = nil, progname = nil, backtrace = nil)\n       end\n     end\n \n-    def debug(msg_or_progname, exception_or_backtrace = nil, &block)\n+    def trace?\n+      @trace ||= !!ENV['FOREMAN_TRACE']\n+    end\n+\n+    def trace(msg_or_progname = nil, exception_or_backtrace = nil, &block)\n+      add(::Logger::Severity::DEBUG, nil, msg_or_progname, exception_or_backtrace, &block) if trace?\n+    end\n+\n+    def debug(msg_or_progname = nil, exception_or_backtrace = nil, &block)\n       add(::Logger::Severity::DEBUG, nil, msg_or_progname, exception_or_backtrace, &block)\n     end\n \n-    def info(msg_or_progname, exception_or_backtrace = nil, &block)\n+    def info(msg_or_progname = nil, exception_or_backtrace = nil, &block)","path":"lib/proxy/log_buffer/decorator.rb","position":26,"original_position":26,"commit_id":"37e62db35e569f3483b64820409e2588c2011220","original_commit_id":"37e62db35e569f3483b64820409e2588c2011220","user":{"login":"ik5","id":73091,"node_id":"MDQ6VXNlcjczMDkx","avatar_url":"https://avatars0.githubusercontent.com/u/73091?v=4","gravatar_id":"","url":"https://api.github.com/users/ik5","html_url":"https://github.com/ik5","followers_url":"https://api.github.com/users/ik5/followers","following_url":"https://api.github.com/users/ik5/following{/other_user}","gists_url":"https://api.github.com/users/ik5/gists{/gist_id}","starred_url":"https://api.github.com/users/ik5/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ik5/subscriptions","organizations_url":"https://api.github.com/users/ik5/orgs","repos_url":"https://api.github.com/users/ik5/repos","events_url":"https://api.github.com/users/ik5/events{/privacy}","received_events_url":"https://api.github.com/users/ik5/received_events","type":"User","site_admin":false},"body":"The example you provided is for \"lazy\" logging, that is, it is not written right away, and if some of the information was changed when the proc/block were executed, it will hold the new content.\r\n\r\nAnother way is to do something like this:\r\n\r\n```ruby\r\nlogger.info \"Started #{env['REQUEST_METHOD']} #{env['PATH_INFO']} #{env['QUERY_STRING']}\"\r\nlogger.trace 'Headers: ' + env.select {|k,v| k.start_with? 'HTTP_'}.inspect \r\nlogger.trace (body = env['rack.input'].read).size > 0 ? 'Body: ' + body : '' \r\n```\r\n\r\nIt is logging things right away, and even if the variable changes, it already logged things with the content that was used when executed at that time.\r\n\r\nMy exemple. uses arguments, rather then the block call, so each argument have it's own place.\r\nIf I need to access the second argument, but not the first, Ruby provides a different way of doing so:\r\n\r\n```ruby\r\ndef info(msg_or_progname: = nil, exception_or_backtrace: = nil, &block)\r\n# ...\r\nend\r\n\r\nlogger.info exception_or_backtrace: e\r\n```\r\n\r\nSo the message or progname will be kept as `nil`. \r\nIf you are using it the way your PR does it, your code will be like so:\r\n\r\n```ruby\r\nlogger.info nil, e\r\n```\r\n\r\nDoes that make sense?","created_at":"2018-10-08T07:34:52Z","updated_at":"2018-10-08T07:34:52Z","html_url":"https://github.com/theforeman/smart-proxy/pull/611#discussion_r223268089","pull_request_url":"https://api.github.com/repos/theforeman/smart-proxy/pulls/611","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/theforeman/smart-proxy/pulls/comments/223268089"},"html":{"href":"https://github.com/theforeman/smart-proxy/pull/611#discussion_r223268089"},"pull_request":{"href":"https://api.github.com/repos/theforeman/smart-proxy/pulls/611"}},"in_reply_to_id":223201333},"pull_request":{"url":"https://api.github.com/repos/theforeman/smart-proxy/pulls/611","id":220372746,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIwMzcyNzQ2","html_url":"https://github.com/theforeman/smart-proxy/pull/611","diff_url":"https://github.com/theforeman/smart-proxy/pull/611.diff","patch_url":"https://github.com/theforeman/smart-proxy/pull/611.patch","issue_url":"https://api.github.com/repos/theforeman/smart-proxy/issues/611","number":611,"state":"open","locked":false,"title":"Fixes #25100 - Ruby logging stack replaced with logging gem","user":{"login":"lzap","id":49752,"node_id":"MDQ6VXNlcjQ5NzUy","avatar_url":"https://avatars0.githubusercontent.com/u/49752?v=4","gravatar_id":"","url":"https://api.github.com/users/lzap","html_url":"https://github.com/lzap","followers_url":"https://api.github.com/users/lzap/followers","following_url":"https://api.github.com/users/lzap/following{/other_user}","gists_url":"https://api.github.com/users/lzap/gists{/gist_id}","starred_url":"https://api.github.com/users/lzap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lzap/subscriptions","organizations_url":"https://api.github.com/users/lzap/orgs","repos_url":"https://api.github.com/users/lzap/repos","events_url":"https://api.github.com/users/lzap/events{/privacy}","received_events_url":"https://api.github.com/users/lzap/received_events","type":"User","site_admin":false},"body":"This is continuation of improving logging for Foreman. This patch drops code which uses the simple Ruby logging and replaces it with _logging_ gem which we also use in Foreman core. This brings new features for proxy, for example ability to send logs also to system journal with extended structured fields. I take advantage of this and send REQUEST id along with REMOTE_IP in the initial version of the patch. This is just for starters, in the future we can add more fields for example logs ORG/LOC NAME/ID but smart proxy doesn't have that available at the moment (Foreman would need to send these along with each request).\r\n\r\nThe patch does not change behavior of existing configuration values, everything stays as-is. There is new configuration option tho: `:log_file: JOURNAL` and when set, journald logger is enabled. This weird configuration syntax will need an overhaul but I don't wan to work on this since we are very close the branching date.\r\n\r\nRolling file appender stays as-is, it should keep 6 files with maximum size of 100 MB (it used to be only 10 MB which was a bit too low and no huge risk - it's just extra 90 MB * 6). I have decided to change naming convention from `proxy.1.log` for old (rolled) files to `proxy.181004.log` which is based on year, month and day. File rolling is based on weekly basis because by default on production instance logging level is at WARN level and log files for proxy are rather empty (only errors).\r\n\r\nI took the opportunity to improve logging in general.\r\n\r\nI removed access log from stdout sent by webrick and moved logging of begin/end of requests into our own middleware logger which gives us more flexility (debug output, counting time spent in milliseconds similarly like Rails). Of course we also show request id for each individual line in log file (and syslog/journal). Example:\r\n\r\n```\r\n2018-10-04T15:21:52 c6846cfa [I] Started POST /features?test=1&abc=aaa\r\n2018-10-04T15:21:52 c6846cfa [D] Headers: {\"HTTP_HOST\"=>\"localhost:8448\", \"HTTP_USER_AGENT\"=>\"curl/7.59.0\", \"HTTP_ACCEPT\"=>\"*/*\", \"HTTP_VERSION\"=>\"HTTP/1.1\"}\r\n2018-10-04T15:21:52 c6846cfa [D] Body: fsdfdssfd\r\n2018-10-04T15:21:52 c6846cfa [I] Finished POST /features (6.68 ms)\r\n```\r\n\r\nThe patch also introduces `trace` logging call which is basically a DEBUG level but it is skipped unless environmental variable `FOREMAN_TRACE` is provided. Both lines above headers and body are trace-level calls so they are only visible when needed (during extensive debugging). New TraceDecorator singleton is available and used for all Webrick log messages which are kinda useless most of the time. They can still be enabled using `FOREMAN_TRACE` if needed:\r\n\r\n```\r\n2018-10-05T15:13:16  [D] accept: ::1:49682\r\n2018-10-05T15:13:16  [D] Rack::Handler::WEBrick is invoked.\r\n... application logs ...\r\n2018-10-05T15:13:16  [D] close: ::1:49682\r\n```\r\n\r\nThe format of the log line is **not changing** in this patch, the four columns (date/time, request id, level and message) remains the same, I just dropped milliseconds from time that's the only change. But I removed Webrick's noisy AccessLog reporting on the STDOUT which was actually unused in production as far as I can tell.\r\n\r\nI vastly simplified LoggerFactory, I removed unit tests for factory tho which I find not very useful.\r\n\r\nProxy log decorator (the main logger object used through the application) now also responds to blocks correctly for faster execution when higher level is set. It also skips logging if message is empty so one can decide in the lazy-evaluated block to skip creating a log entry actually. This is used in the LoggerMiddleware for fastest possible logging of all requests.\r\n\r\nAll the work goes hand-in-hand with our overall logging initiative - logs gathered via journald can be configured via rsyslog/elasticsearch module to be sent over to central place for archival and indexing. For more info:\r\n\r\n* https://projects.theforeman.org/issues/22569\r\n* https://github.com/theforeman/foreman/pull/5237\r\n* https://docs.google.com/document/d/1C9O0nD62Q1a_78_duFrCw9jNvtDPGsVy0VqkPIGN10w/edit\r\n\r\nI am trying to hit Foreman 1.20 with this patch, review needed. Silent period starts next Monday. @ares @mmoll @tbrisker @ik5 @ekohl ","created_at":"2018-10-04T13:16:33Z","updated_at":"2018-10-08T07:34:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"04fa4a6440cfd12769298b2eac0529ef8ec1b101","assignee":null,"assignees":[],"requested_reviewers":[{"login":"ares","id":109773,"node_id":"MDQ6VXNlcjEwOTc3Mw==","avatar_url":"https://avatars0.githubusercontent.com/u/109773?v=4","gravatar_id":"","url":"https://api.github.com/users/ares","html_url":"https://github.com/ares","followers_url":"https://api.github.com/users/ares/followers","following_url":"https://api.github.com/users/ares/following{/other_user}","gists_url":"https://api.github.com/users/ares/gists{/gist_id}","starred_url":"https://api.github.com/users/ares/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ares/subscriptions","organizations_url":"https://api.github.com/users/ares/orgs","repos_url":"https://api.github.com/users/ares/repos","events_url":"https://api.github.com/users/ares/events{/privacy}","received_events_url":"https://api.github.com/users/ares/received_events","type":"User","site_admin":false},{"login":"ekohl","id":155810,"node_id":"MDQ6VXNlcjE1NTgxMA==","avatar_url":"https://avatars0.githubusercontent.com/u/155810?v=4","gravatar_id":"","url":"https://api.github.com/users/ekohl","html_url":"https://github.com/ekohl","followers_url":"https://api.github.com/users/ekohl/followers","following_url":"https://api.github.com/users/ekohl/following{/other_user}","gists_url":"https://api.github.com/users/ekohl/gists{/gist_id}","starred_url":"https://api.github.com/users/ekohl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ekohl/subscriptions","organizations_url":"https://api.github.com/users/ekohl/orgs","repos_url":"https://api.github.com/users/ekohl/repos","events_url":"https://api.github.com/users/ekohl/events{/privacy}","received_events_url":"https://api.github.com/users/ekohl/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":115870500,"node_id":"MDU6TGFiZWwxMTU4NzA1MDA=","url":"https://api.github.com/repos/theforeman/smart-proxy/labels/Needs%20testing","name":"Needs testing","color":"fbca04","default":false},{"id":115870557,"node_id":"MDU6TGFiZWwxMTU4NzA1NTc=","url":"https://api.github.com/repos/theforeman/smart-proxy/labels/Not%20yet%20reviewed","name":"Not yet reviewed","color":"009800","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/theforeman/smart-proxy/pulls/611/commits","review_comments_url":"https://api.github.com/repos/theforeman/smart-proxy/pulls/611/comments","review_comment_url":"https://api.github.com/repos/theforeman/smart-proxy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/theforeman/smart-proxy/issues/611/comments","statuses_url":"https://api.github.com/repos/theforeman/smart-proxy/statuses/37e62db35e569f3483b64820409e2588c2011220","head":{"label":"lzap:logging-gem-25100","ref":"logging-gem-25100","sha":"37e62db35e569f3483b64820409e2588c2011220","user":{"login":"lzap","id":49752,"node_id":"MDQ6VXNlcjQ5NzUy","avatar_url":"https://avatars0.githubusercontent.com/u/49752?v=4","gravatar_id":"","url":"https://api.github.com/users/lzap","html_url":"https://github.com/lzap","followers_url":"https://api.github.com/users/lzap/followers","following_url":"https://api.github.com/users/lzap/following{/other_user}","gists_url":"https://api.github.com/users/lzap/gists{/gist_id}","starred_url":"https://api.github.com/users/lzap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lzap/subscriptions","organizations_url":"https://api.github.com/users/lzap/orgs","repos_url":"https://api.github.com/users/lzap/repos","events_url":"https://api.github.com/users/lzap/events{/privacy}","received_events_url":"https://api.github.com/users/lzap/received_events","type":"User","site_admin":false},"repo":{"id":1490794,"node_id":"MDEwOlJlcG9zaXRvcnkxNDkwNzk0","name":"smart-proxy","full_name":"lzap/smart-proxy","private":false,"owner":{"login":"lzap","id":49752,"node_id":"MDQ6VXNlcjQ5NzUy","avatar_url":"https://avatars0.githubusercontent.com/u/49752?v=4","gravatar_id":"","url":"https://api.github.com/users/lzap","html_url":"https://github.com/lzap","followers_url":"https://api.github.com/users/lzap/followers","following_url":"https://api.github.com/users/lzap/following{/other_user}","gists_url":"https://api.github.com/users/lzap/gists{/gist_id}","starred_url":"https://api.github.com/users/lzap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lzap/subscriptions","organizations_url":"https://api.github.com/users/lzap/orgs","repos_url":"https://api.github.com/users/lzap/repos","events_url":"https://api.github.com/users/lzap/events{/privacy}","received_events_url":"https://api.github.com/users/lzap/received_events","type":"User","site_admin":false},"html_url":"https://github.com/lzap/smart-proxy","description":"RESTful proxies for DNS, DHCP, TFTP and Puppet","fork":true,"url":"https://api.github.com/repos/lzap/smart-proxy","forks_url":"https://api.github.com/repos/lzap/smart-proxy/forks","keys_url":"https://api.github.com/repos/lzap/smart-proxy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lzap/smart-proxy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lzap/smart-proxy/teams","hooks_url":"https://api.github.com/repos/lzap/smart-proxy/hooks","issue_events_url":"https://api.github.com/repos/lzap/smart-proxy/issues/events{/number}","events_url":"https://api.github.com/repos/lzap/smart-proxy/events","assignees_url":"https://api.github.com/repos/lzap/smart-proxy/assignees{/user}","branches_url":"https://api.github.com/repos/lzap/smart-proxy/branches{/branch}","tags_url":"https://api.github.com/repos/lzap/smart-proxy/tags","blobs_url":"https://api.github.com/repos/lzap/smart-proxy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lzap/smart-proxy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lzap/smart-proxy/git/refs{/sha}","trees_url":"https://api.github.com/repos/lzap/smart-proxy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lzap/smart-proxy/statuses/{sha}","languages_url":"https://api.github.com/repos/lzap/smart-proxy/languages","stargazers_url":"https://api.github.com/repos/lzap/smart-proxy/stargazers","contributors_url":"https://api.github.com/repos/lzap/smart-proxy/contributors","subscribers_url":"https://api.github.com/repos/lzap/smart-proxy/subscribers","subscription_url":"https://api.github.com/repos/lzap/smart-proxy/subscription","commits_url":"https://api.github.com/repos/lzap/smart-proxy/commits{/sha}","git_commits_url":"https://api.github.com/repos/lzap/smart-proxy/git/commits{/sha}","comments_url":"https://api.github.com/repos/lzap/smart-proxy/comments{/number}","issue_comment_url":"https://api.github.com/repos/lzap/smart-proxy/issues/comments{/number}","contents_url":"https://api.github.com/repos/lzap/smart-proxy/contents/{+path}","compare_url":"https://api.github.com/repos/lzap/smart-proxy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lzap/smart-proxy/merges","archive_url":"https://api.github.com/repos/lzap/smart-proxy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lzap/smart-proxy/downloads","issues_url":"https://api.github.com/repos/lzap/smart-proxy/issues{/number}","pulls_url":"https://api.github.com/repos/lzap/smart-proxy/pulls{/number}","milestones_url":"https://api.github.com/repos/lzap/smart-proxy/milestones{/number}","notifications_url":"https://api.github.com/repos/lzap/smart-proxy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lzap/smart-proxy/labels{/name}","releases_url":"https://api.github.com/repos/lzap/smart-proxy/releases{/id}","deployments_url":"https://api.github.com/repos/lzap/smart-proxy/deployments","created_at":"2011-03-17T08:31:54Z","updated_at":"2015-04-30T07:27:26Z","pushed_at":"2018-10-05T13:15:51Z","git_url":"git://github.com/lzap/smart-proxy.git","ssh_url":"git@github.com:lzap/smart-proxy.git","clone_url":"https://github.com/lzap/smart-proxy.git","svn_url":"https://github.com/lzap/smart-proxy","homepage":"http://theforeman.org/projects/smart-proxy","size":1569,"stargazers_count":1,"watchers_count":1,"language":"Ruby","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":"NOASSERTION","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":1,"default_branch":"develop"}},"base":{"label":"theforeman:develop","ref":"develop","sha":"a2aa7618d42398be87242db3f36b3c32eec93696","user":{"login":"theforeman","id":1439844,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0Mzk4NDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1439844?v=4","gravatar_id":"","url":"https://api.github.com/users/theforeman","html_url":"https://github.com/theforeman","followers_url":"https://api.github.com/users/theforeman/followers","following_url":"https://api.github.com/users/theforeman/following{/other_user}","gists_url":"https://api.github.com/users/theforeman/gists{/gist_id}","starred_url":"https://api.github.com/users/theforeman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/theforeman/subscriptions","organizations_url":"https://api.github.com/users/theforeman/orgs","repos_url":"https://api.github.com/users/theforeman/repos","events_url":"https://api.github.com/users/theforeman/events{/privacy}","received_events_url":"https://api.github.com/users/theforeman/received_events","type":"Organization","site_admin":false},"repo":{"id":986551,"node_id":"MDEwOlJlcG9zaXRvcnk5ODY1NTE=","name":"smart-proxy","full_name":"theforeman/smart-proxy","private":false,"owner":{"login":"theforeman","id":1439844,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0Mzk4NDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1439844?v=4","gravatar_id":"","url":"https://api.github.com/users/theforeman","html_url":"https://github.com/theforeman","followers_url":"https://api.github.com/users/theforeman/followers","following_url":"https://api.github.com/users/theforeman/following{/other_user}","gists_url":"https://api.github.com/users/theforeman/gists{/gist_id}","starred_url":"https://api.github.com/users/theforeman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/theforeman/subscriptions","organizations_url":"https://api.github.com/users/theforeman/orgs","repos_url":"https://api.github.com/users/theforeman/repos","events_url":"https://api.github.com/users/theforeman/events{/privacy}","received_events_url":"https://api.github.com/users/theforeman/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/theforeman/smart-proxy","description":"RESTful proxies for DNS, DHCP, TFTP, BMC and Puppet","fork":false,"url":"https://api.github.com/repos/theforeman/smart-proxy","forks_url":"https://api.github.com/repos/theforeman/smart-proxy/forks","keys_url":"https://api.github.com/repos/theforeman/smart-proxy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/theforeman/smart-proxy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/theforeman/smart-proxy/teams","hooks_url":"https://api.github.com/repos/theforeman/smart-proxy/hooks","issue_events_url":"https://api.github.com/repos/theforeman/smart-proxy/issues/events{/number}","events_url":"https://api.github.com/repos/theforeman/smart-proxy/events","assignees_url":"https://api.github.com/repos/theforeman/smart-proxy/assignees{/user}","branches_url":"https://api.github.com/repos/theforeman/smart-proxy/branches{/branch}","tags_url":"https://api.github.com/repos/theforeman/smart-proxy/tags","blobs_url":"https://api.github.com/repos/theforeman/smart-proxy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/theforeman/smart-proxy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/theforeman/smart-proxy/git/refs{/sha}","trees_url":"https://api.github.com/repos/theforeman/smart-proxy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/theforeman/smart-proxy/statuses/{sha}","languages_url":"https://api.github.com/repos/theforeman/smart-proxy/languages","stargazers_url":"https://api.github.com/repos/theforeman/smart-proxy/stargazers","contributors_url":"https://api.github.com/repos/theforeman/smart-proxy/contributors","subscribers_url":"https://api.github.com/repos/theforeman/smart-proxy/subscribers","subscription_url":"https://api.github.com/repos/theforeman/smart-proxy/subscription","commits_url":"https://api.github.com/repos/theforeman/smart-proxy/commits{/sha}","git_commits_url":"https://api.github.com/repos/theforeman/smart-proxy/git/commits{/sha}","comments_url":"https://api.github.com/repos/theforeman/smart-proxy/comments{/number}","issue_comment_url":"https://api.github.com/repos/theforeman/smart-proxy/issues/comments{/number}","contents_url":"https://api.github.com/repos/theforeman/smart-proxy/contents/{+path}","compare_url":"https://api.github.com/repos/theforeman/smart-proxy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/theforeman/smart-proxy/merges","archive_url":"https://api.github.com/repos/theforeman/smart-proxy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/theforeman/smart-proxy/downloads","issues_url":"https://api.github.com/repos/theforeman/smart-proxy/issues{/number}","pulls_url":"https://api.github.com/repos/theforeman/smart-proxy/pulls{/number}","milestones_url":"https://api.github.com/repos/theforeman/smart-proxy/milestones{/number}","notifications_url":"https://api.github.com/repos/theforeman/smart-proxy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/theforeman/smart-proxy/labels{/name}","releases_url":"https://api.github.com/repos/theforeman/smart-proxy/releases{/id}","deployments_url":"https://api.github.com/repos/theforeman/smart-proxy/deployments","created_at":"2010-10-14T10:00:51Z","updated_at":"2018-10-03T11:47:39Z","pushed_at":"2018-10-05T15:08:40Z","git_url":"git://github.com/theforeman/smart-proxy.git","ssh_url":"git@github.com:theforeman/smart-proxy.git","clone_url":"https://github.com/theforeman/smart-proxy.git","svn_url":"https://github.com/theforeman/smart-proxy","homepage":"http://theforeman.org/projects/smart-proxy","size":1938,"stargazers_count":170,"watchers_count":170,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":195,"mirror_url":null,"archived":false,"open_issues_count":17,"license":{"key":"other","name":"NOASSERTION","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":195,"open_issues":17,"watchers":170,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/theforeman/smart-proxy/pulls/611"},"html":{"href":"https://github.com/theforeman/smart-proxy/pull/611"},"issue":{"href":"https://api.github.com/repos/theforeman/smart-proxy/issues/611"},"comments":{"href":"https://api.github.com/repos/theforeman/smart-proxy/issues/611/comments"},"review_comments":{"href":"https://api.github.com/repos/theforeman/smart-proxy/pulls/611/comments"},"review_comment":{"href":"https://api.github.com/repos/theforeman/smart-proxy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/theforeman/smart-proxy/pulls/611/commits"},"statuses":{"href":"https://api.github.com/repos/theforeman/smart-proxy/statuses/37e62db35e569f3483b64820409e2588c2011220"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"ik5"}}