VOL-1848 API for setting and querying loglevel of api-server;
Add source-router to support routing UpdateLogLevel to cores;
Add logging endpoints to rocore

Change-Id: I89eea3599ea3006fe92e6917221cd1fd235ec5e4
diff --git a/ro_core/core/grpc_nbi_api_handler.go b/ro_core/core/grpc_nbi_api_handler.go
index e2c6843..c68b230 100644
--- a/ro_core/core/grpc_nbi_api_handler.go
+++ b/ro_core/core/grpc_nbi_api_handler.go
@@ -73,6 +73,47 @@
 	}
 }
 
+func (handler *APIHandler) UpdateLogLevel(ctx context.Context, logging *voltha.Logging) (*empty.Empty, error) {
+	log.Debugw("UpdateLogLevel-request", log.Fields{"package": logging.PackageName, "intval": int(logging.Level)})
+	out := new(empty.Empty)
+	if logging.PackageName == "" {
+		log.SetAllLogLevel(int(logging.Level))
+		log.SetDefaultLogLevel(int(logging.Level))
+	} else if logging.PackageName == "default" {
+		log.SetDefaultLogLevel(int(logging.Level))
+	} else {
+		log.SetPackageLogLevel(logging.PackageName, int(logging.Level))
+	}
+
+	return out, nil
+}
+
+func (aa APIHandler) GetLogLevels(ctx context.Context, in *voltha.LoggingComponent) (*voltha.Loggings, error) {
+	logLevels := &voltha.Loggings{}
+
+	// do the per-package log levels
+	for _, packageName := range log.GetPackageNames() {
+		level, err := log.GetPackageLogLevel(packageName)
+		if err != nil {
+			return nil, err
+		}
+		logLevel := &voltha.Logging{
+			ComponentName: in.ComponentName,
+			PackageName:   packageName,
+			Level:         voltha.LogLevel_LogLevel(level)}
+		logLevels.Items = append(logLevels.Items, logLevel)
+	}
+
+	// now do the default log level
+	logLevel := &voltha.Logging{
+		ComponentName: in.ComponentName,
+		PackageName:   "default",
+		Level:         voltha.LogLevel_LogLevel(log.GetDefaultLogLevel())}
+	logLevels.Items = append(logLevels.Items, logLevel)
+
+	return logLevels, nil
+}
+
 // GetVoltha returns the contents of all components (i.e. devices, logical_devices, ...)
 func (handler *APIHandler) GetVoltha(ctx context.Context, empty *empty.Empty) (*voltha.Voltha, error) {
 	log.Debug("GetVoltha")