From 3f4d23291019f889e00c4c32a503199d8ca320c5 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 12 Oct 2022 23:29:20 -0400 Subject: [PATCH 01/26] Add log filtering known bug: when adding more than 4 items to js array --- app/classes/web/ajax_handler.py | 2 +- app/frontend/templates/panel/server_logs.html | 107 +++++++++++++++++- app/translations/en_EN.json | 4 +- 3 files changed, 107 insertions(+), 6 deletions(-) diff --git a/app/classes/web/ajax_handler.py b/app/classes/web/ajax_handler.py index c0c49b9a..a90b4141 100644 --- a/app/classes/web/ajax_handler.py +++ b/app/classes/web/ajax_handler.py @@ -76,7 +76,7 @@ class AjaxHandler(BaseHandler): line = re.sub("(\033\\[(0;)?[0-9]*[A-z]?(;[0-9])?m?)", "", line) line = re.sub("[A-z]{2}\b\b", "", line) line = self.helper.log_colors(html.escape(line)) - self.write(f"{line}
") + self.write(f"{line}
") # self.write(d.encode("utf-8")) except Exception as e: diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 8ab272b3..1a7adb1f 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -42,10 +42,17 @@
+ style="width: 100%; font-size: .8em; padding: 5px 10px; border: 1px solid var(--outline); background-color:var(--card-banner-bg);height:500px; overflow: scroll;">

+ + +
+
+

{{ translate('serverDetails', 'filterList', data['lang']) }}

+ +
@@ -55,14 +62,30 @@ - + + {% end %} {% block js %} diff --git a/app/translations/en_EN.json b/app/translations/en_EN.json index 88a76115..4309b28a 100644 --- a/app/translations/en_EN.json +++ b/app/translations/en_EN.json @@ -360,7 +360,9 @@ "serverDetails": "Server Details", "terminal": "Terminal", "metrics": "Metrics", - "reset": "Reset Scroll" + "reset": "Reset Scroll", + "filter": "Filter Logs", + "filterList": "Filtered Words" }, "serverFiles": { "clickUpload": "Click here to select your files", From ec746d2131b93811c7e99bbabac0016976dcd1cd Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 12 Oct 2022 23:55:25 -0400 Subject: [PATCH 02/26] Fix duplicate word bug Fix delete bug --- app/frontend/templates/panel/server_logs.html | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 1a7adb1f..6091eed9 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -132,13 +132,17 @@ //Use textContent for including hidden elements for (var i = 0; i < cards.length; i++) { if (words.length > 0) { + let flag = false; for (var k = 0; k < words.length; k++) { - if (!cards[i].textContent.toLowerCase().includes(words[k])) { - cards[i].classList.remove("is-hidden"); - } else { - cards[i].classList.add("is-hidden"); + if (cards[i].textContent.toLowerCase().includes(words[k])) { + flag = true; } } + if (!flag) { + cards[i].classList.remove("is-hidden"); + } else { + cards[i].classList.add("is-hidden"); + } } else { cards[i].classList.remove("is-hidden"); } @@ -187,7 +191,8 @@ function deleteItem(item) { safe_item = sanitize(item); - words.splice(words.indexOf(item)); + console.log(item) + words.splice(words.indexOf(item), words.indexOf(item)); $("#" + safe_item.replaceAll(" ", "-")).remove(); liveSearch(); localStorage.setItem("words", JSON.stringify(words)) From 3b813a6849dbf85e86d761d9199e0616dfa2c5e5 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 13 Oct 2022 00:01:53 -0400 Subject: [PATCH 03/26] Fix splice error --- app/frontend/templates/panel/server_logs.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 6091eed9..210c52ea 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -192,7 +192,7 @@ function deleteItem(item) { safe_item = sanitize(item); console.log(item) - words.splice(words.indexOf(item), words.indexOf(item)); + words.splice(words.indexOf(item), 1); $("#" + safe_item.replaceAll(" ", "-")).remove(); liveSearch(); localStorage.setItem("words", JSON.stringify(words)) From a0454ad3f153ae8b86942d562bfa487ee068ef76 Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Sat, 15 Oct 2022 10:13:17 +0200 Subject: [PATCH 04/26] Fix server_stats db file when deleting server --- app/classes/models/server_stats.py | 61 +++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 14 deletions(-) diff --git a/app/classes/models/server_stats.py b/app/classes/models/server_stats.py index 29fdb856..ccb21879 100644 --- a/app/classes/models/server_stats.py +++ b/app/classes/models/server_stats.py @@ -120,6 +120,7 @@ class HelperServerStats: return None def get_all_servers_stats(self): + self.database.connect(reuse_if_open=True) servers = HelperServers.get_all_defined_servers() server_data = [] try: @@ -136,18 +137,23 @@ class HelperServerStats: logger.error( f"Stats collection failed with error: {ex}. Was a server just created?" ) + self.database.close() return server_data def get_history_stats(self, server_id, num_days): + self.database.connect(reuse_if_open=True) max_age = datetime.datetime.now() - timedelta(days=num_days) - return ( + server_stats = ( ServerStats.select() .where(ServerStats.created > max_age) .where(ServerStats.server_id == server_id) .execute(self.database) ) + self.database.connect(reuse_if_open=True) + return server_stats def insert_server_stats(self, server_stats): + self.database.connect(reuse_if_open=True) server_id = server_stats.get("id", 0) if server_id == 0: @@ -176,13 +182,18 @@ class HelperServerStats: } ).execute(self.database) + self.database.close() + def remove_old_stats(self, last_week): + self.database.connect(reuse_if_open=True) # self.select_database(self.server_id) ServerStats.delete().where(ServerStats.created < last_week).execute( self.database ) + self.database.close() def get_latest_server_stats(self): + self.database.connect(reuse_if_open=True) latest = ( ServerStats.select() .where(ServerStats.server_id == self.server_id) @@ -190,12 +201,15 @@ class HelperServerStats: .limit(1) .get(self.database) ) + + self.database.close() try: return DatabaseShortcuts.get_data_obj(latest) except IndexError: return {} def get_server_stats(self): + self.database.connect(reuse_if_open=True) stats = ( ServerStats.select() .where(ServerStats.server_id == self.server_id) @@ -203,63 +217,70 @@ class HelperServerStats: .limit(1) .first(self.database) ) + self.database.close() return DatabaseShortcuts.get_data_obj(stats) def server_id_exists(self): - # self.select_database(self.server_id) if not HelperServers.get_server_data_by_id(self.server_id): return False return True def sever_crashed(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) ServerStats.update(crashed=True).where( ServerStats.server_id == self.server_id ).execute(self.database) + self.database.close() def set_import(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) ServerStats.update(importing=True).where( ServerStats.server_id == self.server_id ).execute(self.database) + self.database.close() def finish_import(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) ServerStats.update(importing=False).where( ServerStats.server_id == self.server_id ).execute(self.database) + self.database.close() def get_import_status(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) import_status = ( ServerStats.select() .where(ServerStats.server_id == self.server_id) .get(self.database) ) + self.database.close() return import_status.importing def server_crash_reset(self): if self.server_id is None: return - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) ServerStats.update(crashed=False).where( ServerStats.server_id == self.server_id ).execute(self.database) + self.database.close() def is_crashed(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) svr: ServerStats = ( ServerStats.select() .where(ServerStats.server_id == self.server_id) .get(self.database) ) + self.database.close() return svr.crashed def set_update(self, value): if self.server_id is None: return - # self.select_database(self.server_id) + + self.database.connect(reuse_if_open=True) try: # Checks if server even exists ServerStats.select().where(ServerStats.server_id == self.server_id).execute( @@ -267,22 +288,26 @@ class HelperServerStats: ) except DoesNotExist as ex: logger.error(f"Database entry not found! {ex}") + self.database.close() return + ServerStats.update(updating=value).where( ServerStats.server_id == self.server_id ).execute(self.database) + self.database.close() def get_update_status(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) update_status = ( ServerStats.select() .where(ServerStats.server_id == self.server_id) .get(self.database) ) + self.database.close() return update_status.updating def set_first_run(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) # Sets first run to false try: # Checks if server even exists @@ -291,22 +316,25 @@ class HelperServerStats: ) except Exception as ex: logger.error(f"Database entry not found! {ex}") + self.database.close() return ServerStats.update(first_run=False).where( ServerStats.server_id == self.server_id ).execute(self.database) + self.database.close() def get_first_run(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) first_run = ( ServerStats.select() .where(ServerStats.server_id == self.server_id) .get(self.database) ) + self.database.close() return first_run.first_run def get_ttl_without_player(self): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) last_stat = ( ServerStats.select() .where(ServerStats.server_id == self.server_id) @@ -320,6 +348,7 @@ class HelperServerStats: .order_by(ServerStats.created.desc()) .first(self.database) ) + self.database.close() return last_stat.created - last_stat_with_player.created def can_stop_no_players(self, time_limit): @@ -327,7 +356,7 @@ class HelperServerStats: return (time_limit == -1) or (ttl_no_players > time_limit) def set_waiting_start(self, value): - # self.select_database(self.server_id) + self.database.connect(reuse_if_open=True) try: # Checks if server even exists ServerStats.select().where(ServerStats.server_id == self.server_id).execute( @@ -335,15 +364,19 @@ class HelperServerStats: ) except DoesNotExist as ex: logger.error(f"Database entry not found! {ex}") + self.database.close() return ServerStats.update(waiting_start=value).where( ServerStats.server_id == self.server_id ).execute(self.database) + self.database.close() def get_waiting_start(self): + self.database.connect(reuse_if_open=True) waiting_start = ( ServerStats.select() .where(ServerStats.server_id == self.server_id) .get(self.database) ) + self.database.close() return waiting_start.waiting_start From b21d0d82f28dfd616dda8509ab6f7a9abc9b74ea Mon Sep 17 00:00:00 2001 From: Iain Powrie Date: Tue, 18 Oct 2022 04:22:06 +0000 Subject: [PATCH 05/26] Apply 5 suggestion(s) to 1 file(s) --- app/frontend/templates/panel/server_logs.html | 44 +++++++------------ 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 210c52ea..4490d622 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -76,15 +76,14 @@ {% block js %} -{% end %} \ No newline at end of file +{% end %} From 1217f93c055d043a62e273c61cb384234b1a0c6a Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 18:11:54 +0100 Subject: [PATCH 14/26] Hoist sanatise declaration Function should be declared before trhe functions that use it, not after --- app/frontend/templates/panel/server_logs.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 19ff4f82..38119369 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -144,6 +144,10 @@ let typeInterval = 500; let searchInput = document.getElementById('searchbox'); + function sanitize(string) { + return string.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, ''); + } + searchInput.addEventListener('keyup', (e) => { clearTimeout(typingTimer); typingTimer = setTimeout(liveSearch, typeInterval); @@ -181,10 +185,6 @@ }); - function sanitize(string) { - return string.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, ''); - } - function deleteItem(item) { let safe_item = sanitize(item); words.splice(words.indexOf(item), 1); From fd906d56e8fda8900b187a0670858bd96f42a328 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 18:18:00 +0100 Subject: [PATCH 15/26] Clear input field after we've grabbed the value Reduce repetition of code --- app/frontend/templates/panel/server_logs.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 38119369..e188f540 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -156,33 +156,32 @@ if (e.keyCode !== 13) return; let word = document.getElementById("searchbox").value + document.getElementById("searchbox").value = ""; + word = word.toLowerCase(); word = word.replace(/[`'"]/gi, " ") safe_word = sanitize(word) if (word.includes("\\n")) { window.alert("Nice try..."); - document.getElementById("searchbox").value = ""; return; } if (!safe_word) { window.alert("Illegal character detected"); - document.getElementById("searchbox").value = ""; return; } if (safe_word.startsWith(" ")) { window.alert("Illegal first character"); - document.getElementById("searchbox").value = ""; return; } words.push(word); $("#ignored-words").append("
  • " + word + " 
  • ") - document.getElementById("searchbox").value = ""; - localStorage.setItem("words", JSON.stringify(words)) + // Set word filters in browser cache + localStorage.setItem("words", JSON.stringify(words)) }); function deleteItem(item) { From eaf5ae36648ec6cbdd96f66617ccc0a780868196 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 18:50:48 +0100 Subject: [PATCH 16/26] Tidy turbo long lines for scroll-less readability --- app/frontend/templates/panel/server_logs.html | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index e188f540..3b1285b8 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -114,10 +114,8 @@ console.log("ready!"); get_server_log(); populateWords(); - }); - function scroll() { var logview = $('#virt_console'); if (logview.length) @@ -177,30 +175,39 @@ return; } + // Display filtered word words.push(word); - $("#ignored-words").append("
  • " + word + " 
  • ") + $("#ignored-words").append( + `
  • ` + + "
    " + + `${word} 
  • " + ); // Set word filters in browser cache - localStorage.setItem("words", JSON.stringify(words)) + localStorage.setItem("words", JSON.stringify(words)); }); function deleteItem(item) { let safe_item = sanitize(item); words.splice(words.indexOf(item), 1); - if (safe_item) { - $("#" + safe_item.replaceAll(" ", "-")).remove(); - } + if (safe_item) $("#" + safe_item.replaceAll(" ", "-")).remove(); + liveSearch(); - localStorage.setItem("words", JSON.stringify(words)) + localStorage.setItem("words", JSON.stringify(words)); } function populateWords() { for (let i = 0; i < words.length; i++) { let safe_word = sanitize(words[i]); - $("#ignored-words").append("
  • " + words[i] + " 
  • ") + + $("#ignored-words").append( + `
  • ` + + "
    " + + `${word} 
  • " + ); } } - - {% end %} From a2a8b6449fe2fec1bb2c5559a7bb12b1d15d94ba Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 19:04:57 +0100 Subject: [PATCH 17/26] Tidy comments and declaration order Declare functions before the function that uses it --- app/frontend/templates/panel/server_logs.html | 104 +++++++++--------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 3b1285b8..4139ae3c 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -76,6 +76,7 @@ {% block js %} {% end %} From f3e41861d261ad03cad9cdcf7df7625b01f17d2b Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 19:24:06 +0100 Subject: [PATCH 18/26] Remove guard on whitspace We can just trim instead --- app/frontend/templates/panel/server_logs.html | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 4139ae3c..d3c85551 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -126,12 +126,12 @@ // Return/Enter key press otherwise bail if (e.keyCode !== 13) return; - let word = document.getElementById("searchbox").value + let word = document.getElementById("searchbox").value; document.getElementById("searchbox").value = ""; - word = word.toLowerCase(); - word = word.replace(/[`'"]/gi, " ") - safe_word = sanitize(word) + word = word.replace(/[`'"]/gi, " "); + + let safe_word = sanitize(word).trimLeft(); if (word.includes("\\n")) { window.alert("Nice try..."); @@ -143,11 +143,6 @@ return; } - if (safe_word.startsWith(" ")) { - window.alert("Illegal first character"); - return; - } - // Display filtered word words.push(word); $("#ignored-words").append( From cb6e034f30a0d21da831842778004685af1d2591 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 19:28:13 +0100 Subject: [PATCH 19/26] Guard against duplicate filters This protects against adding multiple filters of the same thing --- app/frontend/templates/panel/server_logs.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index d3c85551..2fba88bf 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -143,6 +143,8 @@ return; } + if (words.includes(safe_word)) return; + // Display filtered word words.push(word); $("#ignored-words").append( From 2599658321058c5d80136bf250e94d5c9b6e8f62 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 19:37:16 +0100 Subject: [PATCH 20/26] Fix word list display on page load Whoopsie --- app/frontend/templates/panel/server_logs.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index 2fba88bf..f7b3e675 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -159,8 +159,8 @@ }); function populateWords() { - for (let i = 0; i < words.length; i++) { - let safe_word = sanitize(words[i]); + words.map(word => { + let safe_word = sanitize(word); $("#ignored-words").append( `
  • ` + @@ -168,7 +168,7 @@ `${word} 
  • " ); - } + }); } // ##### End Log Filter Block ##### From 1f2ff2345d927d5e8da5bfd18d9c975a23a1da1d Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 19:43:59 +0100 Subject: [PATCH 21/26] Rename functions for readability --- app/frontend/templates/panel/server_logs.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/frontend/templates/panel/server_logs.html b/app/frontend/templates/panel/server_logs.html index f7b3e675..ccf40937 100644 --- a/app/frontend/templates/panel/server_logs.html +++ b/app/frontend/templates/panel/server_logs.html @@ -87,7 +87,7 @@ } } - function liveSearch() { + function hideFilteredWords() { for (let i = 0; i < lines.length; i++) { // Reinitialise line visibility lines[i].classList.remove("is-hidden"); @@ -106,12 +106,12 @@ return string.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, ''); } - function deleteItem(item) { + function deleteWord(item) { let safe_item = sanitize(item); words.splice(words.indexOf(item), 1); if (safe_item) $("#" + safe_item.replaceAll(" ", "-")).remove(); - liveSearch(); + hideFilteredWords(); localStorage.setItem("words", JSON.stringify(words)); } @@ -121,7 +121,7 @@ let searchInput = document.getElementById('searchbox'); searchInput.addEventListener('keyup', (e) => { clearTimeout(typingTimer); - typingTimer = setTimeout(liveSearch, typeInterval); + typingTimer = setTimeout(hideFilteredWords, typeInterval); // Return/Enter key press otherwise bail if (e.keyCode !== 13) return; @@ -150,7 +150,7 @@ $("#ignored-words").append( `
  • ` + "
    " + - `${word} 
  • " ); @@ -165,7 +165,7 @@ $("#ignored-words").append( `
  • ` + "
    " + - `${word} 
  • " ); }); @@ -199,7 +199,7 @@ $('#virt_console').html(data); scroll(); lines = document.querySelectorAll('.box'); - liveSearch(); + hideFilteredWords(); }, }); } From bffe1807a8748701028ef8a9ec4ad8f3e411abcb Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 20:06:08 +0100 Subject: [PATCH 22/26] Update changelog !486 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b3393d0..4d5db67f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ TBD - Add port constraint for all server creation & api ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/479)) - Clean up backup configs when deleting servers ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/480)) - Add timeout to socket for servers with incorrect port selection ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/482)) +- Fix server_stats db file when deleting server ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/486)) ### Tweaks - Fix sidebar to not move when scrolling ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/481)) - Add the rest of CSS predefined colors to themes ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/477)) From 4923a18359e52a56ea2da030ddb762613d05addf Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 20:17:03 +0100 Subject: [PATCH 23/26] Update changelog !487 --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d5db67f..e374c8bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog -## --- [4.0.16] - 2022/10/09 +## --- [4.0.16] - 2022/10/23 ### New features -TBD +- Automatically set update url for (new) server creation ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/487)) ### Bug fixes - Fix conditional issue with zip imports/uploads ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/476)) - Fix API Schedule updates ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/478)) From b3d28b149ef334f4baec6f38356f1edef6a84d64 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 20:26:34 +0100 Subject: [PATCH 24/26] Update changelog !488 --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e374c8bf..c9d2537d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,8 +12,7 @@ ### Tweaks - Fix sidebar to not move when scrolling ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/481)) - Add the rest of CSS predefined colors to themes ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/477)) -### Lang -TBD +- Only send realtime stats when clients connected ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/488))

    ## --- [4.0.15] - 2022/10/02 From 1a5728ccf1d0ece3db358416c8f725ead178b7ab Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 20:40:15 +0100 Subject: [PATCH 25/26] Update changelog !489 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9d2537d..99fefb13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - Clean up backup configs when deleting servers ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/480)) - Add timeout to socket for servers with incorrect port selection ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/482)) - Fix server_stats db file when deleting server ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/486)) +- Fix "cannot render after finish" from backup_now ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/489)) ### Tweaks - Fix sidebar to not move when scrolling ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/481)) - Add the rest of CSS predefined colors to themes ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/477)) From b8900ab0ea76b4f3c9c7dd235338b3a0303db4d7 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sat, 22 Oct 2022 20:47:47 +0100 Subject: [PATCH 26/26] Update changelog !484 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99fefb13..84c9df52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## --- [4.0.16] - 2022/10/23 ### New features - Automatically set update url for (new) server creation ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/487)) +- Add filter to logs panel ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/484)) ### Bug fixes - Fix conditional issue with zip imports/uploads ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/476)) - Fix API Schedule updates ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/478))