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 // Event Stringer interface, just returns the raw JSON as a string
func (evt *Event) String() string { func (evt Event) String() string {
if evt == nil {
return "null"
}
j, _ := json.Marshal(evt) j, _ := json.Marshal(evt)
return string(j) return string(j)
} }

View File

@ -4,8 +4,9 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/valyala/fastjson"
"time" "time"
"github.com/valyala/fastjson"
) )
func (evt *Event) UnmarshalJSON(payload []byte) error { func (evt *Event) UnmarshalJSON(payload []byte) error {
@ -17,7 +18,7 @@ func (evt *Event) UnmarshalJSON(payload []byte) error {
obj, err := parsed.Object() obj, err := parsed.Object()
if err != nil { 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 // 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) { 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 { for i, v := range args {
switch v.(type) { printableArgs[i] = stringify(v)
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()
}
} }
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) defer r.okCallbacks.Delete(event.ID)
// publish event // publish event
message := []interface{}{"EVENT", event} message := []any{"EVENT", event}
debugLog("{%s} sending %v\n", r.URL, message) debugLog("{%s} sending %v\n", r.URL, message)
if err := r.Connection.WriteJSON(message); err != nil { if err := r.Connection.WriteJSON(message); err != nil {
return status, err return status, err

View File

@ -197,7 +197,7 @@ func parseEventMessage(t *testing.T, raw []json.RawMessage) Event {
} }
var event Event var event Event
if err := json.Unmarshal(raw[1], &event); err != nil { 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 return event
} }