mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Add callbacks to method calls
This commit is contained in:
parent
bd1b67e83b
commit
5cdf114fd5
@ -12,6 +12,7 @@ import html
|
||||
import urllib.request
|
||||
import glob
|
||||
import json
|
||||
from functools import wraps
|
||||
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
@ -25,7 +26,7 @@ from app.classes.minecraft.stats import Stats
|
||||
from app.classes.minecraft.mc_ping import ping, ping_bedrock
|
||||
from app.classes.models.servers import HelperServers, Servers
|
||||
from app.classes.models.server_stats import HelperServerStats
|
||||
from app.classes.models.management import HelpersManagement
|
||||
from app.classes.models.management import HelpersManagement, HelpersWebhooks
|
||||
from app.classes.models.users import HelperUsers
|
||||
from app.classes.models.server_permissions import PermissionsServers
|
||||
from app.classes.shared.console import Console
|
||||
@ -33,6 +34,7 @@ from app.classes.shared.helpers import Helpers
|
||||
from app.classes.shared.file_helpers import FileHelpers
|
||||
from app.classes.shared.null_writer import NullWriter
|
||||
from app.classes.shared.websocket_manager import WebSocketManager
|
||||
from app.classes.web.webhooks.webhook_factory import WebhookFactory
|
||||
|
||||
with redirect_stderr(NullWriter()):
|
||||
import psutil
|
||||
@ -165,6 +167,38 @@ class ServerInstance:
|
||||
self.stats_helper.server_crash_reset()
|
||||
self.stats_helper.set_update(False)
|
||||
|
||||
@staticmethod
|
||||
def callback(called_func):
|
||||
@wraps(called_func)
|
||||
def wrapper(*args, **kwargs):
|
||||
res = None
|
||||
try:
|
||||
res = called_func(*args, **kwargs)
|
||||
finally:
|
||||
events = WebhookFactory.get_monitored_events()
|
||||
if called_func.__name__ in events:
|
||||
server_webhooks = HelpersWebhooks.get_webhooks_by_server(
|
||||
args[0].server_id, True
|
||||
)
|
||||
for swebhook in server_webhooks:
|
||||
if called_func.__name__ in str(swebhook.trigger).split(","):
|
||||
webhook = HelpersWebhooks.get_webhook_by_id(swebhook.id)
|
||||
webhook_provider = WebhookFactory.create_provider(
|
||||
webhook["webhook_type"]
|
||||
)
|
||||
if res is not False:
|
||||
webhook_provider.send(
|
||||
server_name=args[0].name,
|
||||
title=webhook["name"],
|
||||
url=webhook["url"],
|
||||
message=webhook["body"],
|
||||
# color=webhook["color"],
|
||||
# TODO implement frontend color picker
|
||||
)
|
||||
return res
|
||||
|
||||
return wrapper
|
||||
|
||||
# **********************************************************************************
|
||||
# Minecraft Server Management
|
||||
# **********************************************************************************
|
||||
@ -332,6 +366,7 @@ class ServerInstance:
|
||||
logger.critical(f"Unable to write/access {self.server_path}")
|
||||
Console.critical(f"Unable to write/access {self.server_path}")
|
||||
|
||||
@callback
|
||||
def start_server(self, user_id, forge_install=False):
|
||||
if not user_id:
|
||||
user_lang = self.helper.get_setting("language")
|
||||
@ -775,6 +810,7 @@ class ServerInstance:
|
||||
if self.server_thread:
|
||||
self.server_thread.join()
|
||||
|
||||
@callback
|
||||
def stop_server(self):
|
||||
running = self.check_running()
|
||||
if not running:
|
||||
@ -882,6 +918,7 @@ class ServerInstance:
|
||||
self.last_rc = poll
|
||||
return False
|
||||
|
||||
@callback
|
||||
def send_command(self, command):
|
||||
if not self.check_running() and command.lower() != "start":
|
||||
logger.warning(f'Server not running, unable to send command "{command}"')
|
||||
@ -894,6 +931,7 @@ class ServerInstance:
|
||||
self.process.stdin.flush()
|
||||
return True
|
||||
|
||||
@callback
|
||||
def crash_detected(self, name):
|
||||
# clear the old scheduled watcher task
|
||||
self.server_scheduler.remove_job(f"c_{self.server_id}")
|
||||
@ -927,6 +965,7 @@ class ServerInstance:
|
||||
)
|
||||
return False
|
||||
|
||||
@callback
|
||||
def kill(self):
|
||||
logger.info(f"Terminating server {self.server_id} and all child processes")
|
||||
try:
|
||||
@ -1015,6 +1054,7 @@ class ServerInstance:
|
||||
f.write("eula=true")
|
||||
self.run_threaded_server(user_id)
|
||||
|
||||
@callback
|
||||
def backup_server(self):
|
||||
if self.settings["backup_path"] == "":
|
||||
logger.critical("Backup path is None. Canceling Backup!")
|
||||
@ -1229,6 +1269,7 @@ class ServerInstance:
|
||||
if f["path"].endswith(".zip")
|
||||
]
|
||||
|
||||
@callback
|
||||
def jar_update(self):
|
||||
self.stats_helper.set_update(True)
|
||||
update_thread = threading.Thread(
|
||||
|
Loading…
Reference in New Issue
Block a user