{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/comments/216186346","pull_request_review_id":153611382,"id":216186346,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNjE4NjM0Ng==","diff_hunk":"@@ -50,28 +55,116 @@ var (\n \tinvalidLabelCharRE = regexp.MustCompile(`[^a-zA-Z0-9_]`)\n )\n \n-var AvailableCollectors = map[string]func(registry prometheus.Registerer, informerFactories []informers.SharedInformerFactory, opts *options.Options){\n-\t\"cronjobs\":                 RegisterCronJobCollector,\n-\t\"daemonsets\":               RegisterDaemonSetCollector,\n-\t\"deployments\":              RegisterDeploymentCollector,\n-\t\"jobs\":                     RegisterJobCollector,\n-\t\"limitranges\":              RegisterLimitRangeCollector,\n-\t\"nodes\":                    RegisterNodeCollector,\n-\t\"pods\":                     RegisterPodCollector,\n-\t\"replicasets\":              RegisterReplicaSetCollector,\n-\t\"replicationcontrollers\":   RegisterReplicationControllerCollector,\n-\t\"resourcequotas\":           RegisterResourceQuotaCollector,\n-\t\"services\":                 RegisterServiceCollector,\n-\t\"statefulsets\":             RegisterStatefulSetCollector,\n-\t\"persistentvolumes\":        RegisterPersistentVolumeCollector,\n-\t\"persistentvolumeclaims\":   RegisterPersistentVolumeClaimCollector,\n-\t\"namespaces\":               RegisterNamespaceCollector,\n-\t\"horizontalpodautoscalers\": RegisterHorizontalPodAutoScalerCollector,\n-\t\"endpoints\":                RegisterEndpointCollector,\n-\t\"secrets\":                  RegisterSecretCollector,\n-\t\"configmaps\":               RegisterConfigMapCollector,\n+// RegisterCollectors initializes and registers collectors.\n+func CreateCollectors(\n+\tkubeClient clientset.Interface,\n+\tenabledCollectors options.CollectorSet,\n+\tnamespaces options.NamespaceList,\n+\topts *options.Options,\n+) ([]Collector, error) {\n+\n+\tcollectorFactory := newCollectorFactory(kubeClient, opts)\n+\tcollectors := []Collector{}\n+\n+\tactiveCollectorNames := []string{}\n+\tfor c := range enabledCollectors {\n+\t\tconstructor, ok := availableCollectors[c]\n+\t\tif ok {\n+\t\t\tcollector, err := collectorFactory.create(constructor)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tactiveCollectorNames = append(activeCollectorNames, c)\n+\t\t\tcollectors = append(collectors, collector)\n+\t\t}\n+\t}\n+\n+\tglog.Infof(\"Active collectors: %s\", strings.Join(activeCollectorNames, \",\"))\n+\n+\treturn collectors, nil\n+}\n+\n+type Collector interface {\n+\tcreateListWatch(clientset.Interface) cache.ListWatch\n+\tgenerateMetrics(obj interface{}) []*metrics.Metric\n+\texpectedType() interface{}\n+\tsetStore(*metricsstore.MetricsStore)\n+\tCollect() []*metrics.Metric\n+}\n+\n+// TODO: rename to collectorConstructor ?\n+type newCollector func(*options.Options) Collector\n+\n+var availableCollectors = map[string]newCollector{\n+\t\"cronjobs\":                 newCronJobCollector,\n+\t\"daemonsets\":               newDaemonSetCollector,\n+\t\"deployments\":              newDeploymentCollector,\n+\t\"jobs\":                     newJobCollector,\n+\t\"limitranges\":              newLimitRangeCollector,\n+\t\"nodes\":                    newNodeCollector,\n+\t\"pods\":                     newPodCollector,\n+\t\"replicasets\":              newReplicaSetCollector,\n+\t\"replicationcontrollers\":   newReplicationControllerCollector,\n+\t\"resourcequotas\":           newResourceQuotaCollector,\n+\t\"services\":                 newServiceCollector,\n+\t\"statefulsets\":             newStatefulSetCollector,\n+\t\"persistentvolumes\":        newPersistentVolumeCollector,\n+\t\"persistentvolumeclaims\":   newPersistentVolumeClaimCollector,\n+\t\"namespaces\":               newNamespaceCollector,\n+\t\"horizontalpodautoscalers\": newHorizontalPodAutoScalerCollector,\n+\t\"endpoints\":                newEndpointCollector,\n+\t\"secrets\":                  newSecretCollector,\n+\t\"configmaps\":               newConfigMapCollector,\n+}\n+\n+type collectorFactory struct {\n+\tkubeClient clientset.Interface\n+\topts       *options.Options\n+}\n+\n+func newCollectorFactory(\n+\tkubeClient clientset.Interface,\n+\topts *options.Options,\n+) collectorFactory {\n+\n+\treturn collectorFactory{\n+\t\tkubeClient,\n+\t\topts,\n+\t}\n }\n \n+// TODO: Is the error return necessary?\n+func (f *collectorFactory) create(constructor newCollector) (Collector, error) {\n+\tcollector := constructor(f.opts)\n+\n+\t// TODO: We probably need one list watch per namespace?","path":"pkg/collectors/collectors.go","position":127,"original_position":127,"commit_id":"0fd6e99712860eef4d2a559b11c7ce81710dc605","original_commit_id":"0fd6e99712860eef4d2a559b11c7ce81710dc605","user":{"login":"zouyee","id":5785605,"node_id":"MDQ6VXNlcjU3ODU2MDU=","avatar_url":"https://avatars2.githubusercontent.com/u/5785605?v=4","gravatar_id":"","url":"https://api.github.com/users/zouyee","html_url":"https://github.com/zouyee","followers_url":"https://api.github.com/users/zouyee/followers","following_url":"https://api.github.com/users/zouyee/following{/other_user}","gists_url":"https://api.github.com/users/zouyee/gists{/gist_id}","starred_url":"https://api.github.com/users/zouyee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zouyee/subscriptions","organizations_url":"https://api.github.com/users/zouyee/orgs","repos_url":"https://api.github.com/users/zouyee/repos","events_url":"https://api.github.com/users/zouyee/events{/privacy}","received_events_url":"https://api.github.com/users/zouyee/received_events","type":"User","site_admin":false},"body":"using graceful turn off?","created_at":"2018-09-10T02:45:08Z","updated_at":"2018-09-10T02:45:08Z","html_url":"https://github.com/kubernetes/kube-state-metrics/pull/534#discussion_r216186346","pull_request_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/534","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/comments/216186346"},"html":{"href":"https://github.com/kubernetes/kube-state-metrics/pull/534#discussion_r216186346"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/534"}},"in_reply_to_id":214725127},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/534","id":212761489,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEyNzYxNDg5","html_url":"https://github.com/kubernetes/kube-state-metrics/pull/534","diff_url":"https://github.com/kubernetes/kube-state-metrics/pull/534.diff","patch_url":"https://github.com/kubernetes/kube-state-metrics/pull/534.patch","issue_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/issues/534","number":534,"state":"open","locked":false,"title":" pkg/collectors: Introduce MetricsStore updated by Reflectors","user":{"login":"mxinden","id":7047859,"node_id":"MDQ6VXNlcjcwNDc4NTk=","avatar_url":"https://avatars0.githubusercontent.com/u/7047859?v=4","gravatar_id":"","url":"https://api.github.com/users/mxinden","html_url":"https://github.com/mxinden","followers_url":"https://api.github.com/users/mxinden/followers","following_url":"https://api.github.com/users/mxinden/following{/other_user}","gists_url":"https://api.github.com/users/mxinden/gists{/gist_id}","starred_url":"https://api.github.com/users/mxinden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxinden/subscriptions","organizations_url":"https://api.github.com/users/mxinden/orgs","repos_url":"https://api.github.com/users/mxinden/repos","events_url":"https://api.github.com/users/mxinden/events{/privacy}","received_events_url":"https://api.github.com/users/mxinden/received_events","type":"User","site_admin":false},"body":"**What this PR does / why we need it**:\r\n\r\nAs discussed in #498 kube-state-metrics faces the following two performance\r\nissues when deployed in bigger Kubernetes environments:\r\n\r\n1. Long response time on metrics scrape\r\n2. High memory usage\r\n\r\nThis patch introduces a custom client go store, MetricsStore. It is updated by a\r\ncorresponding reflector. Instead of generating the Prometheus custom metrics on\r\ndemand, metrics are generated on new Kubernetes object arrival.\r\n\r\nThis pull request represents an early *work-in-progress* state to enable early\r\nfeedback. It targets the *performance-optimizations* branch, instead of *master*.\r\n\r\nKnown ToDos:\r\n\r\n- Re-enable multi namespace support\r\n- Re-enable white/black listing\r\n- Adjust remaining `collectors/*_test.go`\r\n\r\n**Premature benchmarking results**:\r\n\r\n1000 configmaps, 1000 pods, 100 scrapes:\r\n\r\n\r\n\r\n\r\n\r\n```shell\r\n$ git checkout master\r\n$ go test -bench .                    \r\ngoos: linux\r\ngoarch: amd64\r\npkg: k8s.io/kube-state-metrics\r\nBenchmarkKubeStateMetrics-4            1        10267655552 ns/op\r\nPASS\r\nok      k8s.io/kube-state-metrics       10.282s\r\n\r\n```\r\n\r\n[master_cpu.pdf](https://github.com/kubernetes/kube-state-metrics/files/2345809/master_cpu.pdf)\r\n[master_mem.pdf](https://github.com/kubernetes/kube-state-metrics/files/2345810/master_mem.pdf)\r\n\r\n```shell\r\n$ git checkout metricsstore\r\n$ go test -bench .\r\ngoos: linux\r\ngoarch: amd64\r\npkg: k8s.io/kube-state-metrics\r\nBenchmarkKubeStateMetrics-4            1        1876562818 ns/op\r\n--- BENCH: BenchmarkKubeStateMetrics-4\r\n        main_test.go:39: starting kube-state-metrics benchmark with fixtureMultiplier 1000 and requestCount 100\r\nPASS\r\nok      k8s.io/kube-state-metrics       1.892s\r\n```\r\n\r\n[metricsstore_cpu.pdf](https://github.com/kubernetes/kube-state-metrics/files/2345825/metricsstore_cpu.pdf)\r\n[metricsstore_mem.pdf](https://github.com/kubernetes/kube-state-metrics/files/2345826/metricsstore_mem.pdf)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n**Which issue(s) this PR fixes**:\r\n\r\nRelates to https://github.com/kubernetes/kube-state-metrics/issues/498\r\n\r\n\r\n//CC @metalmatze @brancz @squat @s-urbaniak\r\n\r\n","created_at":"2018-09-03T14:13:26Z","updated_at":"2018-09-10T02:45:08Z","closed_at":null,"merged_at":null,"merge_commit_sha":"42d97e9a846fcf2bab9317afbd9794a8af4f4427","assignee":null,"assignees":[],"requested_reviewers":[{"login":"andyxning","id":2404712,"node_id":"MDQ6VXNlcjI0MDQ3MTI=","avatar_url":"https://avatars1.githubusercontent.com/u/2404712?v=4","gravatar_id":"","url":"https://api.github.com/users/andyxning","html_url":"https://github.com/andyxning","followers_url":"https://api.github.com/users/andyxning/followers","following_url":"https://api.github.com/users/andyxning/following{/other_user}","gists_url":"https://api.github.com/users/andyxning/gists{/gist_id}","starred_url":"https://api.github.com/users/andyxning/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andyxning/subscriptions","organizations_url":"https://api.github.com/users/andyxning/orgs","repos_url":"https://api.github.com/users/andyxning/repos","events_url":"https://api.github.com/users/andyxning/events{/privacy}","received_events_url":"https://api.github.com/users/andyxning/received_events","type":"User","site_admin":false},{"login":"zouyee","id":5785605,"node_id":"MDQ6VXNlcjU3ODU2MDU=","avatar_url":"https://avatars2.githubusercontent.com/u/5785605?v=4","gravatar_id":"","url":"https://api.github.com/users/zouyee","html_url":"https://github.com/zouyee","followers_url":"https://api.github.com/users/zouyee/followers","following_url":"https://api.github.com/users/zouyee/following{/other_user}","gists_url":"https://api.github.com/users/zouyee/gists{/gist_id}","starred_url":"https://api.github.com/users/zouyee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zouyee/subscriptions","organizations_url":"https://api.github.com/users/zouyee/orgs","repos_url":"https://api.github.com/users/zouyee/repos","events_url":"https://api.github.com/users/zouyee/events{/privacy}","received_events_url":"https://api.github.com/users/zouyee/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":485759093,"node_id":"MDU6TGFiZWw0ODU3NTkwOTM=","url":"https://api.github.com/repos/kubernetes/kube-state-metrics/labels/cncf-cla:%20yes","name":"cncf-cla: yes","color":"bfe5bf","default":false},{"id":704084945,"node_id":"MDU6TGFiZWw3MDQwODQ5NDU=","url":"https://api.github.com/repos/kubernetes/kube-state-metrics/labels/size/XXL","name":"size/XXL","color":"ee0000","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/534/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/534/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/issues/534/comments","statuses_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/statuses/0fd6e99712860eef4d2a559b11c7ce81710dc605","head":{"label":"mxinden:metricsstore","ref":"metricsstore","sha":"0fd6e99712860eef4d2a559b11c7ce81710dc605","user":{"login":"mxinden","id":7047859,"node_id":"MDQ6VXNlcjcwNDc4NTk=","avatar_url":"https://avatars0.githubusercontent.com/u/7047859?v=4","gravatar_id":"","url":"https://api.github.com/users/mxinden","html_url":"https://github.com/mxinden","followers_url":"https://api.github.com/users/mxinden/followers","following_url":"https://api.github.com/users/mxinden/following{/other_user}","gists_url":"https://api.github.com/users/mxinden/gists{/gist_id}","starred_url":"https://api.github.com/users/mxinden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxinden/subscriptions","organizations_url":"https://api.github.com/users/mxinden/orgs","repos_url":"https://api.github.com/users/mxinden/repos","events_url":"https://api.github.com/users/mxinden/events{/privacy}","received_events_url":"https://api.github.com/users/mxinden/received_events","type":"User","site_admin":false},"repo":{"id":143692597,"node_id":"MDEwOlJlcG9zaXRvcnkxNDM2OTI1OTc=","name":"kube-state-metrics","full_name":"mxinden/kube-state-metrics","owner":{"login":"mxinden","id":7047859,"node_id":"MDQ6VXNlcjcwNDc4NTk=","avatar_url":"https://avatars0.githubusercontent.com/u/7047859?v=4","gravatar_id":"","url":"https://api.github.com/users/mxinden","html_url":"https://github.com/mxinden","followers_url":"https://api.github.com/users/mxinden/followers","following_url":"https://api.github.com/users/mxinden/following{/other_user}","gists_url":"https://api.github.com/users/mxinden/gists{/gist_id}","starred_url":"https://api.github.com/users/mxinden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mxinden/subscriptions","organizations_url":"https://api.github.com/users/mxinden/orgs","repos_url":"https://api.github.com/users/mxinden/repos","events_url":"https://api.github.com/users/mxinden/events{/privacy}","received_events_url":"https://api.github.com/users/mxinden/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mxinden/kube-state-metrics","description":"Add-on agent to generate and expose cluster-level metrics.","fork":true,"url":"https://api.github.com/repos/mxinden/kube-state-metrics","forks_url":"https://api.github.com/repos/mxinden/kube-state-metrics/forks","keys_url":"https://api.github.com/repos/mxinden/kube-state-metrics/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mxinden/kube-state-metrics/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mxinden/kube-state-metrics/teams","hooks_url":"https://api.github.com/repos/mxinden/kube-state-metrics/hooks","issue_events_url":"https://api.github.com/repos/mxinden/kube-state-metrics/issues/events{/number}","events_url":"https://api.github.com/repos/mxinden/kube-state-metrics/events","assignees_url":"https://api.github.com/repos/mxinden/kube-state-metrics/assignees{/user}","branches_url":"https://api.github.com/repos/mxinden/kube-state-metrics/branches{/branch}","tags_url":"https://api.github.com/repos/mxinden/kube-state-metrics/tags","blobs_url":"https://api.github.com/repos/mxinden/kube-state-metrics/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mxinden/kube-state-metrics/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mxinden/kube-state-metrics/git/refs{/sha}","trees_url":"https://api.github.com/repos/mxinden/kube-state-metrics/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mxinden/kube-state-metrics/statuses/{sha}","languages_url":"https://api.github.com/repos/mxinden/kube-state-metrics/languages","stargazers_url":"https://api.github.com/repos/mxinden/kube-state-metrics/stargazers","contributors_url":"https://api.github.com/repos/mxinden/kube-state-metrics/contributors","subscribers_url":"https://api.github.com/repos/mxinden/kube-state-metrics/subscribers","subscription_url":"https://api.github.com/repos/mxinden/kube-state-metrics/subscription","commits_url":"https://api.github.com/repos/mxinden/kube-state-metrics/commits{/sha}","git_commits_url":"https://api.github.com/repos/mxinden/kube-state-metrics/git/commits{/sha}","comments_url":"https://api.github.com/repos/mxinden/kube-state-metrics/comments{/number}","issue_comment_url":"https://api.github.com/repos/mxinden/kube-state-metrics/issues/comments{/number}","contents_url":"https://api.github.com/repos/mxinden/kube-state-metrics/contents/{+path}","compare_url":"https://api.github.com/repos/mxinden/kube-state-metrics/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mxinden/kube-state-metrics/merges","archive_url":"https://api.github.com/repos/mxinden/kube-state-metrics/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mxinden/kube-state-metrics/downloads","issues_url":"https://api.github.com/repos/mxinden/kube-state-metrics/issues{/number}","pulls_url":"https://api.github.com/repos/mxinden/kube-state-metrics/pulls{/number}","milestones_url":"https://api.github.com/repos/mxinden/kube-state-metrics/milestones{/number}","notifications_url":"https://api.github.com/repos/mxinden/kube-state-metrics/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mxinden/kube-state-metrics/labels{/name}","releases_url":"https://api.github.com/repos/mxinden/kube-state-metrics/releases{/id}","deployments_url":"https://api.github.com/repos/mxinden/kube-state-metrics/deployments","created_at":"2018-08-06T07:33:30Z","updated_at":"2018-08-06T07:33:32Z","pushed_at":"2018-09-03T14:11:21Z","git_url":"git://github.com/mxinden/kube-state-metrics.git","ssh_url":"git@github.com:mxinden/kube-state-metrics.git","clone_url":"https://github.com/mxinden/kube-state-metrics.git","svn_url":"https://github.com/mxinden/kube-state-metrics","homepage":"","size":9465,"stargazers_count":0,"watchers_count":0,"language":"Go","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":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kubernetes:performance-optimizations","ref":"performance-optimizations","sha":"1b79b318b25f80aa1a771e5da7611c69a4888304","user":{"login":"kubernetes","id":13629408,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNjI5NDA4","avatar_url":"https://avatars2.githubusercontent.com/u/13629408?v=4","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"repo":{"id":58184885,"node_id":"MDEwOlJlcG9zaXRvcnk1ODE4NDg4NQ==","name":"kube-state-metrics","full_name":"kubernetes/kube-state-metrics","owner":{"login":"kubernetes","id":13629408,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNjI5NDA4","avatar_url":"https://avatars2.githubusercontent.com/u/13629408?v=4","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/kubernetes/kube-state-metrics","description":"Add-on agent to generate and expose cluster-level metrics.","fork":false,"url":"https://api.github.com/repos/kubernetes/kube-state-metrics","forks_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/forks","keys_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/teams","hooks_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/hooks","issue_events_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/issues/events{/number}","events_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/events","assignees_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/assignees{/user}","branches_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/branches{/branch}","tags_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/tags","blobs_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/git/refs{/sha}","trees_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/statuses/{sha}","languages_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/languages","stargazers_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/stargazers","contributors_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/contributors","subscribers_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/subscribers","subscription_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/subscription","commits_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/commits{/sha}","git_commits_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/git/commits{/sha}","comments_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/comments{/number}","issue_comment_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/issues/comments{/number}","contents_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/contents/{+path}","compare_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/merges","archive_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/downloads","issues_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/issues{/number}","pulls_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls{/number}","milestones_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/milestones{/number}","notifications_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/labels{/name}","releases_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/releases{/id}","deployments_url":"https://api.github.com/repos/kubernetes/kube-state-metrics/deployments","created_at":"2016-05-06T06:10:13Z","updated_at":"2018-09-08T21:30:40Z","pushed_at":"2018-09-10T02:33:06Z","git_url":"git://github.com/kubernetes/kube-state-metrics.git","ssh_url":"git@github.com:kubernetes/kube-state-metrics.git","clone_url":"https://github.com/kubernetes/kube-state-metrics.git","svn_url":"https://github.com/kubernetes/kube-state-metrics","homepage":"","size":10336,"stargazers_count":811,"watchers_count":811,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":235,"mirror_url":null,"archived":false,"open_issues_count":23,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":235,"open_issues":23,"watchers":811,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/534"},"html":{"href":"https://github.com/kubernetes/kube-state-metrics/pull/534"},"issue":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/issues/534"},"comments":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/issues/534/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/534/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/pulls/534/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kube-state-metrics/statuses/0fd6e99712860eef4d2a559b11c7ce81710dc605"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"zouyee"}}