summaryrefslogtreecommitdiff
path: root/examples/go-dashboard/main.go
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2020-09-03 20:34:57 +0200
committerToni Uhlig <matzeton@googlemail.com>2020-09-03 20:34:57 +0200
commitec101fbc0f7b5d771638e54d083f2457fa6511c2 (patch)
tree1522236add65515d50a00b3eecc19a32e1cefced /examples/go-dashboard/main.go
parent001f84af3b9bfd8427c99af1a380d40b6577489a (diff)
go-dashboard: Print unmarshalled JSON string in a textbox.
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'examples/go-dashboard/main.go')
-rw-r--r--examples/go-dashboard/main.go199
1 files changed, 119 insertions, 80 deletions
diff --git a/examples/go-dashboard/main.go b/examples/go-dashboard/main.go
index c3ae62b37..8201ca9df 100644
--- a/examples/go-dashboard/main.go
+++ b/examples/go-dashboard/main.go
@@ -3,6 +3,7 @@ package main
import (
"bufio"
"encoding/json"
+ "fmt"
"io"
"log"
"net"
@@ -64,112 +65,150 @@ type basic_event struct {
BasicEventName string `json:"basic_event_name"`
}
-func main() {
- ui.Init()
-
- InfoLogger = log.New(os.Stderr, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
- WarningLogger = log.New(os.Stderr, "WARNING: ", log.Ldate|log.Ltime|log.Lshortfile)
- ErrorLogger = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
-
- conn, err := net.Dial("tcp", "127.0.0.1:7000")
+func processJson(jsonStr string) {
+ jsonMap := make(map[string]interface{})
+ err := json.Unmarshal([]byte(jsonStr), &jsonMap)
if err != nil {
- ErrorLogger.Printf("Connection failed: %v\n", err)
+ ErrorLogger.Printf("BUG: JSON error: %v\n", err)
os.Exit(1)
}
+ if jsonMap["packet_event_id"] != nil {
+ pe := packet_event{}
+ if err := json.Unmarshal([]byte(jsonStr), &pe); err != nil {
+ ErrorLogger.Printf("BUG: JSON Unmarshal error: %v\n", err)
+ os.Exit(1)
+ }
+ InfoLogger.Printf("PACKET EVENT %v\n", pe)
+ } else if jsonMap["flow_event_id"] != nil {
+ fe := flow_event{}
+ if err := json.Unmarshal([]byte(jsonStr), &fe); err != nil {
+ ErrorLogger.Printf("BUG: JSON Unmarshal error: %v\n", err)
+ os.Exit(1)
+ }
+ InfoLogger.Printf("FLOW EVENT %v\n", fe)
+ } else if jsonMap["basic_event_id"] != nil {
+ be := basic_event{}
+ if err := json.Unmarshal([]byte(jsonStr), &be); err != nil {
+ ErrorLogger.Printf("BUG: JSON Unmarshal error: %v\n", err)
+ os.Exit(1)
+ }
+ InfoLogger.Printf("BASIC EVENT %v\n", be)
+ } else {
+ ErrorLogger.Printf("BUG: Unknown JSON: %v\n", jsonStr)
+ os.Exit(1)
+ }
+ //InfoLogger.Printf("JSON map: %v\n-------------------------------------------------------\n", jsonMap)
+}
- buf := make([]byte, NETWORK_BUFFER_MAX_SIZE)
- var jsonStr string
- var jsonStrLen uint16 = 0
- var jsonLen uint16 = 0
-
- rd := bufio.NewReaderSize(conn, int(NETWORK_BUFFER_MAX_SIZE))
+func eventHandler(ui *ui.Tui, wdgts *ui.Widgets, reader chan string) {
for {
- nread, err := rd.Read(buf)
+ select {
+ case <-ui.MainTicker.C:
+ if err := wdgts.RawJson.Write(fmt.Sprintf("%s\n", "--- HEARTBEAT ---")); err != nil {
+ panic(err)
+ }
- if err != nil {
- if err != io.EOF {
- ErrorLogger.Printf("Read Error: %v\n", err)
- break
+ case <-ui.Context.Done():
+ return
+
+ case jsonStr := <-reader:
+ if err := wdgts.RawJson.Write(fmt.Sprintf("%s\n", jsonStr)); err != nil {
+ panic(err)
}
}
+ }
+}
+
+func main() {
+ InfoLogger = log.New(os.Stderr, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
+ WarningLogger = log.New(os.Stderr, "WARNING: ", log.Ldate|log.Ltime|log.Lshortfile)
+ ErrorLogger = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
+
+ writer := make(chan string, 256)
- if nread == 0 || err == io.EOF {
- WarningLogger.Printf("Disconnect from Server\n")
- break
+ go func(writer chan string) {
+ con, err := net.Dial("tcp", "127.0.0.1:7000")
+ if err != nil {
+ ErrorLogger.Printf("Connection failed: %v\n", err)
+ os.Exit(1)
}
- jsonStr += string(buf[:nread])
- jsonStrLen += uint16(nread)
+ buf := make([]byte, NETWORK_BUFFER_MAX_SIZE)
+ jsonStr := string("")
+ jsonStrLen := uint16(0)
+ jsonLen := uint16(0)
+ brd := bufio.NewReaderSize(con, int(NETWORK_BUFFER_MAX_SIZE))
for {
- if jsonStrLen < nDPIsrvd_JSON_BYTES+1 {
- break
- }
-
- if jsonStr[nDPIsrvd_JSON_BYTES] != '{' {
- ErrorLogger.Printf("BUG: JSON invalid opening character at position %d: '%s' (%x)\n",
- nDPIsrvd_JSON_BYTES,
- string(jsonStr[:nDPIsrvd_JSON_BYTES]), jsonStr[nDPIsrvd_JSON_BYTES])
- os.Exit(1)
- }
+ nread, err := brd.Read(buf)
- if jsonLen == 0 {
- var tmp uint64
- if tmp, err = strconv.ParseUint(strings.TrimLeft(jsonStr[:4], "0"), 10, 16); err != nil {
- ErrorLogger.Printf("BUG: Could not parse length of a JSON string: %v\n", err)
- os.Exit(1)
- } else {
- jsonLen = uint16(tmp)
+ if err != nil {
+ if err != io.EOF {
+ ErrorLogger.Printf("Read Error: %v\n", err)
+ break
}
}
- if jsonStrLen < jsonLen+nDPIsrvd_JSON_BYTES {
+ if nread == 0 || err == io.EOF {
+ WarningLogger.Printf("Disconnect from Server\n")
break
}
- if jsonStr[jsonLen+nDPIsrvd_JSON_BYTES-1] != '}' {
- ErrorLogger.Printf("BUG: JSON invalid closing character at position %d: '%s'\n",
- jsonLen+nDPIsrvd_JSON_BYTES,
- string(jsonStr[jsonLen+nDPIsrvd_JSON_BYTES-1]))
- os.Exit(1)
- }
+ jsonStr += string(buf[:nread])
+ jsonStrLen += uint16(nread)
- jsonMap := make(map[string]interface{})
- err := json.Unmarshal([]byte(jsonStr[nDPIsrvd_JSON_BYTES:nDPIsrvd_JSON_BYTES+jsonLen]), &jsonMap)
- if err != nil {
- ErrorLogger.Printf("BUG: JSON error: %v\n", err)
- os.Exit(1)
- }
- if jsonMap["packet_event_id"] != nil {
- pe := packet_event{}
- if err := json.Unmarshal([]byte(jsonStr[nDPIsrvd_JSON_BYTES:nDPIsrvd_JSON_BYTES+jsonLen]), &pe); err != nil {
- ErrorLogger.Printf("BUG: JSON Unmarshal error: %v\n", err)
- os.Exit(1)
+ for {
+ if jsonStrLen < nDPIsrvd_JSON_BYTES+1 {
+ break
}
- InfoLogger.Printf("PACKET EVENT %v\n", pe)
- } else if jsonMap["flow_event_id"] != nil {
- fe := flow_event{}
- if err := json.Unmarshal([]byte(jsonStr[nDPIsrvd_JSON_BYTES:nDPIsrvd_JSON_BYTES+jsonLen]), &fe); err != nil {
- ErrorLogger.Printf("BUG: JSON Unmarshal error: %v\n", err)
+
+ if jsonStr[nDPIsrvd_JSON_BYTES] != '{' {
+ ErrorLogger.Printf("BUG: JSON invalid opening character at position %d: '%s' (%x)\n",
+ nDPIsrvd_JSON_BYTES,
+ string(jsonStr[:nDPIsrvd_JSON_BYTES]), jsonStr[nDPIsrvd_JSON_BYTES])
os.Exit(1)
}
- InfoLogger.Printf("FLOW EVENT %v\n", fe)
- } else if jsonMap["basic_event_id"] != nil {
- be := basic_event{}
- if err := json.Unmarshal([]byte(jsonStr[nDPIsrvd_JSON_BYTES:nDPIsrvd_JSON_BYTES+jsonLen]), &be); err != nil {
- ErrorLogger.Printf("BUG: JSON Unmarshal error: %v\n", err)
+
+ if jsonLen == 0 {
+ var tmp uint64
+ if tmp, err = strconv.ParseUint(strings.TrimLeft(jsonStr[:4], "0"), 10, 16); err != nil {
+ ErrorLogger.Printf("BUG: Could not parse length of a JSON string: %v\n", err)
+ os.Exit(1)
+ } else {
+ jsonLen = uint16(tmp)
+ }
+ }
+
+ if jsonStrLen < jsonLen+nDPIsrvd_JSON_BYTES {
+ break
+ }
+
+ if jsonStr[jsonLen+nDPIsrvd_JSON_BYTES-1] != '}' {
+ ErrorLogger.Printf("BUG: JSON invalid closing character at position %d: '%s'\n",
+ jsonLen+nDPIsrvd_JSON_BYTES,
+ string(jsonStr[jsonLen+nDPIsrvd_JSON_BYTES-1]))
os.Exit(1)
}
- InfoLogger.Printf("BASIC EVENT %v\n", be)
- } else {
- ErrorLogger.Printf("BUG: Unknown JSON: %v\n", jsonStr[nDPIsrvd_JSON_BYTES:nDPIsrvd_JSON_BYTES+jsonLen])
- os.Exit(1)
- }
- //InfoLogger.Printf("JSON map: %v\n-------------------------------------------------------\n", jsonMap)
- jsonStr = jsonStr[jsonLen+nDPIsrvd_JSON_BYTES:]
- jsonStrLen -= (jsonLen + nDPIsrvd_JSON_BYTES)
- jsonLen = 0
+ writer <- jsonStr[nDPIsrvd_JSON_BYTES : nDPIsrvd_JSON_BYTES+jsonLen]
+
+ jsonStr = jsonStr[jsonLen+nDPIsrvd_JSON_BYTES:]
+ jsonStrLen -= (jsonLen + nDPIsrvd_JSON_BYTES)
+ jsonLen = 0
+ }
}
- }
+ }(writer)
+
+ tui, wdgts := ui.Init()
+ go eventHandler(tui, wdgts, writer)
+ ui.Run(tui)
+
+/*
+ for {
+ select {
+ case _ = <-writer:
+ break
+ }
+ }
+*/
}