diff --git a/src/server.cpp b/src/server.cpp index 7fb9a78e9..5022221ee 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3119,15 +3119,16 @@ std::string Server::getStatusString() std::ostringstream os(std::ios_base::binary); os << "# Server: "; // Version - os << "version=" << g_version_string; + os << "version: " << g_version_string; // Uptime - os << ", uptime=" << m_uptime_counter->get(); + os << " | uptime: " << duration_to_string((int) m_uptime_counter->get()); // Max lag estimate - os << ", max_lag=" << (m_env ? m_env->getMaxLagEstimate() : 0); + os << " | max lag: " << std::setprecision(3); + os << (m_env ? m_env->getMaxLagEstimate() : 0) << "s"; // Information about clients bool first = true; - os << ", clients={"; + os << " | clients: "; if (m_env) { std::vector clients = m_clients.getClientIDs(); for (session_t client_id : clients) { @@ -3144,7 +3145,6 @@ std::string Server::getStatusString() os << name; } } - os << "}"; if (m_env && !((ServerMap*)(&m_env->getMap()))->isSavingEnabled()) os << std::endl << "# Server: " << " WARNING: Map saving is disabled."; diff --git a/src/util/string.h b/src/util/string.h index 21f1d6877..bca998f56 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -661,28 +661,49 @@ inline const char *bool_to_cstr(bool val) return val ? "true" : "false"; } +/** + * Converts a duration in seconds to a pretty-printed duration in + * days, hours, minutes and seconds. + * + * @param sec duration in seconds + * @return pretty-printed duration + */ inline const std::string duration_to_string(int sec) { + std::ostringstream ss; + const char *neg = ""; + if (sec < 0) { + sec = -sec; + neg = "-"; + } + int total_sec = sec; int min = sec / 60; sec %= 60; int hour = min / 60; min %= 60; + int day = hour / 24; + hour %= 24; + + if (day > 0) { + ss << neg << day << "d"; + if (hour > 0 || min > 0 || sec > 0) + ss << " "; + } - std::stringstream ss; if (hour > 0) { - ss << hour << "h"; + ss << neg << hour << "h"; if (min > 0 || sec > 0) ss << " "; } if (min > 0) { - ss << min << "min"; + ss << neg << min << "min"; if (sec > 0) ss << " "; } - if (sec > 0) { - ss << sec << "s"; + if (sec > 0 || total_sec == 0) { + ss << neg << sec << "s"; } return ss.str();