summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHybridDog <3192173+HybridDog@users.noreply.github.com>2021-03-13 11:18:25 +0100
committerGitHub <noreply@github.com>2021-03-13 11:18:25 +0100
commit88b052cbea346fd29120837f5b802427bc889be2 (patch)
tree6229a14001e4c343e06b54e52ad38fab549cd0ae
parent051bc9e6624c63c3612e041644ec587b328bae55 (diff)
downloadminetest-88b052cbea346fd29120837f5b802427bc889be2.tar.gz
minetest-88b052cbea346fd29120837f5b802427bc889be2.tar.bz2
minetest-88b052cbea346fd29120837f5b802427bc889be2.zip
Chatcommands: Show the execution time if the command takes a long time (#10472)
-rw-r--r--builtin/game/chat.lua20
-rw-r--r--builtin/settingtypes.txt4
2 files changed, 22 insertions, 2 deletions
diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua
index e05e83a27..bf2d7851e 100644
--- a/builtin/game/chat.lua
+++ b/builtin/game/chat.lua
@@ -47,6 +47,8 @@ end
core.chatcommands = core.registered_chatcommands -- BACKWARDS COMPATIBILITY
+local msg_time_threshold =
+ tonumber(core.settings:get("chatcommand_msg_time_threshold")) or 0.1
core.register_on_chat_message(function(name, message)
if message:sub(1,1) ~= "/" then
return
@@ -73,7 +75,9 @@ core.register_on_chat_message(function(name, message)
local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs)
if has_privs then
core.set_last_run_mod(cmd_def.mod_origin)
+ local t_before = minetest.get_us_time()
local success, result = cmd_def.func(name, param)
+ local delay = (minetest.get_us_time() - t_before) / 1000000
if success == false and result == nil then
core.chat_send_player(name, "-!- "..S("Invalid command usage."))
local help_def = core.registered_chatcommands["help"]
@@ -83,8 +87,20 @@ core.register_on_chat_message(function(name, message)
core.chat_send_player(name, helpmsg)
end
end
- elseif result then
- core.chat_send_player(name, result)
+ else
+ if delay > msg_time_threshold then
+ -- Show how much time it took to execute the command
+ if result then
+ result = result ..
+ minetest.colorize("#f3d2ff", " (%.5g s)"):format(delay)
+ else
+ result = minetest.colorize("#f3d2ff",
+ "Command execution took %.5f s"):format(delay)
+ end
+ end
+ if result then
+ core.chat_send_player(name, result)
+ end
end
else
core.chat_send_player(name,
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 62f1ee2d0..75efe64da 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -1136,6 +1136,10 @@ enable_rollback_recording (Rollback recording) bool false
# @name, @message, @timestamp (optional)
chat_message_format (Chat message format) string <@name> @message
+# If the execution of a chat command takes longer than this specified time in
+# seconds, add the time information to the chat command message
+chatcommand_msg_time_threshold (Chat command time message threshold) float 0.1
+
# A message to be displayed to all clients when the server shuts down.
kick_msg_shutdown (Shutdown message) string Server shutting down.