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/rw_core/core/grpc_nbi_api_handler.go b/rw_core/core/grpc_nbi_api_handler.go
index 8cc1dc4..7f45875 100755
--- a/rw_core/core/grpc_nbi_api_handler.go
+++ b/rw_core/core/grpc_nbi_api_handler.go
@@ -204,12 +204,42 @@
 	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
+}
+
 func (handler *APIHandler) GetLogicalDevicePort(ctx context.Context, id *voltha.LogicalPortId) (*voltha.LogicalPort, error) {
 	log.Debugw("GetLogicalDevicePort-request", log.Fields{"id": *id})