mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-01 09:32:35 +02:00

Some checks are pending
Docker Image CI (socket-proxy) / build (push) Waiting to run
* refactor: simplify io code and make utils module independent * fix(docker): agent and socket-proxy docker event flushing with modified reverse proxy handler * refactor: remove unused code * refactor: remove the use of logging module in most code * refactor: streamline domain mismatch check in certState function * tweak: use ecdsa p-256 for autocert * fix(tests): update health check tests for invalid host and add case for port in host * feat(acme): custom acme directory * refactor: code refactor and improved context and error handling * tweak: optimize memory usage under load * fix(oidc): restore old user matching behavior * docs: add ChatGPT assistant to README --------- Co-authored-by: yusing <yusing@6uo.me>
45 lines
851 B
Go
45 lines
851 B
Go
package utils
|
|
|
|
import (
|
|
"time"
|
|
|
|
"go.uber.org/atomic"
|
|
)
|
|
|
|
var (
|
|
TimeNow = DefaultTimeNow
|
|
shouldCallTimeNow atomic.Bool
|
|
timeNowTicker = time.NewTicker(shouldCallTimeNowInterval)
|
|
lastTimeNow = time.Now()
|
|
)
|
|
|
|
const shouldCallTimeNowInterval = 100 * time.Millisecond
|
|
|
|
func MockTimeNow(t time.Time) {
|
|
TimeNow = func() time.Time {
|
|
return t
|
|
}
|
|
}
|
|
|
|
// DefaultTimeNow is a time.Now wrapper that reduces the number of calls to time.Now
|
|
// by caching the result and only allow calling time.Now when the ticker fires.
|
|
//
|
|
// Returned value may have +-100ms error.
|
|
func DefaultTimeNow() time.Time {
|
|
if shouldCallTimeNow.Load() {
|
|
lastTimeNow = time.Now()
|
|
shouldCallTimeNow.Store(false)
|
|
}
|
|
return lastTimeNow
|
|
}
|
|
|
|
func init() {
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-timeNowTicker.C:
|
|
shouldCallTimeNow.Store(true)
|
|
}
|
|
}
|
|
}()
|
|
}
|