Fix event config: VNFName, ReportingEntityName and ID

Vesmgr configures the Vespa event with the following values:
- VNFName: Value from env variable VESMGR_VNFNAME,
           default, if the env variable does not exist: Vespa
- ReportingEntityName: Vespa
- ReportingEntityId: system UUID read from
                     /sys/class/dmi/id/product_uuid

Change-Id: Ib25d7271be363236f24295df9d5f4e940a741360
Signed-off-by: Katri Turunen <katri.turunen@nokia.com>
diff --git a/README.md b/README.md
index 96a22cc..06b2cca 100644
--- a/README.md
+++ b/README.md
@@ -51,6 +51,7 @@
 
 The VESPA manager container requires the following environment variables:
 
+* VESMGR_VNFNAME - VNF name as a string. Default: Vespa.
 * VESMGR_HB_INTERVAL - VES heartbeat interval as a string. For example: 30s.
 * VESMGR_MEAS_INTERVAL - Measurement interval as a string. For example: 60s.
 * VESMGR_PROMETHEUS_ADDR - Prometheus address. For example: http://127.0.0.1:123
diff --git a/cmd/vesmgr/config.go b/cmd/vesmgr/config.go
index 8301b0c..77b4ca8 100644
--- a/cmd/vesmgr/config.go
+++ b/cmd/vesmgr/config.go
@@ -20,22 +20,44 @@
 import (
 	"encoding/json"
 	"io"
+	"io/ioutil"
 	"os"
 	"strconv"
+	"strings"
 	"time"
 
 	"gopkg.in/yaml.v2"
 )
 
+const defaultReportingEntityID = "00000000-0000-0000-0000-000000000000"
+const defaultVNFName = "Vespa"
+
+func readSystemUUID() string {
+	data, err := ioutil.ReadFile("/sys/class/dmi/id/product_uuid")
+	if err != nil {
+		return defaultReportingEntityID
+	}
+	return strings.TrimSpace(string(data))
+}
+
+func getVNFName() string {
+	VNFName := os.Getenv("VESMGR_VNFNAME")
+	if VNFName == "" {
+		return defaultVNFName
+	}
+	return VNFName
+}
+
 func basicVespaConf() VESAgentConfiguration {
 	var vespaconf = VESAgentConfiguration{
 		DataDir: "/tmp/data",
 		Debug:   false,
 		Event: EventConfiguration{
-			VNFName:           "vespa-demo",                          // XXX
-			ReportingEntityID: "1af5bfa9-40b4-4522-b045-40e54f0310f", // XXX
-			MaxSize:           2000000,
-			NfNamingCode:      "hsxp",
+			VNFName:             getVNFName(),
+			ReportingEntityName: "Vespa",
+			ReportingEntityID:   readSystemUUID(),
+			MaxSize:             2000000,
+			NfNamingCode:        "hsxp",
 			NfcNamingCodes: []NfcNamingCode{
 				NfcNamingCode{
 					Type:  "oam",
@@ -50,6 +72,8 @@
 			MaxMissed:     2,
 		},
 		Measurement: MeasurementConfiguration{
+			// Domain abbreviation has to be set to “Mvfs” for VES 5.3,
+			// and to “Measurement” for later VES interface versions.
 			DomainAbbreviation:   "Mvfs",
 			MaxBufferingDuration: time.Hour,
 			Prometheus: PrometheusConfig{
diff --git a/cmd/vesmgr/config_test.go b/cmd/vesmgr/config_test.go
index 76793a1..7a07e38 100644
--- a/cmd/vesmgr/config_test.go
+++ b/cmd/vesmgr/config_test.go
@@ -34,6 +34,13 @@
 	assert.Equal(t, vesconf.Event.MaxMissed, 2)
 	assert.Equal(t, vesconf.Event.RetryInterval, time.Second*5)
 	assert.Equal(t, vesconf.Measurement.Prometheus.KeepAlive, time.Second*30)
+	assert.Equal(t, vesconf.Event.VNFName, defaultVNFName)
+	assert.Equal(t, vesconf.Event.ReportingEntityName, "Vespa")
+	// depending on the credentials with which this test is run,
+	// root or non-root, the code either reads the UUID from the file or
+	// ends up using the default id. Just check the length here,
+	// not the actual value.
+	assert.Len(t, vesconf.Event.ReportingEntityID, len(defaultReportingEntityID))
 }
 
 func TestBasicConfigContainsCorrectValues(t *testing.T) {
@@ -41,7 +48,15 @@
 	testBaseConf(t, vesconf)
 }
 
+func TestBasicConfigContainsCorrectVNFName(t *testing.T) {
+	os.Setenv("VESMGR_VNFNAME", "VNF-111")
+	vesconf := basicVespaConf()
+	assert.Equal(t, vesconf.Event.VNFName, "VNF-111")
+	os.Unsetenv("VESMGR_VNFNAME")
+}
+
 func TestCollectorConfiguration(t *testing.T) {
+	os.Unsetenv("VESMGR_VNFNAME")
 	os.Setenv("VESMGR_PRICOLLECTOR_USER", "user123")
 	os.Setenv("VESMGR_PRICOLLECTOR_PASSWORD", "pass123")
 	os.Setenv("VESMGR_PRICOLLECTOR_PASSPHRASE", "phrase123")
@@ -65,6 +80,7 @@
 }
 
 func TestCollectorConfigurationWhenEnvironmentVariablesAreNotDefined(t *testing.T) {
+	os.Unsetenv("VESMGR_VNFNAME")
 	os.Unsetenv("VESMGR_PRICOLLECTOR_USER")
 	os.Unsetenv("VESMGR_PRICOLLECTOR_PASSWORD")
 	os.Unsetenv("VESMGR_PRICOLLECTOR_PASSPHRASE")
diff --git a/container-tag.yaml b/container-tag.yaml
index fa6e83d..81c78cb 100644
--- a/container-tag.yaml
+++ b/container-tag.yaml
@@ -1,4 +1,4 @@
 # The Jenkins job uses this string for the tag in the image name
 # for example nexus3.o-ran-sc.org:10004/my-image-name:0.0.1
 ---
-tag: 0.0.5
+tag: 0.0.6