func TestClusterAggregate(t *testing.T) { batch := core.DataBatch{ Timestamp: time.Now(), MetricSets: map[string]*core.MetricSet{ core.PodKey("ns1", "pod1"): { Labels: map[string]string{ core.LabelMetricSetType.Key: core.MetricSetTypeNamespace, core.LabelNamespaceName.Key: "ns1", }, MetricValues: map[string]core.MetricValue{ "m1": { ValueType: core.ValueInt64, MetricType: core.MetricGauge, IntValue: 10, }, "m2": { ValueType: core.ValueInt64, MetricType: core.MetricGauge, IntValue: 222, }, }, }, core.PodKey("ns1", "pod2"): { Labels: map[string]string{ core.LabelMetricSetType.Key: core.MetricSetTypeNamespace, core.LabelNamespaceName.Key: "ns1", }, MetricValues: map[string]core.MetricValue{ "m1": { ValueType: core.ValueInt64, MetricType: core.MetricGauge, IntValue: 100, }, "m3": { ValueType: core.ValueInt64, MetricType: core.MetricGauge, IntValue: 30, }, }, }, }, } processor := ClusterAggregator{ MetricsToAggregate: []string{"m1", "m3"}, } result, err := processor.Process(&batch) assert.NoError(t, err) cluster, found := result.MetricSets[core.ClusterKey()] assert.True(t, found) m1, found := cluster.MetricValues["m1"] assert.True(t, found) assert.Equal(t, int64(110), m1.IntValue) m3, found := cluster.MetricValues["m3"] assert.True(t, found) assert.Equal(t, int64(30), m3.IntValue) }
func (this *ClusterAggregator) Process(batch *core.DataBatch) (*core.DataBatch, error) { clusterKey := core.ClusterKey() cluster := clusterMetricSet() for _, metricSet := range batch.MetricSets { if metricSetType, found := metricSet.Labels[core.LabelMetricSetType.Key]; found && (metricSetType == core.MetricSetTypeNamespace || metricSetType == core.MetricSetTypeSystemContainer) { if err := aggregate(metricSet, cluster, this.MetricsToAggregate); err != nil { return nil, err } } } batch.MetricSets[clusterKey] = cluster return batch, nil }
// clusterMetrics returns a metric timeseries for a metric of the Cluster entity. func (a *Api) clusterMetrics(request *restful.Request, response *restful.Response) { a.processMetricRequest(core.ClusterKey(), request, response) }
// availableMetrics returns a list of available cluster metric names. func (a *Api) availableClusterMetrics(request *restful.Request, response *restful.Response) { a.processMetricNamesRequest(core.ClusterKey(), response) }