You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/08/02 10:35:56 UTC

[plc4x] branch develop updated: feat(plc4xbrowser): added config options for logging and tracing

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 55ded83c0 feat(plc4xbrowser): added config options for logging and tracing
55ded83c0 is described below

commit 55ded83c0491fa4b92327efb970e4c65742501ef
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Aug 2 12:35:50 2022 +0200

    feat(plc4xbrowser): added config options for logging and tracing
    
    + log option will be persisted
---
 plc4go/tools/plc4xbrowser/config.go | 10 +++++--
 plc4go/tools/plc4xbrowser/main.go   | 57 +++++++++++++++++++++++++++++++++++--
 2 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/plc4go/tools/plc4xbrowser/config.go b/plc4go/tools/plc4xbrowser/config.go
index addf4d8c8..1713c6a49 100644
--- a/plc4go/tools/plc4xbrowser/config.go
+++ b/plc4go/tools/plc4xbrowser/config.go
@@ -20,6 +20,7 @@
 package main
 
 import (
+	"github.com/rs/zerolog"
 	"github.com/rs/zerolog/log"
 	"gopkg.in/yaml.v3"
 	"os"
@@ -35,7 +36,8 @@ type Config struct {
 	History struct {
 		Last10Hosts []string `yaml:"last_hosts"`
 	}
-	lastUpdated time.Time `yaml:"last_updated"`
+	LastUpdated time.Time `yaml:"last_updated"`
+	LogLevel    string    `yaml:"log_level"`
 }
 
 func init() {
@@ -74,7 +76,7 @@ func loadConfig() {
 }
 
 func saveConfig() {
-	config.lastUpdated = time.Now()
+	config.LastUpdated = time.Now()
 	f, err := os.OpenFile(configFile, os.O_RDWR|os.O_CREATE, 0755)
 	if err != nil {
 		log.Warn().Err(err).Msg("Can't save config file")
@@ -109,3 +111,7 @@ func addHost(host string) {
 	}
 	config.History.Last10Hosts = append(config.History.Last10Hosts, host)
 }
+
+func setLevel(level zerolog.Level) {
+	config.LogLevel = level.String()
+}
diff --git a/plc4go/tools/plc4xbrowser/main.go b/plc4go/tools/plc4xbrowser/main.go
index 951f634ad..49d217958 100644
--- a/plc4go/tools/plc4xbrowser/main.go
+++ b/plc4go/tools/plc4xbrowser/main.go
@@ -39,12 +39,13 @@ import (
 	"github.com/rs/zerolog/log"
 
 	plc4go "github.com/apache/plc4x/plc4go/pkg/api"
+	plc4x_config "github.com/apache/plc4x/plc4go/pkg/api/config"
 	"github.com/apache/plc4x/plc4go/pkg/api/model"
 	"github.com/apache/plc4x/plc4go/pkg/api/transports"
 )
 
 // TODO: replace with real commands
-const plc4xCommands = "connect,disconnect,read,write,register,subscribe,quit"
+const plc4xCommands = "connect,disconnect,read,write,register,subscribe,quit,log,plc4x-conf"
 const protocols = "ads,bacnetip,c-bus,s7"
 
 var driverManager plc4go.PlcDriverManager
@@ -249,6 +250,28 @@ func buildCommandArea(newPrimitive func(text string) tview.Primitive, applicatio
 				for connectionsString, _ := range connections {
 					entries = append(entries, "subscribe "+connectionsString)
 				}
+			case strings.HasPrefix(currentText, "log"):
+				levels := []string{
+					zerolog.LevelTraceValue,
+					zerolog.LevelDebugValue,
+					zerolog.LevelInfoValue,
+					zerolog.LevelWarnValue,
+					zerolog.LevelErrorValue,
+					zerolog.LevelFatalValue,
+					zerolog.LevelPanicValue,
+				}
+				for _, level := range levels {
+					entries = append(entries, "log "+level)
+				}
+			case strings.HasPrefix(currentText, "plc4x-conf"):
+				for _, plc4xConf := range []string{
+					"TraceTransactionManagerWorkers",
+					"TraceTransactionManagerTransactions",
+					"TraceDefaultMessageCodecWorker",
+				} {
+					entries = append(entries, "plc4x-conf "+plc4xConf+" true")
+					entries = append(entries, "plc4x-conf "+plc4xConf+" false")
+				}
 			}
 			return
 		})
@@ -332,6 +355,27 @@ func handleCommand(commandText string) error {
 			}
 			log.Info().Msgf("subscription result %s", subscriptionRequestResult.GetResponse())
 		}
+	case strings.HasPrefix(commandText, "log"):
+		level := strings.TrimPrefix(commandText, "log ")
+		parseLevel, err := zerolog.ParseLevel(level)
+		if err != nil {
+			return errors.Wrapf(err, "Error setting log level")
+		}
+		setLevel(parseLevel)
+		log.Logger = log.Logger.Level(parseLevel)
+	case strings.HasPrefix(commandText, "plc4x-conf"):
+		plc4xConf := strings.TrimPrefix(commandText, "plc4x-conf ")
+		switch {
+		case strings.HasPrefix(plc4xConf, "TraceTransactionManagerWorkers "):
+			on := strings.TrimPrefix(plc4xConf, "TraceTransactionManagerWorkers ")
+			plc4x_config.TraceTransactionManagerWorkers = on == "true"
+		case strings.HasPrefix(plc4xConf, "TraceTransactionManagerTransactions "):
+			on := strings.TrimPrefix(plc4xConf, "TraceTransactionManagerTransactions ")
+			plc4x_config.TraceTransactionManagerWorkers = on == "true"
+		case strings.HasPrefix(plc4xConf, "TraceDefaultMessageCodecWorker "):
+			on := strings.TrimPrefix(plc4xConf, "TraceDefaultMessageCodecWorker ")
+			plc4x_config.TraceTransactionManagerWorkers = on == "true"
+		}
 	default:
 		return errors.Errorf("%s not found", commandText)
 	}
@@ -388,11 +432,20 @@ func buildOutputArea(newPrimitive func(text string) tview.Primitive, application
 					application.Draw()
 				})
 
+			logLevel := zerolog.InfoLevel
+			if configuredLevel := config.LogLevel; configuredLevel != "" {
+				if parsedLevel, err := zerolog.ParseLevel(configuredLevel); err != nil {
+					panic(err)
+				} else {
+					logLevel = parsedLevel
+				}
+			}
+
 			log.Logger = log.
 				//// Enable below if you want to see the filenames
 				//With().Caller().Logger().
 				Output(zerolog.ConsoleWriter{Out: tview.ANSIWriter(consoleView)}).
-				Level(zerolog.InfoLevel)
+				Level(logLevel)
 
 			consoleView.SetBorder(false)
 			outputArea.AddItem(consoleView, 2, 0, 1, 1, 0, 0, false)