Closed
Description
If there hasn't been an active connection to code-server in X minutes, we should exit with status 0.
This would replace the heartbeat file (#1115) as a more friendly option.
If there hasn't been an active connection to code-server in X minutes, we should exit with status 0.
This would replace the heartbeat file (#1115) as a more friendly option.
Activity
antofthy commentedon May 16, 2020
No it does NOT replace the task of the heartbeat.
The heartbeat to an external file, allows an external monitor to shutdown the docker instance, not shutdown code-server itself. In fact the monitor itself may not even be running on the same machine in a multi-node docker environment.
There can be a lot more to the docker instance than code-server itself, such as an apache web server, or a java script node the user is developing in the isolated environment. A way to determine if the user is still active (via code-server) is an integral part of this, and would be a vastly harder thing to monitor without the availability of the heartbeat file.
In code-server v1 the file was actually a log that updated each time the web client requested an update, letting us know if the user still had a connected web server or not. While the web client was connected (even if the user was away from their terminal), the heartbeat would still update. So in a way heartbeat does not report 'user idle' status but 'connected' status.
So looking at it that way "heartbeat" is slightly different to the true meaning of "idle" as in the user is not really active (making changes, clicks, or typing).
antofthy commentedon May 16, 2020
In a more general way. You may not actually want code-server to just shutdown, when not used for a certain length of time. It is only one possible action, in that situation. As mentioned in own case we want to shutdown the docker instance, and not code-server itself.
Now a -idle-timeout is still a good option... And I am certain many people would like to make use of such an option, especially when not using docker containers. But it is not the one needed in my setup!
TLDR... --idle-timeout is a good addition, but it is not a replacement for heartbeat.
nhooyr commentedon May 17, 2020
@antofthy So instead of checking the heart beat file, you'd just check to see whether
code-server
or the container has exited successfully.Can you not do that?
antofthy commentedon May 18, 2020
Yes I could, but not as simply...
You can only look at processes from the same node in a docker cluster. As such the check would need to be done by each and every docker node.
You then have to parse the process list, which is always messy, and error prone thing to do.
You also lose information on how idle each container is, which can be important when looking for a time to upgrade the system in some way.
For example with heart beat I can do the following on the master node of cluster, for all containers (docker services)...
This shows at this moment I have 3 users using the system, all with a 'web-dev' code server environment (with apache, nodejs software) and they are all active (used system in last 5 minutes)
and only 2 docker nodes are in use at this time (elf, and elf1) That same program also is the one that will shutdown idle docker services after being idle for an hour, when called by cron with the appropriate options.
Time its been idle feedback is lost without heartbeat.
heartbeat is a LOT more versitile!
antofthy commentedon May 18, 2020
Why the push to get rid of heartbeat. Is it causing some problem I don't know about?
nhooyr commentedon May 18, 2020
No push, less features the better.
I understand your concerns, we'll keep both! 🎉
stale commentedon Oct 27, 2021
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no activity occurs in the next 5 days.
michaelosthege commentedon Nov 24, 2021
@nhooyr your last response sounded like you were going to add an
--idle-timeout
option, but the current release 3.12.0 only has the heartbeat mechanism, right?For running
code-server
in a Docker container, the current situation is very inconvenient: A healthcheck can determine that the age of the heartbeat file exceeds a threshold, but since the main process in a Docker container (PID 1) ignores signals, a healthcheck script has no way to exit thecode-server
.So IIUC there's no easy way to stop the Docker container "from the inside", but an external supervisor is needed. Please advise if there's a way.
code-asher commentedon Nov 24, 2021
14 remaining items