Skip to content

Commit fbcd85d

Browse files
committed
Merge pull request #354 from bryk/apiserver-host
Fix heapster client config to make it work when master moves
2 parents 0949f6e + ac835e1 commit fbcd85d

File tree

2 files changed

+37
-19
lines changed

2 files changed

+37
-19
lines changed

src/app/backend/heapsterclient.go

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,40 @@
1515
package main
1616

1717
import (
18-
"bytes"
1918
"log"
2019

2120
client "k8s.io/kubernetes/pkg/client/unversioned"
2221
)
2322

2423
// Clients for making requests to a Heapster instance.
2524
type HeapsterClient interface {
26-
// Creates a new GET http request to heapster.
27-
Get() *client.Request
25+
// Creates a new GET HTTP request to heapster, specified by the path param, to the V1 API
26+
// endpoint. The path param is without the API prefix, e.g.,
27+
// /model/namespaces/default/pod-list/foo/metrics/memory-usage
28+
29+
Get(path string) *client.Request
30+
}
31+
32+
// In-cluster implementation of heapster client. Talks with heapster through service proxy.
33+
type InClusterHeapsterClient struct {
34+
client *client.Client
35+
}
36+
37+
func (c InClusterHeapsterClient) Get(path string) *client.Request {
38+
return c.client.Get().Prefix("proxy").
39+
Namespace("kube-system").
40+
Resource("services").
41+
Name("heapster").
42+
Suffix("/api/v1" + path)
43+
}
44+
45+
// Remote heapster client based implementation. Talks with heapster through raw RESTClient.
46+
type RemoteHeapsterClient struct {
47+
client *client.RESTClient
48+
}
49+
50+
func (c RemoteHeapsterClient) Get(path string) *client.Request {
51+
return c.client.Get().Suffix(path)
2852
}
2953

3054
// Creates new Heapster REST client. When heapsterHost param is empty string the function
@@ -33,21 +57,16 @@ type HeapsterClient interface {
3357
func CreateHeapsterRESTClient(heapsterHost string, apiclient *client.Client) (
3458
HeapsterClient, error) {
3559

36-
cfg := client.Config{}
37-
3860
if heapsterHost == "" {
39-
bufferProxyHost := bytes.NewBufferString("http://")
40-
bufferProxyHost.WriteString(apiclient.RESTClient.Get().URL().Host)
41-
cfg.Host = bufferProxyHost.String()
42-
cfg.Prefix = "/api/v1/proxy/namespaces/kube-system/services/heapster/api"
61+
log.Printf("Creating in-cluster Heapster client")
62+
return InClusterHeapsterClient{client: apiclient}, nil
4363
} else {
44-
cfg.Host = heapsterHost
45-
}
46-
log.Printf("Creating Heapster REST client for %s%s", cfg.Host, cfg.Prefix)
47-
clientFactory := new(ClientFactoryImpl)
48-
heapsterClient, err := clientFactory.New(&cfg)
49-
if err != nil {
50-
return nil, err
64+
cfg := &client.Config{Host: heapsterHost}
65+
restClient, err := client.New(cfg)
66+
if err != nil {
67+
return nil, err
68+
}
69+
log.Printf("Creating remote Heapster client for %s", heapsterHost)
70+
return RemoteHeapsterClient{client: restClient.RESTClient}, nil
5171
}
52-
return heapsterClient.RESTClient, nil
5372
}

src/app/backend/replicationcontrollerpodsmetrics.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ func createMetricPath(namespace string, podNames []string, metricName string) st
8989

9090
// Retrieves raw metrics from Heapster.
9191
func getRawMetrics(heapsterClient HeapsterClient, metricPath string) ([]byte, error) {
92-
93-
resultRaw, err := heapsterClient.Get().Suffix(metricPath).DoRaw()
92+
resultRaw, err := heapsterClient.Get(metricPath).DoRaw()
9493

9594
if err != nil {
9695
return make([]byte, 0), err

0 commit comments

Comments
 (0)