monitor.go 566 B

12345678910111213141516171819202122232425262728293031
  1. package taskmonitor
  2. import (
  3. "time"
  4. F "github.com/sagernet/sing/common/format"
  5. "github.com/sagernet/sing/common/logger"
  6. )
  7. type Monitor struct {
  8. logger logger.Logger
  9. timeout time.Duration
  10. timer *time.Timer
  11. }
  12. func New(logger logger.Logger, timeout time.Duration) *Monitor {
  13. return &Monitor{
  14. logger: logger,
  15. timeout: timeout,
  16. }
  17. }
  18. func (m *Monitor) Start(taskName ...any) {
  19. m.timer = time.AfterFunc(m.timeout, func() {
  20. m.logger.Warn(F.ToString(taskName...), " take too much time to finish!")
  21. })
  22. }
  23. func (m *Monitor) Finish() {
  24. m.timer.Stop()
  25. }