From bf315c05f17549d37d7b4c4bd7938df0b5b32c5a Mon Sep 17 00:00:00 2001
From: Brandon <brandon@bremaweb.com>
Date: Wed, 2 Nov 2016 11:36:58 -0500
Subject: [PATCH] Add minetest.get_server_uptime() function to Lua API (#4702)

Add minetest.get_server_uptime() function to Lua API
---
 doc/lua_api.txt                 |  1 +
 src/script/lua_api/l_server.cpp | 10 ++++++++++
 src/script/lua_api/l_server.h   |  3 +++
 src/server.h                    |  1 +
 4 files changed, 15 insertions(+)

diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 497864fac..119e69f6f 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -2448,6 +2448,7 @@ These functions return the leftover itemstack.
 * `minetest.request_shutdown([message],[reconnect])`: request for server shutdown. Will display `message` to clients,
     and `reconnect` == true displays a reconnect button.
 * `minetest.get_server_status()`: returns server status string
+* `minetest.get_server_uptime()`: returns the server uptime in seconds
 
 ### Bans
 * `minetest.get_ban_list()`: returns the ban list (same as `minetest.get_ban_description("")`)
diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp
index 95e5da07f..b6d44e0ff 100644
--- a/src/script/lua_api/l_server.cpp
+++ b/src/script/lua_api/l_server.cpp
@@ -45,6 +45,15 @@ int ModApiServer::l_get_server_status(lua_State *L)
 	return 1;
 }
 
+// get_server_uptime()
+int ModApiServer::l_get_server_uptime(lua_State *L)
+{
+	NO_MAP_LOCK_REQUIRED;
+	lua_pushnumber(L, getServer(L)->getUptime());
+	return 1;
+}
+
+
 // print(text)
 int ModApiServer::l_print(lua_State *L)
 {
@@ -507,6 +516,7 @@ void ModApiServer::Initialize(lua_State *L, int top)
 {
 	API_FCT(request_shutdown);
 	API_FCT(get_server_status);
+	API_FCT(get_server_uptime);
 	API_FCT(get_worldpath);
 	API_FCT(is_singleplayer);
 
diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h
index 06a5ddc24..1ad46d440 100644
--- a/src/script/lua_api/l_server.h
+++ b/src/script/lua_api/l_server.h
@@ -30,6 +30,9 @@ class ModApiServer : public ModApiBase {
 	// get_server_status()
 	static int l_get_server_status(lua_State *L);
 
+	// get_server_uptime()
+	static int l_get_server_uptime(lua_State *L);
+
 	// get_worldpath()
 	static int l_get_worldpath(lua_State *L);
 
diff --git a/src/server.h b/src/server.h
index 5fc2a9133..f8b3ec106 100644
--- a/src/server.h
+++ b/src/server.h
@@ -216,6 +216,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 
 	// Connection must be locked when called
 	std::wstring getStatusString();
+	inline double getUptime() const { return m_uptime.m_value; }
 
 	// read shutdown state
 	inline bool getShutdownRequested() const { return m_shutdown_requested; }
-- 
GitLab