[Libreoffice-commits] online.git: loolwsd/LOOLWSD.cpp loolwsd/LOOLWSD.hpp loolwsd/loolwsd.xml.in loolwsd/TraceFile.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Aug 8 03:47:28 UTC 2016
loolwsd/LOOLWSD.cpp | 9 +++++++++
loolwsd/LOOLWSD.hpp | 11 +++++++++++
loolwsd/TraceFile.hpp | 36 ++++++++++++++++++++++++++++++++++++
loolwsd/loolwsd.xml.in | 4 ++++
4 files changed, 60 insertions(+)
New commits:
commit 8b9b3289556ae2d69bd7f6a6a49f38be0dc90c71
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sat Jul 30 22:22:28 2016 -0400
loolwsd: add support for dumping command trace
Change-Id: I4121ce74653d243149be09de46581cbe0aae0438
Reviewed-on: https://gerrit.libreoffice.org/27953
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 009a34d..cb0cb19 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -1265,6 +1265,7 @@ static std::string UnitTestLibrary;
unsigned int LOOLWSD::NumPreSpawnedChildren = 0;
std::atomic<unsigned> LOOLWSD::NumDocBrokers;
std::atomic<unsigned> LOOLWSD::NumConnections;
+std::unique_ptr<TraceFile> LOOLWSD::TraceDumper;
class AppConfigMap : public Poco::Util::MapConfiguration
{
@@ -1393,6 +1394,14 @@ void LOOLWSD::initialize(Application& self)
std::to_string(MAX_CONNECTIONS) :
std::string("unlimited")) << Log::end;
+ // Command Tracing.
+ if (getConfigValue<bool>(conf, "trace[@enable]", false))
+ {
+ const auto& path = getConfigValue<std::string>(conf, "trace.path", "");
+ TraceDumper.reset(new TraceFile(path));
+ Log::info("Command trace dumping enabled to file: " + path);
+ }
+
StorageBase::initialize();
ServerApplication::initialize(self);
diff --git a/loolwsd/LOOLWSD.hpp b/loolwsd/LOOLWSD.hpp
index 4a3898c..eed6b70 100644
--- a/loolwsd/LOOLWSD.hpp
+++ b/loolwsd/LOOLWSD.hpp
@@ -23,6 +23,7 @@
#include "Auth.hpp"
#include "Common.hpp"
#include "DocumentBroker.hpp"
+#include "TraceFile.hpp"
#include "Util.hpp"
class LOOLWSD: public Poco::Util::ServerApplication
@@ -46,6 +47,7 @@ public:
static std::string LOKitVersion;
static std::atomic<unsigned> NumDocBrokers;
static std::atomic<unsigned> NumConnections;
+ static std::unique_ptr<TraceFile> TraceDumper;
static
std::string GenSessionId()
@@ -59,6 +61,15 @@ public:
return LOOLWSD::SSLEnabled.get();
}
+ static
+ void dumpTrace(const std::string& data)
+ {
+ if (TraceDumper)
+ {
+ TraceDumper->write(data);
+ }
+ }
+
protected:
void initialize(Poco::Util::Application& self) override;
void uninitialize() override;
diff --git a/loolwsd/TraceFile.hpp b/loolwsd/TraceFile.hpp
new file mode 100644
index 0000000..c1c01d7
--- /dev/null
+++ b/loolwsd/TraceFile.hpp
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <string>
+#include <fstream>
+
+/// Dumps commands and notification trace.
+class TraceFile
+{
+public:
+ TraceFile(const std::string& path) :
+ _stream(path, std::ios::out)
+ {
+ }
+
+ ~TraceFile()
+ {
+ _stream.close();
+ }
+
+ void write(const std::string& data)
+ {
+ _stream.write(data.c_str(), data.size());
+ }
+
+private:
+ std::fstream _stream;
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/loolwsd.xml.in b/loolwsd/loolwsd.xml.in
index 15153c8..f5916e6 100644
--- a/loolwsd/loolwsd.xml.in
+++ b/loolwsd/loolwsd.xml.in
@@ -23,6 +23,10 @@
<level type="string" desc="Can be 0-8, or none (turns off logging), fatal, critical, error, warning, notice, information, debug, trace" default="trace">trace</level>
</logging>
+ <trace desc="Dump commands and notifications for replay" enable="true">
+ <path desc="Output file path">/tmp/dump</path>
+ </trace>
+
<ssl desc="SSL settings">
<enable type="bool" default="true">true</enable>
<cert_file_path desc="Path to the cert file" relative="false">/etc/loolwsd/cert.pem</cert_file_path>
More information about the Libreoffice-commits
mailing list