mirror of
https://github.com/Shabinder/SpotiFlyer.git
synced 2024-11-22 01:04:31 +01:00
Analytics Incomplete Image Fix
This commit is contained in:
parent
821f07a5d6
commit
0269838669
@ -18,6 +18,7 @@ application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation("org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlinVersion}")
|
||||||
implementation("io.ktor:ktor-client-core:1.5.4")
|
implementation("io.ktor:ktor-client-core:1.5.4")
|
||||||
implementation("io.ktor:ktor-client-apache:1.5.4")
|
implementation("io.ktor:ktor-client-apache:1.5.4")
|
||||||
implementation("io.ktor:ktor-client-serialization:1.5.4")
|
implementation("io.ktor:ktor-client-serialization:1.5.4")
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
package analytics_html_img
|
package analytics_html_img
|
||||||
|
|
||||||
import io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
|
import io.ktor.client.features.HttpTimeout
|
||||||
import io.ktor.client.features.json.JsonFeature
|
import io.ktor.client.features.json.JsonFeature
|
||||||
import io.ktor.client.features.json.serializer.KotlinxSerializer
|
import io.ktor.client.features.json.serializer.KotlinxSerializer
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
@ -14,6 +15,7 @@ internal object Common {
|
|||||||
const val USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:88.0) Gecko/20100101 Firefox/88.0"
|
const val USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:88.0) Gecko/20100101 Firefox/88.0"
|
||||||
}
|
}
|
||||||
internal val client = HttpClient {
|
internal val client = HttpClient {
|
||||||
|
install(HttpTimeout)
|
||||||
install(JsonFeature) {
|
install(JsonFeature) {
|
||||||
serializer = KotlinxSerializer(
|
serializer = KotlinxSerializer(
|
||||||
Json {
|
Json {
|
@ -1,6 +1,10 @@
|
|||||||
package analytics_html_img
|
package analytics_html_img
|
||||||
|
|
||||||
|
import io.ktor.client.features.timeout
|
||||||
|
import io.ktor.client.request.head
|
||||||
|
import io.ktor.client.statement.HttpResponse
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import utils.RETRY_LIMIT_EXHAUSTED
|
||||||
import utils.debug
|
import utils.debug
|
||||||
|
|
||||||
internal fun updateAnalyticsImage() {
|
internal fun updateAnalyticsImage() {
|
||||||
@ -16,17 +20,9 @@ internal fun updateAnalyticsImage() {
|
|||||||
fileName = "README.md"
|
fileName = "README.md"
|
||||||
)
|
)
|
||||||
// debug("OLD FILE CONTENT",oldGithubFile)
|
// debug("OLD FILE CONTENT",oldGithubFile)
|
||||||
|
val imageURL = getAnalyticsImage().also {
|
||||||
/*
|
debug("Updated IMAGE", it)
|
||||||
* Use Any Random useless query param ,
|
}
|
||||||
* As HCTI Demo, `caches value for a specific Link`
|
|
||||||
* */
|
|
||||||
val randomID = (1..100000).random()
|
|
||||||
val imageURL = HCTIService.getImageURLFromURL(
|
|
||||||
url = "https://kind-grasshopper-73.telebit.io/matomo/index.php?module=Widgetize&action=iframe&containerId=VisitOverviewWithGraph&disableLink=0&widget=1&moduleToWidgetize=CoreHome&actionToWidgetize=renderWidgetContainer&idSite=1&period=week&date=today&disableLink=1&widget=$randomID",
|
|
||||||
delayInMilliSeconds = 5000
|
|
||||||
)
|
|
||||||
debug("Updated IMAGE", imageURL)
|
|
||||||
|
|
||||||
val replacementText = """
|
val replacementText = """
|
||||||
${Common.START_SECTION(secrets.tagName)}
|
${Common.START_SECTION(secrets.tagName)}
|
||||||
@ -56,3 +52,37 @@ internal fun updateAnalyticsImage() {
|
|||||||
debug("File Updation Response", updationResponse.toString())
|
debug("File Updation Response", updationResponse.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal suspend fun getAnalyticsImage(): String {
|
||||||
|
var contentLength: Long
|
||||||
|
var analyticsImage: String
|
||||||
|
var retryCount = 5
|
||||||
|
|
||||||
|
do {
|
||||||
|
/*
|
||||||
|
* Get a new Image from Analytics,
|
||||||
|
* - Use Any Random useless query param ,
|
||||||
|
* As HCTI Demo, `caches value for a specific Link`
|
||||||
|
* */
|
||||||
|
val randomID = (1..100000).random()
|
||||||
|
analyticsImage = HCTIService.getImageURLFromURL(
|
||||||
|
url = "https://kind-grasshopper-73.telebit.io/matomo/index.php?module=Widgetize&action=iframe&containerId=VisitOverviewWithGraph&disableLink=0&widget=1&moduleToWidgetize=CoreHome&actionToWidgetize=renderWidgetContainer&idSite=1&period=week&date=today&disableLink=1&widget=$randomID",
|
||||||
|
delayInMilliSeconds = 5000
|
||||||
|
)
|
||||||
|
|
||||||
|
// Sometimes we get incomplete image, hence verify `content-length`
|
||||||
|
val req = client.head<HttpResponse>(analyticsImage) {
|
||||||
|
timeout {
|
||||||
|
socketTimeoutMillis = 100_000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
contentLength = req.headers["Content-Length"]?.toLong() ?: 0
|
||||||
|
debug(contentLength.toString())
|
||||||
|
|
||||||
|
if(retryCount-- == 0){
|
||||||
|
// FAIL Gracefully
|
||||||
|
throw(RETRY_LIMIT_EXHAUSTED())
|
||||||
|
}
|
||||||
|
}while (contentLength<1_20_000)
|
||||||
|
return analyticsImage
|
||||||
|
}
|
@ -6,7 +6,12 @@ data class ENV_KEY_MISSING(
|
|||||||
val keyName: String,
|
val keyName: String,
|
||||||
override val message: String? = "$keyName was not found, please check your ENV variables"
|
override val message: String? = "$keyName was not found, please check your ENV variables"
|
||||||
) : Exception(message)
|
) : Exception(message)
|
||||||
|
|
||||||
data class HCTI_URL_RESPONSE_ERROR(
|
data class HCTI_URL_RESPONSE_ERROR(
|
||||||
val response: String,
|
val response: String,
|
||||||
override val message: String? = "Server Error, We Recieved this Resp: $response"
|
override val message: String? = "Server Error, We Recieved this Resp: $response"
|
||||||
) : Exception(message)
|
) : Exception(message)
|
||||||
|
|
||||||
|
data class RETRY_LIMIT_EXHAUSTED(
|
||||||
|
override val message: String? = "RETRY LIMIT EXHAUSTED!"
|
||||||
|
) : Exception(message)
|
6
maintenance-tasks/src/main/java/utils/TestClass.kt
Normal file
6
maintenance-tasks/src/main/java/utils/TestClass.kt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
|
||||||
|
// Test Class- at development Time
|
||||||
|
fun main() = runBlocking {}
|
Loading…
Reference in New Issue
Block a user