[VOL-2899] Added loglevel listpackage command to voltctl for
displaying list of configured log packages.
Also added support for auto-complete of component name
Change-Id: I8c3dedd2f62eeed3da6e37de2e070683795ed8c2
diff --git a/VERSION b/VERSION
index ff365e0..0aec50e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.1.3
+3.1.4
diff --git a/pkg/config/configmanager.go b/pkg/config/configmanager.go
index 724ad32..0dafc7a 100644
--- a/pkg/config/configmanager.go
+++ b/pkg/config/configmanager.go
@@ -36,11 +36,12 @@
const (
ConfigTypeLogLevel ConfigType = iota
+ ConfigTypeMetadata
ConfigTypeKafka
)
func (c ConfigType) String() string {
- return [...]string{"loglevel", "kafka"}[c]
+ return [...]string{"loglevel", "metadata", "kafka"}[c]
}
// ChangeEvent represents the event recieved from watch
diff --git a/pkg/config/logcontroller.go b/pkg/config/logcontroller.go
index 9c36241..b00569f 100644
--- a/pkg/config/logcontroller.go
+++ b/pkg/config/logcontroller.go
@@ -28,13 +28,15 @@
"errors"
"github.com/opencord/voltha-lib-go/v3/pkg/log"
"os"
+ "sort"
"strings"
)
const (
- defaultLogLevelKey = "default" // kvstore key containing default loglevel
- globalConfigRootNode = "global" // Root Node in kvstore containing global config
- initialGlobalDefaultLogLevelValue = "WARN" // Hard-coded Global Default loglevel pushed at PoD startup
+ defaultLogLevelKey = "default" // kvstore key containing default loglevel
+ globalConfigRootNode = "global" // Root Node in kvstore containing global config
+ initialGlobalDefaultLogLevelValue = "WARN" // Hard-coded Global Default loglevel pushed at PoD startup
+ logPackagesListKey = "log_package_list" // kvstore key containing list of allowed log packages
)
// ComponentLogController represents a Configuration for Logging Config of specific Voltha component type
@@ -92,6 +94,8 @@
cc.persistInitialDefaultLogConfigs(ctx)
+ cc.persistRegisteredLogPackageList(ctx)
+
cc.processLogConfig(ctx)
}
@@ -120,6 +124,28 @@
}
}
+// Method to save list of all registered packages for component into config kvstore. A single string
+// is constructed with comma-separated package names in sorted order and persisted
+func (c *ComponentLogController) persistRegisteredLogPackageList(ctx context.Context) {
+
+ componentMetadataConfig := c.configManager.InitComponentConfig(c.ComponentName, ConfigTypeMetadata)
+ logger.Debugw("component-metadata-config", log.Fields{"component-metadata-config": componentMetadataConfig})
+
+ packageList := log.GetPackageNames()
+ packageList = append(packageList, defaultLogLevelKey)
+ sort.Strings(packageList)
+
+ packageNames, err := json.Marshal(packageList)
+ if err != nil {
+ logger.Errorw("failed-to-marshal-log-package-list-for-storage", log.Fields{"error": err, "packageList": packageList})
+ return
+ }
+
+ if err := componentMetadataConfig.Save(ctx, logPackagesListKey, string(packageNames)); err != nil {
+ logger.Errorw("failed-to-persist-component-registered-log-package-list-at-startup", log.Fields{"error": err, "packageNames": packageNames})
+ }
+}
+
// ProcessLogConfig will first load and apply log config and then start waiting on component config and global config
// channels for any changes. Event channel will be recieved from Backend for valid change type
// Then data for componentn log config and global log config will be retrieved from Backend and stored in updatedLogConfig in precedence order