All Downloads are FREE. Search and download functionalities are using the official Maven repository.

util.Http.kt Maven / Gradle / Ivy

The newest version!
package com.amplitude.util

import io.ktor.client.HttpClient
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.request
import io.ktor.client.request.url
import io.ktor.client.statement.HttpResponse
import io.ktor.http.HttpMethod
import io.ktor.http.HttpStatusCode
import io.ktor.http.path
import kotlinx.coroutines.delay

internal class HttpErrorException(
    val statusCode: HttpStatusCode,
    response: HttpResponse? = null,
) : Exception("HTTP error response: code=$statusCode, message=${statusCode.description}, response=$response")

internal data class RetryConfig(
    val times: Int = 8,
    val initialDelayMillis: Long = 100,
    val maxDelay: Long = 10000,
    val factor: Double = 2.0,
)

internal suspend fun retry(
    config: RetryConfig = RetryConfig(),
    onFailure: (Exception) -> Unit = {},
    acceptCodes: Set = emptySet(),
    block: suspend () -> HttpResponse,
): HttpResponse {
    var currentDelay = config.initialDelayMillis
    var error: Exception? = null
    for (i in 0.. Unit,
): HttpResponse {
    return request(HttpMethod.Get, url, path, block)
}

internal suspend fun HttpClient.request(
    method: HttpMethod,
    url: String,
    path: String,
    block: HttpRequestBuilder.() -> Unit,
): HttpResponse {
    return request {
        this.method = method
        url {
            url(url)
            path(path)
        }
        block.invoke(this)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy