** 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/omeid/go-yarn"
"golang.zabbix.com/sdk/metric"
"golang.zabbix.com/sdk/plugin"
"golang.zabbix.com/sdk/uri"
"golang.zabbix.com/sdk/zbxerr"
sysdbaExtension = " as sysdba"
sysasmExtension = " as sysoper"
sysoperExtension = " as sysasm"
sysdbaPrivelege = "sysdba"
sysasmPrivelege = "sysoper"
sysoperPrivelege = "sysasm"
// Plugin inherits plugin.Base and store plugin-specific data.
// impl is the pointer to the plugin implementation.
// Export implements the Exporter interface.
func (p *Plugin) Export(key string, rawParams []string, _ plugin.ContextProvider) (result interface{}, err error) {
params, extraParams, hc, err := metrics[key].EvalParams(rawParams, p.options.Sessions)
err = metric.SetDefaults(params, hc, p.options.Default)
service := url.QueryEscape(params["Service"])
user, privilege, err := splitUserPrivilege(params)
return nil, zbxerr.ErrorInvalidParams.Wrap(err)
uri, err := uri.NewWithCreds(params["URI"]+"?service="+service, user, params["Password"], uriDefaults)
handleMetric := getHandlerFunc(key)
return nil, zbxerr.ErrorUnsupportedMetric
conn, err := p.connMgr.GetConnection(connDetails{*uri, privilege})
// Special logic of processing connection errors should be used if oracle.ping is requested
// because it must return pingFailed if any error occurred.