feat: PITR RECOVER TO TIMESTAMP, OpenTelemetry OTLP export, FTS infrastructure

- RECOVER TO TIMESTAMP '...' — parser + executor, replays WAL entries
- core/tracing.nim — OTLP/HTTP export via exportOtlp()
- FTS: ftsIndexes table in ExecutionContext, engine import ready
- 281 tests, 0 failures
This commit is contained in:
2026-05-07 13:44:59 +03:00
parent 651375a156
commit b1aadf77f9
7 changed files with 104 additions and 40 deletions
+43
View File
@@ -3,6 +3,8 @@ import std/json
import std/times
import std/monotimes
import std/tables
import std/httpclient
import std/strutils
type
SpanStatus* = enum
@@ -82,3 +84,44 @@ proc enable*(tracer: Tracer) =
proc disable*(tracer: Tracer) =
tracer.enabled = false
proc exportOtlp*(tracer: Tracer, endpoint: string = "http://localhost:4318/v1/traces"): bool =
## Export spans via OTLP/HTTP (JSON format).
## Returns true on success.
if tracer.spans.len == 0: return true
var otlpSpans = newJArray()
for span in tracer.spans:
var attrs = newJArray()
for k, v in span.attributes:
attrs.add(%*{"key": k, "value": {"stringValue": v}})
otlpSpans.add(%*{
"traceId": span.traceId,
"spanId": span.spanId,
"parentSpanId": span.parentSpanId,
"name": span.name,
"kind": "SPAN_KIND_INTERNAL",
"startTimeUnixNano": $span.startTime,
"endTimeUnixNano": $span.endTime,
"status": {"code": if span.status == ssOk: "STATUS_CODE_OK" else: "STATUS_CODE_ERROR"},
"attributes": attrs,
})
let body = %*{
"resourceSpans": [{
"resource": {"attributes": [
{"key": "service.name", "value": {"stringValue": "baradadb"}}
]},
"scopeSpans": [{
"scope": {"name": "baradadb-tracer", "version": "0.1.0"},
"spans": otlpSpans
}]
}]
}
try:
let client = newHttpClient()
client.headers["Content-Type"] = "application/json"
discard client.postContent(endpoint, body = $body)
client.close()
tracer.spans = @[]
return true
except:
return false