Skip to content

Commit

Permalink
fix(insights): add algolia agent to insight (#381)
Browse files Browse the repository at this point in the history
* add algolia agent to insight

* apply lint changes
  • Loading branch information
aallam committed Feb 10, 2023
1 parent c8ddcad commit 79659b4
Show file tree
Hide file tree
Showing 21 changed files with 107 additions and 49 deletions.
11 changes: 0 additions & 11 deletions instantsearch-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,3 @@ kotlin {
}
}
}

tasks {
val copyTemplates = register<Copy>("copyTemplates") {
from("src/commonMain/templates")
into("$buildDir/generated/sources/templates/kotlin/main")
val version = project.extensions.extraProperties["VERSION_NAME"] as String // require clean build
expand("projectVersion" to version)
filteringCharset = "UTF-8"
}
kotlin.sourceSets.commonMain.get().kotlin.srcDir(copyTemplates)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.algolia.instantsearch.core

import com.algolia.instantsearch.BuildConfig

public object InstantSearch {

public const val version: String = BuildConfig.version
Expand Down
5 changes: 0 additions & 5 deletions instantsearch-core/src/commonMain/templates/BuildConfig.kt

This file was deleted.

2 changes: 2 additions & 0 deletions instantsearch-insights/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,12 @@ kotlin {
languageSettings {
optIn("kotlinx.serialization.ExperimentalSerializationApi")
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
optIn("com.algolia.instantsearch.InternalInstantSearch")
}
}
val commonMain by getting {
dependencies {
implementation(project(":instantsearch-utils"))
api(libs.algolia.client)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package com.algolia.instantsearch.insights.internal.data.distant

import com.algolia.instantsearch.insights.internal.event.EventResponse
import com.algolia.instantsearch.insights.internal.logging.InsightsLogger
import com.algolia.instantsearch.util.algoliaAgent
import com.algolia.search.client.ClientInsights
import com.algolia.search.configuration.Credentials
import com.algolia.search.dsl.requestOptions
import com.algolia.search.exception.AlgoliaApiException
import com.algolia.search.model.insights.InsightsEvent
import io.ktor.client.statement.bodyAsText
Expand All @@ -13,9 +15,13 @@ internal class InsightsHttpRepository(
private val clientInsights: ClientInsights,
) : InsightsDistantRepository, Credentials by clientInsights {

private val requestOptions = requestOptions {
parameter("X-Algolia-Agent", algoliaAgent("Algolia insights for Android"))
}

override suspend fun send(event: InsightsEvent): EventResponse {
val (code: Int, message: String) = try {
val response = clientInsights.sendEvent(event)
val response = clientInsights.sendEvent(event, requestOptions)
val message = when {
response.status.isSuccess() -> "Sync succeeded for $event.\""
else -> response.bodyAsText()
Expand Down
56 changes: 55 additions & 1 deletion instantsearch-utils/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,15 +1,69 @@
plugins {
kotlin("multiplatform")
id("com.android.library")
id("com.vanniktech.maven.publish")
}

android {
namespace = "com.algolia.instantsearch.utils"
compileSdk = 33

defaultConfig {
minSdk = 21
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

buildFeatures {
buildConfig = false
}

testOptions.unitTests.apply {
isIncludeAndroidResources = true
isReturnDefaultValues = true
}
}

kotlin {
explicitApi()
jvm()
android {
publishAllLibraryVariants()
publishLibraryVariantsGroupedByFlavor = true
}

sourceSets {
all {
languageSettings.optIn("kotlin.RequiresOptIn")
languageSettings.optIn("com.algolia.instantsearch.InternalInstantSearch")
}

val commonMain by getting

val commonJvm by creating {
dependsOn(commonMain)
}

val androidMain by getting {
dependsOn(commonJvm)
}

val jvmMain by getting {
dependsOn(commonJvm)
}
}
}

tasks {
val copyTemplates = register<Copy>("copyTemplates") {
from("src/commonMain/templates")
into("$buildDir/generated/sources/templates/kotlin/main")
val version = project.extensions.extraProperties["VERSION_NAME"] as String // require clean build
expand("projectVersion" to version)
filteringCharset = "UTF-8"
}
kotlin.sourceSets.commonMain.get().kotlin.srcDir(copyTemplates)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.algolia.instantsearch.platform

import android.os.Build

internal actual fun osVersion(): String = "Android (${Build.VERSION.SDK_INT})"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.algolia.instantsearch.platform

/** Get current os version */
internal expect fun osVersion(): String
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.algolia.instantsearch.util

import com.algolia.instantsearch.BuildConfig
import com.algolia.instantsearch.InternalInstantSearch
import com.algolia.instantsearch.platform.osVersion

@InternalInstantSearch
public fun algoliaAgent(libName: String): String = "$libName (${BuildConfig.version}); ${osVersion()}"
6 changes: 6 additions & 0 deletions instantsearch-utils/src/commonMain/templates/BuildConfig.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.algolia.instantsearch

@InternalInstantSearch
public object BuildConfig {
public const val version: String = "$projectVersion"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.algolia.instantsearch.platform

/** Get current os version */
internal actual fun osVersion(): String = "JVM (${System.getProperty("java.version")})"
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package com.algolia.instantsearch.searcher.internal

import android.os.Build
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers

internal actual val defaultDispatcher: CoroutineDispatcher = Dispatchers.IO

internal actual val osVersion = "Android (${Build.VERSION.SDK_INT})"
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.algolia.instantsearch.extension.traceAnswersSearcher
import com.algolia.instantsearch.searcher.internal.SearcherExceptionHandler
import com.algolia.instantsearch.searcher.internal.defaultDispatcher
import com.algolia.instantsearch.searcher.internal.runAsLoading
import com.algolia.instantsearch.searcher.internal.withUserAgent
import com.algolia.instantsearch.searcher.internal.withAlgoliaAgent
import com.algolia.search.ExperimentalAlgoliaClientAPI
import com.algolia.search.client.Index
import com.algolia.search.model.response.ResponseSearch
Expand Down Expand Up @@ -39,7 +39,7 @@ public class SearcherAnswers(
override val response: SubscriptionValue<ResponseSearch?> = SubscriptionValue(null)

private val sequencer = Sequencer()
private val options get() = requestOptions.withUserAgent()
private val options get() = requestOptions.withAlgoliaAgent()
private val exceptionHandler = SearcherExceptionHandler(this)

init {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@ package com.algolia.instantsearch.searcher.facets.internal
import com.algolia.instantsearch.core.searcher.Sequencer
import com.algolia.instantsearch.core.subscription.SubscriptionValue
import com.algolia.instantsearch.extension.traceFacetsSearcher
import com.algolia.instantsearch.searcher.SearcherScope
import com.algolia.instantsearch.searcher.facets.FacetsSearcher
import com.algolia.instantsearch.searcher.facets.SearchForFacetQuery
import com.algolia.instantsearch.searcher.internal.SearcherExceptionHandler
import com.algolia.instantsearch.searcher.internal.defaultDispatcher
import com.algolia.instantsearch.searcher.internal.runAsLoading
import com.algolia.instantsearch.searcher.internal.withUserAgent
import com.algolia.instantsearch.searcher.internal.withAlgoliaAgent
import com.algolia.instantsearch.searcher.multi.internal.MultiSearchComponent
import com.algolia.instantsearch.searcher.multi.internal.MultiSearchOperation
import com.algolia.search.model.Attribute
Expand Down Expand Up @@ -47,7 +45,7 @@ internal class DefaultFacetsSearcher(
private val exceptionHandler = SearcherExceptionHandler(this)
private val sequencer = Sequencer()

private val options get() = requestOptions.withUserAgent()
private val options get() = requestOptions.withAlgoliaAgent()
private val indexedQuery get() = FacetIndexQuery(indexName, query, attribute, facetQuery)

init {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.algolia.instantsearch.searcher.hits.HitsSearcher
import com.algolia.instantsearch.searcher.hits.SearchForQuery
import com.algolia.instantsearch.searcher.internal.SearcherExceptionHandler
import com.algolia.instantsearch.searcher.internal.runAsLoading
import com.algolia.instantsearch.searcher.internal.withUserAgent
import com.algolia.instantsearch.searcher.internal.withAlgoliaAgent
import com.algolia.instantsearch.searcher.multi.internal.MultiSearchComponent
import com.algolia.instantsearch.searcher.multi.internal.MultiSearchOperation
import com.algolia.search.model.IndexName
Expand Down Expand Up @@ -45,7 +45,7 @@ internal class DefaultHitsSearcher(
private val exceptionHandler = SearcherExceptionHandler(this)
private val sequencer = Sequencer()

private val options get() = requestOptions.withUserAgent()
private val options get() = requestOptions.withAlgoliaAgent()
private val indexedQuery get() = IndexQuery(indexName, query)

init {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,3 @@ package com.algolia.instantsearch.searcher.internal
import kotlinx.coroutines.CoroutineDispatcher

internal expect val defaultDispatcher: CoroutineDispatcher

internal expect val osVersion: String
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
package com.algolia.instantsearch.searcher.internal

import com.algolia.instantsearch.core.InstantSearch
import com.algolia.instantsearch.extension.telemetrySchema
import com.algolia.instantsearch.util.algoliaAgent
import com.algolia.search.dsl.requestOptions
import com.algolia.search.transport.RequestOptions
import io.ktor.http.HttpHeaders

internal fun RequestOptions?.withUserAgent(): RequestOptions {
internal fun RequestOptions?.withAlgoliaAgent(): RequestOptions {
return requestOptions(this) {
header(HttpHeaders.UserAgent, userAgent())
}
}

private fun userAgent(): String {
return buildString {
append("$osVersion; ${InstantSearch.userAgent}")
telemetrySchema()?.let { append("; $it") }
parameter("X-Algolia-Agent", buildString {
append(algoliaAgent("InstantSearchAndroid"))
telemetrySchema()?.let { append("; $it") }
})
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ package com.algolia.instantsearch.searcher.multi.internal
import com.algolia.instantsearch.core.searcher.Sequencer
import com.algolia.instantsearch.core.subscription.SubscriptionValue
import com.algolia.instantsearch.extension.traceMultiSearcher
import com.algolia.instantsearch.searcher.SearcherScope
import com.algolia.instantsearch.searcher.internal.SearcherExceptionHandler
import com.algolia.instantsearch.searcher.internal.defaultDispatcher
import com.algolia.instantsearch.searcher.internal.runAsLoading
import com.algolia.instantsearch.searcher.internal.withUserAgent
import com.algolia.instantsearch.searcher.internal.withAlgoliaAgent
import com.algolia.instantsearch.searcher.multi.MultiSearcher
import com.algolia.instantsearch.searcher.multi.internal.extension.asResultSearchList
import com.algolia.search.client.ClientSearch
Expand Down Expand Up @@ -41,7 +39,7 @@ internal class DefaultMultiSearcher(
private val exceptionHandler = SearcherExceptionHandler(this)
private val components: MutableList<MultiSearchComponent<IndexedQuery, ResultSearch>> = mutableListOf()
private val sequencer = Sequencer()
private val options get() = requestOptions.withUserAgent()
private val options get() = requestOptions.withAlgoliaAgent()

init {
isLoading.subscribe { loading ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,3 @@ import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers

internal actual val defaultDispatcher: CoroutineDispatcher = Dispatchers.IO

internal actual val osVersion = "JVM (${System.getProperty("java.version")})"
1 change: 0 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
rootProject.name = "instantsearch-android"
enableFeaturePreview("VERSION_CATALOGS")

// Instant Search
include(":instantsearch")
Expand Down

0 comments on commit 79659b4

Please sign in to comment.