serverwatcher 4.7.1__tar.gz → 4.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {serverwatcher-4.7.1/src/serverwatcher.egg-info → serverwatcher-4.9}/PKG-INFO +1 -1
- {serverwatcher-4.7.1 → serverwatcher-4.9}/pyproject.toml +1 -1
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/watcher.py +22 -28
- {serverwatcher-4.7.1 → serverwatcher-4.9/src/serverwatcher.egg-info}/PKG-INFO +1 -1
- {serverwatcher-4.7.1 → serverwatcher-4.9}/LICENSE +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/README.md +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/setup.cfg +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/__init__.py +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/configclasses/__init__.py +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/configclasses/global_config.py +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/configclasses/messages.py +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/configclasses/watcher.py +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/defaultconfigs/global.yaml +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/defaultconfigs/messages.yaml +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/defaultconfigs/watcher.yaml +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher/validator.py +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher.egg-info/SOURCES.txt +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher.egg-info/dependency_links.txt +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher.egg-info/requires.txt +0 -0
- {serverwatcher-4.7.1 → serverwatcher-4.9}/src/serverwatcher.egg-info/top_level.txt +0 -0
|
@@ -25,7 +25,6 @@ validate_all()
|
|
|
25
25
|
class ServerWatcher:
|
|
26
26
|
def __init__(self):
|
|
27
27
|
|
|
28
|
-
# load configs
|
|
29
28
|
self.global_cfg = loadConfig(
|
|
30
29
|
"config/global.yaml",
|
|
31
30
|
"/defaultconfigs/global.yaml",
|
|
@@ -44,7 +43,6 @@ class ServerWatcher:
|
|
|
44
43
|
WatcherConfig
|
|
45
44
|
)
|
|
46
45
|
|
|
47
|
-
# initialize panels and servers
|
|
48
46
|
self.panel = Panel(
|
|
49
47
|
name=self.global_cfg.panel_name,
|
|
50
48
|
url=self.global_cfg.panel_url,
|
|
@@ -81,23 +79,27 @@ class ServerWatcher:
|
|
|
81
79
|
|
|
82
80
|
self.tz = ZoneInfo(self.global_cfg.timezone)
|
|
83
81
|
|
|
84
|
-
# utility
|
|
85
82
|
def fmt(self, template: str, **kwargs):
|
|
86
83
|
return template.format(prefix=self.messages.prefix, **kwargs)
|
|
87
84
|
|
|
85
|
+
def say(self, key, level="info", **fmt):
|
|
86
|
+
if not key:
|
|
87
|
+
return
|
|
88
|
+
text = self.fmt(key, **fmt)
|
|
89
|
+
getattr(self.log, level)(text)
|
|
90
|
+
|
|
88
91
|
def shutdown(self):
|
|
89
|
-
self.
|
|
92
|
+
self.say(self.messages.log_shutdown)
|
|
90
93
|
raise SystemExit
|
|
91
94
|
|
|
92
|
-
# restart logic
|
|
93
95
|
def restart_and_wait(self):
|
|
94
96
|
if self.cfg.schedule_control:
|
|
95
97
|
self.origin.disableSchedule(self.cfg.restart_soon_id)
|
|
96
98
|
self.server.restart()
|
|
97
|
-
self.
|
|
99
|
+
self.say(self.messages.restart_action_sent)
|
|
98
100
|
time.sleep(self.cfg.restart_wait_seconds)
|
|
99
101
|
|
|
100
|
-
self.
|
|
102
|
+
self.say(self.messages.log_status_check, level="warn")
|
|
101
103
|
alive = waitForOnline(
|
|
102
104
|
self.server,
|
|
103
105
|
timeout=self.cfg.restart_online_timeout,
|
|
@@ -105,12 +107,11 @@ class ServerWatcher:
|
|
|
105
107
|
)
|
|
106
108
|
|
|
107
109
|
if alive:
|
|
108
|
-
self.
|
|
109
|
-
self.
|
|
110
|
+
self.say(self.messages.server_back_online)
|
|
111
|
+
self.say(self.messages.server_back_online_broadcast)
|
|
110
112
|
else:
|
|
111
|
-
self.
|
|
113
|
+
self.say(self.messages.server_failed_restart, level="error")
|
|
112
114
|
|
|
113
|
-
# scheduled restart
|
|
114
115
|
def schedule_restart(self, minutes):
|
|
115
116
|
info = snapSchedule(minimumMinutes=minutes)
|
|
116
117
|
scheduled = info["scheduled"]
|
|
@@ -120,7 +121,6 @@ class ServerWatcher:
|
|
|
120
121
|
|
|
121
122
|
self.server.sendBroadcast(self.fmt(self.messages.broadcast_restart_at, time=time_str))
|
|
122
123
|
|
|
123
|
-
# minute_* callbacks
|
|
124
124
|
minute_callbacks = {
|
|
125
125
|
int(k.split("_")[1]): (
|
|
126
126
|
lambda msg=self.fmt(getattr(self.messages, k)):
|
|
@@ -130,7 +130,6 @@ class ServerWatcher:
|
|
|
130
130
|
if k.startswith("minute_")
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
# second_* callbacks
|
|
134
133
|
second_callbacks = {
|
|
135
134
|
int(k.split("_")[1]): (
|
|
136
135
|
lambda msg=self.fmt(getattr(self.messages, k)):
|
|
@@ -146,12 +145,11 @@ class ServerWatcher:
|
|
|
146
145
|
second_callbacks=second_callbacks,
|
|
147
146
|
)
|
|
148
147
|
|
|
149
|
-
# evaluation logic
|
|
150
148
|
def evaluate(self):
|
|
151
|
-
self.
|
|
149
|
+
self.say(self.messages.log_start)
|
|
152
150
|
|
|
153
151
|
if not validateAll(self.panel, self.server):
|
|
154
|
-
self.
|
|
152
|
+
self.say(self.messages.log_validation_fail, level="error")
|
|
155
153
|
self.shutdown()
|
|
156
154
|
|
|
157
155
|
self.server.refresh()
|
|
@@ -162,7 +160,6 @@ class ServerWatcher:
|
|
|
162
160
|
restart_reasons = []
|
|
163
161
|
no_restart_reasons = []
|
|
164
162
|
|
|
165
|
-
# pro-restart
|
|
166
163
|
if self.cfg.schedule_control and self.server.getSchedule(self.cfg.restart_soon_id)["is_active"]:
|
|
167
164
|
restart_reasons.append(self.messages.reason_restart_soon)
|
|
168
165
|
pro += self.cfg.weight_restart_soon
|
|
@@ -186,7 +183,6 @@ class ServerWatcher:
|
|
|
186
183
|
restart_reasons.append(self.fmt(self.messages.reason_tps, tps=snap.tps, threshold=self.cfg.tps_threshold))
|
|
187
184
|
pro += self.cfg.weight_tps
|
|
188
185
|
|
|
189
|
-
# anti-restart
|
|
190
186
|
if snap.uptime // 60 < 30:
|
|
191
187
|
no_restart_reasons.append(self.fmt(self.messages.reason_low_uptime, uptime=snap.uptime_formatted))
|
|
192
188
|
anti += self.cfg.weight_low_uptime
|
|
@@ -197,15 +193,14 @@ class ServerWatcher:
|
|
|
197
193
|
no_restart_reasons.append(self.fmt(self.messages.reason_players, verb=verb, count=snap.players, plural=plural))
|
|
198
194
|
anti += snap.players * self.cfg.weight_per_player
|
|
199
195
|
|
|
200
|
-
# logging
|
|
201
196
|
if restart_reasons:
|
|
202
|
-
self.
|
|
197
|
+
self.say(self.messages.pro_restart_splash, level="warn")
|
|
203
198
|
for r in restart_reasons:
|
|
204
199
|
self.log.warn(f"- {r}")
|
|
205
200
|
self.log.warn("\n")
|
|
206
201
|
|
|
207
202
|
if no_restart_reasons:
|
|
208
|
-
self.
|
|
203
|
+
self.say(self.messages.anti_restart_splash, level="warn")
|
|
209
204
|
for r in no_restart_reasons:
|
|
210
205
|
self.log.warn(f"{self.messages.bullet} {r}")
|
|
211
206
|
self.log.warn("\n")
|
|
@@ -215,27 +210,26 @@ class ServerWatcher:
|
|
|
215
210
|
|
|
216
211
|
gap = abs(pro - anti)
|
|
217
212
|
|
|
218
|
-
# decision
|
|
219
213
|
if pro == 0:
|
|
220
|
-
self.
|
|
214
|
+
self.say(self.messages.log_no_restart)
|
|
221
215
|
return
|
|
222
216
|
|
|
223
217
|
if pro > anti and snap.players == 0:
|
|
224
|
-
self.
|
|
218
|
+
self.say(self.messages.log_immediate_restart)
|
|
225
219
|
self.restart_and_wait()
|
|
226
220
|
return
|
|
227
221
|
|
|
228
|
-
self.
|
|
222
|
+
self.say(self.messages.log_scheduled)
|
|
229
223
|
|
|
230
224
|
if gap <= 2:
|
|
231
|
-
self.
|
|
225
|
+
self.say(self.messages.log_gap_low, level="warn", gap=gap)
|
|
232
226
|
self.schedule_restart(self.cfg.low_gap_minutes)
|
|
233
|
-
|
|
227
|
+
else:
|
|
228
|
+
self.say(self.messages.log_gap_high, level="warn", gap=gap)
|
|
234
229
|
self.schedule_restart(self.cfg.high_gap_minutes)
|
|
235
230
|
|
|
236
231
|
self.restart_and_wait()
|
|
237
232
|
|
|
238
|
-
# main loop
|
|
239
233
|
def run(self):
|
|
240
234
|
if self.global_cfg.clear_terminal:
|
|
241
235
|
clearTerminal()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|