blob: 88f2964632e8230abbc8c81f220fbe98c6bb6f88 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 global
// MetricsConfig This is the config struct for all metrics implementation
type MetricsConfig struct {
Enable *bool `default:"false" yaml:"enable" json:"enable,omitempty" property:"enable"`
Port string `default:"9090" yaml:"port" json:"port,omitempty" property:"port"`
Path string `default:"/metrics" yaml:"path" json:"path,omitempty" property:"path"`
Protocol string `default:"prometheus" yaml:"protocol" json:"protocol,omitempty" property:"protocol"`
Prometheus *PrometheusConfig `yaml:"prometheus" json:"prometheus" property:"prometheus"`
Aggregation *AggregateConfig `yaml:"aggregation" json:"aggregation" property:"aggregation"`
EnableMetadata *bool `default:"true" yaml:"enable-metadata" json:"enable-metadata,omitempty" property:"enable-metadata"`
EnableRegistry *bool `default:"true" yaml:"enable-registry" json:"enable-registry,omitempty" property:"enable-registry"`
EnableConfigCenter *bool `default:"true" yaml:"enable-config-center" json:"enable-config-center,omitempty" property:"enable-config-center"`
}
type AggregateConfig struct {
Enabled *bool `default:"false" yaml:"enabled" json:"enabled,omitempty" property:"enabled"`
BucketNum int `default:"10" yaml:"bucket-num" json:"bucket-num,omitempty" property:"bucket-num"`
TimeWindowSeconds int `default:"120" yaml:"time-window-seconds" json:"time-window-seconds,omitempty" property:"time-window-seconds"`
}
type PrometheusConfig struct {
Exporter *Exporter `yaml:"exporter" json:"exporter,omitempty" property:"exporter"`
Pushgateway *PushgatewayConfig `yaml:"pushgateway" json:"pushgateway,omitempty" property:"pushgateway"`
}
type Exporter struct {
Enabled *bool `default:"false" yaml:"enabled" json:"enabled,omitempty" property:"enabled"`
}
type PushgatewayConfig struct {
Enabled *bool `default:"false" yaml:"enabled" json:"enabled,omitempty" property:"enabled"`
BaseUrl string `default:"" yaml:"base-url" json:"base-url,omitempty" property:"base-url"`
Job string `default:"default_dubbo_job" yaml:"job" json:"job,omitempty" property:"job"`
Username string `default:"" yaml:"username" json:"username,omitempty" property:"username"`
Password string `default:"" yaml:"password" json:"password,omitempty" property:"password"`
// seconds
PushInterval int `default:"30" yaml:"push-interval" json:"push-interval,omitempty" property:"push-interval"`
}
func DefaultMetricsConfig() *MetricsConfig {
// return a new config without setting any field means there is not any default value for initialization
return &MetricsConfig{Prometheus: defaultPrometheusConfig(), Aggregation: defaultAggregateConfig()}
}
// Clone a new MetricsConfig
func (c *MetricsConfig) Clone() *MetricsConfig {
if c == nil {
return nil
}
var newEnable *bool
if c.Enable != nil {
newEnable = new(bool)
*newEnable = *c.Enable
}
var newEnableMetadata *bool
if c.EnableMetadata != nil {
newEnableMetadata = new(bool)
*newEnableMetadata = *c.EnableMetadata
}
var newEnableRegistry *bool
if c.EnableRegistry != nil {
newEnableRegistry = new(bool)
*newEnableRegistry = *c.EnableRegistry
}
var newEnableConfigCenter *bool
if c.EnableConfigCenter != nil {
newEnableConfigCenter = new(bool)
*newEnableConfigCenter = *c.EnableConfigCenter
}
return &MetricsConfig{
Enable: newEnable,
Port: c.Port,
Path: c.Path,
Protocol: c.Protocol,
Prometheus: c.Prometheus.Clone(),
Aggregation: c.Aggregation.Clone(),
EnableMetadata: newEnableMetadata,
EnableRegistry: newEnableRegistry,
EnableConfigCenter: newEnableConfigCenter,
}
}
func defaultPrometheusConfig() *PrometheusConfig {
return &PrometheusConfig{Exporter: &Exporter{}, Pushgateway: &PushgatewayConfig{}}
}
func (c *PrometheusConfig) Clone() *PrometheusConfig {
if c == nil {
return nil
}
return &PrometheusConfig{
Exporter: c.Exporter.Clone(),
Pushgateway: c.Pushgateway.Clone(),
}
}
func (c *Exporter) Clone() *Exporter {
if c == nil {
return nil
}
var newEnabled *bool
if c.Enabled != nil {
newEnabled = new(bool)
*newEnabled = *c.Enabled
}
return &Exporter{
Enabled: newEnabled,
}
}
func (c *PushgatewayConfig) Clone() *PushgatewayConfig {
if c == nil {
return nil
}
var newEnabled *bool
if c.Enabled != nil {
newEnabled = new(bool)
*newEnabled = *c.Enabled
}
return &PushgatewayConfig{
Enabled: newEnabled,
BaseUrl: c.BaseUrl,
Job: c.Job,
Username: c.Username,
Password: c.Password,
PushInterval: c.PushInterval,
}
}
func defaultAggregateConfig() *AggregateConfig {
return &AggregateConfig{}
}
func (c *AggregateConfig) Clone() *AggregateConfig {
if c == nil {
return nil
}
var newEnabled *bool
if c.Enabled != nil {
newEnabled = new(bool)
*newEnabled = *c.Enabled
}
return &AggregateConfig{
Enabled: newEnabled,
BucketNum: c.BucketNum,
TimeWindowSeconds: c.TimeWindowSeconds,
}
}