Documentation
¶
Overview ¶
Package appsleep stops opted-in apps that have had no requests for a while and wakes them on the next request, so idle apps cost no memory or CPU.
Index ¶
- Constants
- func Blocker(svc *store.DesiredService) string
- func Sleep(ctx context.Context, sleep interface{ ... }, apps Apps, nudger Nudger, ...) error
- func Wake(ctx context.Context, sleep interface{ ... }, apps Apps, nudger Nudger, ...) (bool, error)
- type Apps
- type Nudger
- type Scheduler
- type SleepStore
- type Traffic
Constants ¶
const BlockedPinnedPort = "pinned_port"
BlockedPinnedPort marks an app whose pinned host port bypasses the ingress, so nothing could wake it and its activity could not be seen.
const DefaultInterval = time.Minute
DefaultInterval is how often idle apps are looked for.
Variables ¶
This section is empty.
Functions ¶
func Blocker ¶
func Blocker(svc *store.DesiredService) string
Blocker returns why svc must not sleep, or "" when it can.
func Sleep ¶
func Sleep(ctx context.Context, sleep interface { SetAppSleeping(ctx context.Context, serviceName string, sleeping bool, now time.Time) error }, apps Apps, nudger Nudger, name string, now time.Time) error
Sleep stops name now and marks it asleep, rolling the flag back if the stop fails.
func Wake ¶
func Wake(ctx context.Context, sleep interface { SetAppSleeping(ctx context.Context, serviceName string, sleeping bool, now time.Time) error GetAppSleep(ctx context.Context, serviceName string) (store.AppSleep, error) }, apps Apps, nudger Nudger, name string, now time.Time) (bool, error)
Wake starts a sleeping app and resets its idle clock. It reports whether the app was actually asleep, so repeated wake requests are harmless.
Types ¶
type Apps ¶
type Apps interface {
GetDesiredService(ctx context.Context, name string) (*store.DesiredService, error)
UpdateServiceSuspended(ctx context.Context, name string, suspended bool) error
}
Apps is the slice of the app store the scheduler needs.
type Scheduler ¶
type Scheduler struct {
Sleep SleepStore
Apps Apps
Traffic Traffic
Nudger Nudger
Logger *slog.Logger
Now func() time.Time
}
Scheduler puts idle opted-in apps to sleep.