improve debug logging, fix stringer interface, debuglog events sent, fix debuglogging affecting the actual values.

This commit is contained in:
fiatjaf
2023-04-11 11:02:35 -03:00
parent 7f64f2f65e
commit 32768b1a5b
5 changed files with 32 additions and 18 deletions

View File

@ -43,10 +43,7 @@ const (
)
// Event Stringer interface, just returns the raw JSON as a string
func (evt *Event) String() string {
if evt == nil {
return "null"
}
func (evt Event) String() string {
j, _ := json.Marshal(evt)
return string(j)
}

View File

@ -4,8 +4,9 @@ import (
"bytes"
"encoding/json"
"fmt"
"github.com/valyala/fastjson"
"time"
"github.com/valyala/fastjson"
)
func (evt *Event) UnmarshalJSON(payload []byte) error {
@ -17,7 +18,7 @@ func (evt *Event) UnmarshalJSON(payload []byte) error {
obj, err := parsed.Object()
if err != nil {
return fmt.Errorf("event is not an object")
return fmt.Errorf("event is not an object: %w", err)
}
// prepare this to receive any extra property that may serialized along with the event

View File

@ -8,17 +8,33 @@ import (
)
func debugLog(str string, args ...any) {
// this is such that we don't modify the actual args that may be used outside of this function
printableArgs := make([]any, len(args))
for i, v := range args {
switch v.(type) {
case []json.RawMessage:
j, _ := json.Marshal(v)
args[i] = string(j)
case []byte:
args[i] = string(v.([]byte))
case fmt.Stringer:
args[i] = v.(fmt.Stringer).String()
}
printableArgs[i] = stringify(v)
}
DebugLogger.Printf(str, args...)
DebugLogger.Printf(str, printableArgs...)
}
func stringify(anything any) any {
switch v := anything.(type) {
case []any:
// this is such that we don't modify the actual values that may be used outside of this function
printableValues := make([]any, len(v))
for i, subv := range v {
printableValues[i] = stringify(subv)
}
return printableValues
case []json.RawMessage:
j, _ := json.Marshal(v)
return string(j)
case []byte:
return string(v)
case fmt.Stringer:
return v.String()
default:
return v
}
}

View File

@ -300,7 +300,7 @@ func (r *Relay) Publish(ctx context.Context, event Event) (Status, error) {
defer r.okCallbacks.Delete(event.ID)
// publish event
message := []interface{}{"EVENT", event}
message := []any{"EVENT", event}
debugLog("{%s} sending %v\n", r.URL, message)
if err := r.Connection.WriteJSON(message); err != nil {
return status, err

View File

@ -197,7 +197,7 @@ func parseEventMessage(t *testing.T, raw []json.RawMessage) Event {
}
var event Event
if err := json.Unmarshal(raw[1], &event); err != nil {
t.Errorf("json.Unmarshal: %v", err)
t.Errorf("json.Unmarshal(`%s`): %v", string(raw[1]), err)
}
return event
}