11package com.example.androidobservability
22
33import androidx.lifecycle.ViewModel
4+ import androidx.lifecycle.viewModelScope
45import com.launchdarkly.observability.interfaces.Metric
56import com.launchdarkly.observability.sdk.LDObserve
6- import com.launchdarkly.sdk.android.LDClient
77import io.opentelemetry.api.common.AttributeKey
88import io.opentelemetry.api.common.Attributes
99import io.opentelemetry.api.logs.Severity
10- import io.opentelemetry.api.trace.Span
11- import java.net.SocketTimeoutException
10+ import kotlinx.coroutines.Dispatchers
11+ import kotlinx.coroutines.launch
12+ import okhttp3.OkHttpClient
13+ import okhttp3.Request
14+ import java.io.BufferedInputStream
15+ import java.net.HttpURLConnection
16+ import java.net.URL
1217
1318class ViewModel : ViewModel () {
1419
15- private var lastSpan: Span ? = null
16-
1720 fun triggerMetric () {
1821 LDObserve .recordMetric(Metric (" test" , 50.0 ))
1922 }
@@ -33,20 +36,59 @@ class ViewModel : ViewModel() {
3336 )
3437 }
3538
36- fun triggerStartSpan () {
37- val newSpan = LDObserve .startSpan(" FakeSpan" , Attributes .empty())
38- newSpan.makeCurrent()
39- lastSpan = newSpan
40- LDClient .get().boolVariation(" my-boolean-flag" , false )
41- }
42-
43- fun triggerStopSpan () {
44- // TODO O11Y-397: for some reason stopped spans are stacking, the current span might be the problem
45- lastSpan?.end()
46- lastSpan = null
39+ fun triggerNestedSpans () {
40+ viewModelScope.launch(Dispatchers .IO ) {
41+ val newSpan0 = LDObserve .startSpan(" FakeSpan" , Attributes .empty())
42+ newSpan0.makeCurrent().use {
43+ val newSpan1 = LDObserve .startSpan(" FakeSpan1" , Attributes .empty())
44+ newSpan1.makeCurrent().use {
45+ val newSpan2 = LDObserve .startSpan(" FakeSpan2" , Attributes .empty())
46+ newSpan2.makeCurrent().use {
47+ sendOkHttpRequest()
48+ sendURLRequest()
49+ newSpan2.end()
50+ }
51+ newSpan1.end()
52+ }
53+ newSpan0.end()
54+ }
55+ }
4756 }
4857
4958 fun triggerCrash () {
5059 throw RuntimeException (" Failed to connect to bogus server." )
5160 }
61+
62+ fun triggerHttpRequests () {
63+ viewModelScope.launch(Dispatchers .IO ) {
64+ sendOkHttpRequest()
65+ sendURLRequest()
66+ }
67+ }
68+
69+ private fun sendOkHttpRequest () {
70+ // Create HTTP client
71+ val client = OkHttpClient ()
72+
73+ // Build request
74+ val request: Request = Request .Builder ()
75+ .url(" https://www.google.com" )
76+ .build()
77+
78+ client.newCall(request).execute().use { response ->
79+ println (" Response code: " + response.code)
80+ println (" Response body: " + response.body?.string())
81+ }
82+ }
83+
84+ private fun sendURLRequest () {
85+ val url = URL (" https://www.android.com/" )
86+ val urlConnection = url.openConnection() as HttpURLConnection
87+ try {
88+ val output = BufferedInputStream (urlConnection.inputStream).bufferedReader().use { it.readText() }
89+ println (" URLRequest output: $output " )
90+ } finally {
91+ urlConnection.disconnect()
92+ }
93+ }
5294}
0 commit comments