Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Yershov <yershov@corp.mail.ru>2016-04-27 14:08:01 +0300
committerAlex Zolotarev <alex@maps.me>2016-05-01 10:28:03 +0300
commitff847713d907ba189cf474fa6af8eec1679b0219 (patch)
treebeb5baedd3f1d846cfbfdb0160235936f7ef65aa /platform
parent0c0c176ab504db604553c7a26062a2a136145ec5 (diff)
[downloader] Send http download errors into Alohalytics
Diffstat (limited to 'platform')
-rw-r--r--platform/chunks_download_strategy.cpp7
-rw-r--r--platform/chunks_download_strategy.hpp5
-rw-r--r--platform/http_request.cpp16
3 files changed, 22 insertions, 6 deletions
diff --git a/platform/chunks_download_strategy.cpp b/platform/chunks_download_strategy.cpp
index efcf89bef9..3aa1bad155 100644
--- a/platform/chunks_download_strategy.cpp
+++ b/platform/chunks_download_strategy.cpp
@@ -129,10 +129,10 @@ int64_t ChunksDownloadStrategy::LoadOrInitChunks( string const & fName,
return 0;
}
-void ChunksDownloadStrategy::ChunkFinished(bool success, RangeT const & range)
+string ChunksDownloadStrategy::ChunkFinished(bool success, RangeT const & range)
{
pair<ChunkT *, int> res = GetChunk(range);
-
+ string url;
// find server which was downloading this chunk
if (res.first)
{
@@ -140,6 +140,7 @@ void ChunksDownloadStrategy::ChunkFinished(bool success, RangeT const & range)
{
if (m_servers[s].m_chunkIndex == res.second)
{
+ url = m_servers[s].m_url;
if (success)
{
// mark server as free and chunk as ready
@@ -150,7 +151,6 @@ void ChunksDownloadStrategy::ChunkFinished(bool success, RangeT const & range)
{
LOG(LINFO, ("Thread for url", m_servers[s].m_url,
"failed to download chunk number", m_servers[s].m_chunkIndex));
-
// remove failed server and mark chunk as free
m_servers.erase(m_servers.begin() + s);
res.first->m_status = CHUNK_FREE;
@@ -159,6 +159,7 @@ void ChunksDownloadStrategy::ChunkFinished(bool success, RangeT const & range)
}
}
}
+ return url;
}
ChunksDownloadStrategy::ResultT
diff --git a/platform/chunks_download_strategy.hpp b/platform/chunks_download_strategy.hpp
index 213cac5bd1..4a0bb16109 100644
--- a/platform/chunks_download_strategy.hpp
+++ b/platform/chunks_download_strategy.hpp
@@ -71,7 +71,10 @@ public:
int64_t LoadOrInitChunks(string const & fName, int64_t fileSize, int64_t chunkSize);
/// Should be called for every completed chunk (no matter successful or not).
- void ChunkFinished(bool success, RangeT const & range);
+ /// @returns url of the chunk
+ string ChunkFinished(bool success, RangeT const & range);
+
+ size_t ActiveServersCount() const { return m_servers.size(); }
enum ResultT
{
diff --git a/platform/http_request.cpp b/platform/http_request.cpp
index 6fbfb95f51..af39a41a8a 100644
--- a/platform/http_request.cpp
+++ b/platform/http_request.cpp
@@ -13,9 +13,11 @@
#include "coding/file_writer.hpp"
#include "base/logging.hpp"
+#include "base/string_utils.hpp"
#include "std/unique_ptr.hpp"
+#include "3party/Alohalytics/src/alohalytics.h"
#ifdef OMIM_OS_IPHONE
@@ -84,6 +86,7 @@ class MemoryHttpRequest : public HttpRequest, public IHttpThreadCallback
{
HttpThread * m_thread;
+ string m_requestUrl;
string m_downloadedData;
MemWriter<string> m_writer;
@@ -103,6 +106,9 @@ class MemoryHttpRequest : public HttpRequest, public IHttpThreadCallback
else
{
LOG(LWARNING, ("HttpRequest error:", httpCode));
+ alohalytics::LogEvent(
+ "$httpRequestError",
+ {{"url", m_requestUrl}, {"code", strings::to_string(httpCode)}, {"servers", "1"}});
m_status = EFailed;
}
@@ -111,7 +117,7 @@ class MemoryHttpRequest : public HttpRequest, public IHttpThreadCallback
public:
MemoryHttpRequest(string const & url, CallbackT const & onFinish, CallbackT const & onProgress)
- : HttpRequest(onFinish, onProgress), m_writer(m_downloadedData)
+ : HttpRequest(onFinish, onProgress), m_requestUrl(url), m_writer(m_downloadedData)
{
m_thread = CreateNativeHttpThread(url, *this);
ASSERT ( m_thread, () );
@@ -233,7 +239,7 @@ class FileHttpRequest : public HttpRequest, public IHttpThreadCallback
#endif
bool const isChunkOk = (httpCode == 200);
- m_strategy.ChunkFinished(isChunkOk, make_pair(begRange, endRange));
+ string const urlError = m_strategy.ChunkFinished(isChunkOk, make_pair(begRange, endRange));
// remove completed chunk from the list, beg is the key
RemoveHttpThreadByKey(begRange);
@@ -246,7 +252,13 @@ class FileHttpRequest : public HttpRequest, public IHttpThreadCallback
m_onProgress(*this);
}
else
+ {
LOG(LWARNING, (m_filePath, "HttpRequest error:", httpCode));
+ alohalytics::LogEvent("$httpRequestError",
+ {{"url", urlError},
+ {"code", strings::to_string(httpCode)},
+ {"servers", strings::to_string(m_strategy.ActiveServersCount())}});
+ }
ChunksDownloadStrategy::ResultT const result = StartThreads();