Docker auto-scale and asleep motd status (#488)

This commit is contained in:
Lenart Kos
2025-12-20 20:31:34 +01:00
committed by GitHub
parent b67d0985dc
commit 4dff00dda9
18 changed files with 885 additions and 165 deletions
+17 -11
View File
@@ -38,17 +38,17 @@ type dockerSwarmWatcherImpl struct {
client *client.Client
}
func (w *dockerSwarmWatcherImpl) makeWakerFunc(_ *routableService) ScalerFunc {
func (w *dockerSwarmWatcherImpl) makeWakerFunc(_ *routableService) WakerFunc {
if !w.config.autoScaleUp {
return nil
}
return func(ctx context.Context) error {
return func(ctx context.Context) (string, error) {
logrus.Fatal("Auto scale up is not yet supported for docker swarm")
return nil
return "", nil
}
}
func (w *dockerSwarmWatcherImpl) makeSleeperFunc(_ *routableService) ScalerFunc {
func (w *dockerSwarmWatcherImpl) makeSleeperFunc(_ *routableService) SleeperFunc {
if !w.config.autoScaleDown {
return nil
}
@@ -89,10 +89,12 @@ func (w *dockerSwarmWatcherImpl) Start(ctx context.Context) error {
for _, s := range initialServices {
serviceMap[s.externalServiceName] = s
wakerFunc := w.makeWakerFunc(s)
sleeperFunc := w.makeSleeperFunc(s)
if s.externalServiceName != "" {
Routes.CreateMapping(s.externalServiceName, s.containerEndpoint, w.makeWakerFunc(s), w.makeSleeperFunc(s))
Routes.CreateMapping(s.externalServiceName, s.containerEndpoint, wakerFunc, sleeperFunc, "")
} else {
Routes.SetDefaultRoute(s.containerEndpoint)
Routes.SetDefaultRoute(s.containerEndpoint, wakerFunc, sleeperFunc, "")
}
}
@@ -111,18 +113,22 @@ func (w *dockerSwarmWatcherImpl) Start(ctx context.Context) error {
if oldRs, ok := serviceMap[rs.externalServiceName]; !ok {
serviceMap[rs.externalServiceName] = rs
logrus.WithField("routableService", rs).Debug("ADD")
wakerFunc := w.makeWakerFunc(rs)
sleeperFunc := w.makeSleeperFunc(rs)
if rs.externalServiceName != "" {
Routes.CreateMapping(rs.externalServiceName, rs.containerEndpoint, w.makeWakerFunc(rs), w.makeSleeperFunc(rs))
Routes.CreateMapping(rs.externalServiceName, rs.containerEndpoint, wakerFunc, sleeperFunc, "")
} else {
Routes.SetDefaultRoute(rs.containerEndpoint)
Routes.SetDefaultRoute(rs.containerEndpoint, wakerFunc, sleeperFunc, "")
}
} else if oldRs.containerEndpoint != rs.containerEndpoint {
serviceMap[rs.externalServiceName] = rs
wakerFunc := w.makeWakerFunc(rs)
sleeperFunc := w.makeSleeperFunc(rs)
if rs.externalServiceName != "" {
Routes.DeleteMapping(rs.externalServiceName)
Routes.CreateMapping(rs.externalServiceName, rs.containerEndpoint, w.makeWakerFunc(rs), w.makeSleeperFunc(rs))
Routes.CreateMapping(rs.externalServiceName, rs.containerEndpoint, wakerFunc, sleeperFunc, "")
} else {
Routes.SetDefaultRoute(rs.containerEndpoint)
Routes.SetDefaultRoute(rs.containerEndpoint, wakerFunc, sleeperFunc, "")
}
logrus.WithFields(logrus.Fields{"old": oldRs, "new": rs}).Debug("UPDATE")
}
@@ -134,7 +140,7 @@ func (w *dockerSwarmWatcherImpl) Start(ctx context.Context) error {
if rs.externalServiceName != "" {
Routes.DeleteMapping(rs.externalServiceName)
} else {
Routes.SetDefaultRoute("")
Routes.SetDefaultRoute("", nil, nil, "")
}
logrus.WithField("routableService", rs).Debug("DELETE")
}