Repository navigation
Reports as jobs and as automations #2297
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+1,144
−156
Merged
Changes from all commits
Commits
Show all changes
210 commits
Select commit
Hold shift + click to select a range
f97c2f0
feat: add Automation data model
Flix6x f410437
feat: CLI commands to manage and run automations
Flix6x 6f6591c
feat: record on forecasting jobs how they were created
Flix6x fb74bfc
feat: API endpoints to list an asset's automations
Flix6x ab62b9f
feat: UI page listing an asset's automations
Flix6x db8f288
test: cover automations CLI, API and UI
Flix6x 9cb4f63
docs: document automations
Flix6x e0575c7
docs: changelog entry for automations
Flix6x b1f56bf
fix: render cron descriptions in 24-hour format regardless of locale
Flix6x de6fb71
fix: address code review findings for automations
Flix6x bf2cc60
fix: address code review findings for automations (remaining files)
Flix6x 0b345b2
feat: record on scheduling jobs how they were created
Flix6x 4c0c5db
feat: schedules as automations
Flix6x ac4c74a
docs: changelog entry for schedule automations
Flix6x f6e1e10
feat: CRUD for automations via API and UI
Flix6x 073abd9
docs: changelog entry for automations CRUD
Flix6x 6184940
feat: reports can run as background jobs
Flix6x 79e1609
feat: reports as automations
Flix6x 5eac468
docs: changelog entry for reports as jobs and automations
Flix6x 791fcf4
feat: anchor default report windows to the automation's actual last run
Flix6x 0dca8fc
docs: add an Automations concept page
Flix6x 176d800
fix: address stack code review findings
Flix6x 7493c13
test: assert on the cron validation failure without pinning click's m…
Flix6x 7bc3056
merge: synchronize automations with current main
BelhsanHmida 15c9937
data/schemas: restrict automations to five-field cron
BelhsanHmida 3090cf5
data/schemas/tests: cover automation cron field count
BelhsanHmida 8cc3920
cli/jobs: retain automation guard after queueing failure
BelhsanHmida 29c46b3
cli/tests: cover partial automation queue failure
BelhsanHmida 8666c31
cli: normalize YAML forecasting option files
BelhsanHmida 3433020
cli/tests: cover automation YAML option files
BelhsanHmida 430dcef
data/services: redact inaccessible automation provenance
BelhsanHmida 6c4bbc6
api/v3_0/tests: cover automation provenance authorization
BelhsanHmida 337ad3b
ui/assets: distinguish automation load failures
BelhsanHmida 119fc9d
ui/tests: cover automation load error state
BelhsanHmida 04daae4
utils/docs: preserve standalone asterisks in RST conversion
BelhsanHmida 22addda
utils/tests: cover RST cron wildcard conversion
BelhsanHmida edf77a5
docs/forecasting: clarify automation execution contract
BelhsanHmida a6cee99
changelog: record automation API and runner contract
BelhsanHmida 194f8cc
api/docs: show job creation provenance
BelhsanHmida a3d7ebe
test: keep forecast CLI stub compatible with job provenance
BelhsanHmida de76798
Merge main into forecast automations
BelhsanHmida 646f9fd
fix: require valid automation generators
BelhsanHmida 4664afe
test: cover automation generator retention
BelhsanHmida b801d74
fix: constrain forecast automation outputs
BelhsanHmida 006f85c
test: cover forecast automation output scope
BelhsanHmida dba4edc
docs: explain forecast automation ownership rules
BelhsanHmida efdda5a
fix: merge automation and main migration heads
BelhsanHmida 5e86232
merge: synchronize schedule automations with reviewed parent
BelhsanHmida bc1fc32
data/models: allow schedule automations without generators
BelhsanHmida 2f4afe2
cli/tests: cover schedule automation validation
BelhsanHmida d3c3082
data/tests: cover schedule automation dispatch
BelhsanHmida 9505e2b
api/v3_0/tests: cover schedule job provenance
BelhsanHmida 5de1f20
ui/tests: cover automation type tabs
BelhsanHmida 6bf6143
scheduling: harden automation dispatch
BelhsanHmida 03f1b88
cli: reject forecast options for schedule automations
BelhsanHmida 75b2be6
ui/assets: resize automation tables on tab changes
BelhsanHmida 71a7196
docs: clarify schedule automation inputs
BelhsanHmida d39f60f
cli/tests: cover malformed automation YAML
BelhsanHmida 5b04664
cli: report malformed automation YAML
BelhsanHmida 1ec9324
data/tests: cover stored schedule flex configuration
BelhsanHmida 90025d3
scheduling: load stored flex config for minimal triggers
BelhsanHmida 2f0b09c
docs/scheduling: describe trigger propagation
BelhsanHmida c783e8f
data/models: let data generators report their input and output sensors
Flix6x 8b2cc73
data/models/forecasting: only announce a pipeline run when actually r…
Flix6x b37256f
cli: default the automation recurrence to daily, and reject options t…
Flix6x aa64afb
api/v3_0: report an automation's input and output sensors
Flix6x b438e8f
api/v3_0: add an endpoint for one data source
Flix6x 17f432b
api/v3_0: regenerate the OpenAPI specs
Flix6x 1ea8f78
ui: link an automation's details to its sensors, and make the listing…
Flix6x 2b87d5e
ui: show a sensor's data source record and the automations feeding it
Flix6x 1869247
tests: cover the automation and data source review follow-ups
Flix6x 03626b4
docs: describe the automation and data source follow-ups
Flix6x 0f8fe58
Merge the current automations branch into the review follow-ups
Flix6x 1dccf9f
api/v3_0: regenerate the OpenAPI specs after merging
Flix6x 9f1d075
cli: only reject configuration options that were actually given with …
Flix6x b397907
data/services: only consider automations that could feed a sensor
Flix6x 318cd91
tests: follow the merged automation behaviour
Flix6x 2237245
data/services: only let a user automate sensors they can access thems…
Flix6x 4765fd8
api/v3_0: regenerate the OpenAPI specs
Flix6x 5d92ea0
api/v3_0/tests: cover automating an inaccessible sensor
Flix6x d4bf80e
docs: describe which sensors an automation may involve
Flix6x d8701c6
data/services: check every sensor a schedule would be recorded on
Flix6x 05e00ac
api/v3_0/tests: cover a schedule aggregated onto an inaccessible sensor
Flix6x 1eb3a50
cli: keep mypy happy about click 8 attributes
BelhsanHmida 9653e10
cli: keep the automation help focused on the automation
BelhsanHmida 87e07f6
data/models: count a source-filtered regressor as an input sensor
BelhsanHmida 8860bd0
data/services: do not report no sensors when an automation's sensors …
BelhsanHmida 2b961cc
Feat automation timezones catchup (#2396)
BelhsanHmida f75bb6d
Merge branch 'main' into feat/2288-automations-for-forecasts
BelhsanHmida 1e53696
Merge the forecast automation base into the schedule automations
BelhsanHmida db0a57b
Merge the schedule automations into the automations CRUD
BelhsanHmida 1f68beb
data/migrations: rejoin the two automation migration branches
BelhsanHmida f625330
Merge branch 'work/2293-sync' into work/2294-sync
BelhsanHmida 64ad898
data/services: let the forecaster say which sensors an automation inv…
BelhsanHmida 7a3c38a
api/v3_0: let an automation's timezone be set and changed through the…
BelhsanHmida 5612387
data/services: set up the forecaster's data source only once the auto…
BelhsanHmida a98b4fc
Merge origin/main into automation fixes
BelhsanHmida 8eac59f
fix(data/schemas): reject cron expressions without dates
BelhsanHmida 249642f
fix(data/services): isolate invalid recurrences and stale claims
BelhsanHmida bf23428
fix(api/v3_0): protect automation sensor details
BelhsanHmida af5957b
test(cli): cover impossible recurrence input
BelhsanHmida c18f7de
test(data/services): cover resilient automation claims
BelhsanHmida 23ea45a
test(api/v3_0): cover private automation dependencies
BelhsanHmida a7671de
Merge reviewed forecast automation fixes
BelhsanHmida 5af2170
fix(data/services): resolve schedule automation sensors
BelhsanHmida 32c4970
test(data/services): cover schedule sensor resolution
BelhsanHmida a0a1944
test(api/v3_0): expose schedule dependency details
BelhsanHmida 87f670b
Merge reviewed schedule automation fixes
BelhsanHmida 1c7b3d3
fix(data/services): hide inaccessible sensor names
BelhsanHmida b7979b5
test(api/v3_0): isolate automation endpoint tests
BelhsanHmida 10b9155
feat(ui/views): provide automation timezones
BelhsanHmida a39c4ed
feat(ui): edit automation recurrence timezones
BelhsanHmida 69fd5bf
test(ui): cover automation timezone controls
BelhsanHmida aa469bc
docs(changelog): mention automation timezones
BelhsanHmida 9b5af64
fix(data/services): preserve schedule validation errors
BelhsanHmida 881c9bd
feat(automations): integrate reports with the CRUD stack
BelhsanHmida 292a0fa
fix(automations): authorize reporter sensor dependencies
BelhsanHmida 8b76815
fix(reporting): require report inputs and outputs
BelhsanHmida 82cb3bb
fix(automations): constrain report output scope
BelhsanHmida 3e6c2ec
fix(automations): require generators for reports
BelhsanHmida 601f951
fix(automations): anchor reports to claimed occurrences
BelhsanHmida f0c3fce
fix(automations): advance report coverage monotonically
BelhsanHmida 2350b68
test(ui): cover report automation listings
BelhsanHmida 77c6c2d
docs(automations): document report occurrence semantics
BelhsanHmida 95b6187
test(api): close rejected report transactions
BelhsanHmida 63fee6b
Merge branch 'main' into feat/2288-automations-for-forecasts
BelhsanHmida b8d76a9
cli: refuse forecaster options that were given, not merely ones that …
BelhsanHmida dd5fae6
data/models: name an automation's cursor after what it points at
Flix6x b3845d8
tests: follow the automation cursor rename
Flix6x dbf0bae
docs: explain the automation cursor, and say "run" instead of "occurr…
Flix6x 7e1bab2
docs/changelog: give the automation API changes their own version sec…
Flix6x d1cd0a2
docs/changelog: restore the v3.0-32 underline to full length
Flix6x 6474eec
data/services: address review findings on the automations service
Flix6x 1bda4b5
data/models: index the automation asset foreign key
Flix6x 8d8514d
api/v3_0: work out an automation's sensors once when they cannot be r…
Flix6x eca2520
cli: warn which automations a sensor deletion would break
Flix6x fc91bc4
tests: cover the sensor deletion warning, and stop depending on caplog
Flix6x 05e059e
docs/changelog: record the sensor deletion warning
Flix6x 6541676
Merge branch 'main' into feat/2288-automations-for-forecasts
Flix6x 4051dc2
docs: give automations their own page
Flix6x 208e5be
Merge branch 'feat/2288-automations-for-forecasts' into feat/2288-sch…
Flix6x 4be5574
Merge branch 'feat/2288-schedule-automations' into feat/2288-automati…
Flix6x 2e6fe75
Merge branch 'feat/2288-automations-crud' into feat/2288-report-autom…
Flix6x 06bf14b
data/migrations: index the automation asset FK without adding a revision
Flix6x 170a38e
Merge remote-tracking branch 'origin/feat/2288-automations-for-foreca…
Flix6x 4080c44
Merge remote-tracking branch 'origin/feat/2288-schedule-automations' …
Flix6x b8b8db5
Merge remote-tracking branch 'origin/feat/2288-automations-crud' into…
Flix6x 7b83dfa
Merge branch 'main' into feat/2288-schedule-automations
Flix6x e8f5bc1
Merge remote-tracking branch 'origin/feat/2288-schedule-automations' …
Flix6x 2701717
Merge remote-tracking branch 'origin/feat/2288-automations-crud' into…
Flix6x 133a6e4
Merge branch 'main' into feat/2288-schedule-automations
Flix6x 0132c63
docs: document schedule automations in the automations chapter
Flix6x 940f22e
Name automation types after the task, like the rest of the codebase
Flix6x 12903db
docs/changelog: move the data source inspection entry to v1.1.0
Flix6x 4f55191
Schedulers as data generators, and a generator on every automation (#…
Flix6x c50b9cf
Merge branch 'main' into feat/2288-schedule-automations
Flix6x 952bfa9
Name automation types after the task, not its results
BelhsanHmida 9c1312f
Merge branch 'feat/2288-schedule-automations' into feat/2288-automati…
BelhsanHmida 0b59c15
Gate managing an automation the way running one is gated
BelhsanHmida 89c1482
Record this branch's endpoints in the changelogs
BelhsanHmida 37c55ff
Give the trigger tests the fixtures this file now uses
BelhsanHmida b171ac6
Merge branch 'feat/2288-automations-crud' into feat/2288-report-autom…
BelhsanHmida 2ad2e45
Merge origin/main into the automations CRUD branch
BelhsanHmida 51fb4fb
Close the handlers the Run now button was pasted into
BelhsanHmida 67a7e2b
Merge branch 'feat/2288-automations-crud' into feat/2288-report-autom…
BelhsanHmida 5fa7818
Merge origin/main into automations CRUD
BelhsanHmida d7140c3
docker: dispatch due automations in Compose
BelhsanHmida cfe71b3
docs: explain Compose automation dispatcher
BelhsanHmida c52d61e
automations: show the next run in local time
BelhsanHmida 7051b62
tests: cover next automation runs across DST
BelhsanHmida 957094b
docs: explain upcoming automation run times
BelhsanHmida 78e6bf7
ui/automations: align the row actions
BelhsanHmida 430e3f2
tests: verify automation action layout in a browser
BelhsanHmida f3a1846
ui/automations: line the row actions up across rows
BelhsanHmida ea2a7d5
docs: rewrap a next-run docstring on a punctuation break
BelhsanHmida 0cadbfe
changelog: record the automation schedule and action UX
BelhsanHmida ffc3611
ui/automations: collect the row actions into one menu
BelhsanHmida 39ea328
changelog: describe the automation actions menu
BelhsanHmida fbe1162
Merge branch 'main' into feat/2288-automations-crud
BelhsanHmida 789ceca
Address review: schema decorators, asset timezone, naming and wording
Flix6x 396f2ef
ui/automations: reflow the two stylesheet comments
Flix6x b4d0b3e
Address Copilot round 2: API docs that no longer matched the code
Flix6x 7f0511a
Address Copilot round 3: report unknown sensors instead of failing
Flix6x 223563e
Address Copilot round 4: say what resetting the cursor actually does
Flix6x 91081fc
Address Copilot round 5: reflow two docstrings, and cover the delete …
Flix6x 458a9eb
Address Copilot round 6: drop the duplicated scheduler data source wa…
Flix6x 142ccff
Pin the automation creation schema's timezone contract in a test
Flix6x 4cb27c3
Report an automation's times in its own timezone, and restructure its…
Flix6x 4e723c1
docs: drop a duplicated v1.0.0 entry, and stop calling the cursor a U…
Flix6x 697f58f
Address review: hand the create endpoint its whole request, and drop …
Flix6x 8a7b8db
Name the automation API's fields in kebab-case
Flix6x d591d4f
Name the generator class after what it is, not after one of its kinds
Flix6x 4128990
Name the data generator class and the source it resolves to apart
Flix6x 1e72b6d
Merge the squash-merged automations CRUD, and main, into the report a…
Flix6x 27c181f
Merge branch 'main' into feat/2288-report-automations
Flix6x d75c91f
Merge origin/main into feat/2288-report-automations
Flix6x 4514e17
Take back what the restack onto main quietly undid
Flix6x fe1a391
Resolve a report automation's offsets in the automation's timezone
Flix6x 388abcb
Refuse a report automation that fixes its report's period
Flix6x f119b56
Record report coverage only for report automations
Flix6x 8208023
Hold an automation's report to the sensors it was checked against
Flix6x 62a9f07
Rebuild the report automation docs on main's, and file the entries un…
Flix6x 2dbac57
Break this branch's comments and docstrings only after punctuation
Flix6x 1a689c5
Keep a job's trigger part of its identity in the job cache, as on main
Flix6x 83b149e
Label the Reports tab like the others, and word the timezone hint for…
Flix6x b935f4f
Learn whether a report job is an automation's from its trigger alone
Flix6x 9628b73
Call the automation's timezone its recurrence timezone
Flix6x 7714775
Refuse a schedule automation that fixes its schedule's start
Flix6x 79814b3
Refuse a fixed belief time in schedule and report automations
Flix6x 64936ff
Move refusing fixed moments in schedule automations out to #2550
Flix6x File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.