** Copyright (C) 2001-2025 Zabbix SIA
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
"golang.zabbix.com/sdk/errs"
"golang.zabbix.com/sdk/metric"
"golang.zabbix.com/sdk/plugin"
keyContainerInfo = "docker.container_info"
keyContainerStats = "docker.container_stats"
keyContainers = "docker.containers"
keyContainersDiscovery = "docker.containers.discovery"
keyDataUsage = "docker.data_usage"
keyImages = "docker.images"
keyImagesDiscovery = "docker.images.discovery"
var metricsMeta = map[string]metricMeta{
keyContainerInfo: {"containers/%s/json"},
keyContainerStats: {"containers/%s/stats?stream=false"},
keyContainers: {"containers/json?all=true"},
keyContainersDiscovery: {"containers/json?all=%s"},
keyDataUsage: {"system/df"},
keyImages: {"images/json"},
keyImagesDiscovery: {"images/json"},
paramContainer = metric.NewParam("Container", "Container name for which the information is needed.").
paramStatusAll = metric.NewParam("All", "Return all containers (true) or only running (false).").
WithValidator(metric.SetValidator{Set: []string{"true", "false"}, CaseInsensitive: true})
var metrics = metric.MetricSet{
keyContainerInfo: metric.New(
"Return low-level information about a container.",
metric.NewParam("Info", "Return all JSON fields (full) or partial JSON fields (short).").
WithValidator(metric.SetValidator{Set: []string{"full", "short"}, CaseInsensitive: true}),
keyContainerStats: metric.New("Returns near realtime stats for a given container.",
[]*metric.Param{paramContainer}, false),
keyContainers: metric.New("Returns a list of containers.", nil, false),
keyContainersDiscovery: metric.New("Returns a list of containers, used for low-level discovery.",
[]*metric.Param{paramStatusAll}, false),
keyDataUsage: metric.New("Returns information about current data usage.", nil, false),
keyImages: metric.New("Returns a list of images.", nil, false),
keyImagesDiscovery: metric.New("Returns a list of images, used for low-level discovery.",
keyInfo: metric.New("Returns information about the docker server.", nil, false),
keyPing: metric.New("Pings the server and returns 0 or 1.", nil, false),
err := plugin.RegisterMetrics(&impl, pluginName, metrics.List()...)
panic(errs.Wrap(err, "failed to register metrics"))