blob: 6705c72a8ce16646ff97a019ee581b299c0ee0af [file] [log] [blame]
/*
* Copyright 2019-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package common
import (
"github.com/opencord/voltha-protos/v4/go/voltha"
)
type PmMetrics struct {
deviceId string
frequency uint32
grouped bool
frequencyOverride bool
metrics map[string]*voltha.PmConfig
}
type PmMetricsOption func(*PmMetrics)
func Frequency(frequency uint32) PmMetricsOption {
return func(args *PmMetrics) {
args.frequency = frequency
}
}
func Grouped(grouped bool) PmMetricsOption {
return func(args *PmMetrics) {
args.grouped = grouped
}
}
func FrequencyOverride(frequencyOverride bool) PmMetricsOption {
return func(args *PmMetrics) {
args.frequencyOverride = frequencyOverride
}
}
func Metrics(pmNames []string) PmMetricsOption {
return func(args *PmMetrics) {
args.metrics = make(map[string]*voltha.PmConfig)
for _, name := range pmNames {
args.metrics[name] = &voltha.PmConfig{
Name: name,
Type: voltha.PmConfig_COUNTER,
Enabled: true,
}
}
}
}
func NewPmMetrics(deviceId string, opts ...PmMetricsOption) *PmMetrics {
pm := &PmMetrics{deviceId: deviceId}
for _, option := range opts {
option(pm)
}
return pm
}
func (pm *PmMetrics) ToPmConfigs() *voltha.PmConfigs {
pmConfigs := &voltha.PmConfigs{
Id: pm.deviceId,
DefaultFreq: pm.frequency,
Grouped: pm.grouped,
FreqOverride: pm.frequencyOverride,
}
for _, v := range pm.metrics {
pmConfigs.Metrics = append(pmConfigs.Metrics, &voltha.PmConfig{Name: v.Name, Type: v.Type, Enabled: v.Enabled})
}
return pmConfigs
}