Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update feature : Online players check #786

Open
1stian opened this issue Apr 22, 2016 · 19 comments
Open

Update feature : Online players check #786

1stian opened this issue Apr 22, 2016 · 19 comments

Comments

@1stian
Copy link

1stian commented Apr 22, 2016

Hi,

I would like to see a feature that checks for online players on the server before it starts the update. If there are players online. We can have a choice of letting them know it will be updated in 5 mins or so. Or just abort the update and recheck later.

I think this will be really nice to have.

This is not really a issue more like a feature request.
Thanks.

@dgibbs64
Copy link
Member

I agree that would be a nice idea. Should be possible however Im not sure how to implement this yet.

@UltimateByte
Copy link
Contributor

http://steamcommunity.com/groups/linuxgsm/discussions/0/364039531228165077/

Quotation from myself : "This would require to query the server and get the amount of players on it. I's an interesting idea but would be quite hard to do."

@UltimateByte UltimateByte changed the title Update feature Update feature : Online players check Apr 22, 2016
@1stian
Copy link
Author

1stian commented Apr 22, 2016

@UltimateByte @dgibbs64 Yes. Querying a server from a script is not the easiest thing to do I guess. Anyway... I can experiment a little. By creating something that will run your update script, when the server is empty.. if I even are able to do that at all..

Anyway I hope it will be implemented if you have time or can ofc :)

Thanks.

@UltimateByte
Copy link
Contributor

UltimateByte commented Apr 28, 2016

Once again, Cedar has a clever idea about this : using "stats" command.

4:20 - CedarLUG: How to get # of players in (half life) game [referencing the github discussion[:
4:21 - CedarLUG: length=$(wc -l log/console/fof-server-console.log | awk '{print $1}')
4:21 - CedarLUG: tmux send-keys -t fof-server C-a C-k status Enter
4:21 - CedarLUG: tail -n+${length} log/console/fof-server-console.log | grep player | grep humans | tail -1 | awk -F"humans" '{print $1}' | cut -d: -f2
4:21 - CedarLUG: Probably a better way, but that's my first pass.
4:22 - CedarLUG: Works for CSGO, TF2, Fistful of Frags, etc.
4:28 - CedarLUG: the length captures the current size of the log file.
4:28 - CedarLUG: The tmux command issues C-a first (to set the cursor at the front of the line)
4:28 - CedarLUG: Then C-k to kill to the end of the line
4:29 - CedarLUG: (In case there's cruft on the line as described once by jballou)
4:29 - CedarLUG: Then issues "status"
4:29 - CedarLUG: That dumps to the console log, so the next part pulls the number of humans on the server.
4:30 - CedarLUG: The "tail -n+${length}" grabs only the log content that's "grown" since the length was set.
4:30 - CedarLUG: That's so that you don't parse the whole big file.
4:30 - CedarLUG: But there is a chance that another status was issued, so take the last one (tail -1)
4:31 - CedarLUG: parse it for player (not needed, but I had it in there)
4:31 - CedarLUG: and then cut the part of the line before "human" but after "players :"
4:31 - CedarLUG: That's the number of players currently tapped in.
4:31 - CedarLUG: Ez.

@jaredballou
Copy link

I use SteamCondenser in my stuff, but for a basic rcon implementation (in Node.js but easy to read), see https://github.com/randunel/node-srcds-rcon - we may want to create a function for rcon commands and use that to send and receive data to game instances. Using command stuffing and log scraping seems like a hacky approach. If I have some time (ha ha), I might try to add something like this.

@jaredballou
Copy link

Also, there is this. I am using it to add these features to my forked gsquery.py:
https://github.com/Dasister/Source-Query-Class-Python/blob/master/QueryClass.py

@dgibbs64 dgibbs64 added type: feature request New feature or request Status: discussion and removed type: feature request New feature or request Type: feature labels Apr 1, 2018
@dgibbs64
Copy link
Member

Node-Gamedig is now supported. This feature should now be possible

@dgibbs64
Copy link
Member

#647 related

@dgibbs64 dgibbs64 self-assigned this Apr 7, 2019
@dgibbs64
Copy link
Member

Monitor has had a refactor and gamedig is better supported. This feature can now be developed for any game server that supports gamedig. However, will have to check results with bots

@dgibbs64
Copy link
Member

gamedig support is much better in linuxgsm now. I will finally be looking to implement this functionality.

@1stian
Copy link
Author

1stian commented Sep 24, 2021

gamedig support is much better in linuxgsm now. I will finally be looking to implement this functionality.

Oh wow! That would be awesome! Totally forgot about this... Been using LinuxGSM for years.. So this would be great! Thanks!

@dgibbs64
Copy link
Member

Oh wow! That would be awesome! Totally forgot about this... Been using LinuxGSM for years.. So this would be great! Thanks!
Yeah I forgot about this and I have been developing LinuxGSM for years 😄

@dgibbs64 dgibbs64 moved this to 📋 Backlog in LinuxGSM Backlog Feb 2, 2023
@dgibbs64 dgibbs64 moved this from 📋 Sentenced Issues to 🏗 In Progress in LinuxGSM Backlog Feb 28, 2024
@dgibbs64
Copy link
Member

So I am looking at this issue and so far I have gone with if players on the server then the server will not stop. This will cover all eventualities of stopping the server when a command is run. However the only issue is that an admin might WANT the server to stop even if players are still on the server. I am unsure how best to handle that

@MicLieg
Copy link
Contributor

MicLieg commented Feb 28, 2024

I think the most important thing is not to change the current default of stopping / restarting / updating the server even when players are connected to avoid breaking current setups.

So a new setting to choose whether to "force" / "wait for no players online" is probably needed. The default being to force stopping the server.

If an admin sets this to "wait for no players online" in the config, LinuxGSM users should be promoted when players are online to make sure they want to stop the server anyway. This behaviour should be overridable by adding an argument like ./gameserver restart force for automation.

This way, admins who want this functionality will also see any hints from the _default.cfg notifying them of breaking cronjobs if they decide to enable the feature.

Also it might be helpful to send alerts when stopping the server is delayed because of online players.

link #3676

@dgibbs64
Copy link
Member

dgibbs64 commented Feb 28, 2024

there will be a new var stoponlyifnoplayers="off" for admins to enable if they want.

I have just added some other functionality that if the server is blocked from restarting it will create a restart-request.lock file. When monitor is run it will check for this file and trigger a restart (if no players). This is useful if there is a daily restart cron that happens to run while players are on the server. It will ensure that the server will eventually be restarted.

Update will also only happen if no players are present. I expect as updates are released players will naturally drop off allowing the server to update itself without disturbing a running game.

I think adding force-restart and force-stop will also be needed.

Unsure on how to handle alerts currently but will give it some thought.

@MicLieg
Copy link
Contributor

MicLieg commented Feb 28, 2024

Sounds good!

I expect as updates are released players will naturally drop off allowing the server to update itself without disturbing a running game.

Perhaps this can also be achieved by adding a maxstopdelay var to the config, forcing the server to restart, stop or update after the desired period of time.

@dgibbs64
Copy link
Member

dgibbs64 commented Jun 16, 2024

So there a a few scenarios to this

  1. stop command will not stop the server if players are on the server
  2. restart command will postpone a restart of the server if players on the server (lock file is created). Monitor will check for an empty server and then force a restart.
  3. update command will not update if players are on the server (lock file is created). Monitor will check for an empty server and then force an update.

Edit: add timeout setting to force restart after X mintues

@MicLieg
Copy link
Contributor

MicLieg commented Jun 17, 2024

Tanks for your effort! @dgibbs64

I still think it might be useful to be able to set a grace period in the config, after which a restart, stop or update is forced even if players are connected. Otherwise, a daily restart will be impossible in some cases, as some players will stay AFK/online overnight.

@dgibbs64
Copy link
Member

I agree I will add that functionality

@dgibbs64 dgibbs64 removed this from the v24.3.0 milestone Sep 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: 🏗 In Progress
Development

When branches are created from issues, their pull requests are automatically linked.

5 participants