mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Merge branch 'feature/backup-echo' into 'dev'
Add option to run command before backup See merge request crafty-controller/crafty-4!536
This commit is contained in:
commit
54888ac8e9
@ -1,7 +1,7 @@
|
||||
# Changelog
|
||||
## --- [4.0.20] - 2022/TBD
|
||||
### New features
|
||||
TBD
|
||||
- Add option to run command before backup. ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/536))
|
||||
### Bug fixes
|
||||
- Fix local java server imports. ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/529))
|
||||
- Fix Schedule Restore | Add Backup Config Preservation. ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/533))
|
||||
|
@ -164,9 +164,18 @@ class ManagementController:
|
||||
excluded_dirs: list = None,
|
||||
compress: bool = False,
|
||||
shutdown: bool = False,
|
||||
before: str = "",
|
||||
after: str = "",
|
||||
):
|
||||
return self.management_helper.set_backup_config(
|
||||
server_id, backup_path, max_backups, excluded_dirs, compress, shutdown
|
||||
server_id,
|
||||
backup_path,
|
||||
max_backups,
|
||||
excluded_dirs,
|
||||
compress,
|
||||
shutdown,
|
||||
before,
|
||||
after,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
|
@ -116,6 +116,8 @@ class Backups(BaseModel):
|
||||
server_id = ForeignKeyField(Servers, backref="backups_server")
|
||||
compress = BooleanField(default=False)
|
||||
shutdown = BooleanField(default=False)
|
||||
before = CharField(default="")
|
||||
after = CharField(default="")
|
||||
|
||||
class Meta:
|
||||
table_name = "backups"
|
||||
@ -343,6 +345,8 @@ class HelpersManagement:
|
||||
"server_id": row.server_id_id,
|
||||
"compress": row.compress,
|
||||
"shutdown": row.shutdown,
|
||||
"before": row.before,
|
||||
"after": row.after,
|
||||
}
|
||||
except IndexError:
|
||||
conf = {
|
||||
@ -352,6 +356,8 @@ class HelpersManagement:
|
||||
"server_id": server_id,
|
||||
"compress": False,
|
||||
"shutdown": False,
|
||||
"before": "",
|
||||
"after": "",
|
||||
}
|
||||
return conf
|
||||
|
||||
@ -367,6 +373,8 @@ class HelpersManagement:
|
||||
excluded_dirs: list = None,
|
||||
compress: bool = False,
|
||||
shutdown: bool = False,
|
||||
before: str = "",
|
||||
after: str = "",
|
||||
):
|
||||
logger.debug(f"Updating server {server_id} backup config with {locals()}")
|
||||
if Backups.select().where(Backups.server_id == server_id).exists():
|
||||
@ -379,6 +387,8 @@ class HelpersManagement:
|
||||
"server_id": server_id,
|
||||
"compress": False,
|
||||
"shutdown": False,
|
||||
"before": "",
|
||||
"after": "",
|
||||
}
|
||||
new_row = True
|
||||
if max_backups is not None:
|
||||
@ -388,6 +398,8 @@ class HelpersManagement:
|
||||
conf["excluded_dirs"] = dirs_to_exclude
|
||||
conf["compress"] = compress
|
||||
conf["shutdown"] = shutdown
|
||||
conf["before"] = before
|
||||
conf["after"] = after
|
||||
if not new_row:
|
||||
with self.database.atomic():
|
||||
if backup_path is not None:
|
||||
|
@ -1024,7 +1024,17 @@ class ServerInstance:
|
||||
)
|
||||
time.sleep(3)
|
||||
conf = HelpersManagement.get_backup_config(self.server_id)
|
||||
if conf["before"]:
|
||||
if self.check_running():
|
||||
logger.debug(
|
||||
"Found running server and send command option. Sending command"
|
||||
)
|
||||
self.send_command(conf["before"])
|
||||
|
||||
if conf["shutdown"]:
|
||||
if conf["before"]:
|
||||
# pause to let people read message.
|
||||
time.sleep(5)
|
||||
logger.info(
|
||||
"Found shutdown preference. Delaying"
|
||||
+ "backup start. Shutting down server."
|
||||
@ -1105,6 +1115,14 @@ class ServerInstance:
|
||||
self.run_threaded_server(HelperUsers.get_user_id_by_name("system"))
|
||||
time.sleep(3)
|
||||
self.last_backup_failed = False
|
||||
if conf["after"]:
|
||||
if self.check_running():
|
||||
logger.debug(
|
||||
"Found running server and send command option. Sending command"
|
||||
)
|
||||
self.send_command(conf["after"])
|
||||
# pause to let people read message.
|
||||
time.sleep(5)
|
||||
except:
|
||||
logger.exception(
|
||||
f"Failed to create backup of server {self.name} (ID {self.server_id})"
|
||||
|
@ -1682,6 +1682,8 @@ class PanelHandler(BaseHandler):
|
||||
compress = self.get_argument("compress", False)
|
||||
shutdown = self.get_argument("shutdown", False)
|
||||
check_changed = self.get_argument("changed")
|
||||
before = self.get_argument("backup_before", "")
|
||||
after = self.get_argument("backup_after", "")
|
||||
if str(check_changed) == str(1):
|
||||
checked = self.get_body_arguments("root_path")
|
||||
else:
|
||||
@ -1705,6 +1707,8 @@ class PanelHandler(BaseHandler):
|
||||
excluded_dirs=checked,
|
||||
compress=bool(compress),
|
||||
shutdown=bool(shutdown),
|
||||
before=before,
|
||||
after=after,
|
||||
)
|
||||
|
||||
self.controller.management.add_to_audit_log(
|
||||
|
@ -107,6 +107,40 @@
|
||||
translate('serverBackups', 'shutdown', data['lang']) }}
|
||||
{% end %}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="command-check" class="form-check-label ml-4 mb-4"></label>
|
||||
{% if data['backup_config']['before'] %}
|
||||
<input type="checkbox" class="form-check-input" id="before-check" name="before-check" checked>Run
|
||||
Command Before Backup
|
||||
<br>
|
||||
<input type="text" class="form-control" name="backup_before" id="backup_before"
|
||||
value="{{ data['backup_config']['before'] }}" placeholder="We enter the / for you"
|
||||
style="display: inline-block;">
|
||||
{% else %}
|
||||
<input type="checkbox" class="form-check-input" id="before-check" name="before-check">Run Command
|
||||
Before Backup
|
||||
<br>
|
||||
<input type="text" class="form-control" name="backup_before" id="backup_before" value=""
|
||||
placeholder="We enter the / for you." style="display: none;">
|
||||
{% end %}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="command-check" class="form-check-label ml-4 mb-4"></label>
|
||||
{% if data['backup_config']['after'] %}
|
||||
<input type="checkbox" class="form-check-input" id="after-check" name="after-check" checked>Run
|
||||
Command After Backup
|
||||
<br>
|
||||
<input type="text" class="form-control" name="backup_after" id="backup_after"
|
||||
value="{{ data['backup_config']['after'] }}" placeholder="We enter the / for you"
|
||||
style="display: inline-block;">
|
||||
{% else %}
|
||||
<input type="checkbox" class="form-check-input" id="after-check" name="after-check">Run Command
|
||||
Before Backup
|
||||
<br>
|
||||
<input type="text" class="form-control" name="backup_after" id="backup_after" value=""
|
||||
placeholder="We enter the / for you." style="display: none;">
|
||||
{% end %}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="server">{{ translate('serverBackups', 'exclusionsTitle', data['lang']) }} <small> - {{
|
||||
translate('serverBackups', 'excludedChoose', data['lang']) }}</small></label>
|
||||
@ -344,6 +378,22 @@
|
||||
});
|
||||
}
|
||||
|
||||
$("#before-check").on("click", function () {
|
||||
if ($("#before-check:checked").val()) {
|
||||
$("#backup_before").css("display", "inline-block");
|
||||
} else {
|
||||
$("#backup_before").css("display", "none");
|
||||
$("#backup_before").val("");
|
||||
}
|
||||
});
|
||||
$("#after-check").on("click", function () {
|
||||
if ($("#after-check:checked").val()) {
|
||||
$("#backup_after").css("display", "inline-block");
|
||||
} else {
|
||||
$("#backup_after").css("display", "none");
|
||||
$("#backup_after").val("");
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function () {
|
||||
try {
|
||||
|
18
app/migrations/20230120_backup_command.py
Normal file
18
app/migrations/20230120_backup_command.py
Normal file
@ -0,0 +1,18 @@
|
||||
# Generated by database migrator
|
||||
import peewee
|
||||
|
||||
|
||||
def migrate(migrator, database, **kwargs):
|
||||
migrator.add_columns("backups", before=peewee.CharField(default=""))
|
||||
migrator.add_columns("backups", after=peewee.CharField(default=""))
|
||||
"""
|
||||
Write your migrations here.
|
||||
"""
|
||||
|
||||
|
||||
def rollback(migrator, database, **kwargs):
|
||||
migrator.drop_columns("backups", ["before"])
|
||||
migrator.drop_columns("backups", ["after"])
|
||||
"""
|
||||
Write your rollback migrations here.
|
||||
"""
|
Loading…
Reference in New Issue
Block a user