{"action":"created","comment":{"url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/comments/223232243","pull_request_review_id":162309192,"id":223232243,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMzIzMjI0Mw==","diff_hunk":"@@ -0,0 +1,275 @@\n+#!/usr/bin/perl\n+# -*- perl -*-\n+\n+=encoding utf8\n+\n+=head1 NAME\n+\n+unifi_clients_by_device - Munin plugin to display clients connected \n+for each ubiquity / unifi device.\n+\n+=head1 APPLICABLE SYSTEMS\n+\n+Currently is cabable of polling the unifi line (Ubiquity) from the unifi \n+API - requires direct access to the controllor API.\n+\n+=head1 CONFIGURATION\n+\n+This script uses the multigraph functionality to generate many graphs.\n+\n+For multigraph operation, the \"internal\" graphs will be one per device\n+with seperate metrics for users and guests. The main graph shows total\n+clients.\n+\n+If you are only interested in a single combined graph, you can set:\n+\n+  [unifi_clients_by_device]\n+    env.multigraph no\n+\n+You will also need to supply your API login details - you may do so \n+per-plugin, or using a wildcard like below:\n+\n+  [unifi_*]\n+    env.user Controller_Username\n+    # default is ubnt\n+    env.pass Controller_Password\n+    # default is ubnt\n+    env.host https://unifi.fqdn.com:8443\n+    # default is localhost:8443\n+    env.sslh no \n+    # Check That SSL host is valid, default is yes\n+    env.sslp no \n+    # Check That SSL peer is valid, default is yes\n+    env.name Site Name\n+    # A pretty name for the unifi site - used in graph titles.\n+    env.site site_string \n+    # default is \"default\" - found when you connect to the web interface - it's the term\n+    # in the URL - /manage/site/site_string/dashboard\n+\n+=head1 CAPABILITIES\n+\n+This plugin is a multigraph plugin by default.\n+\n+This plugin supports DIRTYCONFIG : L<http://guide.munin-monitoring.org/en/latest/plugin/protocol-dirtyconfig.html>\n+\n+=head1 DEPENDENCIES\n+\n+=over\n+\n+=item WWW::Curl::Easy\n+\n+Perl extension interface for libcurl\n+\n+=item JSON\n+\n+ JSON (JavaScript Object Notation) encoder/decoder\n+\n+=back\n+\n+=head1 LICENSE\n+\n+Copyright (C) 2018 J.T.Sage (jtsage@gmail.com)\n+\n+This program is free software: you can redistribute it and/or modify\n+it under the terms of the GNU General Public License as published by\n+the Free Software Foundation, either version 3 of the License, or\n+any later version.\n+\n+This program is distributed in the hope that it will be useful,\n+but WITHOUT ANY WARRANTY; without even the implied warranty of\n+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+GNU General Public License for more details.\n+\n+You should have received a copy of the GNU General Public License\n+along with this program.  If not, see L<http://www.gnu.org/licenses/>.\n+\n+=head1 VERSION\n+\n+Most recent version available from \n+\n+L<https://github.com/jtsage/unifi-munin-plugins>\n+\n+=head1 MAGICK MARKERS\n+\n+  #%# family=manual\n+  #%# capabilities=\n+\n+=cut\n+\n+use warnings;\n+use strict;\n+use utf8;\n+\n+# Check dependancies\n+my @errorCode;\n+my $me = (split '/', $0)[-1];\n+\n+if (! eval {require JSON; JSON->import(); 1; } ) {\n+\tpush @errorCode, \"JSON module not found\";\n+}\n+if (! eval {require WWW::Curl::Easy; 1;} ) {\n+\tpush @errorCode, \"WWW::Curl::Easy module not found\";\n+}\n+\n+# Provide autoconf info\n+if ( defined($ARGV[0]) && $ARGV[0] eq \"autoconf\" ) {\n+\tpush @errorCode, \"Requires configuration\";\n+\tprint \"no (\", join(\", \" => @errorCode), \")\\n\";\n+\texit(0);\n+}\n+\n+# Fail on not found dependancies\n+if ( @errorCode != 0 ) {\n+\tdie \"FATAL:$me: Perl dependancies not installed (\", join(\", \" => @errorCode), \")\\n\";\n+}\n+\n+# Use multigraph by default, if it's available - allow user override\n+my $use_multigraph = ( $ENV{\"MUNIN_CAP_MULTIGRAPH\"} ) ? (\n+\t\t( defined $ENV{'multigraph'} && $ENV{'multigraph'} =~ m/no/i ) ? (\n+\t\t\t0 # User disabled\n+\t\t) : (\n+\t\t\t1 # Default Option\n+\t\t)\n+\t) : (\n+\t\t0 # Not Supported By Munin\n+\t);\n+\n+# Somewhat (in)sane defaults for host, pass, etc.\n+#\n+# Note: SSL checking might not work.  My test rig does not.\n+my %APIconfig = (\n+\t\"user\"     => (( defined $ENV{'user'} ) ? $ENV{'user'} : \"ubnt\"),\n+\t\"pass\"     => (( defined $ENV{'pass'} ) ? $ENV{'pass'} : \"ubnt\"),\n+\t\"host\"     => (( defined $ENV{'host'} ) ? $ENV{'host'} : \"https://localhost:8443\"),\n+\t\"site\"     => (( defined $ENV{'site'} ) ? $ENV{'site'} : \"default\"),\n+\t\"sslh\"     => (( defined $ENV{'sslh'} ) ? $ENV{'sslh'} : \"yes\"),\n+\t\"sslp\"     => (( defined $ENV{'sslp'} ) ? $ENV{'sslp'} : \"yes\"),\n+\t\"name\"     => (( defined $ENV{'name'} ) ? $ENV{'name'} : \"Unnamed Site\"),\n+);\n+\n+# Set up needed API endpoints and date strings\n+my $APILogin  = $APIconfig{\"host\"} . \"/api/login\";\n+my $APILogout = $APIconfig{\"host\"} . \"/api/logout\";\n+my $APIPoint  = $APIconfig{\"host\"} . \"/api/s/\" . $APIconfig{\"site\"} . \"/stat/device\";\n+my $APIData   = \"{'username':'\" . $APIconfig{\"user\"} . \"', 'password':'\" . $APIconfig{\"pass\"} . \"'}\";\n+my $APISSLHst = ( $APIconfig{\"sslh\"} =~ m/no/i ) ? 0 : 2;\n+my $APISSLPer = ( $APIconfig{\"sslp\"} =~ m/no/i ) ? 0 : 1;\n+my $APIRawResp; my $APILogResp; my $ignore;\n+\n+# Init curl.\n+my $curl = WWW::Curl::Easy->new() or die \"FATAL:$me: WWW::Curl::Easy init failed!\\n\";\n+my $retcode;\n+\n+# Set up curl, and login to API\n+$curl->setopt($curl->CURLOPT_POST,1);\n+$curl->setopt($curl->CURLOPT_COOKIEFILE,\"\");  # Session only cookie\n+$curl->setopt($curl->CURLOPT_SSL_VERIFYPEER, $APISSLPer);\n+$curl->setopt($curl->CURLOPT_SSL_VERIFYHOST, $APISSLHst);\n+$curl->setopt($curl->CURL_SSLVERSION_TLSv1, 1);\n+$curl->setopt($curl->CURLOPT_URL, $APILogin);\n+$curl->setopt($curl->CURLOPT_POSTFIELDS, $APIData );\n+$curl->setopt($curl->CURLOPT_WRITEDATA, \\$APILogResp);\n+$retcode = $curl->perform;\n+\n+if ( $retcode != 0 ) {\n+\tdie \"FATAL:$me: Unable to connect to API: \" . $curl->strerror($retcode) . \" \" . $curl->errbuf . \"\\n\";\n+}\n+\n+my $jsonLogOBJ = JSON->new() or die \"FATAL:$me: JSON init failed!\\n\";\n+my $jsonLogResp = $jsonLogOBJ->allow_nonref->utf8->relaxed->decode($APILogResp);\n+if ( $jsonLogResp->{\"meta\"}->{\"rc\"} ne \"ok\" ) {\n+\tdie \"FATAL:$me: Unable to login to API - it said: \" , $jsonLogResp->{\"meta\"}->{\"msg\"} , \"\\n\";\n+}\n+\n+# Get some API data.\n+$curl->setopt($curl->CURLOPT_HTTPGET,1);\n+$curl->setopt($curl->CURLOPT_WRITEDATA, \\$APIRawResp);\n+$curl->setopt($curl->CURLOPT_URL, $APIPoint);\n+$retcode = $curl->perform;\n+\n+# Decode response\n+my $jsonOBJ = JSON->new() or die \"FATAL:$me: JSON init failed!\\n\";\n+my $jsonResp = $jsonOBJ->allow_nonref->utf8->relaxed->decode($APIRawResp);\n+\n+if ( $retcode != 0 ) {\n+\tdie \"FATAL:$me: Unable to fetch data from API: \" . $curl->strerror($retcode) . \" \" . $curl->errbuf . \"\\n\";\n+}\n+\n+\n+# Log back out. (Should invalidate our cookie file, just in case)\n+$curl->setopt($curl->CURLOPT_HTTPGET,1);\n+$curl->setopt($curl->CURLOPT_WRITEDATA, \\$ignore);\n+$curl->setopt($curl->CURLOPT_URL, $APILogout);\n+$retcode = $curl->perform;\n+\n+if ( $retcode != 0 ) {\n+\tdie \"FATAL:$me: Unable to logout of API: \" . $curl->strerror($retcode) . \" \" . $curl->errbuf . \"\\n\";\n+}\n+","path":"plugins/unifi/unifi_clients_by_device","position":208,"original_position":208,"commit_id":"44c3b81fcd1becd69d19aec22abe174da9561d42","original_commit_id":"44c3b81fcd1becd69d19aec22abe174da9561d42","user":{"login":"jtsage","id":605986,"node_id":"MDQ6VXNlcjYwNTk4Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/605986?v=4","gravatar_id":"","url":"https://api.github.com/users/jtsage","html_url":"https://github.com/jtsage","followers_url":"https://api.github.com/users/jtsage/followers","following_url":"https://api.github.com/users/jtsage/following{/other_user}","gists_url":"https://api.github.com/users/jtsage/gists{/gist_id}","starred_url":"https://api.github.com/users/jtsage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jtsage/subscriptions","organizations_url":"https://api.github.com/users/jtsage/orgs","repos_url":"https://api.github.com/users/jtsage/repos","events_url":"https://api.github.com/users/jtsage/events{/privacy}","received_events_url":"https://api.github.com/users/jtsage/received_events","type":"User","site_admin":false},"body":"Cool - that makes sense.  I think what I'll do is go monolithic - in the same manner that I did with unifi_device_stats - everything on be default, but allow individual aspects to be shut off.  It's more config, but as you said, I would imagine the vast majority of users would want all of the bits turned on.\r\n\r\nAnd thats good to hear on the CGI front, that does remove my concern about performance totally - actually, the single plugin approach will actually allow me to reduce the number of API calls, which is also not a bad thing at all - right now, it hits the API 3 times per plugin, and the unifi API is not the fastest thing to query over the network - it's not bad, but it definitely had an impact on the runtime of munin-update.  Thanks for the help, expect to see some of these updates added to this pull request sometime soon - it's kinda been nice, as I hadn't touched perl in *years*, working the brain a bit hard.","created_at":"2018-10-07T23:15:49Z","updated_at":"2018-10-07T23:15:49Z","html_url":"https://github.com/munin-monitoring/contrib/pull/950#discussion_r223232243","pull_request_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/950","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/comments/223232243"},"html":{"href":"https://github.com/munin-monitoring/contrib/pull/950#discussion_r223232243"},"pull_request":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/950"}},"in_reply_to_id":223229828},"pull_request":{"url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/950","id":220974019,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIwOTc0MDE5","html_url":"https://github.com/munin-monitoring/contrib/pull/950","diff_url":"https://github.com/munin-monitoring/contrib/pull/950.diff","patch_url":"https://github.com/munin-monitoring/contrib/pull/950.patch","issue_url":"https://api.github.com/repos/munin-monitoring/contrib/issues/950","number":950,"state":"open","locked":false,"title":"Add a group of plugins for unifi (Ubiquity) gear","user":{"login":"jtsage","id":605986,"node_id":"MDQ6VXNlcjYwNTk4Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/605986?v=4","gravatar_id":"","url":"https://api.github.com/users/jtsage","html_url":"https://github.com/jtsage","followers_url":"https://api.github.com/users/jtsage/followers","following_url":"https://api.github.com/users/jtsage/following{/other_user}","gists_url":"https://api.github.com/users/jtsage/gists{/gist_id}","starred_url":"https://api.github.com/users/jtsage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jtsage/subscriptions","organizations_url":"https://api.github.com/users/jtsage/orgs","repos_url":"https://api.github.com/users/jtsage/repos","events_url":"https://api.github.com/users/jtsage/events{/privacy}","received_events_url":"https://api.github.com/users/jtsage/received_events","type":"User","site_admin":false},"body":"Plugins available:\r\n\r\n * unifi_clients_by_device - Count the number of clients connected on a per-device basis\r\n\r\n * unifi_clients_by_network - Count the number of clients connected to each named network\r\n\r\n * unifi_device_stats - Get basic stats from each unifi device - cpu, memory, load average, and uptime\r\n\r\n * unifi_xfer_by_device - Transfer stats on a per-device basis\r\n\r\n * unifi_xfer_by_network - Transfer stats on a per-network basis\r\n\r\n * unifi_xfer_by_port - Transfer stats per switch port\r\n\r\n * unifi_xfer_by_uplink - Overall transfer with speedtest stats\r\n\r\nExample graphs included.\r\n\r\nMain repo: https://github.com/jtsage/unifi-munin-plugins","created_at":"2018-10-07T21:14:02Z","updated_at":"2018-10-07T23:15:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1082a9f6fd80fd754cdcafd3eb0b1b84feff544d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/950/commits","review_comments_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/950/comments","review_comment_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls/comments{/number}","comments_url":"https://api.github.com/repos/munin-monitoring/contrib/issues/950/comments","statuses_url":"https://api.github.com/repos/munin-monitoring/contrib/statuses/44c3b81fcd1becd69d19aec22abe174da9561d42","head":{"label":"jtsage:add_unifi_plugins","ref":"add_unifi_plugins","sha":"44c3b81fcd1becd69d19aec22abe174da9561d42","user":{"login":"jtsage","id":605986,"node_id":"MDQ6VXNlcjYwNTk4Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/605986?v=4","gravatar_id":"","url":"https://api.github.com/users/jtsage","html_url":"https://github.com/jtsage","followers_url":"https://api.github.com/users/jtsage/followers","following_url":"https://api.github.com/users/jtsage/following{/other_user}","gists_url":"https://api.github.com/users/jtsage/gists{/gist_id}","starred_url":"https://api.github.com/users/jtsage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jtsage/subscriptions","organizations_url":"https://api.github.com/users/jtsage/orgs","repos_url":"https://api.github.com/users/jtsage/repos","events_url":"https://api.github.com/users/jtsage/events{/privacy}","received_events_url":"https://api.github.com/users/jtsage/received_events","type":"User","site_admin":false},"repo":{"id":151985249,"node_id":"MDEwOlJlcG9zaXRvcnkxNTE5ODUyNDk=","name":"contrib","full_name":"jtsage/contrib","private":false,"owner":{"login":"jtsage","id":605986,"node_id":"MDQ6VXNlcjYwNTk4Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/605986?v=4","gravatar_id":"","url":"https://api.github.com/users/jtsage","html_url":"https://github.com/jtsage","followers_url":"https://api.github.com/users/jtsage/followers","following_url":"https://api.github.com/users/jtsage/following{/other_user}","gists_url":"https://api.github.com/users/jtsage/gists{/gist_id}","starred_url":"https://api.github.com/users/jtsage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jtsage/subscriptions","organizations_url":"https://api.github.com/users/jtsage/orgs","repos_url":"https://api.github.com/users/jtsage/repos","events_url":"https://api.github.com/users/jtsage/events{/privacy}","received_events_url":"https://api.github.com/users/jtsage/received_events","type":"User","site_admin":false},"html_url":"https://github.com/jtsage/contrib","description":"Contributed stuff for munin (plugins, tools, etc...)","fork":true,"url":"https://api.github.com/repos/jtsage/contrib","forks_url":"https://api.github.com/repos/jtsage/contrib/forks","keys_url":"https://api.github.com/repos/jtsage/contrib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jtsage/contrib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jtsage/contrib/teams","hooks_url":"https://api.github.com/repos/jtsage/contrib/hooks","issue_events_url":"https://api.github.com/repos/jtsage/contrib/issues/events{/number}","events_url":"https://api.github.com/repos/jtsage/contrib/events","assignees_url":"https://api.github.com/repos/jtsage/contrib/assignees{/user}","branches_url":"https://api.github.com/repos/jtsage/contrib/branches{/branch}","tags_url":"https://api.github.com/repos/jtsage/contrib/tags","blobs_url":"https://api.github.com/repos/jtsage/contrib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jtsage/contrib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jtsage/contrib/git/refs{/sha}","trees_url":"https://api.github.com/repos/jtsage/contrib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jtsage/contrib/statuses/{sha}","languages_url":"https://api.github.com/repos/jtsage/contrib/languages","stargazers_url":"https://api.github.com/repos/jtsage/contrib/stargazers","contributors_url":"https://api.github.com/repos/jtsage/contrib/contributors","subscribers_url":"https://api.github.com/repos/jtsage/contrib/subscribers","subscription_url":"https://api.github.com/repos/jtsage/contrib/subscription","commits_url":"https://api.github.com/repos/jtsage/contrib/commits{/sha}","git_commits_url":"https://api.github.com/repos/jtsage/contrib/git/commits{/sha}","comments_url":"https://api.github.com/repos/jtsage/contrib/comments{/number}","issue_comment_url":"https://api.github.com/repos/jtsage/contrib/issues/comments{/number}","contents_url":"https://api.github.com/repos/jtsage/contrib/contents/{+path}","compare_url":"https://api.github.com/repos/jtsage/contrib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jtsage/contrib/merges","archive_url":"https://api.github.com/repos/jtsage/contrib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jtsage/contrib/downloads","issues_url":"https://api.github.com/repos/jtsage/contrib/issues{/number}","pulls_url":"https://api.github.com/repos/jtsage/contrib/pulls{/number}","milestones_url":"https://api.github.com/repos/jtsage/contrib/milestones{/number}","notifications_url":"https://api.github.com/repos/jtsage/contrib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jtsage/contrib/labels{/name}","releases_url":"https://api.github.com/repos/jtsage/contrib/releases{/id}","deployments_url":"https://api.github.com/repos/jtsage/contrib/deployments","created_at":"2018-10-07T21:04:24Z","updated_at":"2018-10-07T21:04:29Z","pushed_at":"2018-10-07T21:12:54Z","git_url":"git://github.com/jtsage/contrib.git","ssh_url":"git@github.com:jtsage/contrib.git","clone_url":"https://github.com/jtsage/contrib.git","svn_url":"https://github.com/jtsage/contrib","homepage":"http://munin-monitoring.org","size":10356,"stargazers_count":0,"watchers_count":0,"language":"Perl","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"munin-monitoring:master","ref":"master","sha":"25a7b2c0f1b3b3ce7a217d92798fe7c96afd747b","user":{"login":"munin-monitoring","id":909917,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkwOTkxNw==","avatar_url":"https://avatars0.githubusercontent.com/u/909917?v=4","gravatar_id":"","url":"https://api.github.com/users/munin-monitoring","html_url":"https://github.com/munin-monitoring","followers_url":"https://api.github.com/users/munin-monitoring/followers","following_url":"https://api.github.com/users/munin-monitoring/following{/other_user}","gists_url":"https://api.github.com/users/munin-monitoring/gists{/gist_id}","starred_url":"https://api.github.com/users/munin-monitoring/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/munin-monitoring/subscriptions","organizations_url":"https://api.github.com/users/munin-monitoring/orgs","repos_url":"https://api.github.com/users/munin-monitoring/repos","events_url":"https://api.github.com/users/munin-monitoring/events{/privacy}","received_events_url":"https://api.github.com/users/munin-monitoring/received_events","type":"Organization","site_admin":false},"repo":{"id":2035393,"node_id":"MDEwOlJlcG9zaXRvcnkyMDM1Mzkz","name":"contrib","full_name":"munin-monitoring/contrib","private":false,"owner":{"login":"munin-monitoring","id":909917,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkwOTkxNw==","avatar_url":"https://avatars0.githubusercontent.com/u/909917?v=4","gravatar_id":"","url":"https://api.github.com/users/munin-monitoring","html_url":"https://github.com/munin-monitoring","followers_url":"https://api.github.com/users/munin-monitoring/followers","following_url":"https://api.github.com/users/munin-monitoring/following{/other_user}","gists_url":"https://api.github.com/users/munin-monitoring/gists{/gist_id}","starred_url":"https://api.github.com/users/munin-monitoring/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/munin-monitoring/subscriptions","organizations_url":"https://api.github.com/users/munin-monitoring/orgs","repos_url":"https://api.github.com/users/munin-monitoring/repos","events_url":"https://api.github.com/users/munin-monitoring/events{/privacy}","received_events_url":"https://api.github.com/users/munin-monitoring/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/munin-monitoring/contrib","description":"Contributed stuff for munin (plugins, tools, etc...)","fork":false,"url":"https://api.github.com/repos/munin-monitoring/contrib","forks_url":"https://api.github.com/repos/munin-monitoring/contrib/forks","keys_url":"https://api.github.com/repos/munin-monitoring/contrib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/munin-monitoring/contrib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/munin-monitoring/contrib/teams","hooks_url":"https://api.github.com/repos/munin-monitoring/contrib/hooks","issue_events_url":"https://api.github.com/repos/munin-monitoring/contrib/issues/events{/number}","events_url":"https://api.github.com/repos/munin-monitoring/contrib/events","assignees_url":"https://api.github.com/repos/munin-monitoring/contrib/assignees{/user}","branches_url":"https://api.github.com/repos/munin-monitoring/contrib/branches{/branch}","tags_url":"https://api.github.com/repos/munin-monitoring/contrib/tags","blobs_url":"https://api.github.com/repos/munin-monitoring/contrib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/munin-monitoring/contrib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/munin-monitoring/contrib/git/refs{/sha}","trees_url":"https://api.github.com/repos/munin-monitoring/contrib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/munin-monitoring/contrib/statuses/{sha}","languages_url":"https://api.github.com/repos/munin-monitoring/contrib/languages","stargazers_url":"https://api.github.com/repos/munin-monitoring/contrib/stargazers","contributors_url":"https://api.github.com/repos/munin-monitoring/contrib/contributors","subscribers_url":"https://api.github.com/repos/munin-monitoring/contrib/subscribers","subscription_url":"https://api.github.com/repos/munin-monitoring/contrib/subscription","commits_url":"https://api.github.com/repos/munin-monitoring/contrib/commits{/sha}","git_commits_url":"https://api.github.com/repos/munin-monitoring/contrib/git/commits{/sha}","comments_url":"https://api.github.com/repos/munin-monitoring/contrib/comments{/number}","issue_comment_url":"https://api.github.com/repos/munin-monitoring/contrib/issues/comments{/number}","contents_url":"https://api.github.com/repos/munin-monitoring/contrib/contents/{+path}","compare_url":"https://api.github.com/repos/munin-monitoring/contrib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/munin-monitoring/contrib/merges","archive_url":"https://api.github.com/repos/munin-monitoring/contrib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/munin-monitoring/contrib/downloads","issues_url":"https://api.github.com/repos/munin-monitoring/contrib/issues{/number}","pulls_url":"https://api.github.com/repos/munin-monitoring/contrib/pulls{/number}","milestones_url":"https://api.github.com/repos/munin-monitoring/contrib/milestones{/number}","notifications_url":"https://api.github.com/repos/munin-monitoring/contrib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/munin-monitoring/contrib/labels{/name}","releases_url":"https://api.github.com/repos/munin-monitoring/contrib/releases{/id}","deployments_url":"https://api.github.com/repos/munin-monitoring/contrib/deployments","created_at":"2011-07-12T10:12:34Z","updated_at":"2018-10-04T23:37:42Z","pushed_at":"2018-10-07T21:14:03Z","git_url":"git://github.com/munin-monitoring/contrib.git","ssh_url":"git@github.com:munin-monitoring/contrib.git","clone_url":"https://github.com/munin-monitoring/contrib.git","svn_url":"https://github.com/munin-monitoring/contrib","homepage":"http://munin-monitoring.org","size":10044,"stargazers_count":991,"watchers_count":991,"language":"Perl","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":618,"mirror_url":null,"archived":false,"open_issues_count":43,"license":null,"forks":618,"open_issues":43,"watchers":991,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/950"},"html":{"href":"https://github.com/munin-monitoring/contrib/pull/950"},"issue":{"href":"https://api.github.com/repos/munin-monitoring/contrib/issues/950"},"comments":{"href":"https://api.github.com/repos/munin-monitoring/contrib/issues/950/comments"},"review_comments":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/950/comments"},"review_comment":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/munin-monitoring/contrib/pulls/950/commits"},"statuses":{"href":"https://api.github.com/repos/munin-monitoring/contrib/statuses/44c3b81fcd1becd69d19aec22abe174da9561d42"}},"author_association":"NONE"}}
{"actor":{"display_login":"jtsage"}}