mirror of
https://github.com/inexio/thola.git
synced 2026-10-24 03:08:55 +03:00
81 lines
4.2 KiB
Go
81 lines
4.2 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/inexio/thola/internal/network"
|
|
"github.com/inexio/thola/internal/parser"
|
|
"github.com/inexio/thola/internal/request"
|
|
"github.com/inexio/thola/internal/utility"
|
|
"github.com/rs/zerolog/log"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
func getBaseRequest(host string) request.BaseRequest {
|
|
var nullInt *int
|
|
var nullUInt32 *uint32
|
|
var nullString *string
|
|
timeout := viper.GetInt("request.timeout")
|
|
maxRepetitions := viper.GetUint32("device.snmp-max-repetitions")
|
|
parallelRequests := viper.GetInt("device.snmp-discover-par-requests")
|
|
discoverTimeout := viper.GetInt("device.snmp-discover-timeout")
|
|
retries := viper.GetInt("device.snmp-discover-retries")
|
|
authUsername := viper.GetString("device.http-username")
|
|
authPassword := viper.GetString("device.http-password")
|
|
v3Level := viper.GetString("device.snmp-v3-level")
|
|
v3ContextName := viper.GetString("device.snmp-v3-context")
|
|
v3User := viper.GetString("device.snmp-v3-user")
|
|
v3AuthKey := viper.GetString("device.snmp-v3-auth-key")
|
|
v3AuthProto := viper.GetString("device.snmp-v3-auth-proto")
|
|
v3PrivKey := viper.GetString("device.snmp-v3-priv-key")
|
|
v3PrivProto := viper.GetString("device.snmp-v3-priv-proto")
|
|
return request.BaseRequest{
|
|
Timeout: utility.IfThenElse(deviceFlagSet.Changed("timeout"), &timeout, nullInt).(*int),
|
|
DeviceData: request.DeviceData{
|
|
IPAddress: host,
|
|
ConnectionData: network.ConnectionData{
|
|
SNMP: &network.SNMPConnectionData{
|
|
Communities: utility.IfThenElse(deviceFlagSet.Changed("snmp-community"), viper.GetStringSlice("device.snmp-communities"), []string{}).([]string),
|
|
Versions: utility.IfThenElse(deviceFlagSet.Changed("snmp-version"), viper.GetStringSlice("device.snmp-versions"), []string{}).([]string),
|
|
Ports: utility.IfThenElse(deviceFlagSet.Changed("snmp-port"), viper.GetIntSlice("device.snmp-ports"), []int{}).([]int),
|
|
MaxRepetitions: utility.IfThenElse(deviceFlagSet.Changed("snmp-max-repetitions"), &maxRepetitions, nullUInt32).(*uint32),
|
|
DiscoverParallelRequests: utility.IfThenElse(deviceFlagSet.Changed("snmp-discover-par-requests"), ¶llelRequests, nullInt).(*int),
|
|
DiscoverTimeout: utility.IfThenElse(deviceFlagSet.Changed("snmp-discover-timeout"), &discoverTimeout, nullInt).(*int),
|
|
DiscoverRetries: utility.IfThenElse(deviceFlagSet.Changed("snmp-discover-retries"), &retries, nullInt).(*int),
|
|
V3Data: network.SNMPv3ConnectionData{
|
|
Level: utility.IfThenElse(deviceFlagSet.Changed("snmp-v3-level"), &v3Level, nullString).(*string),
|
|
ContextName: utility.IfThenElse(deviceFlagSet.Changed("snmp-v3-context"), &v3ContextName, nullString).(*string),
|
|
User: utility.IfThenElse(deviceFlagSet.Changed("snmp-v3-user"), &v3User, nullString).(*string),
|
|
AuthKey: utility.IfThenElse(deviceFlagSet.Changed("snmp-v3-auth-key"), &v3AuthKey, nullString).(*string),
|
|
AuthProtocol: utility.IfThenElse(deviceFlagSet.Changed("snmp-v3-auth-proto"), &v3AuthProto, nullString).(*string),
|
|
PrivKey: utility.IfThenElse(deviceFlagSet.Changed("snmp-v3-priv-key"), &v3PrivKey, nullString).(*string),
|
|
PrivProtocol: utility.IfThenElse(deviceFlagSet.Changed("snmp-v3-priv-proto"), &v3PrivProto, nullString).(*string),
|
|
},
|
|
},
|
|
HTTP: &network.HTTPConnectionData{
|
|
HTTPPorts: utility.IfThenElse(deviceFlagSet.Changed("http-port"), viper.GetIntSlice("device.http-ports"), []int{}).([]int),
|
|
HTTPSPorts: utility.IfThenElse(deviceFlagSet.Changed("https-port"), viper.GetIntSlice("device.https-ports"), []int{}).([]int),
|
|
AuthUsername: utility.IfThenElse(deviceFlagSet.Changed("http-username"), &authUsername, nullString).(*string),
|
|
AuthPassword: utility.IfThenElse(deviceFlagSet.Changed("http-password"), &authPassword, nullString).(*string),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func handleError(ctx context.Context, err error, r request.Request) {
|
|
var v interface{}
|
|
res, err2 := r.HandlePreProcessError(err)
|
|
if err2 != nil {
|
|
v = err2
|
|
} else {
|
|
v = res
|
|
}
|
|
b, err := parser.Parse(v, viper.GetString("format"))
|
|
if err != nil {
|
|
log.Ctx(ctx).Error().AnErr("parse_error", err).AnErr("original_error", err).Msg("failed to parse error")
|
|
} else {
|
|
fmt.Printf("%s\n", b)
|
|
}
|
|
}
|