Add first version of VES agent and vesmgr
[ric-plt/vespamgr.git] / cmd / vesmgr / vespaconf.go
diff --git a/cmd/vesmgr/vespaconf.go b/cmd/vesmgr/vespaconf.go
new file mode 100644 (file)
index 0000000..3643b05
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ *  Copyright (c) 2019 AT&T Intellectual Property.
+ *  Copyright (c) 2018-2019 Nokia.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package main
+
+import (
+       "time"
+)
+
+// Structs are copied from https://github.com/nokia/ONAP-VESPA/tree/master/ves-agent/config
+// and from https://github.com/nokia/ONAP-VESPA/blob/master/govel/config.go
+// Using tag v0.3.0
+
+// HeartbeatConfiguration parameters
+type HeartbeatConfiguration struct {
+       DefaultInterval time.Duration `yaml:"defaultInterval"`
+}
+
+// Label represents a VES field by it's name, with an expression
+// for getting its value
+type Label struct {
+       Name string `yaml:"name"`
+       Expr string `yaml:"expr"`
+}
+
+// MetricRule defines how to retrieve metrics and map them
+// into a list of evel.EventMeasurement struct
+type MetricRule struct {
+       Target         string  `yaml:"target"`          // Target VES event field
+       Expr           string  `yaml:"expr"`            // Prometheus query expression
+       VMIDLabel      string  `yaml:"vmId"`            // Metric label holding the VNF ID
+       Labels         []Label `yaml:"labels"`          // Set of VES fields to map to values of given label
+       ObjectName     string  `yaml:"object_name"`     // JSON Object Name
+       ObjectInstance string  `yaml:"object_instance"` // JSON Object instance
+       ObjectKeys     []Label `yaml:"object_keys"`     // JSON Object keys
+}
+
+// MetricRules defines a list of rules, and defaults values for them
+type MetricRules struct {
+       DefaultValues *MetricRule  `yaml:"defaults"` // Default rules to apply (except for expr), labels are merged
+       Metrics       []MetricRule `yaml:"metrics"`  // List of query and mapping of rules
+}
+
+// PrometheusConfig parameters
+type PrometheusConfig struct {
+       Address   string        `yaml:"address"`   // Base URL to prometheus API
+       Timeout   time.Duration `yaml:"timeout"`   // API request timeout
+       KeepAlive time.Duration `yaml:"keepalive"` // HTTP Keep-Alive
+       Rules     MetricRules   `yaml:"rules"`     // Querying rules
+}
+
+// MeasurementConfiguration parameters
+type MeasurementConfiguration struct {
+       DomainAbbreviation   string           `yaml:"domainAbbreviation"`   // "Measurement" or "Mfvs"
+       DefaultInterval      time.Duration    `yaml:"defaultInterval"`      // Default measurement interval
+       MaxBufferingDuration time.Duration    `yaml:"maxBufferingDuration"` // Maximum timeframe size of buffering
+       Prometheus           PrometheusConfig `yaml:"prometheus"`           // Prometheus configuration
+}
+
+// CollectorConfiguration parameters
+type CollectorConfiguration struct {
+       ServerRoot string `yaml:"serverRoot"`
+       FQDN       string `yaml:"fqdn"`
+       Port       int    `yaml:"port"`
+       Secure     bool   `yaml:"secure"`
+       Topic      string `yaml:"topic"`
+       User       string `yaml:"user"`
+       Password   string `yaml:"password"`
+       PassPhrase string `yaml:"passphrase,omitempty"` // passPhrase used to encrypt collector password in file
+}
+
+//NfcNamingCode mapping bettween NfcNamingCode (oam or etl) and Vnfcs
+type NfcNamingCode struct {
+       Type  string   `yaml:"type"`
+       Vnfcs []string `yaml:"vnfcs"`
+}
+
+// EventConfiguration parameters
+type EventConfiguration struct {
+       VNFName             string          `yaml:"vnfName"`             // Name of this VNF, eg: dpa2bhsxp5001v
+       ReportingEntityName string          `yaml:"reportingEntityName"` // Value of reporting entity field. Usually local VM (VNFC) name
+       ReportingEntityID   string          `yaml:"reportingEntityID"`   // Value of reporting entity UUID. Usually local VM (VNFC) UUID
+       MaxSize             int             `yaml:"maxSize"`
+       NfNamingCode        string          `yaml:"nfNamingCode,omitempty"` // "hspx"
+       NfcNamingCodes      []NfcNamingCode `yaml:"nfcNamingCodes,omitempty"`
+       RetryInterval       time.Duration   `yaml:"retryInterval,omitempty"`
+       MaxMissed           int             `yaml:"maxMissed,omitempty"`
+}
+
+// VESAgentConfiguration parameters
+type VESAgentConfiguration struct {
+       PrimaryCollector CollectorConfiguration   `yaml:"primaryCollector"`
+       Heartbeat        HeartbeatConfiguration   `yaml:"heartbeat,omitempty"`
+       Measurement      MeasurementConfiguration `yaml:"measurement,omitempty"`
+       Event            EventConfiguration       `yaml:"event,omitempty"`
+       Debug            bool                     `yaml:"debug,omitempty"`
+       CaCert           string                   `yaml:"caCert,omitempty"` // Root certificate content
+       DataDir          string                   `yaml:"datadir"`          // Path to directory containing data
+}