github.com/kubewharf/katalyst-core@v0.5.3/cmd/katalyst-agent/app/options/options.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  package options
    18  
    19  import (
    20  	"k8s.io/apimachinery/pkg/util/errors"
    21  	cliflag "k8s.io/component-base/cli/flag"
    22  
    23  	"github.com/kubewharf/katalyst-core/cmd/base/options"
    24  	"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/dynamic"
    25  	"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/eviction"
    26  	"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/global"
    27  	"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/metaserver"
    28  	"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/orm"
    29  	"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/qrm"
    30  	"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/reporter"
    31  	"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/sysadvisor"
    32  	"github.com/kubewharf/katalyst-core/pkg/config"
    33  )
    34  
    35  // Options holds the configurations for collector agent.
    36  type Options struct {
    37  	// those are options used by all the katalyst components
    38  	*options.GenericOptions
    39  	*dynamic.DynamicOptions
    40  
    41  	// those are options used by all the katalyst agents
    42  	*global.BaseOptions
    43  	*global.PluginManagerOptions
    44  	*metaserver.MetaServerOptions
    45  	*global.QRMAdvisorOptions
    46  
    47  	// the below are options used by all each individual katalyst module/plugin
    48  	genericEvictionOptions *eviction.GenericEvictionOptions
    49  	evictionOptions        *eviction.EvictionOptions
    50  
    51  	genericReporterOptions *reporter.GenericReporterOptions
    52  	reporterPluginsOptions *reporter.ReporterPluginsOptions
    53  
    54  	genericSysAdvisorOptions *sysadvisor.GenericSysAdvisorOptions
    55  	sysadvisorPluginsOptions *sysadvisor.SysAdvisorPluginsOptions
    56  
    57  	genericQRMPluginOptions *qrm.GenericQRMPluginOptions
    58  	qrmPluginsOptions       *qrm.QRMPluginsOptions
    59  
    60  	ormOptions *orm.GenericORMPluginOptions
    61  }
    62  
    63  // NewOptions creates a new Options with a default config.
    64  func NewOptions() *Options {
    65  	return &Options{
    66  		GenericOptions:       options.NewGenericOptions(),
    67  		DynamicOptions:       dynamic.NewDynamicOptions(),
    68  		BaseOptions:          global.NewBaseOptions(),
    69  		MetaServerOptions:    metaserver.NewMetaServerOptions(),
    70  		PluginManagerOptions: global.NewPluginManagerOptions(),
    71  		QRMAdvisorOptions:    global.NewQRMAdvisorOptions(),
    72  
    73  		genericEvictionOptions:   eviction.NewGenericEvictionOptions(),
    74  		evictionOptions:          eviction.NewEvictionOptions(),
    75  		genericReporterOptions:   reporter.NewGenericReporterOptions(),
    76  		reporterPluginsOptions:   reporter.NewReporterPluginsOptions(),
    77  		genericSysAdvisorOptions: sysadvisor.NewGenericSysAdvisorOptions(),
    78  		sysadvisorPluginsOptions: sysadvisor.NewSysAdvisorPluginsOptions(),
    79  		genericQRMPluginOptions:  qrm.NewGenericQRMPluginOptions(),
    80  		qrmPluginsOptions:        qrm.NewQRMPluginsOptions(),
    81  		ormOptions:               orm.NewGenericORMPluginOptions(),
    82  	}
    83  }
    84  
    85  // AddFlags adds flags  to the specified FlagSet.
    86  func (o *Options) AddFlags(fss *cliflag.NamedFlagSets) {
    87  	o.GenericOptions.AddFlags(fss)
    88  	o.DynamicOptions.AddFlags(fss)
    89  	o.MetaServerOptions.AddFlags(fss)
    90  	o.PluginManagerOptions.AddFlags(fss)
    91  	o.BaseOptions.AddFlags(fss)
    92  	o.QRMAdvisorOptions.AddFlags(fss)
    93  	o.genericEvictionOptions.AddFlags(fss)
    94  	o.evictionOptions.AddFlags(fss)
    95  	o.genericReporterOptions.AddFlags(fss)
    96  	o.reporterPluginsOptions.AddFlags(fss)
    97  	o.genericSysAdvisorOptions.AddFlags(fss)
    98  	o.sysadvisorPluginsOptions.AddFlags(fss)
    99  	o.genericQRMPluginOptions.AddFlags(fss)
   100  	o.qrmPluginsOptions.AddFlags(fss)
   101  	o.ormOptions.AddFlags(fss)
   102  }
   103  
   104  // ApplyTo fills up config with options
   105  func (o *Options) ApplyTo(c *config.Configuration) error {
   106  	var errList []error
   107  
   108  	errList = append(errList, o.GenericOptions.ApplyTo(c.GenericConfiguration))
   109  	errList = append(errList, o.DynamicOptions.ApplyTo(c.GetDynamicConfiguration()))
   110  	errList = append(errList, o.BaseOptions.ApplyTo(c.BaseConfiguration))
   111  	errList = append(errList, o.PluginManagerOptions.ApplyTo(c.PluginManagerConfiguration))
   112  	errList = append(errList, o.MetaServerOptions.ApplyTo(c.MetaServerConfiguration))
   113  	errList = append(errList, o.QRMAdvisorOptions.ApplyTo(c.QRMAdvisorConfiguration))
   114  	errList = append(errList, o.genericEvictionOptions.ApplyTo(c.GenericEvictionConfiguration))
   115  	errList = append(errList, o.evictionOptions.ApplyTo(c.EvictionConfiguration))
   116  	errList = append(errList, o.genericReporterOptions.ApplyTo(c.GenericReporterConfiguration))
   117  	errList = append(errList, o.reporterPluginsOptions.ApplyTo(c.ReporterPluginsConfiguration))
   118  	errList = append(errList, o.genericSysAdvisorOptions.ApplyTo(c.GenericSysAdvisorConfiguration))
   119  	errList = append(errList, o.sysadvisorPluginsOptions.ApplyTo(c.SysAdvisorPluginsConfiguration))
   120  	errList = append(errList, o.genericQRMPluginOptions.ApplyTo(c.GenericQRMPluginConfiguration))
   121  	errList = append(errList, o.qrmPluginsOptions.ApplyTo(c.QRMPluginsConfiguration))
   122  	errList = append(errList, o.ormOptions.ApplyTo(c.GenericORMConfiguration))
   123  
   124  	return errors.NewAggregate(errList)
   125  }
   126  
   127  // Config returns a new configuration instance.
   128  func (o *Options) Config() (*config.Configuration, error) {
   129  	c := config.NewConfiguration()
   130  	if err := o.ApplyTo(c); err != nil {
   131  		return nil, err
   132  	}
   133  	return c, nil
   134  }