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 }