[Libreoffice-commits] online.git: 2 commits - loolwsd/DocumentBroker.cpp loolwsd/DocumentBroker.hpp loolwsd/LOOLWSD.cpp loolwsd/protocol.txt loolwsd/Storage.cpp loolwsd/Storage.hpp
Pranav Kant
pranavk at collabora.co.uk
Sun Oct 16 17:32:19 UTC 2016
loolwsd/DocumentBroker.cpp | 10 ++++++++++
loolwsd/DocumentBroker.hpp | 4 ++++
loolwsd/LOOLWSD.cpp | 11 ++++++++++-
loolwsd/Storage.cpp | 16 ++++++++++++----
loolwsd/Storage.hpp | 10 +++++++++-
loolwsd/protocol.txt | 5 +++++
6 files changed, 50 insertions(+), 6 deletions(-)
New commits:
commit 07f10570cc4228795837e87cc2e43330de7dc81b
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Fri Oct 14 18:16:49 2016 +0530
loolwsd: Add wopiloadduration - time taken to interact with WOPI host
Change-Id: Ia2d763ef721128450bf402a61d0e0f3e75701441
diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index 5ab7790..67710bb 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -796,4 +796,14 @@ bool DocumentBroker::forwardToClient(const std::string& prefix, const std::vecto
return false;
}
+const std::chrono::duration<double> DocumentBroker::getStorageLoadDuration() const
+{
+ if (dynamic_cast<WopiStorage*>(_storage.get()) != nullptr)
+ {
+ return dynamic_cast<WopiStorage*>(_storage.get())->getWopiLoadDuration();
+ }
+
+ return std::chrono::duration<double>::zero();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/DocumentBroker.hpp b/loolwsd/DocumentBroker.hpp
index 186b174..72b507a 100644
--- a/loolwsd/DocumentBroker.hpp
+++ b/loolwsd/DocumentBroker.hpp
@@ -236,6 +236,10 @@ public:
int getRenderedTileCount() { return _debugRenderedTileCount; }
+ /// Returns time taken in making calls to storage during load
+ /// Currently, only makes sense in case storage is WOPI
+ const std::chrono::duration<double> getStorageLoadDuration() const;
+
private:
/// Sends the .uno:Save command to LoKit.
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index c76bdd7..4d85ddd 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -834,6 +834,15 @@ private:
Util::checkDiskSpaceOnRegisteredFileSystems();
+ // If its a WOPI host, return time taken to make calls to it
+ const auto storageCallDuration = docBroker->getStorageLoadDuration();
+ if (storageCallDuration != std::chrono::duration<double>::zero())
+ {
+ status = "stats: wopiloadduration " + std::to_string(storageCallDuration.count());
+ Log::trace("Sending to Client [" + status + "].");
+ ws->sendFrame(status.data(), (int) status.size());
+ }
+
// Let messages flow.
IoUtil::SocketProcessor(ws,
[&session](const std::vector<char>& payload)
diff --git a/loolwsd/Storage.cpp b/loolwsd/Storage.cpp
index 7e5d222..3236c28 100644
--- a/loolwsd/Storage.cpp
+++ b/loolwsd/Storage.cpp
@@ -263,6 +263,7 @@ StorageBase::FileInfo WopiStorage::getFileInfo()
return _fileInfo;
}
+ const auto startTime = std::chrono::steady_clock::now();
std::unique_ptr<Poco::Net::HTTPClientSession> psession(getHTTPClientSession(_uri));
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, _uri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
@@ -270,8 +271,8 @@ StorageBase::FileInfo WopiStorage::getFileInfo()
psession->sendRequest(request);
Poco::Net::HTTPResponse response;
- std::istream& rs = psession->receiveResponse(response);
+ std::istream& rs = psession->receiveResponse(response);
auto logger = Log::trace();
logger << "WOPI::CheckFileInfo header for URI [" << _uri.toString() << "]:\n";
for (auto& pair : response)
@@ -288,7 +289,11 @@ StorageBase::FileInfo WopiStorage::getFileInfo()
std::string userName;
std::string resMsg;
Poco::StreamCopier::copyToString(rs, resMsg);
- Log::debug("WOPI::CheckFileInfo returned: " + resMsg);
+
+ const auto endTime = std::chrono::steady_clock::now();
+ const std::chrono::duration<double> diff = (endTime - startTime);
+ _wopiLoadDuration += diff;
+ Log::debug("WOPI::CheckFileInfo returned: " + resMsg + ". Call duration: " + std::to_string(diff.count()) + "s");
const auto index = resMsg.find_first_of('{');
if (index != std::string::npos)
{
@@ -327,6 +332,7 @@ std::string WopiStorage::loadStorageFileToLocal()
uriObject.setPath(uriObject.getPath() + "/contents");
Log::debug("Wopi requesting: " + uriObject.toString());
+ const auto startTime = std::chrono::steady_clock::now();
std::unique_ptr<Poco::Net::HTTPClientSession> psession(getHTTPClientSession(uriObject));
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, uriObject.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
@@ -350,10 +356,12 @@ std::string WopiStorage::loadStorageFileToLocal()
std::copy(std::istreambuf_iterator<char>(rs),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(ofs));
+ const auto endTime = std::chrono::steady_clock::now();
+ const std::chrono::duration<double> diff = (endTime - startTime);
+ _wopiLoadDuration += diff;
const auto size = getFileSize(_jailedFilePath);
-
Log::info() << "WOPI::GetFile downloaded " << size << " bytes from [" << uriObject.toString()
- << "] -> " << _jailedFilePath << ": "
+ << "] -> " << _jailedFilePath << " in " + std::to_string(diff.count()) + "s : "
<< response.getStatus() << " " << response.getReason() << Log::end;
_isLoaded = true;
diff --git a/loolwsd/Storage.hpp b/loolwsd/Storage.hpp
index 4050906..36edd1d 100644
--- a/loolwsd/Storage.hpp
+++ b/loolwsd/Storage.hpp
@@ -154,7 +154,8 @@ public:
WopiStorage(const Poco::URI& uri,
const std::string& localStorePath,
const std::string& jailPath) :
- StorageBase(uri, localStorePath, jailPath)
+ StorageBase(uri, localStorePath, jailPath),
+ _wopiLoadDuration(0)
{
Log::info("WopiStorage ctor with localStorePath: [" + localStorePath +
"], jailPath: [" + jailPath + "], uri: [" + uri.toString() + "].");
@@ -166,6 +167,13 @@ public:
std::string loadStorageFileToLocal() override;
bool saveLocalFileToStorage() override;
+
+ /// Total time taken for making WOPI calls during load (includes GetFileInfo calls)
+ const std::chrono::duration<double> getWopiLoadDuration() const { return _wopiLoadDuration; }
+
+private:
+ // Time spend in waiting for WOPI host during document load
+ std::chrono::duration<double> _wopiLoadDuration;
};
/// WebDAV protocol backed storage.
diff --git a/loolwsd/protocol.txt b/loolwsd/protocol.txt
index 3aaa840..51d608a 100644
--- a/loolwsd/protocol.txt
+++ b/loolwsd/protocol.txt
@@ -332,6 +332,11 @@ redlinetablechanged:
Signals that the redlines table has been modified.
Redlines are used for tracking changes.
+stats: <key> <value>
+
+ Contains statistical data. Eg: 'stats: wopiduration 5' means that
+ wopi calls made in loading of document took 5 seconds.
+
child -> parent
===============
commit 7cacaa070d73b3b1e037ac05893f6c71da63afdf
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Sat Oct 15 21:59:35 2016 +0530
loolwsd: Make this const
Change-Id: Ieb1be92323061110798da23f066a5be0e8314472
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index d801502..c76bdd7 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -794,7 +794,7 @@ private:
// Check if readonly session is required
bool isReadOnly = false;
- for (auto& param: uriPublic.getQueryParameters())
+ for (const auto& param: uriPublic.getQueryParameters())
{
Log::debug("Query param: " + param.first + ", value: " + param.second);
if (param.first == "permission")
More information about the Libreoffice-commits
mailing list