Search in sources :

Example 36 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project harvest-client by 3AP-AG.

the class HttpLoggingInterceptor method intercept.

@Override
public Response intercept(Chain chain) throws IOException {
    Level level = this.level;
    Request request = chain.request();
    if (level == Level.NONE) {
        return chain.proceed(request);
    }
    boolean logBody = level == Level.BODY;
    boolean logHeaders = logBody || level == Level.HEADERS;
    RequestBody requestBody = request.body();
    boolean hasRequestBody = requestBody != null;
    Connection connection = chain.connection();
    String requestStartMessage = "--> " + request.method() + ' ' + request.url() + (connection != null ? " " + connection.protocol() : "");
    if (!logHeaders && hasRequestBody) {
        requestStartMessage += " (" + requestBody.contentLength() + "-byte body)";
    }
    logger.log(requestStartMessage);
    if (logHeaders) {
        if (hasRequestBody) {
            // them to be included (when available) so there values are known.
            if (requestBody.contentType() != null) {
                logger.log("Content-Type: " + requestBody.contentType());
            }
            if (requestBody.contentLength() != -1) {
                logger.log("Content-Length: " + requestBody.contentLength());
            }
        }
        Headers headers = request.headers();
        for (int i = 0, count = headers.size(); i < count; i++) {
            String name = headers.name(i);
            if (!"Content-Type".equalsIgnoreCase(name) && !"Content-Length".equalsIgnoreCase(name)) {
                if (isSensitiveHeader(name)) {
                    logger.log(name + ": REDACTED");
                } else {
                    logger.log(name + ": " + headers.value(i));
                }
            }
        }
        if (!logBody || !hasRequestBody) {
            logger.log("--> END " + request.method());
        } else if (bodyEncoded(request.headers())) {
            logger.log("--> END " + request.method() + " (encoded body omitted)");
        } else {
            Buffer buffer = new Buffer();
            requestBody.writeTo(buffer);
            Charset charset = UTF8;
            MediaType contentType = requestBody.contentType();
            if (contentType != null) {
                charset = contentType.charset(UTF8);
            }
            logger.log("");
            if (isPlaintext(buffer)) {
                logger.log(buffer.readString(charset));
                logger.log("--> END " + request.method() + " (" + requestBody.contentLength() + "-byte body)");
            } else {
                logger.log("--> END " + request.method() + " (binary " + requestBody.contentLength() + "-byte body omitted)");
            }
        }
    }
    long startNs = System.nanoTime();
    Response response;
    try {
        response = chain.proceed(request);
    } catch (Exception e) {
        logger.log("<-- HTTP FAILED: " + e);
        throw e;
    }
    long tookMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs);
    ResponseBody responseBody = response.body();
    long contentLength = responseBody.contentLength();
    String bodySize = contentLength != -1 ? contentLength + "-byte" : "unknown-length";
    logger.log("<-- " + response.code() + (response.message().isEmpty() ? "" : ' ' + response.message()) + ' ' + response.request().url() + " (" + tookMs + "ms" + (!logHeaders ? ", " + bodySize + " body" : "") + ')');
    if (logHeaders) {
        Headers headers = response.headers();
        for (int i = 0, count = headers.size(); i < count; i++) {
            logger.log(headers.name(i) + ": " + headers.value(i));
        }
        if (!logBody || !HttpHeaders.hasBody(response)) {
            logger.log("<-- END HTTP");
        } else if (bodyEncoded(response.headers())) {
            logger.log("<-- END HTTP (encoded body omitted)");
        } else {
            BufferedSource source = responseBody.source();
            // Buffer the entire body.
            source.request(Long.MAX_VALUE);
            Buffer buffer = source.buffer();
            Charset charset = UTF8;
            MediaType contentType = responseBody.contentType();
            if (contentType != null) {
                charset = contentType.charset(UTF8);
            }
            if (!isPlaintext(buffer)) {
                logger.log("");
                logger.log("<-- END HTTP (binary " + buffer.size() + "-byte body omitted)");
                return response;
            }
            if (contentLength != 0) {
                logger.log("");
                logger.log(buffer.clone().readString(charset));
            }
            logger.log("<-- END HTTP (" + buffer.size() + "-byte body)");
        }
    }
    return response;
}
Also used : Buffer(okio.Buffer) HttpHeaders(okhttp3.internal.http.HttpHeaders) Charset(java.nio.charset.Charset) IOException(java.io.IOException) EOFException(java.io.EOFException) BufferedSource(okio.BufferedSource)

Example 37 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project xDrip by NightscoutFoundation.

the class NightscoutUploader method postDeviceStatus.

/**
 * Uploads the device status (containing battery details) to Nightscout for
 */
private void postDeviceStatus(NightscoutService nightscoutService, String apiSecret) throws Exception {
    // TODO optimize based on changes avoiding stale marker issues
    final List<NightscoutBatteryDevice> batteries = new ArrayList<>();
    batteries.add(NightscoutBatteryDevice.PHONE);
    if ((DexCollectionType.hasBattery() && (Pref.getBoolean("send_bridge_battery_to_nightscout", true))) || (Home.get_forced_wear() && DexCollectionType.getDexCollectionType().equals(DexCollectionType.DexcomG5))) {
        batteries.add(NightscoutBatteryDevice.BRIDGE);
    }
    if (DexCollectionType.hasWifi()) {
        batteries.add(NightscoutBatteryDevice.PARAKEET);
    }
    boolean sendDexcomTxBattery = Pref.getBooleanDefaultFalse("send_ob1dex_tx_battery_to_nightscout");
    if (sendDexcomTxBattery) {
        batteries.add(NightscoutBatteryDevice.DEXCOM_TRANSMITTER);
    }
    for (NightscoutBatteryDevice batteryType : batteries) {
        final long last_battery_level = getLastBatteryLevel(batteryType);
        final int new_battery_level = batteryType.getBatteryLevel(mContext);
        if ((new_battery_level > 0) && (new_battery_level != last_battery_level || batteryType.alwaysSendBattery())) {
            setLastBatteryLevel(batteryType, new_battery_level);
            // UserError.Log.d(TAG, "Uploading battery detail: " + battery_level);
            // json.put("uploaderBattery", battery_level); // old style
            final JSONArray array = new JSONArray();
            final JSONObject json = new JSONObject();
            final JSONObject uploader = batteryType.getUploaderJson(mContext);
            if (uploader == null) {
                continue;
            }
            json.put("device", batteryType.getDeviceName());
            json.put("uploader", uploader);
            array.put(json);
            // example
            // {
            // "device": "openaps://ediscout2.local",
            // "uploader": {
            // "battery": 60,
            // "batteryVoltage": 3783,
            // "temperature": "+51.0°C"
            // }
            // }
            final RequestBody body = RequestBody.create(MediaType.parse("application/json"), json.toString());
            Response<ResponseBody> r;
            if (apiSecret != null) {
                r = nightscoutService.uploadDeviceStatus(apiSecret, body).execute();
            } else
                r = nightscoutService.uploadDeviceStatus(body).execute();
            if (!r.isSuccessful())
                throw new UploaderException(r.message(), r.code());
            // } else {
            // UserError.Log.d(TAG, "Battery level is same as previous - not uploading: " + battery_level);
            checkGzipSupport(r);
        }
    }
}
Also used : JSONObject(org.json.JSONObject) ArrayList(java.util.ArrayList) JSONArray(org.json.JSONArray) RequestBody(okhttp3.RequestBody) ResponseBody(okhttp3.ResponseBody)

Example 38 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project xDrip-plus by jamorham.

the class NightscoutUploader method postDeviceStatus.

/**
 * Uploads the device status (containing battery details) to Nightscout for
 */
private void postDeviceStatus(NightscoutService nightscoutService, String apiSecret) throws Exception {
    // TODO optimize based on changes avoiding stale marker issues
    final List<NightscoutBatteryDevice> batteries = new ArrayList<>();
    batteries.add(NightscoutBatteryDevice.PHONE);
    if ((DexCollectionType.hasBattery() && (Pref.getBoolean("send_bridge_battery_to_nightscout", true))) || (Home.get_forced_wear() && DexCollectionType.getDexCollectionType().equals(DexCollectionType.DexcomG5))) {
        batteries.add(NightscoutBatteryDevice.BRIDGE);
    }
    if (DexCollectionType.hasWifi()) {
        batteries.add(NightscoutBatteryDevice.PARAKEET);
    }
    boolean sendDexcomTxBattery = Pref.getBooleanDefaultFalse("send_ob1dex_tx_battery_to_nightscout");
    if (sendDexcomTxBattery) {
        batteries.add(NightscoutBatteryDevice.DEXCOM_TRANSMITTER);
    }
    for (NightscoutBatteryDevice batteryType : batteries) {
        final long last_battery_level = getLastBatteryLevel(batteryType);
        final int new_battery_level = batteryType.getBatteryLevel(mContext);
        if ((new_battery_level > 0) && (new_battery_level != last_battery_level || batteryType.alwaysSendBattery())) {
            setLastBatteryLevel(batteryType, new_battery_level);
            // UserError.Log.d(TAG, "Uploading battery detail: " + battery_level);
            // json.put("uploaderBattery", battery_level); // old style
            final JSONArray array = new JSONArray();
            final JSONObject json = new JSONObject();
            final JSONObject uploader = batteryType.getUploaderJson(mContext);
            if (uploader == null) {
                continue;
            }
            json.put("device", batteryType.getDeviceName());
            json.put("uploader", uploader);
            array.put(json);
            // example
            // {
            // "device": "openaps://ediscout2.local",
            // "uploader": {
            // "battery": 60,
            // "batteryVoltage": 3783,
            // "temperature": "+51.0°C"
            // }
            // }
            final RequestBody body = RequestBody.create(MediaType.parse("application/json"), json.toString());
            Response<ResponseBody> r;
            if (apiSecret != null) {
                r = nightscoutService.uploadDeviceStatus(apiSecret, body).execute();
            } else
                r = nightscoutService.uploadDeviceStatus(body).execute();
            if (!r.isSuccessful())
                throw new UploaderException(r.message(), r.code());
            // } else {
            // UserError.Log.d(TAG, "Battery level is same as previous - not uploading: " + battery_level);
            checkGzipSupport(r);
        }
    }
}
Also used : JSONObject(org.json.JSONObject) ArrayList(java.util.ArrayList) JSONArray(org.json.JSONArray) RequestBody(okhttp3.RequestBody) ResponseBody(okhttp3.ResponseBody)

Example 39 with Level

use of okhttp3.logging.HttpLoggingInterceptor.Level in project iterable-android-sdk by Iterable.

the class IterableApiTest method testInboxSession.

@Test
public void testInboxSession() throws Exception {
    server.enqueue(new MockResponse().setResponseCode(200).setBody("{}"));
    IterableInAppMessage message = InAppTestUtils.getTestInAppMessage();
    IterableApi.initialize(getContext(), "apiKey", new IterableConfig.Builder().setAutoPushRegistration(false).build());
    IterableApi.getInstance().setEmail("test@email.com");
    // Set up test data
    Date sessionStartTime = new Date();
    List<IterableInboxSession.Impression> impressions = new ArrayList<>();
    impressions.add(new IterableInboxSession.Impression("messageId1", true, 2, 5.5f));
    impressions.add(new IterableInboxSession.Impression("messageId2", false, 1, 2.0f));
    IterableInboxSession session = new IterableInboxSession(sessionStartTime, new Date(sessionStartTime.getTime() + 3600), 10, 5, 8, 3, impressions);
    IterableApi.getInstance().setInboxSessionId(session.sessionId);
    IterableApi.getInstance().trackInboxSession(session);
    shadowOf(getMainLooper()).idle();
    RecordedRequest trackInAppClickRequest = server.takeRequest(1, TimeUnit.SECONDS);
    assertNotNull(trackInAppClickRequest);
    Uri uri = Uri.parse(trackInAppClickRequest.getRequestUrl().toString());
    assertEquals("/" + IterableConstants.ENDPOINT_TRACK_INBOX_SESSION, uri.getPath());
    JSONObject requestJson = new JSONObject(trackInAppClickRequest.getBody().readUtf8());
    // Check top-level fields
    assertEquals(sessionStartTime.getTime(), requestJson.getLong(IterableConstants.ITERABLE_INBOX_SESSION_START));
    assertEquals(sessionStartTime.getTime() + 3600, requestJson.getLong(IterableConstants.ITERABLE_INBOX_SESSION_END));
    assertEquals(10, requestJson.getInt(IterableConstants.ITERABLE_INBOX_START_TOTAL_MESSAGE_COUNT));
    assertEquals(5, requestJson.getInt(IterableConstants.ITERABLE_INBOX_START_UNREAD_MESSAGE_COUNT));
    assertEquals(8, requestJson.getInt(IterableConstants.ITERABLE_INBOX_END_TOTAL_MESSAGE_COUNT));
    assertEquals(3, requestJson.getInt(IterableConstants.ITERABLE_INBOX_END_UNREAD_MESSAGE_COUNT));
    assertEquals(session.sessionId, requestJson.getString(IterableConstants.KEY_INBOX_SESSION_ID));
    verifyDeviceInfo(requestJson);
    // Check impression data
    JSONArray impressionsJsonArray = requestJson.getJSONArray(IterableConstants.ITERABLE_INBOX_IMPRESSIONS);
    assertEquals(2, impressionsJsonArray.length());
    assertEquals("messageId1", impressionsJsonArray.getJSONObject(0).getString(IterableConstants.KEY_MESSAGE_ID));
    assertEquals(true, impressionsJsonArray.getJSONObject(0).getBoolean(IterableConstants.ITERABLE_IN_APP_SILENT_INBOX));
    assertEquals(2, impressionsJsonArray.getJSONObject(0).getInt(IterableConstants.ITERABLE_INBOX_IMP_DISPLAY_COUNT));
    assertEquals(5.5, impressionsJsonArray.getJSONObject(0).getDouble(IterableConstants.ITERABLE_INBOX_IMP_DISPLAY_DURATION));
}
Also used : RecordedRequest(okhttp3.mockwebserver.RecordedRequest) MockResponse(okhttp3.mockwebserver.MockResponse) ArrayList(java.util.ArrayList) JSONArray(org.json.JSONArray) Uri(android.net.Uri) Date(java.util.Date) JSONObject(org.json.JSONObject) Test(org.junit.Test)

Aggregations

Request (okhttp3.Request)14 Response (okhttp3.Response)13 IOException (java.io.IOException)12 ResponseBody (okhttp3.ResponseBody)12 Test (org.junit.Test)12 HttpUrl (okhttp3.HttpUrl)9 RequestBody (okhttp3.RequestBody)8 Charset (java.nio.charset.Charset)7 Headers (okhttp3.Headers)7 OkHttpClient (okhttp3.OkHttpClient)7 MockResponse (okhttp3.mockwebserver.MockResponse)7 Buffer (okio.Buffer)7 BufferedSource (okio.BufferedSource)7 Context (android.content.Context)6 Connection (okhttp3.Connection)6 MediaType (okhttp3.MediaType)6 Protocol (okhttp3.Protocol)6 HttpHeaders (okhttp3.internal.http.HttpHeaders)6 EOFException (java.io.EOFException)5 ArrayList (java.util.ArrayList)5