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/05 11:56:11 UTC

[plc4x] branch develop updated (34d70f741 -> 13745432b)

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

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


    from 34d70f741 feat(plc4xbrowser): auto register option for drivers
     new 65adaaaa3 refactor(plc4go): added a IsAPlcMessage() bool method to plc_message
     new 13745432b fix(plc4xbrowser): fixed issue where output got overwhelmed by to many message

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 plc4go/internal/spi/model/DefaultBrowseRequest.go | 15 ++++-----
 plc4go/internal/spi/model/DefaultRequest.go       |  4 +++
 plc4go/internal/spi/model/DefaultResponse.go      |  4 +++
 plc4go/pkg/api/model/plc_message.go               |  1 +
 plc4go/tools/plc4xbrowser/commands.go             |  7 +++--
 plc4go/tools/plc4xbrowser/config.go               |  2 ++
 plc4go/tools/plc4xbrowser/main.go                 |  5 ++-
 plc4go/tools/plc4xbrowser/ui.go                   | 37 ++++++++++++++++++++---
 8 files changed, 61 insertions(+), 14 deletions(-)


[plc4x] 02/02: fix(plc4xbrowser): fixed issue where output got overwhelmed by to many message

Posted by sr...@apache.org.
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

commit 13745432b4f0f75ec62505a499f987e53618234c
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Aug 5 13:56:04 2022 +0200

    fix(plc4xbrowser): fixed issue where output got overwhelmed by to many message
    
    + Messages are now displayed in a list right beside the output and on click they are displayed
---
 plc4go/tools/plc4xbrowser/commands.go |  4 ++--
 plc4go/tools/plc4xbrowser/main.go     |  5 ++++-
 plc4go/tools/plc4xbrowser/ui.go       | 36 +++++++++++++++++++++++++++++++----
 3 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/plc4go/tools/plc4xbrowser/commands.go b/plc4go/tools/plc4xbrowser/commands.go
index 7afb90fe2..b67e8c27e 100644
--- a/plc4go/tools/plc4xbrowser/commands.go
+++ b/plc4go/tools/plc4xbrowser/commands.go
@@ -156,9 +156,9 @@ var rootCommand = Command{
 					subscriptionRequest, err := connection.SubscriptionRequestBuilder().
 						AddEventQuery("subscriptionField", split[1]).
 						AddItemHandler(func(event model.PlcSubscriptionEvent) {
-							messagesReceived++
+							numberOfMessagesReceived++
 							start := time.Now()
-							_, _ = fmt.Fprintf(messageOutput, "[\"%d\"]\n%s[\"\"]", messagesReceived, event)
+							messageReceived(numberOfMessagesReceived, start, event)
 							plc4xBrowserLog.Debug().Msgf("write took %f seconds", time.Now().Sub(start).Seconds())
 						}).
 						Build()
diff --git a/plc4go/tools/plc4xbrowser/main.go b/plc4go/tools/plc4xbrowser/main.go
index 9cc64d20e..4c0e48a3f 100644
--- a/plc4go/tools/plc4xbrowser/main.go
+++ b/plc4go/tools/plc4xbrowser/main.go
@@ -22,8 +22,10 @@ package main
 import (
 	"io"
 	"sync"
+	"time"
 
 	plc4go "github.com/apache/plc4x/plc4go/pkg/api"
+	plc4goModel "github.com/apache/plc4x/plc4go/pkg/api/model"
 )
 
 var driverManager plc4go.PlcDriverManager
@@ -31,7 +33,8 @@ var driverAdded func(string)
 var connections map[string]plc4go.PlcConnection
 var connectionsChanged func()
 
-var messagesReceived int
+var messageReceived func(messageNumber int, receiveTime time.Time, message plc4goModel.PlcMessage)
+var numberOfMessagesReceived int
 var messageOutput io.Writer
 var messageOutputClear func()
 
diff --git a/plc4go/tools/plc4xbrowser/ui.go b/plc4go/tools/plc4xbrowser/ui.go
index e9cad8fdf..e79c55e52 100644
--- a/plc4go/tools/plc4xbrowser/ui.go
+++ b/plc4go/tools/plc4xbrowser/ui.go
@@ -21,6 +21,7 @@ package main
 
 import (
 	"fmt"
+	"github.com/apache/plc4x/plc4go/pkg/api/model"
 	"github.com/gdamore/tcell/v2"
 	"github.com/pkg/errors"
 	"github.com/rivo/tview"
@@ -205,17 +206,28 @@ func buildOutputArea(newPrimitive func(text string) tview.Primitive, application
 	outputAreaHeader := newPrimitive("Output")
 	outputArea := tview.NewGrid().
 		SetRows(3, 0, 10).
-		SetColumns(0).
+		SetColumns(0, 30).
 		AddItem(outputAreaHeader, 0, 0, 1, 1, 0, 0, false)
 	{
+		var jumpToMessageItem func(messageNumber int) bool
 		{
 			outputView := tview.NewTextView().
-				SetDynamicColors(true).
+				// TODO: currently this is broken due to https://github.com/rivo/tview/issues/751
+				//SetDynamicColors(true).
+				SetDynamicColors(false).
 				SetRegions(true).
 				SetWordWrap(true).
 				SetChangedFunc(func() {
 					application.Draw()
 				})
+			jumpToMessageItem = func(messageNumber int) bool {
+				regionId := strconv.Itoa(messageNumber)
+				if outputView.GetRegionText(regionId) == "" {
+					return false
+				}
+				outputView.Highlight(regionId).ScrollToHighlight()
+				return true
+			}
 			messageOutput = outputView
 			messageOutputClear = func() {
 				outputView.SetText("")
@@ -232,9 +244,9 @@ func buildOutputArea(newPrimitive func(text string) tview.Primitive, application
 				} else if len(currentSelection) > 0 {
 					index, _ := strconv.Atoi(currentSelection[0])
 					if key == tcell.KeyTab {
-						index = (index + 1) % messagesReceived
+						index = (index + 1) % numberOfMessagesReceived
 					} else if key == tcell.KeyBacktab {
-						index = (index - 1 + messagesReceived) % messagesReceived
+						index = (index - 1 + numberOfMessagesReceived) % numberOfMessagesReceived
 					} else {
 						return
 					}
@@ -260,6 +272,22 @@ func buildOutputArea(newPrimitive func(text string) tview.Primitive, application
 			consoleView.SetBorder(false)
 			outputArea.AddItem(consoleView, 2, 0, 1, 1, 0, 0, false)
 		}
+
+		{
+			receivedMessagesList := tview.NewList()
+			messageReceived = func(messageNumber int, receiveTime time.Time, message model.PlcMessage) {
+				application.QueueUpdateDraw(func() {
+					receivedMessagesList.AddItem(fmt.Sprintf("No %d @%s", messageNumber, receiveTime.Format("15:04:05.999999")), "", 0x0, func() {
+						if ok := jumpToMessageItem(messageNumber); !ok {
+							plc4xBrowserLog.Debug().Msgf("Adding new message to console output")
+							_, _ = fmt.Fprintf(messageOutput, "Message nr: %d\n[\"%d\"]%s[\"\"]\n", messageNumber, messageNumber, message)
+							jumpToMessageItem(messageNumber)
+						}
+					})
+				})
+			}
+			outputArea.AddItem(receivedMessagesList, 0, 1, 3, 1, 0, 0, false)
+		}
 	}
 	return outputArea
 }


[plc4x] 01/02: refactor(plc4go): added a IsAPlcMessage() bool method to plc_message

Posted by sr...@apache.org.
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

commit 65adaaaa38e300e9af83d32c8f0ec92253c0bcb7
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Aug 5 13:21:09 2022 +0200

    refactor(plc4go): added a IsAPlcMessage() bool method to plc_message
---
 plc4go/internal/spi/model/DefaultBrowseRequest.go | 15 ++++++++-------
 plc4go/internal/spi/model/DefaultRequest.go       |  4 ++++
 plc4go/internal/spi/model/DefaultResponse.go      |  4 ++++
 plc4go/pkg/api/model/plc_message.go               |  1 +
 plc4go/tools/plc4xbrowser/commands.go             |  3 +++
 plc4go/tools/plc4xbrowser/config.go               |  2 ++
 plc4go/tools/plc4xbrowser/ui.go                   |  1 +
 7 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/plc4go/internal/spi/model/DefaultBrowseRequest.go b/plc4go/internal/spi/model/DefaultBrowseRequest.go
index f80a13917..03a253857 100644
--- a/plc4go/internal/spi/model/DefaultBrowseRequest.go
+++ b/plc4go/internal/spi/model/DefaultBrowseRequest.go
@@ -50,10 +50,18 @@ func (m *DefaultPlcBrowseRequestBuilder) Build() (model.PlcBrowseRequest, error)
 }
 
 type DefaultPlcBrowseRequest struct {
+	DefaultRequest
 	queries map[string]string
 	browser spi.PlcBrowser
 }
 
+func NewDefaultPlcBrowseResponse(request model.PlcBrowseRequest, results map[string][]model.PlcBrowseQueryResult) DefaultPlcBrowseResponse {
+	return DefaultPlcBrowseResponse{
+		request: request,
+		results: results,
+	}
+}
+
 func (d DefaultPlcBrowseRequest) GetQueryNames() []string {
 	var queryNames []string
 	for queryName := range d.queries {
@@ -79,13 +87,6 @@ type DefaultPlcBrowseResponse struct {
 	results map[string][]model.PlcBrowseQueryResult
 }
 
-func NewDefaultPlcBrowseResponse(request model.PlcBrowseRequest, results map[string][]model.PlcBrowseQueryResult) DefaultPlcBrowseResponse {
-	return DefaultPlcBrowseResponse{
-		request: request,
-		results: results,
-	}
-}
-
 func (d DefaultPlcBrowseResponse) GetRequest() model.PlcBrowseRequest {
 	return d.request
 }
diff --git a/plc4go/internal/spi/model/DefaultRequest.go b/plc4go/internal/spi/model/DefaultRequest.go
index 27eae24c5..ce1993b4d 100644
--- a/plc4go/internal/spi/model/DefaultRequest.go
+++ b/plc4go/internal/spi/model/DefaultRequest.go
@@ -26,6 +26,10 @@ type DefaultRequest struct {
 	fieldNames []string
 }
 
+func (m DefaultRequest) IsAPlcMessage() bool {
+	return true
+}
+
 func NewDefaultRequest(Fields map[string]model.PlcField, FieldNames []string) DefaultRequest {
 	return DefaultRequest{Fields, FieldNames}
 }
diff --git a/plc4go/internal/spi/model/DefaultResponse.go b/plc4go/internal/spi/model/DefaultResponse.go
index 530c8acdf..2d3ff5666 100644
--- a/plc4go/internal/spi/model/DefaultResponse.go
+++ b/plc4go/internal/spi/model/DefaultResponse.go
@@ -25,6 +25,10 @@ type DefaultResponse struct {
 	responseCodes map[string]model.PlcResponseCode
 }
 
+func (m DefaultResponse) IsAPlcMessage() bool {
+	return true
+}
+
 func (m DefaultResponse) GetResponseCode(name string) model.PlcResponseCode {
 	return m.responseCodes[name]
 }
diff --git a/plc4go/pkg/api/model/plc_message.go b/plc4go/pkg/api/model/plc_message.go
index 7242f0e4b..834323281 100644
--- a/plc4go/pkg/api/model/plc_message.go
+++ b/plc4go/pkg/api/model/plc_message.go
@@ -20,4 +20,5 @@
 package model
 
 type PlcMessage interface {
+	IsAPlcMessage() bool
 }
diff --git a/plc4go/tools/plc4xbrowser/commands.go b/plc4go/tools/plc4xbrowser/commands.go
index 6a77134b4..7afb90fe2 100644
--- a/plc4go/tools/plc4xbrowser/commands.go
+++ b/plc4go/tools/plc4xbrowser/commands.go
@@ -29,6 +29,7 @@ import (
 	"github.com/rs/zerolog/log"
 	"net/url"
 	"strings"
+	"time"
 )
 
 const rootCommandIndicator = "rootCommand"
@@ -156,7 +157,9 @@ var rootCommand = Command{
 						AddEventQuery("subscriptionField", split[1]).
 						AddItemHandler(func(event model.PlcSubscriptionEvent) {
 							messagesReceived++
+							start := time.Now()
 							_, _ = fmt.Fprintf(messageOutput, "[\"%d\"]\n%s[\"\"]", messagesReceived, event)
+							plc4xBrowserLog.Debug().Msgf("write took %f seconds", time.Now().Sub(start).Seconds())
 						}).
 						Build()
 					if err != nil {
diff --git a/plc4go/tools/plc4xbrowser/config.go b/plc4go/tools/plc4xbrowser/config.go
index 13313402f..24da0242c 100644
--- a/plc4go/tools/plc4xbrowser/config.go
+++ b/plc4go/tools/plc4xbrowser/config.go
@@ -41,6 +41,8 @@ type Config struct {
 	AutoRegisterDrivers []string  `yaml:"auto_register_driver"`
 	LastUpdated         time.Time `yaml:"last_updated"`
 	LogLevel            string    `yaml:"log_level"`
+	MaxConsoleLines     int       `yaml:"max_console_lines"`
+	MaxOutputLines      int       `yaml:"max_output_lines"`
 }
 
 func init() {
diff --git a/plc4go/tools/plc4xbrowser/ui.go b/plc4go/tools/plc4xbrowser/ui.go
index 39ac34fdf..e9cad8fdf 100644
--- a/plc4go/tools/plc4xbrowser/ui.go
+++ b/plc4go/tools/plc4xbrowser/ui.go
@@ -248,6 +248,7 @@ func buildOutputArea(newPrimitive func(text string) tview.Primitive, application
 		{
 			consoleView := tview.NewTextView().
 				SetDynamicColors(true).
+				SetMaxLines(config.MaxConsoleLines).
 				SetChangedFunc(func() {
 					application.Draw()
 				})