Make consumers optional: a URL enables its mode, empty disables it
OLLAMA_URL and COMFY_URL no longer have defaults; each consumer (listener, client, startup probe, lock participation) is enabled by setting its URL and disabled by leaving it empty. At least one must be set. Ollama-only mode is a pure pass-through; ComfyUI-only mode skips the unload and warm-reload steps. /metrics is now served on both listeners. This is the extension pattern for future consumers such as local game detection.
This commit is contained in:
+48
-20
@@ -180,6 +180,14 @@ func serviceCommand(configPath string, args []string) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
// orDisabled renders an empty URL as "disabled" for the startup dump.
|
||||
func orDisabled(url string) string {
|
||||
if url == "" {
|
||||
return "disabled"
|
||||
}
|
||||
return url
|
||||
}
|
||||
|
||||
func run(ctx context.Context, cfg config.Config, log *slog.Logger, logOut io.Writer, isService bool) error {
|
||||
// The startup line carries the version and every setting and is emitted
|
||||
// at WARN so it is visible even with the default (quiet) log level.
|
||||
@@ -187,8 +195,8 @@ func run(ctx context.Context, cfg config.Config, log *slog.Logger, logOut io.Wri
|
||||
"version", version,
|
||||
"listen_ollama", cfg.ListenOllama,
|
||||
"listen_comfy", cfg.ListenComfy,
|
||||
"ollama_url", cfg.OllamaURL,
|
||||
"comfy_url", cfg.ComfyURL,
|
||||
"ollama_url", orDisabled(cfg.OllamaURL),
|
||||
"comfy_url", orDisabled(cfg.ComfyURL),
|
||||
"unload_timeout", cfg.UnloadTimeout,
|
||||
"job_timeout", cfg.JobTimeout,
|
||||
"llm_wait_timeout", cfg.LLMWaitTimeout,
|
||||
@@ -215,13 +223,20 @@ func run(ctx context.Context, cfg config.Config, log *slog.Logger, logOut io.Wri
|
||||
)
|
||||
|
||||
lk := lock.New(log)
|
||||
ollamaClient, err := ollama.New(cfg.OllamaURL, log)
|
||||
if err != nil {
|
||||
return err
|
||||
// Each consumer is enabled by setting its URL; a disabled consumer gets
|
||||
// no client, no listener and no probe.
|
||||
var ollamaClient *ollama.Client
|
||||
var err error
|
||||
if cfg.OllamaURL != "" {
|
||||
if ollamaClient, err = ollama.New(cfg.OllamaURL, log); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
comfyClient, err := comfy.New(cfg.ComfyURL, log)
|
||||
if err != nil {
|
||||
return err
|
||||
var comfyClient *comfy.Client
|
||||
if cfg.ComfyURL != "" {
|
||||
if comfyClient, err = comfy.New(cfg.ComfyURL, log); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
srv, err := proxy.New(proxy.Config{
|
||||
@@ -253,22 +268,34 @@ func run(ctx context.Context, cfg config.Config, log *slog.Logger, logOut io.Wri
|
||||
return err
|
||||
}
|
||||
|
||||
// Probe both upstreams once; failure is logged, not fatal.
|
||||
// Probe the enabled upstreams once; failure is logged, not fatal.
|
||||
probeCtx, probeCancel := context.WithTimeout(ctx, cfg.ProbeTimeout)
|
||||
if err := ollamaClient.Probe(probeCtx); err != nil {
|
||||
log.Warn("ollama probe failed", "url", cfg.OllamaURL, "err", err)
|
||||
if ollamaClient != nil {
|
||||
if err := ollamaClient.Probe(probeCtx); err != nil {
|
||||
log.Warn("ollama probe failed", "url", cfg.OllamaURL, "err", err)
|
||||
}
|
||||
}
|
||||
if err := comfyClient.Probe(probeCtx); err != nil {
|
||||
log.Warn("comfy probe failed", "url", cfg.ComfyURL, "err", err)
|
||||
if comfyClient != nil {
|
||||
if err := comfyClient.Probe(probeCtx); err != nil {
|
||||
log.Warn("comfy probe failed", "url", cfg.ComfyURL, "err", err)
|
||||
}
|
||||
}
|
||||
probeCancel()
|
||||
|
||||
ollamaSrv := &http.Server{Addr: cfg.ListenOllama, Handler: srv.OllamaHandler()}
|
||||
comfySrv := &http.Server{Addr: cfg.ListenComfy, Handler: srv.ComfyHandler()}
|
||||
var servers []*http.Server
|
||||
if ollamaClient != nil {
|
||||
servers = append(servers, &http.Server{Addr: cfg.ListenOllama, Handler: srv.OllamaHandler()})
|
||||
log.Warn("listening", "consumer", "ollama", "addr", cfg.ListenOllama)
|
||||
}
|
||||
if comfyClient != nil {
|
||||
servers = append(servers, &http.Server{Addr: cfg.ListenComfy, Handler: srv.ComfyHandler()})
|
||||
log.Warn("listening", "consumer", "comfy", "addr", cfg.ListenComfy)
|
||||
}
|
||||
|
||||
errCh := make(chan error, 2)
|
||||
go func() { errCh <- ollamaSrv.ListenAndServe() }()
|
||||
go func() { errCh <- comfySrv.ListenAndServe() }()
|
||||
errCh := make(chan error, len(servers))
|
||||
for _, s := range servers {
|
||||
go func(s *http.Server) { errCh <- s.ListenAndServe() }(s)
|
||||
}
|
||||
|
||||
if cfg.AutoUpdate {
|
||||
go updateLoop(ctx, cfg, log, lk, isService)
|
||||
@@ -285,8 +312,9 @@ func run(ctx context.Context, cfg config.Config, log *slog.Logger, logOut io.Wri
|
||||
|
||||
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), cfg.ShutdownTimeout)
|
||||
defer shutdownCancel()
|
||||
ollamaSrv.Shutdown(shutdownCtx)
|
||||
comfySrv.Shutdown(shutdownCtx)
|
||||
for _, s := range servers {
|
||||
s.Shutdown(shutdownCtx)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user