srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/internal/store/store.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/store/store.go')
-rw-r--r--internal/store/store.go91
1 files changed, 47 insertions, 44 deletions
diff --git a/internal/store/store.go b/internal/store/store.go
index ecc3854..8e9ab2b 100644
--- a/internal/store/store.go
+++ b/internal/store/store.go
@@ -159,66 +159,69 @@ func (s *Store) Close() error {
return s.db.Close()
}
-// Entry is one captured request/response pair.
+// Entry is one captured request/response pair. Never itself put on the
+// IPC wire (see EntryDetail, which is) - tagged anyway for consistency
+// with the rest of this package's now-uniformly-snake_case convention,
+// and in case that ever changes.
type Entry struct {
- ID int64
- StartedAt time.Time
- Duration time.Duration
- Method string
- Scheme string
- Host string
- Path string
- StatusCode int // 0 if no response was received
- RequestRaw []byte
- ResponseRaw []byte // nil if no response was received
- RequestExact bool // true if RequestRaw is wire-exact, false if reconstructed (e.g. HTTP/2)
- ResponseExact bool
+ ID int64 `json:"id"`
+ StartedAt time.Time `json:"started_at"`
+ Duration time.Duration `json:"duration"`
+ Method string `json:"method"`
+ Scheme string `json:"scheme"`
+ Host string `json:"host"`
+ Path string `json:"path"`
+ StatusCode int `json:"status_code"` // 0 if no response was received
+ RequestRaw []byte `json:"request_raw"`
+ ResponseRaw []byte `json:"response_raw"` // nil if no response was received
+ RequestExact bool `json:"request_exact"` // true if RequestRaw is wire-exact, false if reconstructed (e.g. HTTP/2)
+ ResponseExact bool `json:"response_exact"`
// Truncated is true when the corresponding *Raw field would have
// been an exact capture but hit maxCaptureBytes and had bytes
// dropped off the end - distinct from a false *Exact, which also
// covers HTTP/2's inherently-reconstructed (never wire-exact to
// begin with) captures. Only meaningful when the matching *Exact
// field is false; a capture can't be both exact and truncated.
- RequestTruncated bool
- ResponseTruncated bool
- Error string // network/transport error, if the request never got a response
- Source string // "proxy" or "repeater"
- Flagged bool
+ RequestTruncated bool `json:"request_truncated"`
+ ResponseTruncated bool `json:"response_truncated"`
+ Error string `json:"error"` // network/transport error, if the request never got a response
+ Source string `json:"source"` // "proxy" or "repeater"
+ Flagged bool `json:"flagged"`
}
// Summary is the lightweight metadata used for the history list view -
// no request/response bodies.
type Summary struct {
- ID int64
- StartedAt time.Time
- Duration time.Duration
- Method string
- Scheme string
- Host string
- Path string
- StatusCode int
- ReqSize int
- RespSize int
- Error string
- Source string
- Flagged bool
+ ID int64 `json:"id"`
+ StartedAt time.Time `json:"started_at"`
+ Duration time.Duration `json:"duration"`
+ Method string `json:"method"`
+ Scheme string `json:"scheme"`
+ Host string `json:"host"`
+ Path string `json:"path"`
+ StatusCode int `json:"status_code"`
+ ReqSize int `json:"req_size"`
+ RespSize int `json:"resp_size"`
+ Error string `json:"error"`
+ Source string `json:"source"`
+ Flagged bool `json:"flagged"`
// Tags is every distinct plugin tag on this entry, comma-joined -
// cheap enough to compute per row (a correlated subquery, see List/
// Search) that a plugin-tagged entry shows a badge in the history
// list itself, not just in its detail view.
- Tags string
+ Tags string `json:"tags"`
}
// EntryTag is one plugin-contributed marker on a history entry - see
// the "tag_entry" IPC request and entry_tags' own schema comment for
// what Plugin/Data mean.
type EntryTag struct {
- ID int64
- EntryID int64
- Plugin string
- Tag string
- Data string
- CreatedAt time.Time
+ ID int64 `json:"id"`
+ EntryID int64 `json:"entry_id"`
+ Plugin string `json:"plugin"`
+ Tag string `json:"tag"`
+ Data string `json:"data"`
+ CreatedAt time.Time `json:"created_at"`
}
// AddEntryTag stores t and returns its assigned ID.
@@ -785,12 +788,12 @@ func (s *Store) DeleteClientCert(id int64) error {
// internal/proxy/websocket.go for why it's one row per frame rather than
// per reassembled logical message.
type WSMessage struct {
- ID int64
- EntryID int64
- StartedAt time.Time
- Direction string // "client_to_server" or "server_to_client"
- Opcode int // RFC 6455 opcode: 1 text, 2 binary, 8 close, 9 ping, 10 pong
- Payload []byte
+ ID int64 `json:"id"`
+ EntryID int64 `json:"entry_id"`
+ StartedAt time.Time `json:"started_at"`
+ Direction string `json:"direction"` // "client_to_server" or "server_to_client"
+ Opcode int `json:"opcode"` // RFC 6455 opcode: 1 text, 2 binary, 8 close, 9 ping, 10 pong
+ Payload []byte `json:"payload"`
}
// AddWSMessage stores one captured frame and returns its assigned ID.