** 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/>.
"github.com/fsnotify/fsnotify"
"golang.zabbix.com/agent2/pkg/itemutil"
"golang.zabbix.com/agent2/pkg/watch"
"golang.zabbix.com/sdk/errs"
"golang.zabbix.com/sdk/plugin"
type watchRequest struct {
output plugin.ResultWriter
watcher *fsnotify.Watcher
eventSources map[string]*fileWatcher
type fsNotify interface {
addPath(path string) error
impl.eventSources = make(map[string]*fileWatcher)
impl.manager = watch.NewManager(&impl)
err := plugin.RegisterMetrics(&impl, "FileWatcher", "file.watch", "Monitor file contents.")
panic(errs.Wrap(err, "failed to register metrics"))