{"action":"created","comment":{"url":"https://api.github.com/repos/prometheus/prometheus/pulls/comments/63806069","id":63806069,"diff_hunk":"@@ -735,3 +788,233 @@ func nodeHostIP(node *Node) (net.IP, error) {\n \t}\n \treturn nil, fmt.Errorf(\"host IP unknown; known addresses: %v\", addresses)\n }\n+\n+////////////////////////////////////\n+// Here there be dragons.         //\n+// Pod discovery code lies below. //\n+////////////////////////////////////\n+\n+func (kd *Discovery) updatePod(pod *Pod, eventType EventType) {\n+\tkd.podsMu.Lock()\n+\tdefer kd.podsMu.Unlock()\n+\n+\tswitch eventType {\n+\tcase deleted:\n+\t\tif _, ok := kd.pods[pod.ObjectMeta.Namespace]; ok {\n+\t\t\tdelete(kd.pods[pod.ObjectMeta.Namespace], pod.ObjectMeta.Name)\n+\t\t\tif len(kd.pods[pod.ObjectMeta.Namespace]) == 0 {\n+\t\t\t\tdelete(kd.pods, pod.ObjectMeta.Namespace)\n+\t\t\t}\n+\t\t}\n+\tcase added, modified:\n+\t\tif _, ok := kd.pods[pod.ObjectMeta.Namespace]; !ok {\n+\t\t\tkd.pods[pod.ObjectMeta.Namespace] = map[string]*Pod{}\n+\t\t}\n+\t\tkd.pods[pod.ObjectMeta.Namespace][pod.ObjectMeta.Name] = pod\n+\t}\n+}\n+\n+func (kd *Discovery) getPods() (map[string]map[string]*Pod, string, error) {\n+\tres, err := kd.queryAPIServerPath(podsURL)\n+\tif err != nil {\n+\t\treturn nil, \"\", fmt.Errorf(\"unable to list Kubernetes pods: %s\", err)\n+\t}\n+\tdefer res.Body.Close()\n+\tif res.StatusCode != http.StatusOK {\n+\t\treturn nil, \"\", fmt.Errorf(\"unable to list Kubernetes pods; unexpected response: %d %s\", res.StatusCode, res.Status)\n+\t}\n+\n+\tvar pods PodList\n+\tif err := json.NewDecoder(res.Body).Decode(&pods); err != nil {\n+\t\tbody, _ := ioutil.ReadAll(res.Body)\n+\t\treturn nil, \"\", fmt.Errorf(\"unable to list Kubernetes pods; unexpected response body: %s\", string(body))\n+\t}\n+\n+\tpodMap := map[string]map[string]*Pod{}\n+\tfor idx, pod := range pods.Items {\n+\t\tif _, ok := podMap[pod.ObjectMeta.Namespace]; !ok {\n+\t\t\tpodMap[pod.ObjectMeta.Namespace] = map[string]*Pod{}\n+\t\t}\n+\t\tlog.Debugf(\"Got pod %s in namespace %s\", pod.ObjectMeta.Name, pod.ObjectMeta.Namespace)\n+\t\tpodMap[pod.ObjectMeta.Namespace][pod.ObjectMeta.Name] = &pods.Items[idx]\n+\t}\n+\n+\treturn podMap, pods.ResourceVersion, nil\n+}\n+\n+func (kd *Discovery) watchPods(events chan interface{}, done <-chan struct{}, retryInterval time.Duration) {\n+\tuntil(func() {\n+\t\tpods, resourceVersion, err := kd.getPods()\n+\t\tif err != nil {\n+\t\t\tlog.Errorf(\"Cannot initialize pods collection: %s\", err)\n+\t\t\treturn\n+\t\t}\n+\t\tkd.podsMu.Lock()\n+\t\tkd.pods = pods\n+\t\tkd.podsMu.Unlock()\n+\n+\t\treq, err := http.NewRequest(\"GET\", podsURL, nil)\n+\t\tif err != nil {\n+\t\t\tlog.Errorf(\"Cannot create pods request: %s\", err)\n+\t\t\treturn\n+\t\t}\n+\n+\t\tvalues := req.URL.Query()\n+\t\tvalues.Add(\"watch\", \"true\")\n+\t\tvalues.Add(\"resourceVersion\", resourceVersion)\n+\t\treq.URL.RawQuery = values.Encode()\n+\t\tres, err := kd.queryAPIServerReq(req)\n+\t\tif err != nil {\n+\t\t\tlog.Errorf(\"Failed to watch pods: %s\", err)\n+\t\t\treturn\n+\t\t}\n+\t\tdefer res.Body.Close()\n+\t\tif res.StatusCode != http.StatusOK {\n+\t\t\tlog.Errorf(\"Failed to watch pods: %d\", res.StatusCode)\n+\t\t\treturn\n+\t\t}\n+\n+\t\td := json.NewDecoder(res.Body)\n+\n+\t\tfor {\n+\t\t\tvar event podEvent\n+\t\t\tif err := d.Decode(&event); err != nil {\n+\t\t\t\tlog.Errorf(\"Watch pods unexpectedly closed: %s\", err)\n+\t\t\t\treturn\n+\t\t\t}\n+\n+\t\t\tselect {\n+\t\t\tcase events <- &event:\n+\t\t\tcase <-done:\n+\t\t\t}\n+\t\t}\n+\t}, retryInterval, done)\n+}\n+\n+func podSource(pod *Pod) string {\n+\treturn sourcePodPrefix + \":\" + pod.ObjectMeta.Namespace + \":\" + pod.ObjectMeta.Name\n+}\n+\n+type ByContainerPort []ContainerPort\n+\n+func (a ByContainerPort) Len() int           { return len(a) }\n+func (a ByContainerPort) Less(i, j int) bool { return a[i].ContainerPort < a[j].ContainerPort }\n+func (a ByContainerPort) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\n+\n+func updatePodTargets(pod *Pod, allContainers bool) []model.LabelSet {\n+\tvar targets []model.LabelSet = make([]model.LabelSet, 0, len(pod.PodSpec.Containers))\n+\tif pod.PodStatus.PodIP == \"\" {\n+\t\tlog.Debugf(\"skipping pod %s -- PodStatus.PodIP is empty\", pod.ObjectMeta.Name)\n+\t\treturn targets\n+\t}\n+\n+\tif pod.PodStatus.Phase != \"Running\" {\n+\t\tlog.Debugf(\"skipping pod %s -- status is not `Running`\", pod.ObjectMeta.Name)\n+\t\treturn targets\n+\t}\n+\n+\tready := \"unknown\"\n+\tfor _, cond := range pod.PodStatus.Conditions {\n+\t\tif strings.ToLower(cond.Type) == \"ready\" {\n+\t\t\tready = strings.ToLower(cond.Status)\n+\t\t}\n+\t}\n+\n+\tfor _, container := range pod.PodSpec.Containers {\n+\t\t// Collect a list of TCP ports\n+\t\t// Sort by port number, ascending\n+\t\t// Product a target pointed at the first port\n+\t\t// Include a label containing all ports (portName=port,PortName=port,...,)\n+\t\tvar tcpPorts []ContainerPort\n+\t\tvar portLabel bytes.Buffer\n+\n+\t\tfor _, port := range container.Ports {\n+\t\t\tif port.Protocol == \"TCP\" {\n+\t\t\t\ttcpPorts = append(tcpPorts, port)\n+\t\t\t}\n+\t\t}\n+\n+\t\tif len(tcpPorts) == 0 {\n+\t\t\tlog.Debugf(\"skipping container %s with no TCP ports\", container.Name)\n+\t\t\tcontinue\n+\t\t}\n+\n+\t\tsort.Sort(ByContainerPort(tcpPorts))\n+\n+\t\tfor _, port := range tcpPorts {\n+\t\t\tportLabel.WriteString(port.Name)\n+\t\t\tportLabel.WriteString(\"=\")\n+\t\t\tportLabel.WriteString(strconv.FormatInt(int64(port.ContainerPort), 10))\n+\t\t\tportLabel.WriteString(\",\")","path":"retrieval/discovery/kubernetes/discovery.go","position":386,"original_position":386,"commit_id":"ae413704e837d10cb18dc93348509552028430c3","original_commit_id":"ae413704e837d10cb18dc93348509552028430c3","user":{"login":"brian-brazil","id":7115638,"avatar_url":"https://avatars.githubusercontent.com/u/7115638?v=3","gravatar_id":"","url":"https://api.github.com/users/brian-brazil","html_url":"https://github.com/brian-brazil","followers_url":"https://api.github.com/users/brian-brazil/followers","following_url":"https://api.github.com/users/brian-brazil/following{/other_user}","gists_url":"https://api.github.com/users/brian-brazil/gists{/gist_id}","starred_url":"https://api.github.com/users/brian-brazil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brian-brazil/subscriptions","organizations_url":"https://api.github.com/users/brian-brazil/orgs","repos_url":"https://api.github.com/users/brian-brazil/repos","events_url":"https://api.github.com/users/brian-brazil/events{/privacy}","received_events_url":"https://api.github.com/users/brian-brazil/received_events","type":"User","site_admin":false},"body":"Put a comma at the very start too, it makes the regexes easier to write.","created_at":"2016-05-19T00:25:29Z","updated_at":"2016-05-19T00:25:29Z","html_url":"https://github.com/prometheus/prometheus/pull/1449#discussion_r63806069","pull_request_url":"https://api.github.com/repos/prometheus/prometheus/pulls/1449","_links":{"self":{"href":"https://api.github.com/repos/prometheus/prometheus/pulls/comments/63806069"},"html":{"href":"https://github.com/prometheus/prometheus/pull/1449#discussion_r63806069"},"pull_request":{"href":"https://api.github.com/repos/prometheus/prometheus/pulls/1449"}}},"pull_request":{"url":"https://api.github.com/repos/prometheus/prometheus/pulls/1449","id":61464027,"html_url":"https://github.com/prometheus/prometheus/pull/1449","diff_url":"https://github.com/prometheus/prometheus/pull/1449.diff","patch_url":"https://github.com/prometheus/prometheus/pull/1449.patch","issue_url":"https://api.github.com/repos/prometheus/prometheus/issues/1449","number":1449,"state":"open","locked":false,"title":"k8s pod discovery","user":{"login":"pdbogen","id":321591,"avatar_url":"https://avatars.githubusercontent.com/u/321591?v=3","gravatar_id":"","url":"https://api.github.com/users/pdbogen","html_url":"https://github.com/pdbogen","followers_url":"https://api.github.com/users/pdbogen/followers","following_url":"https://api.github.com/users/pdbogen/following{/other_user}","gists_url":"https://api.github.com/users/pdbogen/gists{/gist_id}","starred_url":"https://api.github.com/users/pdbogen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pdbogen/subscriptions","organizations_url":"https://api.github.com/users/pdbogen/orgs","repos_url":"https://api.github.com/users/pdbogen/repos","events_url":"https://api.github.com/users/pdbogen/events{/privacy}","received_events_url":"https://api.github.com/users/pdbogen/received_events","type":"User","site_admin":false},"body":"Would close #1445.\r\n\r\nhttps://github.com/prometheus/docs/pull/338 updates docs.","created_at":"2016-03-02T20:45:09Z","updated_at":"2016-05-19T00:25:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"881d0259ac8aea6e98aa3927b5056ceab050a5b9","assignee":null,"milestone":{"url":"https://api.github.com/repos/prometheus/prometheus/milestones/3","html_url":"https://github.com/prometheus/prometheus/milestones/v1.0.0","labels_url":"https://api.github.com/repos/prometheus/prometheus/milestones/3/labels","id":1729605,"number":3,"title":"v1.0.0","description":null,"creator":{"login":"fabxc","id":4948210,"avatar_url":"https://avatars.githubusercontent.com/u/4948210?v=3","gravatar_id":"","url":"https://api.github.com/users/fabxc","html_url":"https://github.com/fabxc","followers_url":"https://api.github.com/users/fabxc/followers","following_url":"https://api.github.com/users/fabxc/following{/other_user}","gists_url":"https://api.github.com/users/fabxc/gists{/gist_id}","starred_url":"https://api.github.com/users/fabxc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fabxc/subscriptions","organizations_url":"https://api.github.com/users/fabxc/orgs","repos_url":"https://api.github.com/users/fabxc/repos","events_url":"https://api.github.com/users/fabxc/events{/privacy}","received_events_url":"https://api.github.com/users/fabxc/received_events","type":"User","site_admin":false},"open_issues":14,"closed_issues":1,"state":"open","created_at":"2016-04-25T16:59:44Z","updated_at":"2016-05-13T13:35:25Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/prometheus/prometheus/pulls/1449/commits","review_comments_url":"https://api.github.com/repos/prometheus/prometheus/pulls/1449/comments","review_comment_url":"https://api.github.com/repos/prometheus/prometheus/pulls/comments{/number}","comments_url":"https://api.github.com/repos/prometheus/prometheus/issues/1449/comments","statuses_url":"https://api.github.com/repos/prometheus/prometheus/statuses/ae413704e837d10cb18dc93348509552028430c3","head":{"label":"pdbogen:master","ref":"master","sha":"ae413704e837d10cb18dc93348509552028430c3","user":{"login":"pdbogen","id":321591,"avatar_url":"https://avatars.githubusercontent.com/u/321591?v=3","gravatar_id":"","url":"https://api.github.com/users/pdbogen","html_url":"https://github.com/pdbogen","followers_url":"https://api.github.com/users/pdbogen/followers","following_url":"https://api.github.com/users/pdbogen/following{/other_user}","gists_url":"https://api.github.com/users/pdbogen/gists{/gist_id}","starred_url":"https://api.github.com/users/pdbogen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pdbogen/subscriptions","organizations_url":"https://api.github.com/users/pdbogen/orgs","repos_url":"https://api.github.com/users/pdbogen/repos","events_url":"https://api.github.com/users/pdbogen/events{/privacy}","received_events_url":"https://api.github.com/users/pdbogen/received_events","type":"User","site_admin":false},"repo":{"id":52995029,"name":"prometheus","full_name":"pdbogen/prometheus","owner":{"login":"pdbogen","id":321591,"avatar_url":"https://avatars.githubusercontent.com/u/321591?v=3","gravatar_id":"","url":"https://api.github.com/users/pdbogen","html_url":"https://github.com/pdbogen","followers_url":"https://api.github.com/users/pdbogen/followers","following_url":"https://api.github.com/users/pdbogen/following{/other_user}","gists_url":"https://api.github.com/users/pdbogen/gists{/gist_id}","starred_url":"https://api.github.com/users/pdbogen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pdbogen/subscriptions","organizations_url":"https://api.github.com/users/pdbogen/orgs","repos_url":"https://api.github.com/users/pdbogen/repos","events_url":"https://api.github.com/users/pdbogen/events{/privacy}","received_events_url":"https://api.github.com/users/pdbogen/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/pdbogen/prometheus","description":"The Prometheus monitoring system and time series database.","fork":true,"url":"https://api.github.com/repos/pdbogen/prometheus","forks_url":"https://api.github.com/repos/pdbogen/prometheus/forks","keys_url":"https://api.github.com/repos/pdbogen/prometheus/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pdbogen/prometheus/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pdbogen/prometheus/teams","hooks_url":"https://api.github.com/repos/pdbogen/prometheus/hooks","issue_events_url":"https://api.github.com/repos/pdbogen/prometheus/issues/events{/number}","events_url":"https://api.github.com/repos/pdbogen/prometheus/events","assignees_url":"https://api.github.com/repos/pdbogen/prometheus/assignees{/user}","branches_url":"https://api.github.com/repos/pdbogen/prometheus/branches{/branch}","tags_url":"https://api.github.com/repos/pdbogen/prometheus/tags","blobs_url":"https://api.github.com/repos/pdbogen/prometheus/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pdbogen/prometheus/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pdbogen/prometheus/git/refs{/sha}","trees_url":"https://api.github.com/repos/pdbogen/prometheus/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pdbogen/prometheus/statuses/{sha}","languages_url":"https://api.github.com/repos/pdbogen/prometheus/languages","stargazers_url":"https://api.github.com/repos/pdbogen/prometheus/stargazers","contributors_url":"https://api.github.com/repos/pdbogen/prometheus/contributors","subscribers_url":"https://api.github.com/repos/pdbogen/prometheus/subscribers","subscription_url":"https://api.github.com/repos/pdbogen/prometheus/subscription","commits_url":"https://api.github.com/repos/pdbogen/prometheus/commits{/sha}","git_commits_url":"https://api.github.com/repos/pdbogen/prometheus/git/commits{/sha}","comments_url":"https://api.github.com/repos/pdbogen/prometheus/comments{/number}","issue_comment_url":"https://api.github.com/repos/pdbogen/prometheus/issues/comments{/number}","contents_url":"https://api.github.com/repos/pdbogen/prometheus/contents/{+path}","compare_url":"https://api.github.com/repos/pdbogen/prometheus/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pdbogen/prometheus/merges","archive_url":"https://api.github.com/repos/pdbogen/prometheus/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pdbogen/prometheus/downloads","issues_url":"https://api.github.com/repos/pdbogen/prometheus/issues{/number}","pulls_url":"https://api.github.com/repos/pdbogen/prometheus/pulls{/number}","milestones_url":"https://api.github.com/repos/pdbogen/prometheus/milestones{/number}","notifications_url":"https://api.github.com/repos/pdbogen/prometheus/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pdbogen/prometheus/labels{/name}","releases_url":"https://api.github.com/repos/pdbogen/prometheus/releases{/id}","deployments_url":"https://api.github.com/repos/pdbogen/prometheus/deployments","created_at":"2016-03-02T20:42:22Z","updated_at":"2016-03-02T20:42:23Z","pushed_at":"2016-05-19T00:19:00Z","git_url":"git://github.com/pdbogen/prometheus.git","ssh_url":"git@github.com:pdbogen/prometheus.git","clone_url":"https://github.com/pdbogen/prometheus.git","svn_url":"https://github.com/pdbogen/prometheus","homepage":"https://prometheus.io/","size":10811,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"prometheus:master","ref":"master","sha":"d9394eb359873bb2dd82e5b841a188aeaaccd5f8","user":{"login":"prometheus","id":3380462,"avatar_url":"https://avatars.githubusercontent.com/u/3380462?v=3","gravatar_id":"","url":"https://api.github.com/users/prometheus","html_url":"https://github.com/prometheus","followers_url":"https://api.github.com/users/prometheus/followers","following_url":"https://api.github.com/users/prometheus/following{/other_user}","gists_url":"https://api.github.com/users/prometheus/gists{/gist_id}","starred_url":"https://api.github.com/users/prometheus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prometheus/subscriptions","organizations_url":"https://api.github.com/users/prometheus/orgs","repos_url":"https://api.github.com/users/prometheus/repos","events_url":"https://api.github.com/users/prometheus/events{/privacy}","received_events_url":"https://api.github.com/users/prometheus/received_events","type":"Organization","site_admin":false},"repo":{"id":6838921,"name":"prometheus","full_name":"prometheus/prometheus","owner":{"login":"prometheus","id":3380462,"avatar_url":"https://avatars.githubusercontent.com/u/3380462?v=3","gravatar_id":"","url":"https://api.github.com/users/prometheus","html_url":"https://github.com/prometheus","followers_url":"https://api.github.com/users/prometheus/followers","following_url":"https://api.github.com/users/prometheus/following{/other_user}","gists_url":"https://api.github.com/users/prometheus/gists{/gist_id}","starred_url":"https://api.github.com/users/prometheus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prometheus/subscriptions","organizations_url":"https://api.github.com/users/prometheus/orgs","repos_url":"https://api.github.com/users/prometheus/repos","events_url":"https://api.github.com/users/prometheus/events{/privacy}","received_events_url":"https://api.github.com/users/prometheus/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/prometheus/prometheus","description":"The Prometheus monitoring system and time series database.","fork":false,"url":"https://api.github.com/repos/prometheus/prometheus","forks_url":"https://api.github.com/repos/prometheus/prometheus/forks","keys_url":"https://api.github.com/repos/prometheus/prometheus/keys{/key_id}","collaborators_url":"https://api.github.com/repos/prometheus/prometheus/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/prometheus/prometheus/teams","hooks_url":"https://api.github.com/repos/prometheus/prometheus/hooks","issue_events_url":"https://api.github.com/repos/prometheus/prometheus/issues/events{/number}","events_url":"https://api.github.com/repos/prometheus/prometheus/events","assignees_url":"https://api.github.com/repos/prometheus/prometheus/assignees{/user}","branches_url":"https://api.github.com/repos/prometheus/prometheus/branches{/branch}","tags_url":"https://api.github.com/repos/prometheus/prometheus/tags","blobs_url":"https://api.github.com/repos/prometheus/prometheus/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/prometheus/prometheus/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/prometheus/prometheus/git/refs{/sha}","trees_url":"https://api.github.com/repos/prometheus/prometheus/git/trees{/sha}","statuses_url":"https://api.github.com/repos/prometheus/prometheus/statuses/{sha}","languages_url":"https://api.github.com/repos/prometheus/prometheus/languages","stargazers_url":"https://api.github.com/repos/prometheus/prometheus/stargazers","contributors_url":"https://api.github.com/repos/prometheus/prometheus/contributors","subscribers_url":"https://api.github.com/repos/prometheus/prometheus/subscribers","subscription_url":"https://api.github.com/repos/prometheus/prometheus/subscription","commits_url":"https://api.github.com/repos/prometheus/prometheus/commits{/sha}","git_commits_url":"https://api.github.com/repos/prometheus/prometheus/git/commits{/sha}","comments_url":"https://api.github.com/repos/prometheus/prometheus/comments{/number}","issue_comment_url":"https://api.github.com/repos/prometheus/prometheus/issues/comments{/number}","contents_url":"https://api.github.com/repos/prometheus/prometheus/contents/{+path}","compare_url":"https://api.github.com/repos/prometheus/prometheus/compare/{base}...{head}","merges_url":"https://api.github.com/repos/prometheus/prometheus/merges","archive_url":"https://api.github.com/repos/prometheus/prometheus/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/prometheus/prometheus/downloads","issues_url":"https://api.github.com/repos/prometheus/prometheus/issues{/number}","pulls_url":"https://api.github.com/repos/prometheus/prometheus/pulls{/number}","milestones_url":"https://api.github.com/repos/prometheus/prometheus/milestones{/number}","notifications_url":"https://api.github.com/repos/prometheus/prometheus/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/prometheus/prometheus/labels{/name}","releases_url":"https://api.github.com/repos/prometheus/prometheus/releases{/id}","deployments_url":"https://api.github.com/repos/prometheus/prometheus/deployments","created_at":"2012-11-24T11:14:12Z","updated_at":"2016-05-18T20:39:45Z","pushed_at":"2016-05-19T00:19:00Z","git_url":"git://github.com/prometheus/prometheus.git","ssh_url":"git@github.com:prometheus/prometheus.git","clone_url":"https://github.com/prometheus/prometheus.git","svn_url":"https://github.com/prometheus/prometheus","homepage":"https://prometheus.io/","size":14556,"stargazers_count":4769,"watchers_count":4769,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":395,"mirror_url":null,"open_issues_count":155,"forks":395,"open_issues":155,"watchers":4769,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/prometheus/prometheus/pulls/1449"},"html":{"href":"https://github.com/prometheus/prometheus/pull/1449"},"issue":{"href":"https://api.github.com/repos/prometheus/prometheus/issues/1449"},"comments":{"href":"https://api.github.com/repos/prometheus/prometheus/issues/1449/comments"},"review_comments":{"href":"https://api.github.com/repos/prometheus/prometheus/pulls/1449/comments"},"review_comment":{"href":"https://api.github.com/repos/prometheus/prometheus/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/prometheus/prometheus/pulls/1449/commits"},"statuses":{"href":"https://api.github.com/repos/prometheus/prometheus/statuses/ae413704e837d10cb18dc93348509552028430c3"}}}}