diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2020-09-03 20:34:57 +0200 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2020-09-03 20:34:57 +0200 |
commit | ec101fbc0f7b5d771638e54d083f2457fa6511c2 (patch) | |
tree | 1522236add65515d50a00b3eecc19a32e1cefced /examples/go-dashboard/main.go | |
parent | 001f84af3b9bfd8427c99af1a380d40b6577489a (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.go | 199 |
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 + } + } +*/ } |