blob: 8930cab38bd27fa6235635449f6e588543478c21 [file] [log] [blame]
Prince Pereirac1c21d62021-04-22 08:38:15 +00001/*
2 * Copyright 2020-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// Package modifiablecomponent stores ModifiableComponent methods and functions
18package device
19
20import (
21 "context"
22
23 "github.com/opencord/device-management-interface/go/dmi"
24
25 "github.com/opencord/voltha-lib-go/v4/pkg/log"
26)
27
28// GetLoggableEntitiesFromDevRec represnets the fetch the log level with entity from device record
29func (rec *DeviceRecord) GetLoggableEntitiesFromDevRec(ctx context.Context, entities []string) ([]*dmi.EntitiesLogLevel, bool) {
30
31 var traceLevel, debugLevel, infoLevel, warnLevel, errorLevel []string
32
33 if len(entities) > 0 {
34 // getLogLevel request for given entities
35 for _, entity := range entities {
36 if logLevel, ok := rec.Logging.LoggableEntities[entity]; ok {
37 switch logLevel {
38 case dmi.LogLevel_TRACE:
39 traceLevel = append(traceLevel, entity)
40 case dmi.LogLevel_DEBUG:
41 debugLevel = append(debugLevel, entity)
42 case dmi.LogLevel_INFO:
43 infoLevel = append(infoLevel, entity)
44 case dmi.LogLevel_WARN:
45 warnLevel = append(warnLevel, entity)
46 case dmi.LogLevel_ERROR:
47 errorLevel = append(errorLevel, entity)
48 }
49 } else {
50 logger.Warnw(ctx, "entity-was-not-found-in-device-record", log.Fields{"device-name": rec.Name, "entity": entity})
51 return nil, false
52 }
53
54 }
55 } else if len(rec.Logging.LoggableEntities) == 0 {
56 // if LoggableEntities length is zero means loglevel is applicable for entire hardware
57 logger.Debug(ctx, "all-entities-have-common-loglevel", log.Fields{"device-name": rec.Name, "log-level": rec.Logging.LogLevel})
58 return []*dmi.EntitiesLogLevel{{LogLevel: rec.Logging.LogLevel}}, true
59 } else {
60 // get globle log level or get loggble entities will invoke here
61 logger.Debug(ctx, "all-entities-have-diffrent-loglevel", log.Fields{"device-name": rec.Name})
62 for entity, logLevel := range rec.Logging.LoggableEntities {
63 switch logLevel {
64 case dmi.LogLevel_TRACE:
65 traceLevel = append(traceLevel, entity)
66 case dmi.LogLevel_DEBUG:
67 debugLevel = append(debugLevel, entity)
68 case dmi.LogLevel_INFO:
69 infoLevel = append(infoLevel, entity)
70 case dmi.LogLevel_WARN:
71 warnLevel = append(warnLevel, entity)
72 case dmi.LogLevel_ERROR:
73 errorLevel = append(errorLevel, entity)
74 }
75 }
76 }
77
78 entitiesLogLevel := []*dmi.EntitiesLogLevel{
79 {LogLevel: dmi.LogLevel_TRACE, Entities: traceLevel},
80 {LogLevel: dmi.LogLevel_DEBUG, Entities: debugLevel},
81 {LogLevel: dmi.LogLevel_INFO, Entities: infoLevel},
82 {LogLevel: dmi.LogLevel_WARN, Entities: warnLevel},
83 {LogLevel: dmi.LogLevel_ERROR, Entities: errorLevel},
84 }
85 logger.Debug(ctx, "entities-with-log-level", log.Fields{"entities": entitiesLogLevel})
86
87 return entitiesLogLevel, true
88}
89
90// SaveLoggableEntities func is is used to save the log level with entity in device record
91func (rec *DeviceRecord) SaveLoggableEntities(ctx context.Context, listEntities []*dmi.EntitiesLogLevel) {
92
93 if rec.Logging.LoggableEntities == nil {
94
95 logger.Debug(ctx, "allocating-memory-for-loggable-entitie", log.Fields{"device-name": rec.Name})
96 rec.Logging.LoggableEntities = make(map[string]dmi.LogLevel)
97 }
98
99 if len(listEntities) == 1 && listEntities[0].Entities == nil {
100
101 logger.Debug(ctx, "set-global-log-level", log.Fields{"device-name": rec.Name})
102 rec.Logging.LogLevel = listEntities[0].LogLevel
103
104 } else {
105
106 logger.Debug(ctx, "setting-entity-log-level", log.Fields{"device-name": rec.Name, "list-of-entities": listEntities})
107 for _, entities := range listEntities {
108 logLevel := entities.LogLevel
109 for _, entity := range entities.Entities {
110 rec.Logging.LoggableEntities[entity] = logLevel
111 }
112 }
113 }
114}