perf(go): skip empty parsed raw payloads
This commit is contained in:
@@ -72,7 +72,7 @@ func (w *Writer) AppendRawFrame(ctx context.Context, env envelope.FrameEnvelope)
|
|||||||
}
|
}
|
||||||
rawHex, rawHexChunks := chunkPayload(env, "raw_hex", env.RawHex)
|
rawHex, rawHexChunks := chunkPayload(env, "raw_hex", env.RawHex)
|
||||||
rawText, rawTextChunks := chunkPayload(env, "raw_text", env.RawText)
|
rawText, rawTextChunks := chunkPayload(env, "raw_text", env.RawText)
|
||||||
parsedJSON, parsedChunks := chunkPayload(env, "parsed_json", jsonString(env.Parsed))
|
parsedJSON, parsedChunks := chunkPayload(env, "parsed_json", parsedJSONString(env.Parsed))
|
||||||
_, err := w.exec.ExecContext(ctx, fmt.Sprintf(`INSERT INTO %s
|
_, err := w.exec.ExecContext(ctx, fmt.Sprintf(`INSERT INTO %s
|
||||||
(ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes,
|
(ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes,
|
||||||
raw_hex, raw_text, parsed_json, parse_status, parse_error, source_endpoint)
|
raw_hex, raw_text, parsed_json, parse_status, parse_error, source_endpoint)
|
||||||
@@ -317,6 +317,13 @@ func jsonString(value any) string {
|
|||||||
return string(data)
|
return string(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parsedJSONString(value map[string]any) string {
|
||||||
|
if len(value) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return jsonString(value)
|
||||||
|
}
|
||||||
|
|
||||||
func floatField(env envelope.FrameEnvelope, key string) (float64, bool) {
|
func floatField(env envelope.FrameEnvelope, key string) (float64, bool) {
|
||||||
if env.Fields == nil {
|
if env.Fields == nil {
|
||||||
return 0, false
|
return 0, false
|
||||||
|
|||||||
@@ -126,6 +126,27 @@ func TestWriterChunksOversizedParsedJSON(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWriterLeavesParsedJSONEmptyWhenNoParsedPayload(t *testing.T) {
|
||||||
|
exec := &recordingExec{}
|
||||||
|
writer := NewWriter(exec)
|
||||||
|
env := sampleEnvelope()
|
||||||
|
env.Parsed = nil
|
||||||
|
env.ParseStatus = envelope.ParseBadFrame
|
||||||
|
env.ParseError = "invalid frame checksum"
|
||||||
|
|
||||||
|
if err := writer.AppendRawFrame(context.Background(), env); err != nil {
|
||||||
|
t.Fatalf("AppendRawFrame() error = %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
rawInsert := findSQL(exec.calls, "INSERT INTO raw_")
|
||||||
|
if strings.Contains(rawInsert, "'{}'") || strings.Contains(rawInsert, "'null'") {
|
||||||
|
t.Fatalf("raw insert should not store empty parsed_json payload: %s", rawInsert)
|
||||||
|
}
|
||||||
|
if !strings.Contains(rawInsert, "'invalid frame checksum'") {
|
||||||
|
t.Fatalf("raw insert should keep parse error: %s", rawInsert)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestWriterSkipsSparseDerivedRows(t *testing.T) {
|
func TestWriterSkipsSparseDerivedRows(t *testing.T) {
|
||||||
exec := &recordingExec{}
|
exec := &recordingExec{}
|
||||||
writer := NewWriter(exec)
|
writer := NewWriter(exec)
|
||||||
|
|||||||
Reference in New Issue
Block a user