Skip to content

Async response with waiting screen #782

Description

@Keeehi

Hi,
it seems that on my instance of docker, it takes about 3 seconds for container to start running.
2026-01-11T23:11:35.299400312Z 11:11PM INF slog-gin@v1.15.1/middleware.go:265 Incoming request request.time=2026-01-11T23:11:32.213Z request.method=GET request.host=sablier:10000 request.path=/api/strategies/dynamic request.query="display_name=Adminer&group=adminer&refresh_frequency=1s&session_duration=1h" request.params=map[] request.route=/api/strategies/dynamic request.ip=172.16.8.10 request.referer="" request.length=0 response.time=2026-01-11T23:11:35.292Z response.latency=3.079264375s response.status=200 response.length=6321 id=305dcdc9-6a5c-457d-b5ad-f154aebffed1
If I run
docker events --filter 'container=adminer' --format '{{.TimeNano}} {{.Action}}'
then the event start shows in this log with timestamp that is a little bit before the response is sent.

Because the response is "blocked" for 3 seconds, I see white screen for 3 seconds and waiting screen loads after that. Any subsequent requests are taking 4ms until container is ready. Therfore check, if the container is ready is quite fast. The problem is call for the start.

I assume, that sablier works like this:

if (container is healthy) {
    pass the request
    done
}

if (container is stopped) {
    start the container
    wait for information from docker that container was started
}

send waiting screen as response

Would it be possible to move send waiting screen as response before if (container is stopped)? Because if the container is not healthy, we always want to display waiting screen. Moving it forward would speed up the response time and therfore shorten the blank white screen time.
My assumption is that in the current version, waiting screen response is waiting for start command to finish in order to get the information if the attempt of container start was successfull. But I would rather see wating screen without this information than blank white screen. Information, if the start of the container was successfull or not could be displayed, when available, on some subsequent response waiting screens.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions