Skip to content

Commit

Permalink
Merge branch 'master' into leandro/log_gating
Browse files Browse the repository at this point in the history
  • Loading branch information
leandro-godon committed Mar 6, 2024
2 parents 0ee9790 + 56458ca commit 22ff1cf
Show file tree
Hide file tree
Showing 29 changed files with 290 additions and 74 deletions.
8 changes: 7 additions & 1 deletion .github/workflows/release-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ jobs:
ref: release/${{ github.event.inputs.version_to_release }}
fetch-depth: 0
token: ${{ secrets.CD_GITHUB_TOKEN }}

- name: Set up JDK ${{ matrix.jdk-version }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.jdk-version }}
distribution: 'adopt'

- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v2
Expand Down Expand Up @@ -91,4 +97,4 @@ jobs:
# Restoring these files from a GitHub Actions cache might cause problems for future builds.
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties
rm -f ~/.gradle/caches/modules-2/gc.properties
Original file line number Diff line number Diff line change
Expand Up @@ -219,13 +219,19 @@ internal open class BaseTest {
assertEquals("GET", request.method)
}

else -> fail("Unexpected Request call. ${request.path}")
else -> handleUnexpectedFailure(request)
}
logTestMessage("Validated initialization request at ${request.path}")
}
}
}

private fun handleUnexpectedFailure(request: RecordedRequest) {
val body = readCompressedRequestBody(request)
writeFailedOutputToDisk(body, "unexpected-failure", ".observed")
fail("Unexpected Request call. ${request.path}")
}

/**
* Blocks the current thread until the SDK makes a HTTP request of the expected type.
*
Expand Down Expand Up @@ -290,10 +296,10 @@ internal open class BaseTest {

if (!result.success) {
val msg by lazy {
val observedOutput = writeOutputToDisk(requestBody, goldenFileName, ".observed")
val observedOutput = writeFailedOutputToDisk(requestBody, goldenFileName, ".observed")
val expected =
mContext.assets.open("golden-files/$goldenFileName").bufferedReader().readText()
val expectedOutput = writeOutputToDisk(expected, goldenFileName, ".expected")
val expectedOutput = writeFailedOutputToDisk(expected, goldenFileName, ".expected")

"Request ${request.path} differs from golden-files/$goldenFileName.\n" +
"JSON validation failure reason: ${result.message}" +
Expand Down Expand Up @@ -332,7 +338,7 @@ internal open class BaseTest {
}
}

private fun writeOutputToDisk(
private fun writeFailedOutputToDisk(
requestBody: String,
goldenFilename: String,
suffix: String
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ import androidx.appcompat.app.AppCompatActivity
public class MockActivity(private val context: EmbraceContext) : AppCompatActivity() {
private val fragmentManager = MockFragmentManager(this)
private val mockView = MockView(context)
private val mockWindow = MockWindow(context, mockView)

init {
mockWindow.callback = this
}

public fun setContext(context: Context) {
this.attachBaseContext(context)
}
Expand All @@ -27,6 +33,6 @@ public class MockActivity(private val context: EmbraceContext) : AppCompatActivi
}

override fun getWindow(): Window {
return MockWindow(context, mockView)
return mockWindow
}
}
16 changes: 8 additions & 8 deletions embrace-android-sdk/src/main/baseline-prof.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
HPLio/embrace/android/embracesdk/payload/AppExitInfoDataJsonAdapter;->toJson(Lcom/squareup/moshi/JsonWriter;Lio/embrace/android/embracesdk/payload/AppExitInfoData;)V
HSPLio/embrace/android/embracesdk/Embrace$$ExternalSyntheticLambda0;-><init>()V
HSPLio/embrace/android/embracesdk/Embrace$$ExternalSyntheticLambda0;->invoke()Ljava/lang/Object;
HSPLio/embrace/android/embracesdk/Embrace$AppFramework;->$values()[Lio/embrace/android/embracesdk/Embrace$AppFramework;
Expand Down Expand Up @@ -282,8 +283,6 @@ HSPLio/embrace/android/embracesdk/capture/crumbs/TapBreadcrumbDataSource;-><init
HSPLio/embrace/android/embracesdk/capture/crumbs/TapBreadcrumbDataSource;->cleanCollections()V
HSPLio/embrace/android/embracesdk/capture/crumbs/TapBreadcrumbDataSource;->getCapturedData()Ljava/util/List;
HSPLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource$1;-><init>(Lio/embrace/android/embracesdk/config/ConfigService;)V
HSPLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource$1;->invoke()I
HSPLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource$1;->invoke()Ljava/lang/Object;
HSPLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource;-><init>(Lio/embrace/android/embracesdk/config/ConfigService;Lio/embrace/android/embracesdk/internal/clock/Clock;Lio/embrace/android/embracesdk/capture/crumbs/BreadcrumbDataStore;Lio/embrace/android/embracesdk/logging/InternalEmbraceLogger;)V
HSPLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource;-><init>(Lio/embrace/android/embracesdk/config/ConfigService;Lio/embrace/android/embracesdk/internal/clock/Clock;Lio/embrace/android/embracesdk/capture/crumbs/BreadcrumbDataStore;Lio/embrace/android/embracesdk/logging/InternalEmbraceLogger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource;->addToViewLogsQueue(Ljava/lang/String;JZ)V
Expand Down Expand Up @@ -715,7 +714,6 @@ HSPLio/embrace/android/embracesdk/config/behavior/BreadcrumbBehavior$Companion;-
HSPLio/embrace/android/embracesdk/config/behavior/BreadcrumbBehavior$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLio/embrace/android/embracesdk/config/behavior/BreadcrumbBehavior;-><clinit>()V
HSPLio/embrace/android/embracesdk/config/behavior/BreadcrumbBehavior;-><init>(Lio/embrace/android/embracesdk/config/behavior/BehaviorThresholdCheck;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
HSPLio/embrace/android/embracesdk/config/behavior/BreadcrumbBehavior;->getViewBreadcrumbLimit()I
HSPLio/embrace/android/embracesdk/config/behavior/BreadcrumbBehavior;->isActivityBreadcrumbCaptureEnabled()Z
HSPLio/embrace/android/embracesdk/config/behavior/DataCaptureEventBehavior$2;-><clinit>()V
HSPLio/embrace/android/embracesdk/config/behavior/DataCaptureEventBehavior$2;-><init>()V
Expand Down Expand Up @@ -845,7 +843,6 @@ HSPLio/embrace/android/embracesdk/config/remote/RemoteConfig;->getOffset()Ljava/
HSPLio/embrace/android/embracesdk/config/remote/RemoteConfig;->getPctBetaFeaturesEnabled()Ljava/lang/Float;
HSPLio/embrace/android/embracesdk/config/remote/RemoteConfig;->getSessionConfig()Lio/embrace/android/embracesdk/config/remote/SessionRemoteConfig;
HSPLio/embrace/android/embracesdk/config/remote/RemoteConfig;->getThreshold()Ljava/lang/Integer;
HSPLio/embrace/android/embracesdk/config/remote/RemoteConfig;->getUiConfig()Lio/embrace/android/embracesdk/config/remote/UiRemoteConfig;
HSPLio/embrace/android/embracesdk/config/remote/RemoteConfig;->getWebViewVitals()Lio/embrace/android/embracesdk/config/remote/WebViewVitals;
HSPLio/embrace/android/embracesdk/config/remote/RemoteConfigJsonAdapter;-><init>(Lcom/squareup/moshi/Moshi;)V
HSPLio/embrace/android/embracesdk/config/remote/RemoteConfigJsonAdapter;->fromJson(Lcom/squareup/moshi/JsonReader;)Lio/embrace/android/embracesdk/config/remote/RemoteConfig;
Expand All @@ -858,7 +855,6 @@ HSPLio/embrace/android/embracesdk/config/remote/SessionRemoteConfigJsonAdapter;-
HSPLio/embrace/android/embracesdk/config/remote/SessionRemoteConfigJsonAdapter;->fromJson(Lcom/squareup/moshi/JsonReader;)Ljava/lang/Object;
HSPLio/embrace/android/embracesdk/config/remote/UiRemoteConfig;-><init>(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)V
HSPLio/embrace/android/embracesdk/config/remote/UiRemoteConfig;-><init>(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLio/embrace/android/embracesdk/config/remote/UiRemoteConfig;->getViews()Ljava/lang/Integer;
HSPLio/embrace/android/embracesdk/config/remote/UiRemoteConfigJsonAdapter;-><init>(Lcom/squareup/moshi/Moshi;)V
HSPLio/embrace/android/embracesdk/config/remote/UiRemoteConfigJsonAdapter;->fromJson(Lcom/squareup/moshi/JsonReader;)Lio/embrace/android/embracesdk/config/remote/UiRemoteConfig;
HSPLio/embrace/android/embracesdk/config/remote/UiRemoteConfigJsonAdapter;->fromJson(Lcom/squareup/moshi/JsonReader;)Ljava/lang/Object;
Expand Down Expand Up @@ -2231,7 +2227,6 @@ HSPLio/embrace/android/embracesdk/payload/ViewBreadcrumb;-><init>(Ljava/lang/Str
HSPLio/embrace/android/embracesdk/payload/ViewBreadcrumb;->getEnd()Ljava/lang/Long;
HSPLio/embrace/android/embracesdk/payload/ViewBreadcrumb;->getScreen()Ljava/lang/String;
HSPLio/embrace/android/embracesdk/payload/ViewBreadcrumb;->getStart()Ljava/lang/Long;
HSPLio/embrace/android/embracesdk/payload/ViewBreadcrumb;->setEnd(Ljava/lang/Long;)V
HSPLio/embrace/android/embracesdk/payload/ViewBreadcrumbJsonAdapter;-><init>(Lcom/squareup/moshi/Moshi;)V
HSPLio/embrace/android/embracesdk/payload/ViewBreadcrumbJsonAdapter;->toJson(Lcom/squareup/moshi/JsonWriter;Lio/embrace/android/embracesdk/payload/ViewBreadcrumb;)V
HSPLio/embrace/android/embracesdk/payload/ViewBreadcrumbJsonAdapter;->toJson(Lcom/squareup/moshi/JsonWriter;Ljava/lang/Object;)V
Expand Down Expand Up @@ -2379,7 +2374,6 @@ HSPLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->a
HSPLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->getActivityName(Landroid/app/Activity;)Ljava/lang/String;
HSPLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->getForegroundActivity()Landroid/app/Activity;
HSPLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
HSPLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->onActivityPaused(Landroid/app/Activity;)V
HSPLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->onActivityResumed(Landroid/app/Activity;)V
HSPLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->onActivityStarted(Landroid/app/Activity;)V
HSPLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->updateOrientationWithActivity(Landroid/app/Activity;)V
Expand Down Expand Up @@ -3402,6 +3396,8 @@ PLio/embrace/android/embracesdk/capture/aei/EmbraceApplicationExitInfoService;->
PLio/embrace/android/embracesdk/capture/crumbs/EmbraceBreadcrumbService;->onViewClose(Landroid/app/Activity;)V
PLio/embrace/android/embracesdk/capture/crumbs/FragmentBreadcrumbDataSource;->onViewClose()V
PLio/embrace/android/embracesdk/capture/crumbs/PushNotificationCaptureService;->onViewClose(Landroid/app/Activity;)V
PLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource$1;->invoke()I
PLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource$1;->invoke()Ljava/lang/Object;
PLio/embrace/android/embracesdk/capture/crumbs/ViewBreadcrumbDataSource;->onViewClose()V
PLio/embrace/android/embracesdk/capture/metadata/EmbraceMetadataService;->access$getDiskUsage$p(Lio/embrace/android/embracesdk/capture/metadata/EmbraceMetadataService;)Lio/embrace/android/embracesdk/payload/DiskUsage;
PLio/embrace/android/embracesdk/capture/metadata/EmbraceMetadataService;->access$setDiskUsage$p(Lio/embrace/android/embracesdk/capture/metadata/EmbraceMetadataService;Lio/embrace/android/embracesdk/payload/DiskUsage;)V
Expand All @@ -3414,7 +3410,10 @@ PLio/embrace/android/embracesdk/capture/thermalstate/EmbraceThermalStatusService
PLio/embrace/android/embracesdk/capture/thermalstate/EmbraceThermalStatusService;->handleThermalStateChange(Ljava/lang/Integer;)V
PLio/embrace/android/embracesdk/config/behavior/AppExitInfoBehavior;->appExitInfoMaxNum()I
PLio/embrace/android/embracesdk/config/behavior/AutoDataCaptureBehavior;->isSigHandlerDetectionEnabled()Z
PLio/embrace/android/embracesdk/config/behavior/BreadcrumbBehavior;->getViewBreadcrumbLimit()I
PLio/embrace/android/embracesdk/config/local/SdkLocalConfig;->getSigHandlerDetection()Ljava/lang/Boolean;
PLio/embrace/android/embracesdk/config/remote/RemoteConfig;->getUiConfig()Lio/embrace/android/embracesdk/config/remote/UiRemoteConfig;
PLio/embrace/android/embracesdk/config/remote/UiRemoteConfig;->getViews()Ljava/lang/Integer;
PLio/embrace/android/embracesdk/event/EmbraceEventService$logStartupSpan$1;->run()V
PLio/embrace/android/embracesdk/event/EmbraceEventService;->access$getSTARTUP_SPAN_NAME$cp()Ljava/lang/String;
PLio/embrace/android/embracesdk/event/EmbraceEventService;->access$getSpanService$p(Lio/embrace/android/embracesdk/event/EmbraceEventService;)Lio/embrace/android/embracesdk/internal/spans/SpanService;
Expand Down Expand Up @@ -3467,7 +3466,6 @@ PLio/embrace/android/embracesdk/payload/AppExitInfoData;->getStatus$embrace_andr
PLio/embrace/android/embracesdk/payload/AppExitInfoData;->getTimestamp$embrace_android_sdk_release()Ljava/lang/Long;
PLio/embrace/android/embracesdk/payload/AppExitInfoData;->getTrace$embrace_android_sdk_release()Ljava/lang/String;
PLio/embrace/android/embracesdk/payload/AppExitInfoData;->getTraceStatus$embrace_android_sdk_release()Ljava/lang/String;
PLio/embrace/android/embracesdk/payload/AppExitInfoDataJsonAdapter;->toJson(Lcom/squareup/moshi/JsonWriter;Lio/embrace/android/embracesdk/payload/AppExitInfoData;)V
PLio/embrace/android/embracesdk/payload/AppExitInfoDataJsonAdapter;->toJson(Lcom/squareup/moshi/JsonWriter;Ljava/lang/Object;)V
PLio/embrace/android/embracesdk/payload/DiskUsage;-><init>(Ljava/lang/Long;Ljava/lang/Long;)V
PLio/embrace/android/embracesdk/payload/DiskUsage;->copy$default(Lio/embrace/android/embracesdk/payload/DiskUsage;Ljava/lang/Long;Ljava/lang/Long;ILjava/lang/Object;)Lio/embrace/android/embracesdk/payload/DiskUsage;
Expand All @@ -3477,10 +3475,12 @@ PLio/embrace/android/embracesdk/payload/DiskUsage;->getDeviceDiskFree()Ljava/lan
PLio/embrace/android/embracesdk/payload/DiskUsageJsonAdapter;->toJson(Lcom/squareup/moshi/JsonWriter;Lio/embrace/android/embracesdk/payload/DiskUsage;)V
PLio/embrace/android/embracesdk/payload/DiskUsageJsonAdapter;->toJson(Lcom/squareup/moshi/JsonWriter;Ljava/lang/Object;)V
PLio/embrace/android/embracesdk/payload/ThermalState;-><init>(JI)V
PLio/embrace/android/embracesdk/payload/ViewBreadcrumb;->setEnd(Ljava/lang/Long;)V
PLio/embrace/android/embracesdk/prefs/EmbracePreferencesService;->getApplicationExitInfoHistory()Ljava/util/Set;
PLio/embrace/android/embracesdk/prefs/EmbracePreferencesService;->onViewClose(Landroid/app/Activity;)V
PLio/embrace/android/embracesdk/prefs/EmbracePreferencesService;->setApplicationExitInfoHistory(Ljava/util/Set;)V
PLio/embrace/android/embracesdk/prefs/EmbracePreferencesService;->setArrayPreference(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/util/Set;)V
PLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleListener$DefaultImpls;->onViewClose(Lio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleListener;Landroid/app/Activity;)V
PLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->onActivityDestroyed(Landroid/app/Activity;)V
PLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->onActivityPaused(Landroid/app/Activity;)V
PLio/embrace/android/embracesdk/session/lifecycle/ActivityLifecycleTracker;->onActivityStopped(Landroid/app/Activity;)V
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ internal interface SpanDataSource : DataSource<SpanService> {
internal fun <T> SpanService.startSpanCapture(obj: T, mapper: T.() -> StartSpanData): EmbraceSpan? {
val data = obj.mapper()
return createSpan(data.spanName)?.apply {
data.attributes?.forEach {
data.attributes.forEach {
addAttribute(it.key, it.value)
}
start()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,19 @@ import io.embrace.android.embracesdk.Severity

/**
* Represents a Log event that can be added to the current session span.
*
*
* @param embType the type of the span. Used to differentiate data from different sources
* by the backend.
* @param severity the severity of the log
* @param message the message of the log
* @param attributes the attributes of the span. emb-type is automatically added to these.
*/
internal class LogEventData(
val startTimeMs: Long,
embType: String,
val severity: Severity,
val message: String,
val attributes: Map<String, String>?
)
attributes: Map<String, String>? = null
) {
val attributes = (attributes ?: emptyMap()).plus(Pair("emb.type", embType))
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package io.embrace.android.embracesdk.arch.destination
import io.opentelemetry.api.common.AttributeKey
import io.opentelemetry.api.logs.Logger
import io.opentelemetry.api.logs.Severity
import java.util.concurrent.TimeUnit

internal class LogWriterImpl(private val logger: Logger) : LogWriter {

Expand All @@ -15,9 +14,8 @@ internal class LogWriterImpl(private val logger: Logger) : LogWriter {
.setBody(logEventData.message)
.setSeverity(logEventData.severity.toOtelSeverity())
.setSeverityText(logEventData.severity.name)
.setTimestamp(logEventData.startTimeMs, TimeUnit.MILLISECONDS)

logEventData.attributes?.forEach {
logEventData.attributes.forEach {
builder.setAttribute(AttributeKey.stringKey(it.key), it.value)
}
builder.emit()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,18 @@ package io.embrace.android.embracesdk.arch.destination

/**
* Represents a span event that can be added to the current session span.
*
* @param embType the type of the event. Used to differentiate data from different sources
* by the backend.
* @param spanName the name of the span event.
* @param spanStartTimeMs the start time of the span event in milliseconds.
* @param attributes the attributes of the span event. emb-type is automatically added to these.
*/
internal class SpanEventData(
embType: String,
val spanName: String,
val spanStartTimeMs: Long,
val attributes: Map<String, String>?
)
attributes: Map<String, String>? = null
) {
val attributes = (attributes ?: emptyMap()).plus(Pair("emb.type", embType))
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,18 @@ package io.embrace.android.embracesdk.arch.destination

/**
* Holds the information required to start a span.
*
* @param embType the type of the span. Used to differentiate data from different sources
* by the backend.
* @param spanName the name of the span.
* @param spanStartTimeMs the start time of the span event in milliseconds.
* @param attributes the attributes of the span. emb-type is automatically added to these.
*/
internal class StartSpanData(
embType: String,
val spanName: String,
val spanStartTimeMs: Long,
val attributes: Map<String, String>?
)
attributes: Map<String, String>? = null
) {
val attributes = (attributes ?: emptyMap()).plus(Pair("emb.type", embType))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.embrace.android.embracesdk.capture.envelope

import io.embrace.android.embracesdk.internal.payload.Envelope

internal fun interface EnvelopeSource<T> {
fun getEnvelope(): Envelope<T>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.embrace.android.embracesdk.capture.envelope

import io.embrace.android.embracesdk.capture.envelope.session.SessionPayloadSource
import io.embrace.android.embracesdk.internal.payload.Envelope
import io.embrace.android.embracesdk.internal.session.SessionPayload

internal class SessionEnvelopeSource(
private val sessionPayloadSource: SessionPayloadSource
) : EnvelopeSource<SessionPayload> {

override fun getEnvelope(): Envelope<SessionPayload> {
sessionPayloadSource.getSessionPayload()
throw NotImplementedError("Not yet implemented")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.embrace.android.embracesdk.capture.envelope.metadata

import io.embrace.android.embracesdk.internal.payload.EnvelopeMetadata

/**
* Creates a [EnvelopeMetadata] object for Embrace API requests.
*/
internal fun interface EnvelopeMetadataSource {
fun getEnvelopeMetadata(): EnvelopeMetadata
}
Loading

0 comments on commit 22ff1cf

Please sign in to comment.