monitoring/monitoring.go (74 lines of code) (raw):
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. 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 monitoring
import (
"errors"
"github.com/elastic/elastic-agent-libs/config"
)
// BeatConfig represents the part of the $BEAT.yml to do with monitoring settings
type BeatConfig struct {
Monitoring *config.C `config:"monitoring"`
}
type Mode uint8
//go:generate stringer -type=Mode
const (
// Reported mode, is lowest report level with most basic metrics only
Reported Mode = iota
// Full reports all metrics
Full
)
// Default is the global default metrics registry provided by the monitoring package.
var Default = NewRegistry()
func init() {
GetNamespace("stats").SetRegistry(Default)
}
var errNotFound = errors.New("name unknown")
var errInvalidName = errors.New("name does not point to a valid variable")
func VisitMode(mode Mode, vs Visitor) {
Default.Visit(mode, vs)
}
func Visit(vs Visitor) {
Default.Visit(Full, vs)
}
func Do(mode Mode, f func(string, interface{})) {
Default.Do(mode, f)
}
func Get(name string) Var {
return Default.Get(name)
}
func GetRegistry(name string) *Registry {
return Default.GetRegistry(name)
}
func Remove(name string) {
Default.Remove(name)
}
func Clear() error {
return Default.Clear()
}
// GetClusterUUID returns the value of the monitoring.cluster_uuid setting, if it is set.
func GetClusterUUID(monitoringCfg *config.C) (string, error) {
if monitoringCfg == nil {
return "", nil
}
var config struct {
ClusterUUID string `config:"cluster_uuid"`
}
if err := monitoringCfg.Unpack(&config); err != nil {
return "", err
}
return config.ClusterUUID, nil
}
// IsEnabled returns whether the monitoring reporter is enabled or not.
func IsEnabled(monitoringCfg *config.C) bool {
if monitoringCfg == nil {
return false
}
// If the only setting in the monitoring config is cluster_uuid, it is
// not enabled
fields := monitoringCfg.GetFields()
if len(fields) == 1 && fields[0] == "cluster_uuid" {
return false
}
return monitoringCfg.Enabled()
}
// IsBufferEnabled will check if the monitoring buffer is explicitly enabled.
func IsBufferEnabled(monitoringCfg *config.C) bool {
if monitoringCfg == nil {
return false
}
fields := monitoringCfg.GetFields()
for _, field := range fields {
if field == "enabled" {
// default Enabled will return true, so we only return the value if it's defined.
return monitoringCfg.Enabled()
}
}
return false
}