Reading API /api/v1/logs with a stable cursor, and API tokens
GET /api/v1/logs?query=<LogsQL>&since=<cursor|time|duration>&limit=<n> returns the logs after a cursor, oldest first, with next_cursor and has_more. The cursor is a position on _time (the reception time) plus the number of rows already returned among those sharing that exact time, ordered by a hash of their content, so following the cursors gives every row once even within groups cut by a page. Rows count once older than the lag (30 s), and nothing is returned while the disk spool still holds logs. API tokens (Settings > API) give read-only access to /api/v1/ as "Authorization: Bearer lst_...", in every auth mode; only their SHA-256 is kept in /data/api_tokens.json. README (EN/FR) documents the route and an n8n workflow keeping the cursor in $getWorkflowStaticData. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
d61384ed2c
commit
c8f45044a3
12 files changed
+1327
-7
No files matched your search
@@ -423,6 +423,15 @@ func queryStatus(err error) int {
|
||||
return http.StatusBadGateway
|
||||
}
|
||||
|
||||
// PendingSpool is the number of logs waiting in the disk spool.
|
||||
func (s *Store) PendingSpool() int64 {
|
||||
if s.spool == nil {
|
||||
return 0
|
||||
}
|
||||
lines, _ := s.spool.Pending()
|
||||
return lines
|
||||
}
|
||||
|
||||
func (s *Store) Stats() map[string]any {
|
||||
st := map[string]any{
|
||||
"received": s.received.Load(),
|
||||
|
||||
Reference in new issue
Block a user