summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-01-26 22:59:03 +0100
committerYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-01-26 22:59:03 +0100
commitb92c3f2e1c6a4d6ed87ed596f97d268fc4c53785 (patch)
tree32079432854736c6cd4c2285b8774ff4703dc83e /src
parentfeb848940855a8001a65252ee727887be8e2cf35 (diff)
downloadmanaserv-b92c3f2e1c6a4d6ed87ed596f97d268fc4c53785.tar.gz
manaserv-b92c3f2e1c6a4d6ed87ed596f97d268fc4c53785.tar.bz2
manaserv-b92c3f2e1c6a4d6ed87ed596f97d268fc4c53785.tar.xz
manaserv-b92c3f2e1c6a4d6ed87ed596f97d268fc4c53785.zip
Add an heartbeat time flag in the statistics file.
This way, any kind of external service can know about the running state of each servers, even if only the account server is updating the statistics because: 1. When the account server is running, each <gameserver> tag is a running game server. Otherwise, it's not listed. 2. Whenever the account server stops running, the stat file isn't updated anymore and so the <heartbeat> tag isn't. 3. Game servers without any contact with an account server will try to reconnect to the account server and kick out every players so they aren't considered as running in that case. Reviewed-by: Crush. Resolves: Mana-mantis #270.
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/account-server/main-account.cpp15
-rw-r--r--src/utils/logger.cpp57
-rw-r--r--src/utils/time.h86
4 files changed, 101 insertions, 58 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index cf04d397..0633ffda 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -183,6 +183,7 @@ SET(SRCS_MANASERVACCOUNT
utils/sha256.h
utils/sha256.cpp
utils/throwerror.h
+ utils/time.h
)
SET(SRCS_MANASERVGAME
diff --git a/src/account-server/main-account.cpp b/src/account-server/main-account.cpp
index ae24ee6d..25e96232 100644
--- a/src/account-server/main-account.cpp
+++ b/src/account-server/main-account.cpp
@@ -38,6 +38,7 @@
#include "utils/logger.h"
#include "utils/processorutils.h"
#include "utils/stringfilter.h"
+#include "utils/time.h"
#include "utils/timer.h"
#include "defines.h"
#include "manaserv_protocol.h"
@@ -245,10 +246,19 @@ static void deinitializeServer()
/**
* Dumps statistics.
*/
-static void dumpStatistics()
+static void dumpStatistics(std::string accountAddress, int accountClientPort,
+ int accountGamePort, int chatClientPort)
{
std::ofstream os(statisticsFile.c_str());
os << "<statistics>\n";
+ // Print last heartbeat
+ os << "<heartbeat=\"" << utils::getCurrentDate() << "_"
+ << utils::getCurrentTime() << "\" />\n";
+ // Add account server information
+ os << "<accountserver address=\"" << accountAddress << "\" clientport=\""
+ << accountClientPort << "\" gameport=\"" << accountGamePort
+ << "\" chatclientport=\"" << chatClientPort << "\" />\n";
+ // Add game servers information
GameServerHandler::dumpStatistics(os);
os << "</statistics>\n";
}
@@ -425,7 +435,8 @@ int main(int argc, char *argv[])
chatHandler->process(50);
if (statTimer.poll())
- dumpStatistics();
+ dumpStatistics(accountHost, options.port, accountGamePort,
+ chatClientPort);
if (banTimer.poll())
storage->checkBannedAccounts();
diff --git a/src/utils/logger.cpp b/src/utils/logger.cpp
index 05041956..d3f82418 100644
--- a/src/utils/logger.cpp
+++ b/src/utils/logger.cpp
@@ -22,10 +22,9 @@
#include "logger.h"
#include "common/resourcemanager.h"
#include "utils/string.h"
+#include "utils/time.h"
-#include <ctime>
#include <fstream>
-#include <iomanip>
#include <iostream>
#ifdef WIN32
@@ -60,60 +59,6 @@ static std::string mLastCallDate = "";
static std::string mOldDate = "";
/**
- * Gets the current time.
- *
- * @return the current time as string.
- */
-static std::string getCurrentTime()
-{
- time_t now;
- tm local;
-
- // Get current time_t value
- time(&now);
-
- // Convert time_t to tm struct to break the time into individual
- // constituents.
- local = *(localtime(&now));
-
- // Stringify the time, the format is: hh:mm:ss
- using namespace std;
- ostringstream os;
- os << setw(2) << setfill('0') << local.tm_hour
- << ":" << setw(2) << setfill('0') << local.tm_min
- << ":" << setw(2) << setfill('0') << local.tm_sec;
-
- return os.str();
-}
-
-/**
- * Gets the current date.
- *
- * @return the current date as string.
- */
-static std::string getCurrentDate()
-{
- time_t now;
- tm local;
-
- // Get current time_t value
- time(&now);
-
- // Convert time_t to tm struct to break the time into individual
- // constituents.
- local = *(localtime(&now));
-
- // Stringify the time, the format is: yyyy-mm-dd
- using namespace std;
- ostringstream os;
- os << setw(4) << setfill('0') << (local.tm_year + 1900)
- << "-" << setw(2) << setfill('0') << local.tm_mon
- << "-" << setw(2) << setfill('0') << local.tm_mday;
-
- return os.str();
-}
-
-/**
* Check whether the day has changed since the last call.
*
* @return whether the day has changed.
diff --git a/src/utils/time.h b/src/utils/time.h
new file mode 100644
index 00000000..e22e52e8
--- /dev/null
+++ b/src/utils/time.h
@@ -0,0 +1,86 @@
+/*
+ * The Mana Server
+ * Copyright (C) 2011 The Mana Development Team
+ *
+ * This file is part of The Mana Server.
+ *
+ * The Mana Server is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana Server is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana Server. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TIME_H
+#define TIME_H
+
+#include <ctime>
+#include <iomanip>
+#include <string>
+
+namespace utils {
+
+/**
+ * Gets the current time.
+ *
+ * @return the current time as string.
+ */
+static std::string getCurrentTime()
+{
+ time_t now;
+ tm local;
+
+ // Get current time_t value
+ time(&now);
+
+ // Convert time_t to tm struct to break the time into individual
+ // constituents.
+ local = *(localtime(&now));
+
+ // Stringify the time, the format is: hh:mm:ss
+ using namespace std;
+ ostringstream os;
+ os << setw(2) << setfill('0') << local.tm_hour
+ << ":" << setw(2) << setfill('0') << local.tm_min
+ << ":" << setw(2) << setfill('0') << local.tm_sec;
+
+ return os.str();
+}
+
+/**
+ * Gets the current date.
+ *
+ * @return the current date as string.
+ */
+static std::string getCurrentDate()
+{
+ time_t now;
+ tm local;
+
+ // Get current time_t value
+ time(&now);
+
+ // Convert time_t to tm struct to break the time into individual
+ // constituents.
+ local = *(localtime(&now));
+
+ // Stringify the time, the format is: yyyy-mm-dd
+ using namespace std;
+ ostringstream os;
+ os << setw(4) << setfill('0') << (local.tm_year + 1900)
+ << "-" << setw(2) << setfill('0') << local.tm_mon + 1
+ << "-" << setw(2) << setfill('0') << local.tm_mday;
+
+ return os.str();
+}
+
+};
+
+#endif // TIME_H