X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=cmd%2Fvesmgr%2Fconfig.go;h=fafb15b81addc70e8156c1489571d89d3fd37913;hb=refs%2Ftags%2F0.4.0;hp=e2c9f25cb5bf297daae8985afda9e9f8a6f8ba8a;hpb=412df96a23a30a82d2a031556888aeaf9604ada8;p=ric-plt%2Fvespamgr.git diff --git a/cmd/vesmgr/config.go b/cmd/vesmgr/config.go index e2c9f25..fafb15b 100644 --- a/cmd/vesmgr/config.go +++ b/cmd/vesmgr/config.go @@ -13,42 +13,71 @@ * 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. + * + * This source code is part of the near-RT RIC (RAN Intelligent Controller) + * platform project (RICP). + * */ package main import ( "encoding/json" - "gopkg.in/yaml.v2" "io" + "io/ioutil" "os" "strconv" + "strings" "time" + + "gopkg.in/yaml.v2" ) +const defaultReportingEntityID = "00000000-0000-0000-0000-000000000000" +const defaultVNFName = "Vespa" +const defaultNFNamingCode = "ricp" + +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 getNFNamingCode() string { + NFNamingCode := os.Getenv("VESMGR_NFNAMINGCODE") + if NFNamingCode == "" { + return defaultNFNamingCode + } + return NFNamingCode +} + 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", - NfcNamingCodes: []NfcNamingCode{ - NfcNamingCode{ - Type: "oam", - Vnfcs: []string{"lr-ope-0", "lr-ope-1", "lr-ope-2"}, - }, - NfcNamingCode{ - Type: "etl", - Vnfcs: []string{"lr-pro-0", "lr-pro-1"}, - }, - }, + VNFName: getVNFName(), + ReportingEntityName: "Vespa", + ReportingEntityID: readSystemUUID(), + MaxSize: 2000000, + NfNamingCode: getNFNamingCode(), + NfcNamingCodes: []NfcNamingCode{}, RetryInterval: time.Second * 5, 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{ @@ -65,12 +94,13 @@ func basicVespaConf() VESAgentConfiguration { return vespaconf } +// AppMetricsStruct contains xapplication metrics definition type AppMetricsStruct struct { ObjectName string ObjectInstance string - // xxx add labels here } +// AppMetrics contains metrics definitions for all Xapps type AppMetrics map[string]AppMetricsStruct // Parses the metrics data from an array of bytes, which is expected to contain a JSON @@ -89,10 +119,10 @@ func parseMetricsFromXAppDescriptor(descriptor []byte, appMetrics AppMetrics) Ap json.Unmarshal(descriptor, &desc) for _, app := range desc { - config, config_ok := app["config"] - if config_ok { - metrics, metrics_ok := config.(map[string]interface{})["metrics"] - if metrics_ok { + config, configOk := app["config"] + if configOk { + metrics, metricsOk := config.(map[string]interface{})["metrics"] + if metricsOk { parseMetricsRules(metrics.([]interface{}), appMetrics) } } @@ -106,16 +136,16 @@ func parseMetricsFromXAppDescriptor(descriptor []byte, appMetrics AppMetrics) Ap // Entries, which do not have all the necessary fields, are ignored. func parseMetricsRules(metricsMap []interface{}, appMetrics AppMetrics) AppMetrics { for _, element := range metricsMap { - name, name_ok := element.(map[string]interface{})["name"].(string) - if name_ok { - _, already_found := appMetrics[name] - objectName, objectName_ok := element.(map[string]interface{})["objectName"].(string) - objectInstance, objectInstance_ok := element.(map[string]interface{})["objectInstance"].(string) - if !already_found && objectName_ok && objectInstance_ok { + name, nameOk := element.(map[string]interface{})["name"].(string) + if nameOk { + _, alreadyFound := appMetrics[name] + objectName, objectNameOk := element.(map[string]interface{})["objectName"].(string) + objectInstance, objectInstanceOk := element.(map[string]interface{})["objectInstance"].(string) + if !alreadyFound && objectNameOk && objectInstanceOk { appMetrics[name] = AppMetricsStruct{objectName, objectInstance} logger.Info("parsed counter %s %s %s", name, objectName, objectInstance) } - if already_found { + if alreadyFound { logger.Info("skipped duplicate counter %s", name) } } @@ -127,12 +157,12 @@ func getRules(vespaconf *VESAgentConfiguration, xAppConfig []byte) { appMetrics := make(AppMetrics) parseMetricsFromXAppDescriptor(xAppConfig, appMetrics) - makeRule := func(expr string, obj_name string, obj_instance string) MetricRule { + makeRule := func(expr string, objName string, objInstance string) MetricRule { return MetricRule{ Target: "AdditionalObjects", Expr: expr, - ObjectInstance: obj_instance, - ObjectName: obj_name, + ObjectInstance: objInstance, + ObjectName: objName, ObjectKeys: []Label{ Label{ Name: "ricComponentName", @@ -161,15 +191,15 @@ func getCollectorConfiguration(vespaconf *VESAgentConfiguration) { vespaconf.PrimaryCollector.FQDN = os.Getenv("VESMGR_PRICOLLECTOR_ADDR") vespaconf.PrimaryCollector.ServerRoot = os.Getenv("VESMGR_PRICOLLECTOR_SERVERROOT") vespaconf.PrimaryCollector.Topic = os.Getenv("VESMGR_PRICOLLECTOR_TOPIC") - port_str := os.Getenv("VESMGR_PRICOLLECTOR_PORT") - if port_str == "" { + portStr := os.Getenv("VESMGR_PRICOLLECTOR_PORT") + if portStr == "" { vespaconf.PrimaryCollector.Port = 8443 } else { - port, _ := strconv.Atoi(port_str) + port, _ := strconv.Atoi(portStr) vespaconf.PrimaryCollector.Port = port } - secure_str := os.Getenv("VESMGR_PRICOLLECTOR_SECURE") - if secure_str == "true" { + secureStr := os.Getenv("VESMGR_PRICOLLECTOR_SECURE") + if secureStr == "true" { vespaconf.PrimaryCollector.Secure = true } else { vespaconf.PrimaryCollector.Secure = false