Mholloway has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/379115 )

Change subject: Add image response size logging
......................................................................

Add image response size logging

Provides for storing data on image response lengths in SessionData.

Adds a network interceptor that logs the content-length and running total
for responses with image content-types.  A network interceptor (rather
than an application interceptor) is used so that we don't count responses
served from cache.

Change-Id: I1eb695dabae74cf0870ab5e43157e2093a454adb
---
M app/src/main/java/org/wikipedia/analytics/SessionData.java
M app/src/main/java/org/wikipedia/analytics/SessionFunnel.java
A 
app/src/main/java/org/wikipedia/dataclient/okhttp/ImageResponseSizeLoggingInterceptor.java
M app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java
4 files changed, 60 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/15/379115/1

diff --git a/app/src/main/java/org/wikipedia/analytics/SessionData.java 
b/app/src/main/java/org/wikipedia/analytics/SessionData.java
index 3ba006d..f5d4c02 100644
--- a/app/src/main/java/org/wikipedia/analytics/SessionData.java
+++ b/app/src/main/java/org/wikipedia/analytics/SessionData.java
@@ -20,6 +20,8 @@
     private int pagesFromBack;
     private int pagesWithNoDescription;
 
+    private long imageResponseBytes; // not for Scheme:MobileWikiAppSessions 
logging
+
     public void addPageViewed(HistoryEntry entry) {
         switch (entry.getSource()) {
             case HistoryEntry.SOURCE_SEARCH:
@@ -135,6 +137,14 @@
         pagesWithNoDescription++;
     }
 
+    public long getImageResponseBytes() {
+        return imageResponseBytes;
+    }
+
+    public void addImageResponseBytes(long bytes) {
+        imageResponseBytes += bytes;
+    }
+
     public int getTotalPages() {
         return pagesFromSearch + pagesFromRandom + pagesFromLangLink + 
pagesFromInternal
                 + pagesFromExternal + pagesFromHistory + pagesFromReadingList 
+ pagesFromNearby
diff --git a/app/src/main/java/org/wikipedia/analytics/SessionFunnel.java 
b/app/src/main/java/org/wikipedia/analytics/SessionFunnel.java
index 71e00a4..9073ea5 100644
--- a/app/src/main/java/org/wikipedia/analytics/SessionFunnel.java
+++ b/app/src/main/java/org/wikipedia/analytics/SessionFunnel.java
@@ -94,6 +94,14 @@
         sessionData.addRestLatency(System.currentTimeMillis() - 
restSectionsStartTime);
     }
 
+    public void addImageResponseBytes(long bytes) {
+        sessionData.addImageResponseBytes(bytes);
+    }
+
+    public long getTotalImageResponseBytes() {
+        return sessionData.getImageResponseBytes();
+    }
+
     private boolean hasTimedOut() {
         return System.currentTimeMillis() - sessionData.getLastTouchTime()
                 > Prefs.getSessionTimeout() * DateUtils.MINUTE_IN_MILLIS;
diff --git 
a/app/src/main/java/org/wikipedia/dataclient/okhttp/ImageResponseSizeLoggingInterceptor.java
 
b/app/src/main/java/org/wikipedia/dataclient/okhttp/ImageResponseSizeLoggingInterceptor.java
new file mode 100644
index 0000000..d771457
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/dataclient/okhttp/ImageResponseSizeLoggingInterceptor.java
@@ -0,0 +1,41 @@
+package org.wikipedia.dataclient.okhttp;
+
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.util.log.L;
+
+import java.io.IOException;
+
+import okhttp3.Interceptor;
+import okhttp3.MediaType;
+import okhttp3.Response;
+
+class ImageResponseSizeLoggingInterceptor implements Interceptor {
+    private final WikipediaApp app = WikipediaApp.getInstance();
+
+    @Override
+    public Response intercept(Chain chain) throws IOException {
+        Response rsp = chain.proceed(chain.request());
+
+        if (rsp.body() != null) {
+            // noinspection ConstantConditions
+            MediaType contentType = rsp.body().contentType();
+            if (contentType != null && "image".equals(contentType.type())) {
+                // noinspection ConstantConditions
+                long contentLength = rsp.body().contentLength();
+                app.getSessionFunnel().addImageResponseBytes(contentLength);
+                long totalImageBytes = 
app.getSessionFunnel().getTotalImageResponseBytes();
+                L.v(getLoggingString(contentLength, totalImageBytes));
+            }
+        }
+
+        return rsp;
+    }
+
+    private static String getLoggingString(long curBytes, long totalBytes) {
+        return "Received " + str(curBytes) + " byte image; " + str(totalBytes) 
+ " total image bytes received";
+    }
+
+    private static String str(long l) {
+        return Long.toString(l);
+    }
+}
diff --git 
a/app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java
 
b/app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java
index 8badaf2..3770bec 100644
--- 
a/app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java
+++ 
b/app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java
@@ -46,6 +46,7 @@
                 .addInterceptor(new UnsuccessfulResponseInterceptor())
                 .addInterceptor(new 
StatusResponseInterceptor(RbSwitch.INSTANCE))
                 .addNetworkInterceptor(new 
StripMustRevalidateResponseInterceptor())
+                .addNetworkInterceptor(new 
ImageResponseSizeLoggingInterceptor())
                 .addInterceptor(new CommonHeaderRequestInterceptor())
                 .addInterceptor(new DefaultMaxStaleRequestInterceptor())
                 .addInterceptor(new CacheIfErrorInterceptor())

-- 
To view, visit https://gerrit.wikimedia.org/r/379115
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1eb695dabae74cf0870ab5e43157e2093a454adb
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <mhollo...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to