Merge pull request #13664 from jszczepkowski/hpa-mem
Auto commit by PR queue bot
This commit is contained in:
		@@ -75,7 +75,6 @@ func NewHeapsterMetricsClient(client client.Interface) *HeapsterMetricsClient {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var heapsterMetricDefinitions = map[api.ResourceName]metricDefinition{
 | 
					var heapsterMetricDefinitions = map[api.ResourceName]metricDefinition{
 | 
				
			||||||
	//TODO: add memory
 | 
					 | 
				
			||||||
	api.ResourceCPU: {"cpu-usage",
 | 
						api.ResourceCPU: {"cpu-usage",
 | 
				
			||||||
		func(metrics heapster.MetricResultList) (expapi.ResourceConsumption, int) {
 | 
							func(metrics heapster.MetricResultList) (expapi.ResourceConsumption, int) {
 | 
				
			||||||
			sum, count := calculateSumFromLatestSample(metrics)
 | 
								sum, count := calculateSumFromLatestSample(metrics)
 | 
				
			||||||
@@ -86,6 +85,15 @@ var heapsterMetricDefinitions = map[api.ResourceName]metricDefinition{
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			return expapi.ResourceConsumption{Resource: api.ResourceCPU, Quantity: resource.MustParse(value)}, count
 | 
								return expapi.ResourceConsumption{Resource: api.ResourceCPU, Quantity: resource.MustParse(value)}, count
 | 
				
			||||||
		}},
 | 
							}},
 | 
				
			||||||
 | 
						api.ResourceMemory: {"memory-usage",
 | 
				
			||||||
 | 
							func(metrics heapster.MetricResultList) (expapi.ResourceConsumption, int) {
 | 
				
			||||||
 | 
								sum, count := calculateSumFromLatestSample(metrics)
 | 
				
			||||||
 | 
								value := int64(0)
 | 
				
			||||||
 | 
								if count > 0 {
 | 
				
			||||||
 | 
									value = int64(sum) / int64(count)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return expapi.ResourceConsumption{Resource: api.ResourceMemory, Quantity: *resource.NewQuantity(value, resource.DecimalSI)}, count
 | 
				
			||||||
 | 
							}},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (h *HeapsterMetricsClient) ResourceConsumption(namespace string) ResourceConsumptionClient {
 | 
					func (h *HeapsterMetricsClient) ResourceConsumption(namespace string) ResourceConsumptionClient {
 | 
				
			||||||
@@ -111,7 +119,6 @@ func (h *HeapsterResourceConsumptionClient) Get(resourceName api.ResourceName, s
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (h *HeapsterResourceConsumptionClient) getForPods(resourceName api.ResourceName, podNames []string) (*expapi.ResourceConsumption, error) {
 | 
					func (h *HeapsterResourceConsumptionClient) getForPods(resourceName api.ResourceName, podNames []string) (*expapi.ResourceConsumption, error) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	metricSpec, metricDefined := h.resourceDefinitions[resourceName]
 | 
						metricSpec, metricDefined := h.resourceDefinitions[resourceName]
 | 
				
			||||||
	if !metricDefined {
 | 
						if !metricDefined {
 | 
				
			||||||
		return nil, fmt.Errorf("heapster metric not defined for %v", resourceName)
 | 
							return nil, fmt.Errorf("heapster metric not defined for %v", resourceName)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,10 @@ const (
 | 
				
			|||||||
	namespace          = "test-namespace"
 | 
						namespace          = "test-namespace"
 | 
				
			||||||
	podName            = "pod1"
 | 
						podName            = "pod1"
 | 
				
			||||||
	podListHandler     = "podlisthandler"
 | 
						podListHandler     = "podlisthandler"
 | 
				
			||||||
	heapsterHandler = "heapsterhandler"
 | 
						heapsterCpuHandler = "heapstercpuhandler"
 | 
				
			||||||
 | 
						heapsterMemHandler = "heapstermemhandler"
 | 
				
			||||||
 | 
						cpu                = 650
 | 
				
			||||||
 | 
						memory             = 20000000
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type serverResponse struct {
 | 
					type serverResponse struct {
 | 
				
			||||||
@@ -50,7 +53,6 @@ type serverResponse struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func makeTestServer(t *testing.T, responses map[string]*serverResponse) (*httptest.Server, map[string]*util.FakeHandler) {
 | 
					func makeTestServer(t *testing.T, responses map[string]*serverResponse) (*httptest.Server, map[string]*util.FakeHandler) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	handlers := map[string]*util.FakeHandler{}
 | 
						handlers := map[string]*util.FakeHandler{}
 | 
				
			||||||
	mux := http.NewServeMux()
 | 
						mux := http.NewServeMux()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -78,10 +80,16 @@ func makeTestServer(t *testing.T, responses map[string]*serverResponse) (*httpte
 | 
				
			|||||||
		handlers[podListHandler] = mkHandler(fmt.Sprintf("/api/v1/namespaces/%s/pods", namespace), *responses[podListHandler])
 | 
							handlers[podListHandler] = mkHandler(fmt.Sprintf("/api/v1/namespaces/%s/pods", namespace), *responses[podListHandler])
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if responses[heapsterHandler] != nil {
 | 
						if responses[heapsterCpuHandler] != nil {
 | 
				
			||||||
		handlers[heapsterHandler] = mkRawHandler(
 | 
							handlers[heapsterCpuHandler] = mkRawHandler(
 | 
				
			||||||
			fmt.Sprintf("/api/v1/proxy/namespaces/kube-system/services/monitoring-heapster/api/v1/model/namespaces/%s/pod-list/%s/metrics/cpu-usage",
 | 
								fmt.Sprintf("/api/v1/proxy/namespaces/kube-system/services/monitoring-heapster/api/v1/model/namespaces/%s/pod-list/%s/metrics/cpu-usage",
 | 
				
			||||||
				namespace, podName), *responses[heapsterHandler])
 | 
									namespace, podName), *responses[heapsterCpuHandler])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if responses[heapsterMemHandler] != nil {
 | 
				
			||||||
 | 
							handlers[heapsterMemHandler] = mkRawHandler(
 | 
				
			||||||
 | 
								fmt.Sprintf("/api/v1/proxy/namespaces/kube-system/services/monitoring-heapster/api/v1/model/namespaces/%s/pod-list/%s/metrics/memory-usage",
 | 
				
			||||||
 | 
									namespace, podName), *responses[heapsterMemHandler])
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mux.HandleFunc("/", func(res http.ResponseWriter, req *http.Request) {
 | 
						mux.HandleFunc("/", func(res http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
@@ -92,7 +100,6 @@ func makeTestServer(t *testing.T, responses map[string]*serverResponse) (*httpte
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestHeapsterResourceConsumptionGet(t *testing.T) {
 | 
					func TestHeapsterResourceConsumptionGet(t *testing.T) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	podListResponse := serverResponse{http.StatusOK, &api.PodList{
 | 
						podListResponse := serverResponse{http.StatusOK, &api.PodList{
 | 
				
			||||||
		Items: []api.Pod{
 | 
							Items: []api.Pod{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -103,18 +110,28 @@ func TestHeapsterResourceConsumptionGet(t *testing.T) {
 | 
				
			|||||||
			}}}}
 | 
								}}}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	timestamp := time.Now()
 | 
						timestamp := time.Now()
 | 
				
			||||||
	metrics := heapster.MetricResultList{
 | 
						metricsCpu := heapster.MetricResultList{
 | 
				
			||||||
		Items: []heapster.MetricResult{{
 | 
							Items: []heapster.MetricResult{{
 | 
				
			||||||
			Metrics:         []heapster.MetricPoint{{timestamp, 650}},
 | 
								Metrics:         []heapster.MetricPoint{{timestamp, cpu}},
 | 
				
			||||||
			LatestTimestamp: timestamp,
 | 
								LatestTimestamp: timestamp,
 | 
				
			||||||
		}}}
 | 
							}}}
 | 
				
			||||||
	heapsterRawResponse, _ := json.Marshal(&metrics)
 | 
						heapsterRawCpuResponse, _ := json.Marshal(&metricsCpu)
 | 
				
			||||||
	heapsterStrResponse := string(heapsterRawResponse)
 | 
						heapsterStrCpuResponse := string(heapsterRawCpuResponse)
 | 
				
			||||||
	heapsterResponse := serverResponse{http.StatusOK, &heapsterStrResponse}
 | 
						heapsterCpuResponse := serverResponse{http.StatusOK, &heapsterStrCpuResponse}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						metricsMem := heapster.MetricResultList{
 | 
				
			||||||
 | 
							Items: []heapster.MetricResult{{
 | 
				
			||||||
 | 
								Metrics:         []heapster.MetricPoint{{timestamp, memory}},
 | 
				
			||||||
 | 
								LatestTimestamp: timestamp,
 | 
				
			||||||
 | 
							}}}
 | 
				
			||||||
 | 
						heapsterRawMemResponse, _ := json.Marshal(&metricsMem)
 | 
				
			||||||
 | 
						heapsterStrMemResponse := string(heapsterRawMemResponse)
 | 
				
			||||||
 | 
						heapsterMemResponse := serverResponse{http.StatusOK, &heapsterStrMemResponse}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	testServer, _ := makeTestServer(t,
 | 
						testServer, _ := makeTestServer(t,
 | 
				
			||||||
		map[string]*serverResponse{
 | 
							map[string]*serverResponse{
 | 
				
			||||||
			heapsterHandler: &heapsterResponse,
 | 
								heapsterCpuHandler: &heapsterCpuResponse,
 | 
				
			||||||
 | 
								heapsterMemHandler: &heapsterMemResponse,
 | 
				
			||||||
			podListHandler:     &podListResponse,
 | 
								podListHandler:     &podListResponse,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -127,5 +144,11 @@ func TestHeapsterResourceConsumptionGet(t *testing.T) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Error while getting consumption: %v", err)
 | 
							t.Fatalf("Error while getting consumption: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	assert.Equal(t, int64(650), val.Quantity.MilliValue())
 | 
						assert.Equal(t, int64(cpu), val.Quantity.MilliValue())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						val, err = metricsClient.ResourceConsumption(namespace).Get(api.ResourceMemory, map[string]string{"app": "test"})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Error while getting consumption: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						assert.Equal(t, int64(memory), val.Quantity.Value())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user