Skip to content

feat(agilepool): add Prometheus monitoring and task duration sampling support#69

Open
Bury-Lee wants to merge 9 commits into
Yiming1997:mainfrom
Bury-Lee:feature
Open

feat(agilepool): add Prometheus monitoring and task duration sampling support#69
Bury-Lee wants to merge 9 commits into
Yiming1997:mainfrom
Bury-Lee:feature

Conversation

@Bury-Lee

Copy link
Copy Markdown
Contributor
  • Add built-in Prometheus monitoring metrics, including pool runtime status and latency statistics for each stage of task execution
  • Add WithSampleRate configuration option and SetSampleRate method to support adjusting the monitoring reporting ratio
  • Implement automatic timestamp propagation via task Context, enabling automatic collection of duration data at each stage
  • Add Taker, a tool for periodically collecting pool status, along with custom collection callbacks
  • Add comprehensive test cases related to monitoring
  • Update the example program to demonstrate the usage workflow for Prometheus integration
  • Add Prometheus client dependency to go.mod and go.sum

Bury-Lee added 9 commits June 25, 2026 16:11
… support

- Add built-in Prometheus monitoring metrics, including pool runtime status and latency statistics for each stage of task execution
- Add WithSampleRate configuration option and SetSampleRate method to support adjusting the monitoring reporting ratio
- Implement automatic timestamp propagation via task Context, enabling automatic collection of duration data at each stage
- Add Taker, a tool for periodically collecting pool status, along with custom collection callbacks
- Add comprehensive test cases related to monitoring
- Update the example program to demonstrate the usage workflow for Prometheus integration
- Add Prometheus client dependency to go.mod and go.sum
…n of ct.ctx

Previously, worker.runTask directly modified ct.ctx field, causing
concurrent read/write races with pool.submit().

Now we create a new sendCtx chain and never mutate ct.ctx, ensuring
thread-safe context propagation while preserving all timing values
(SubmittedAt, EnqueuedAt, StartedAt, CompletedAt).
…fo field

Use a separate countInfo field as the statistics context instead of reusing
the passed-in ctx. This field is program-modifiable only and is updated
multiple times during task execution, but read exactly once for metric
collection before being discarded.
- Change `contextTask.countInfo` from bare `context.Context` to `*countInfo` struct with embedded `sync.Mutex` for thread-safe access
- Add nil-guard before locking in `submit()` to prevent panic when `contextTask` comes from `SubmitCtx` (countInfo not pre-initialised)
- Guard submit-time context stamping with `countInfo.mu.Lock/Unlock`
- Fix three `ct.countInfo = ctx` type mismatches → `ct.countInfo.Context = ctx` (NONBLOCK path, blocking fast path, and initial submit block)
- Update `worker.runTask` to use `ct.countInfo.Context` explicitly instead of relying on the promoted interface
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant