65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package zabbix
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/alexanderzobnin/grafana-zabbix/pkg/gtime"
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
)
|
|
|
|
func readZabbixSettings(dsInstanceSettings *backend.DataSourceInstanceSettings) (*ZabbixDatasourceSettings, error) {
|
|
zabbixSettingsDTO := &ZabbixDatasourceSettingsDTO{}
|
|
|
|
err := json.Unmarshal(dsInstanceSettings.JSONData, &zabbixSettingsDTO)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if zabbixSettingsDTO.TrendsFrom == "" {
|
|
zabbixSettingsDTO.TrendsFrom = "7d"
|
|
}
|
|
if zabbixSettingsDTO.TrendsRange == "" {
|
|
zabbixSettingsDTO.TrendsRange = "4d"
|
|
}
|
|
if zabbixSettingsDTO.CacheTTL == "" {
|
|
zabbixSettingsDTO.CacheTTL = "1h"
|
|
}
|
|
|
|
if zabbixSettingsDTO.Timeout == "" {
|
|
zabbixSettingsDTO.Timeout = "30"
|
|
}
|
|
|
|
trendsFrom, err := gtime.ParseInterval(zabbixSettingsDTO.TrendsFrom)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
trendsRange, err := gtime.ParseInterval(zabbixSettingsDTO.TrendsRange)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cacheTTL, err := gtime.ParseInterval(zabbixSettingsDTO.CacheTTL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
timeout, err := strconv.Atoi(zabbixSettingsDTO.Timeout)
|
|
if err != nil {
|
|
return nil, errors.New("failed to parse timeout: " + err.Error())
|
|
}
|
|
|
|
zabbixSettings := &ZabbixDatasourceSettings{
|
|
Trends: zabbixSettingsDTO.Trends,
|
|
TrendsFrom: trendsFrom,
|
|
TrendsRange: trendsRange,
|
|
CacheTTL: cacheTTL,
|
|
Timeout: time.Duration(timeout) * time.Second,
|
|
}
|
|
|
|
return zabbixSettings, nil
|
|
}
|