[Libreoffice-commits] online.git: loolwsd/LOOLWSD.cpp loolwsd/loolwsd.xml.in loolwsd/test loolwsd/TraceFile.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Aug 8 03:57:53 UTC 2016
loolwsd/LOOLWSD.cpp | 3 +-
loolwsd/TraceFile.hpp | 47 +++++++++++++++++++++++++++++-----------
loolwsd/loolwsd.xml.in | 2 -
loolwsd/test/TileCacheTests.cpp | 2 +
4 files changed, 40 insertions(+), 14 deletions(-)
New commits:
commit 807b3c2e55226a1555cf9c0c1ec41d5150f7b59a
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sat Aug 6 21:23:57 2016 -0400
loolstress: support trace file compression
Compression to .gz is supported and is controlled
via the XML configuration.
Change-Id: If26fad2c0b5f3c4ffd93362608644dc917172a41
Reviewed-on: https://gerrit.libreoffice.org/27975
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 0a994aa..c9ce709 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -1418,7 +1418,8 @@ void LOOLWSD::initialize(Application& self)
}
}
- TraceDumper.reset(new TraceFileWriter(path, recordOutgoing, filters));
+ const auto compress = getConfigValue<bool>(conf, "trace.path[@compress]", false);
+ TraceDumper.reset(new TraceFileWriter(path, recordOutgoing, compress, filters));
Log::info("Command trace dumping enabled to file: " + path);
}
diff --git a/loolwsd/TraceFile.hpp b/loolwsd/TraceFile.hpp
index dec080c..eee746f 100644
--- a/loolwsd/TraceFile.hpp
+++ b/loolwsd/TraceFile.hpp
@@ -13,6 +13,8 @@
#include <string>
#include <vector>
+#include <Poco/DeflatingStream.h>
+
#include "Util.hpp"
/// Dumps commands and notification trace.
@@ -42,11 +44,14 @@ public:
class TraceFileWriter
{
public:
- TraceFileWriter(const std::string& path, const bool recordOugoing, const std::vector<std::string>& filters) :
+ TraceFileWriter(const std::string& path, const bool recordOugoing, const bool compress,
+ const std::vector<std::string>& filters) :
_epochStart(Poco::Timestamp().epochMicroseconds()),
_recordOutgoing(recordOugoing),
+ _compress(compress),
_filter(true),
- _stream(path, std::ios::out)
+ _stream(path, compress ? std::ios::binary : std::ios::out),
+ _deflater(_stream, Poco::DeflatingStreamBuf::STREAM_GZIP)
{
for (const auto& f : filters)
{
@@ -56,6 +61,7 @@ public:
~TraceFileWriter()
{
+ _deflater.close();
_stream.close();
}
@@ -85,22 +91,39 @@ private:
{
std::unique_lock<std::mutex> lock(_mutex);
const Poco::Int64 usec = Poco::Timestamp().epochMicroseconds() - _epochStart;
- _stream.write(&delim, 1);
- _stream << usec;
- _stream.write(&delim, 1);
- _stream << pId;
- _stream.write(&delim, 1);
- _stream << sessionId;
- _stream.write(&delim, 1);
- _stream.write(data.c_str(), data.size());
- _stream.write("\n", 1);
+ if (_compress)
+ {
+ _deflater.write(&delim, 1);
+ _deflater << usec;
+ _deflater.write(&delim, 1);
+ _deflater << pId;
+ _deflater.write(&delim, 1);
+ _deflater << sessionId;
+ _deflater.write(&delim, 1);
+ _deflater.write(data.c_str(), data.size());
+ _deflater.write("\n", 1);
+ }
+ else
+ {
+ _stream.write(&delim, 1);
+ _stream << usec;
+ _stream.write(&delim, 1);
+ _stream << pId;
+ _stream.write(&delim, 1);
+ _stream << sessionId;
+ _stream.write(&delim, 1);
+ _stream.write(data.c_str(), data.size());
+ _stream.write("\n", 1);
+ }
}
private:
const Poco::Int64 _epochStart;
const bool _recordOutgoing;
+ const bool _compress;
Util::RegexListMatcher _filter;
- std::fstream _stream;
+ std::ofstream _stream;
+ Poco::DeflatingOutputStream _deflater;
std::mutex _mutex;
};
diff --git a/loolwsd/loolwsd.xml.in b/loolwsd/loolwsd.xml.in
index 6acfdf6..d05724f 100644
--- a/loolwsd/loolwsd.xml.in
+++ b/loolwsd/loolwsd.xml.in
@@ -24,7 +24,7 @@
</logging>
<trace desc="Dump commands and notifications for replay" enable="true">
- <path desc="Output file path">/tmp/dump</path>
+ <path desc="Output file path" compress="true">/tmp/looltrace.gz</path>
<filter>
<message desc="Regex pattern of messages to exlcude">tile.*</message>
</filter>
diff --git a/loolwsd/test/TileCacheTests.cpp b/loolwsd/test/TileCacheTests.cpp
index d4b0a4f..54177d4 100644
--- a/loolwsd/test/TileCacheTests.cpp
+++ b/loolwsd/test/TileCacheTests.cpp
@@ -419,11 +419,13 @@ void TileCacheTests::checkBlackTiles(Poco::Net::WebSocket& socket, const int /*p
const auto tile = getResponseMessage(socket, "tile:", "checkBlackTiles ");
const std::string firstLine = LOOLProtocol::getFirstLine(tile);
+
#if 0
std::fstream outStream("/tmp/black.png", std::ios::out);
outStream.write(tile.data() + firstLine.size() + 1, tile.size() - firstLine.size() - 1);
outStream.close();
#endif
+
std::stringstream streamTile;
std::copy(tile.begin() + firstLine.size() + 1, tile.end(), std::ostream_iterator<char>(streamTile));
checkBlackTile(streamTile);
More information about the Libreoffice-commits
mailing list