VOL-4019: Initial commit with grpc nbi, sbi, etcd, kafka and hw management rpcs.
Change-Id: I78feaf7da284028fc61f42c5e0c5f56e72fe9e78
diff --git a/pkg/models/device/util.go b/pkg/models/device/util.go
new file mode 100644
index 0000000..8930cab
--- /dev/null
+++ b/pkg/models/device/util.go
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * 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 modifiablecomponent stores ModifiableComponent methods and functions
+package device
+
+import (
+ "context"
+
+ "github.com/opencord/device-management-interface/go/dmi"
+
+ "github.com/opencord/voltha-lib-go/v4/pkg/log"
+)
+
+// GetLoggableEntitiesFromDevRec represnets the fetch the log level with entity from device record
+func (rec *DeviceRecord) GetLoggableEntitiesFromDevRec(ctx context.Context, entities []string) ([]*dmi.EntitiesLogLevel, bool) {
+
+ var traceLevel, debugLevel, infoLevel, warnLevel, errorLevel []string
+
+ if len(entities) > 0 {
+ // getLogLevel request for given entities
+ for _, entity := range entities {
+ if logLevel, ok := rec.Logging.LoggableEntities[entity]; ok {
+ switch logLevel {
+ case dmi.LogLevel_TRACE:
+ traceLevel = append(traceLevel, entity)
+ case dmi.LogLevel_DEBUG:
+ debugLevel = append(debugLevel, entity)
+ case dmi.LogLevel_INFO:
+ infoLevel = append(infoLevel, entity)
+ case dmi.LogLevel_WARN:
+ warnLevel = append(warnLevel, entity)
+ case dmi.LogLevel_ERROR:
+ errorLevel = append(errorLevel, entity)
+ }
+ } else {
+ logger.Warnw(ctx, "entity-was-not-found-in-device-record", log.Fields{"device-name": rec.Name, "entity": entity})
+ return nil, false
+ }
+
+ }
+ } else if len(rec.Logging.LoggableEntities) == 0 {
+ // if LoggableEntities length is zero means loglevel is applicable for entire hardware
+ logger.Debug(ctx, "all-entities-have-common-loglevel", log.Fields{"device-name": rec.Name, "log-level": rec.Logging.LogLevel})
+ return []*dmi.EntitiesLogLevel{{LogLevel: rec.Logging.LogLevel}}, true
+ } else {
+ // get globle log level or get loggble entities will invoke here
+ logger.Debug(ctx, "all-entities-have-diffrent-loglevel", log.Fields{"device-name": rec.Name})
+ for entity, logLevel := range rec.Logging.LoggableEntities {
+ switch logLevel {
+ case dmi.LogLevel_TRACE:
+ traceLevel = append(traceLevel, entity)
+ case dmi.LogLevel_DEBUG:
+ debugLevel = append(debugLevel, entity)
+ case dmi.LogLevel_INFO:
+ infoLevel = append(infoLevel, entity)
+ case dmi.LogLevel_WARN:
+ warnLevel = append(warnLevel, entity)
+ case dmi.LogLevel_ERROR:
+ errorLevel = append(errorLevel, entity)
+ }
+ }
+ }
+
+ entitiesLogLevel := []*dmi.EntitiesLogLevel{
+ {LogLevel: dmi.LogLevel_TRACE, Entities: traceLevel},
+ {LogLevel: dmi.LogLevel_DEBUG, Entities: debugLevel},
+ {LogLevel: dmi.LogLevel_INFO, Entities: infoLevel},
+ {LogLevel: dmi.LogLevel_WARN, Entities: warnLevel},
+ {LogLevel: dmi.LogLevel_ERROR, Entities: errorLevel},
+ }
+ logger.Debug(ctx, "entities-with-log-level", log.Fields{"entities": entitiesLogLevel})
+
+ return entitiesLogLevel, true
+}
+
+// SaveLoggableEntities func is is used to save the log level with entity in device record
+func (rec *DeviceRecord) SaveLoggableEntities(ctx context.Context, listEntities []*dmi.EntitiesLogLevel) {
+
+ if rec.Logging.LoggableEntities == nil {
+
+ logger.Debug(ctx, "allocating-memory-for-loggable-entitie", log.Fields{"device-name": rec.Name})
+ rec.Logging.LoggableEntities = make(map[string]dmi.LogLevel)
+ }
+
+ if len(listEntities) == 1 && listEntities[0].Entities == nil {
+
+ logger.Debug(ctx, "set-global-log-level", log.Fields{"device-name": rec.Name})
+ rec.Logging.LogLevel = listEntities[0].LogLevel
+
+ } else {
+
+ logger.Debug(ctx, "setting-entity-log-level", log.Fields{"device-name": rec.Name, "list-of-entities": listEntities})
+ for _, entities := range listEntities {
+ logLevel := entities.LogLevel
+ for _, entity := range entities.Entities {
+ rec.Logging.LoggableEntities[entity] = logLevel
+ }
+ }
+ }
+}