func (p *PluginExport) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error) {
** 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/agent2/pkg/procfs"
"golang.zabbix.com/sdk/errs"
"golang.zabbix.com/sdk/log"
"golang.zabbix.com/sdk/plugin"
maxInactivityPeriod = time.Hour * 25
queries map[procQuery]*cpuUtilStats
stats map[int64]*procStat
type PluginExport struct {
var impl Plugin = Plugin{
stats: make(map[int64]*procStat),
queries: make(map[procQuery]*cpuUtilStats),
var implExport PluginExport = PluginExport{}
err := plugin.RegisterMetrics(&impl, "Proc", "proc.cpu.util", "Process CPU utilization percentage.")
panic(errs.Wrap(err, "failed to register metrics"))
err = plugin.RegisterMetrics(
&implExport, "ProcExporter",
"proc.mem", "Process memory utilization values.",
"proc.num", "The number of processes.",
"proc.get", "List of OS processes with statistics.",
panic(errs.Wrap(err, "failed to register metrics"))
func (h historyIndex) inc() historyIndex {