github.com/kubewharf/katalyst-core@v0.5.3/pkg/metaserver/agent/metric/fake_metric.go (about)

     1  /*
     2  Copyright 2022 The Katalyst Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  // Copyright 2022 The Katalyst Authors.
    18  //
    19  // Licensed under the Apache License, Version 2.0 (the "License");
    20  // you may not use this file except in compliance with the License.
    21  // You may obtain a copy of the License at
    22  //
    23  //     http://www.apache.org/licenses/LICENSE-2.0
    24  //
    25  // Unless required by applicable law or agreed to in writing, software
    26  // distributed under the License is distributed on an "AS IS" BASIS,
    27  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    28  // See the License for the specific language governing permissions and
    29  // limitations under the License.
    30  
    31  package metric
    32  
    33  import (
    34  	"context"
    35  	"sync"
    36  
    37  	v1 "k8s.io/api/core/v1"
    38  
    39  	"github.com/kubewharf/katalyst-core/pkg/metaserver/agent/metric/types"
    40  	"github.com/kubewharf/katalyst-core/pkg/metrics"
    41  	"github.com/kubewharf/katalyst-core/pkg/util/machine"
    42  	"github.com/kubewharf/katalyst-core/pkg/util/metric"
    43  )
    44  
    45  // NewFakeMetricsFetcher returns a fake MetricsFetcher.
    46  func NewFakeMetricsFetcher(emitter metrics.MetricEmitter) types.MetricsFetcher {
    47  	return &FakeMetricsFetcher{
    48  		metricStore:           metric.NewMetricStore(),
    49  		emitter:               emitter,
    50  		hasSynced:             true,
    51  		checkMetricDataExpire: checkMetricDataExpireFunc(minimumMetricInsurancePeriod),
    52  	}
    53  }
    54  
    55  type FakeMetricsFetcher struct {
    56  	sync.RWMutex
    57  	metricStore           *metric.MetricStore
    58  	emitter               metrics.MetricEmitter
    59  	registeredMetric      []func(store *metric.MetricStore)
    60  	checkMetricDataExpire CheckMetricDataExpireFunc
    61  
    62  	hasSynced bool
    63  }
    64  
    65  func (f *FakeMetricsFetcher) Run(_ context.Context) {
    66  	f.RLock()
    67  	defer f.RUnlock()
    68  	for _, fu := range f.registeredMetric {
    69  		fu(f.metricStore)
    70  	}
    71  }
    72  
    73  func (f *FakeMetricsFetcher) SetSynced(synced bool) {
    74  	f.hasSynced = synced
    75  }
    76  
    77  func (f *FakeMetricsFetcher) HasSynced() bool {
    78  	return f.hasSynced
    79  }
    80  
    81  func (f *FakeMetricsFetcher) RegisterNotifier(_ types.MetricsScope, _ types.NotifiedRequest, _ chan types.NotifiedResponse) string {
    82  	return ""
    83  }
    84  
    85  func (f *FakeMetricsFetcher) DeRegisterNotifier(_ types.MetricsScope, _ string) {}
    86  
    87  func (f *FakeMetricsFetcher) RegisterExternalMetric(fu func(store *metric.MetricStore)) {
    88  	f.Lock()
    89  	defer f.Unlock()
    90  	f.registeredMetric = append(f.registeredMetric, fu)
    91  }
    92  
    93  func (f *FakeMetricsFetcher) GetNodeMetric(metricName string) (metric.MetricData, error) {
    94  	return f.checkMetricDataExpire(f.metricStore.GetNodeMetric(metricName))
    95  }
    96  
    97  func (f *FakeMetricsFetcher) GetNumaMetric(numaID int, metricName string) (metric.MetricData, error) {
    98  	return f.checkMetricDataExpire(f.metricStore.GetNumaMetric(numaID, metricName))
    99  }
   100  
   101  func (f *FakeMetricsFetcher) GetDeviceMetric(deviceName string, metricName string) (metric.MetricData, error) {
   102  	return f.checkMetricDataExpire(f.metricStore.GetDeviceMetric(deviceName, metricName))
   103  }
   104  
   105  func (f *FakeMetricsFetcher) GetCPUMetric(coreID int, metricName string) (metric.MetricData, error) {
   106  	return f.checkMetricDataExpire(f.metricStore.GetCPUMetric(coreID, metricName))
   107  }
   108  
   109  func (f *FakeMetricsFetcher) GetContainerMetric(podUID, containerName, metricName string) (metric.MetricData, error) {
   110  	return f.checkMetricDataExpire(f.metricStore.GetContainerMetric(podUID, containerName, metricName))
   111  }
   112  
   113  func (f *FakeMetricsFetcher) GetContainerNumaMetric(podUID, containerName, numaNode, metricName string) (metric.MetricData, error) {
   114  	return f.checkMetricDataExpire(f.metricStore.GetContainerNumaMetric(podUID, containerName, numaNode, metricName))
   115  }
   116  
   117  func (f *FakeMetricsFetcher) GetPodVolumeMetric(podUID, volumeName, metricName string) (metric.MetricData, error) {
   118  	return f.checkMetricDataExpire(f.metricStore.GetPodVolumeMetric(podUID, volumeName, metricName))
   119  }
   120  
   121  func (f *FakeMetricsFetcher) SetNodeMetric(metricName string, data metric.MetricData) {
   122  	f.metricStore.SetNodeMetric(metricName, data)
   123  }
   124  
   125  func (f *FakeMetricsFetcher) SetNumaMetric(numaID int, metricName string, data metric.MetricData) {
   126  	f.metricStore.SetNumaMetric(numaID, metricName, data)
   127  }
   128  
   129  func (f *FakeMetricsFetcher) SetCPUMetric(cpu int, metricName string, data metric.MetricData) {
   130  	f.metricStore.SetCPUMetric(cpu, metricName, data)
   131  }
   132  
   133  func (f *FakeMetricsFetcher) SetDeviceMetric(deviceName string, metricName string, data metric.MetricData) {
   134  	f.metricStore.SetDeviceMetric(deviceName, metricName, data)
   135  }
   136  
   137  func (f *FakeMetricsFetcher) SetContainerMetric(podUID, containerName, metricName string, data metric.MetricData) {
   138  	f.metricStore.SetContainerMetric(podUID, containerName, metricName, data)
   139  }
   140  
   141  func (f *FakeMetricsFetcher) SetContainerNumaMetric(podUID, containerName, numaNode, metricName string, data metric.MetricData) {
   142  	f.metricStore.SetContainerNumaMetric(podUID, containerName, numaNode, metricName, data)
   143  }
   144  
   145  func (f *FakeMetricsFetcher) AggregatePodNumaMetric(podList []*v1.Pod, numaNode, metricName string, agg metric.Aggregator, filter metric.ContainerMetricFilter) metric.MetricData {
   146  	return f.metricStore.AggregatePodNumaMetric(podList, numaNode, metricName, agg, filter)
   147  }
   148  
   149  func (f *FakeMetricsFetcher) AggregatePodMetric(podList []*v1.Pod, metricName string, agg metric.Aggregator, filter metric.ContainerMetricFilter) metric.MetricData {
   150  	return f.metricStore.AggregatePodMetric(podList, metricName, agg, filter)
   151  }
   152  
   153  func (f *FakeMetricsFetcher) AggregateCoreMetric(cpuset machine.CPUSet, metricName string, agg metric.Aggregator) metric.MetricData {
   154  	return f.metricStore.AggregateCoreMetric(cpuset, metricName, agg)
   155  }
   156  
   157  func (f *FakeMetricsFetcher) SetCgroupMetric(cgroupPath, metricName string, data metric.MetricData) {
   158  	f.metricStore.SetCgroupMetric(cgroupPath, metricName, data)
   159  }
   160  
   161  func (f *FakeMetricsFetcher) GetCgroupMetric(cgroupPath, metricName string) (metric.MetricData, error) {
   162  	return f.metricStore.GetCgroupMetric(cgroupPath, metricName)
   163  }
   164  
   165  func (f *FakeMetricsFetcher) SetCgroupNumaMetric(cgroupPath string, numaNode int, metricName string, data metric.MetricData) {
   166  	f.metricStore.SetCgroupNumaMetric(cgroupPath, numaNode, metricName, data)
   167  }
   168  
   169  func (f *FakeMetricsFetcher) GetCgroupNumaMetric(cgroupPath string, numaNode int, metricName string) (metric.MetricData, error) {
   170  	return f.checkMetricDataExpire(f.metricStore.GetCgroupNumaMetric(cgroupPath, numaNode, metricName))
   171  }