Initial commit
This commit is contained in:
77
configuration/configuration.go
Normal file
77
configuration/configuration.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package configuration
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
// Application configuration which is parsed from config.yaml.
|
||||
type Configuration struct {
|
||||
LogLevel int `yaml:"logLevel"` // Application log level.
|
||||
Host string `yaml:"host"` // Host address that application will bind to.
|
||||
Port uint16 `yaml:"port"` // Host port which application will listen for HTTP requests.
|
||||
PVE PveConfiguration `yaml:"proxmox"` // PVE configuration.
|
||||
}
|
||||
|
||||
// PVE token configuration.
|
||||
type PveTokenConfiguration struct {
|
||||
TokenId string `yaml:"tokenId"` // Token ID from PVE API key management.
|
||||
Secret string `yaml:"secret"` // Secret from PVE API key management.
|
||||
}
|
||||
|
||||
// MetricsConfiguration represents the metrics configuration.
|
||||
type PveMetricsConfiguration struct {
|
||||
ClusterState bool `yaml:"clusterState"` // Enables cluster state metrics collection.
|
||||
LXC bool `yaml:"lxc"` // Enables LXC container metrics collection.
|
||||
QEMU bool `yaml:"qemu"` // Enable QEMU virtual machine metrics collection.
|
||||
Disk bool `yaml:"disk"` // Enable physical disk metrics collection.
|
||||
Storage bool `yaml:"storage"` // Enable node storage metrics collection.
|
||||
NodeStatus bool `yaml:"nodeStatus"` // Enable node status metrics collection.
|
||||
Subscription bool `yaml:"subscription"` // Enable node subscription detail collection.
|
||||
SDN bool `yaml:"sdn"` // Enable node software defined network state collection.
|
||||
}
|
||||
|
||||
// PVE configuration.
|
||||
type PveConfiguration struct {
|
||||
Token PveTokenConfiguration `yaml:"token"` // PVE token.
|
||||
Hosts []string `yaml:"hosts"` // PVE hosts.
|
||||
Interval int `yaml:"interval"` // PVE scrape interval.
|
||||
Metrics PveMetricsConfiguration `yaml:"metrics"` // PVE metrics.
|
||||
}
|
||||
|
||||
// Validate configuration and check for mandaotry field.
|
||||
func (c *Configuration) Validate() error {
|
||||
// Validate host IP
|
||||
if net.ParseIP(c.Host) == nil {
|
||||
return fmt.Errorf("Host is not a valid IP address: %s", c.Host)
|
||||
}
|
||||
|
||||
// Validate PVE hosts
|
||||
if len(c.PVE.Hosts) == 0 {
|
||||
return errors.New("PVE hosts cannot be empty.")
|
||||
}
|
||||
|
||||
for _, host := range c.PVE.Hosts {
|
||||
u, err := url.Parse(host)
|
||||
if err != nil {
|
||||
return fmt.Errorf("PVE host '%s' is not valid URL. Error: %s", host, err)
|
||||
}
|
||||
|
||||
if !(u.Scheme == "http" || u.Scheme == "https") {
|
||||
return fmt.Errorf("PVE host '%s' must be protocol type of HTTP or HTTPS.", host)
|
||||
}
|
||||
}
|
||||
|
||||
// Validate PVE token
|
||||
if c.PVE.Token.TokenId == "" {
|
||||
return errors.New("PVE tokenId cannot be empty")
|
||||
}
|
||||
|
||||
if c.PVE.Token.Secret == "" {
|
||||
return errors.New("PVE secret cannot be empty")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user