Skip to content

Commit 6edb045

Browse files
feat(period): support absolute date ranges in --period flag (#674)
## Summary Overload the existing `--period` flag across all 8 time-scoped commands to accept absolute date ranges using `gh`-compatible syntax (e.g., `gh search issues --created ">2023-01-01"`), in addition to existing relative durations. ## New syntax | Syntax | Meaning | Example | |--------|---------|---------| | `7d`, `24h` | Relative (unchanged) | `--period 7d` | | `date..date` | Full range | `--period "2024-01-01..2024-02-01"` | | `date..` / `..date` | Open-ended | `--period "2024-01-01.."` | | `>=date` | From (inclusive) | `--period ">=2024-01-01"` | | `>date` | After (exclusive) | `--period ">2024-01-01"` | | `<=date` | Through (inclusive) | `--period "<=2024-02-01"` | | `<date` | Before (exclusive) | `--period "<2024-02-01"` | Date formats: `YYYY-MM-DD`, `YYYY-MM-DDTHH:MM:SS`, with optional timezone. ## Key design decisions - **Single flag** — no new `--start`/`--end` flags, avoids alias conflicts and `--help` clutter - **Local timezone** for date-only inputs — `"2024-01-15"` means the user's local midnight, not UTC - **Exclusive operators shift dates** — `>2024-01-15` (date-only) starts from Jan 16; `>2024-01-15T12:00:00Z` (datetime) passes through as-is - **Follow mode validation** — `log list --follow` rejects end-bounded ranges - **Pagination cache** — serialization normalizes to UTC for deterministic keys; `>=2024-01-01` and `2024-01-01..` share the same cache entry ## Affected commands (8) `trace list`, `span list`, `issue events`, `event list`, `issue list`, `trace logs`, `log list`, `dashboard view` ## Changes - **New**: `src/lib/time-range.ts` — `parsePeriod()`, `timeRangeToApiParams()`, `serializeTimeRange()`, `timeRangeToSeconds()` - **API layer**: Added `start?`/`end?` to all option types in `api/traces.ts`, `api/events.ts`, `api/issues.ts`, `api/logs.ts`, `api/dashboards.ts` - **Commands**: All 8 commands parse period via `parsePeriod()`, spread API params via `timeRangeToApiParams()`, serialize for pagination via `serializeTimeRange()` - **Tests**: 67 new tests (34 unit + 33 property-based with fast-check) --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 924d325 commit 6edb045

File tree

30 files changed

+1429
-85
lines changed

30 files changed

+1429
-85
lines changed

docs/src/content/docs/commands/dashboard.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ View a dashboard
4343
| `-w, --web` | Open in browser |
4444
| `-f, --fresh` | Bypass cache, re-detect projects, and fetch fresh data |
4545
| `-r, --refresh <refresh>` | Auto-refresh interval in seconds (default: 60, min: 10) |
46-
| `-t, --period <period>` | Time period override (e.g., "24h", "7d", "14d") |
46+
| `-t, --period <period>` | Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" |
4747

4848
### `sentry dashboard create <org/project/title...>`
4949

docs/src/content/docs/commands/event.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ List events for an issue
4242
| `-n, --limit <limit>` | Number of events (1-1000) (default: "25") |
4343
| `-q, --query <query>` | Search query (Sentry search syntax) |
4444
| `--full` | Include full event body (stacktraces) |
45-
| `-t, --period <period>` | Time period (e.g., "1h", "24h", "7d", "30d") (default: "7d") |
45+
| `-t, --period <period>` | Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" (default: "7d") |
4646
| `-f, --fresh` | Bypass cache, re-detect projects, and fetch fresh data |
4747
| `-c, --cursor <cursor>` | Navigate pages: "next", "prev", "first" (or raw cursor string) |
4848

docs/src/content/docs/commands/issue.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ List issues in a project
2424
| `-q, --query <query>` | Search query (Sentry search syntax) |
2525
| `-n, --limit <limit>` | Maximum number of issues to list (default: "25") |
2626
| `-s, --sort <sort>` | Sort by: date, new, freq, user (default: "date") |
27-
| `-t, --period <period>` | Time period for issue activity (e.g. 24h, 14d, 90d) (default: "90d") |
27+
| `-t, --period <period>` | Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" (default: "90d") |
2828
| `-c, --cursor <cursor>` | Pagination cursor (use "next" for next page, "prev" for previous) |
2929
| `--compact` | Single-line rows for compact output (auto-detects if omitted) |
3030
| `-f, --fresh` | Bypass cache, re-detect projects, and fetch fresh data |
@@ -46,7 +46,7 @@ List events for a specific issue
4646
| `-n, --limit <limit>` | Number of events (1-1000) (default: "25") |
4747
| `-q, --query <query>` | Search query (Sentry search syntax) |
4848
| `--full` | Include full event body (stacktraces) |
49-
| `-t, --period <period>` | Time period (e.g., "1h", "24h", "7d", "30d") (default: "7d") |
49+
| `-t, --period <period>` | Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" (default: "7d") |
5050
| `-f, --fresh` | Bypass cache, re-detect projects, and fetch fresh data |
5151
| `-c, --cursor <cursor>` | Navigate pages: "next", "prev", "first" (or raw cursor string) |
5252

docs/src/content/docs/commands/log.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ List logs from a project
2424
| `-n, --limit <limit>` | Number of log entries (1-1000) (default: "100") |
2525
| `-q, --query <query>` | Filter query (Sentry search syntax) |
2626
| `-f, --follow <follow>` | Stream logs (optionally specify poll interval in seconds) |
27-
| `-t, --period <period>` | Time period (e.g., "30d", "14d", "24h"). Default: 30d (project mode), 14d (trace mode) |
27+
| `-t, --period <period>` | Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" |
2828
| `-s, --sort <sort>` | Sort order: "newest" (default) or "oldest" (default: "newest") |
2929
| `--fresh` | Bypass cache, re-detect projects, and fetch fresh data |
3030

docs/src/content/docs/commands/span.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ List spans in a project or trace
2424
| `-n, --limit <limit>` | Number of spans (<=1000) (default: "25") |
2525
| `-q, --query <query>` | Filter spans (e.g., "op:db", "duration:>100ms", "project:backend") |
2626
| `-s, --sort <sort>` | Sort order: date, duration (default: "date") |
27-
| `-t, --period <period>` | Time period (e.g., "1h", "24h", "7d", "30d") (default: "7d") |
27+
| `-t, --period <period>` | Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" (default: "7d") |
2828
| `-f, --fresh` | Bypass cache, re-detect projects, and fetch fresh data |
2929
| `-c, --cursor <cursor>` | Navigate pages: "next", "prev", "first" (or raw cursor string) |
3030

docs/src/content/docs/commands/trace.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ List recent traces in a project
2424
| `-n, --limit <limit>` | Number of traces (1-1000) (default: "25") |
2525
| `-q, --query <query>` | Search query (Sentry search syntax) |
2626
| `-s, --sort <sort>` | Sort by: date, duration (default: "date") |
27-
| `-t, --period <period>` | Time period (e.g., "1h", "24h", "7d", "30d") (default: "7d") |
27+
| `-t, --period <period>` | Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" (default: "7d") |
2828
| `-f, --fresh` | Bypass cache, re-detect projects, and fetch fresh data |
2929
| `-c, --cursor <cursor>` | Navigate pages: "next", "prev", "first" (or raw cursor string) |
3030

@@ -61,7 +61,7 @@ View logs associated with a trace
6161
| Option | Description |
6262
|--------|-------------|
6363
| `-w, --web` | Open trace in browser |
64-
| `-t, --period <period>` | Time period to search (e.g., "14d", "7d", "24h"). Default: 14d (default: "14d") |
64+
| `-t, --period <period>` | Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" (default: "14d") |
6565
| `-n, --limit <limit>` | Number of log entries (<=1000) (default: "100") |
6666
| `-q, --query <query>` | Additional filter query (Sentry search syntax) |
6767
| `-s, --sort <sort>` | Sort order: "newest" (default) or "oldest" (default: "newest") |

plugins/sentry-cli/skills/sentry-cli/references/dashboard.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ View a dashboard
4242
- `-w, --web - Open in browser`
4343
- `-f, --fresh - Bypass cache, re-detect projects, and fetch fresh data`
4444
- `-r, --refresh <value> - Auto-refresh interval in seconds (default: 60, min: 10)`
45-
- `-t, --period <value> - Time period override (e.g., "24h", "7d", "14d")`
45+
- `-t, --period <value> - Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07"`
4646

4747
**Examples:**
4848

plugins/sentry-cli/skills/sentry-cli/references/event.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ List events for an issue
2828
- `-n, --limit <value> - Number of events (1-1000) - (default: "25")`
2929
- `-q, --query <value> - Search query (Sentry search syntax)`
3030
- `--full - Include full event body (stacktraces)`
31-
- `-t, --period <value> - Time period (e.g., "1h", "24h", "7d", "30d") - (default: "7d")`
31+
- `-t, --period <value> - Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" - (default: "7d")`
3232
- `-f, --fresh - Bypass cache, re-detect projects, and fetch fresh data`
3333
- `-c, --cursor <value> - Navigate pages: "next", "prev", "first" (or raw cursor string)`
3434

plugins/sentry-cli/skills/sentry-cli/references/issue.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ List issues in a project
1919
- `-q, --query <value> - Search query (Sentry search syntax)`
2020
- `-n, --limit <value> - Maximum number of issues to list - (default: "25")`
2121
- `-s, --sort <value> - Sort by: date, new, freq, user - (default: "date")`
22-
- `-t, --period <value> - Time period for issue activity (e.g. 24h, 14d, 90d) - (default: "90d")`
22+
- `-t, --period <value> - Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" - (default: "90d")`
2323
- `-c, --cursor <value> - Pagination cursor (use "next" for next page, "prev" for previous)`
2424
- `--compact - Single-line rows for compact output (auto-detects if omitted)`
2525
- `-f, --fresh - Bypass cache, re-detect projects, and fetch fresh data`
@@ -78,7 +78,7 @@ List events for a specific issue
7878
- `-n, --limit <value> - Number of events (1-1000) - (default: "25")`
7979
- `-q, --query <value> - Search query (Sentry search syntax)`
8080
- `--full - Include full event body (stacktraces)`
81-
- `-t, --period <value> - Time period (e.g., "1h", "24h", "7d", "30d") - (default: "7d")`
81+
- `-t, --period <value> - Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07" - (default: "7d")`
8282
- `-f, --fresh - Bypass cache, re-detect projects, and fetch fresh data`
8383
- `-c, --cursor <value> - Navigate pages: "next", "prev", "first" (or raw cursor string)`
8484

plugins/sentry-cli/skills/sentry-cli/references/log.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ List logs from a project
1919
- `-n, --limit <value> - Number of log entries (1-1000) - (default: "100")`
2020
- `-q, --query <value> - Filter query (Sentry search syntax)`
2121
- `-f, --follow <value> - Stream logs (optionally specify poll interval in seconds)`
22-
- `-t, --period <value> - Time period (e.g., "30d", "14d", "24h"). Default: 30d (project mode), 14d (trace mode)`
22+
- `-t, --period <value> - Time range: "7d", "2026-03-07..2026-04-07", ">=2026-03-07"`
2323
- `-s, --sort <value> - Sort order: "newest" (default) or "oldest" - (default: "newest")`
2424
- `--fresh - Bypass cache, re-detect projects, and fetch fresh data`
2525

0 commit comments

Comments
 (0)