Skip to content

Commit c8fc132

Browse files
authored
Update 2019-03-11-performance_monitoring.md
1 parent 1f27e55 commit c8fc132

File tree

1 file changed

+63
-36
lines changed

1 file changed

+63
-36
lines changed

_drafts/2019-03-11-performance_monitoring.md

Lines changed: 63 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ image: firebase/performance_monitoring
77
github: firebase/tree/master/performance_monitoring
88
description: "Firebase"
99
version: Firebase-Perf 16.2
10-
keywords: "firebase, wydajność, performance, monitoring, trasa, trace, network, android, programowanie, programming"
10+
keywords: "firebase, wydajność, performance, monitoring, trasa, trace, metryka, metric, atrybut, attribute, network, android, programowanie, programming"
1111
---
1212

1313
## Cechy
@@ -16,59 +16,86 @@ keywords: "firebase, wydajność, performance, monitoring, trasa, trace, network
1616
## Trasy personalizowane
1717
Rejestrowanie wydajności aplikacji zachodzi na tzw. trasach (`traces`), które opisane są między dwoma miejscami: punktem startowym i końcowym. Automatyczna trasa dla działania aplikacji w tle (`App in background`) rozpoczyna się od momentu kiedy ostatnia Aktywność (`Activity`) będąca w `foreground` wywoła `onStop`, a zakończy się w momencie wywołania `onResume` przez pierwszą Aktywność przechodzącą z trybu `background` do `foreground`. Podobnie rzecz ma się z trasami własnymi, które dotyczą wybranego przez programistę przedziału cyklu życia.
1818

19-
//TODO
2019
{% highlight kotlin %}
21-
val myTrace = FirebasePerformance.getInstance().newTrace("test_trace")
22-
myTrace.start()
23-
myTrace.stop()
20+
class MainActivity : AppCompatActivity() {
21+
22+
lateinit var trace: Trace
23+
24+
override fun onCreate(savedInstanceState: Bundle?) {
25+
super.onCreate(savedInstanceState)
26+
setContentView(R.layout.activity_main)
27+
trace = FirebasePerformance.getInstance().newTrace("activity_creation")
28+
trace.start()
29+
30+
//do some work
31+
}
32+
33+
//more lifecycle methods
34+
35+
override fun onResume() {
36+
super.onResume()
37+
trace.stop()
38+
}
39+
}
2440
{% endhighlight %}
2541

26-
Trasy personalizowane mogą być dodatkowo opisane metrykami, których zadaniem jest liczenie wystąpień pewnych zdarzeń.
42+
Trasy personalizowane mogą być dodatkowo opisane metrykami, których zadaniem jest liczenie wystąpień pewnych zdarzeń oraz atrybutami informacyjnymi.
2743

28-
//TODO
2944
{% highlight kotlin %}
30-
val item = cache.fetch("item")
31-
if (item != null) {
32-
myTrace.incrementMetric("item_cache_hit", 1)
33-
} else {
34-
myTrace.incrementMetric("item_cache_miss", 1)
45+
//TextView mock, use some RecyclerView or ListView instead
46+
private fun addItem(item: String) {
47+
//start trace
48+
val addItemTrace = FirebasePerformance.getInstance().newTrace("add_item_trace")
49+
addItemTrace.start()
50+
51+
//set metrics and attributes
52+
addItemTrace.incrementMetric("text_length", item.length.toLong())
53+
addIteaTrace.putAttribute("item", item) //avoid personal info
54+
55+
//update UI
56+
val text = textViewItems.text
57+
textViewItems.text = "$text \n $item"
58+
59+
//stop trace
60+
addItemTrace.stop()
3561
}
3662
{% endhighlight %}
3763

3864
Dodanie adnotacji `@AddTrace` do metody wraz z jej nazwą powoduje rejestrowanie wydajności podczas wykonywania funkcji (trasa rozpoczyna się na początku metody, a kończy kiedy zostanie wykonana). Jednakże tak stworzone trasy nie mają możliwości dodawania metryk.
3965

40-
//TODO
4166
{% highlight kotlin %}
42-
@AddTrace(name = "onCreateTrace", enabled = true /* optional */)
43-
override fun onCreate(savedInstanceState: Bundle?) {
44-
super.onCreate(savedInstanceState)
67+
//use instead of addItem method if extra info no needed
68+
@AddTrace(name = "add_item_trace")
69+
private fun addItemWithoutMetrics(item: String) {
70+
val text = textViewItems.text
71+
textViewItems.text = "$text \n $item"
4572
}
4673
{% endhighlight %}
4774

4875
## Zapytania sieciowe
49-
Wysyłane żądania sieciowe `HTTP/S` są przechwytywane i przetwarzane do postaci raportów zawierających informacje takie jak: czas odpowiedzi, rozmiar wysłanych żądań i otrzymanych odpowiedzi, wskaźnik sukcesu oraz metadane urządzenia. Ze względu na zachowanie polityki prywatności Performance Monitoring pomija parametry `URL` w procesie budowania anonimowych wzorców adresów wyświetlanych w `konsoli Firebase`. Rejestrowanie zdarzeń sieciowych wspierane jest tylko dla żądań stworzony przy użyciu `OkHttp3`.
76+
Wsyłane żądania sieciowe `HTTP/S`w większośći automatycznie przechwytywane i przetwarzane do postaci raportów zawierających informacje takie jak: czas odpowiedzi, rozmiar wysłanych żądań i otrzymanych odpowiedzi, wskaźnik sukcesu oraz metadane urządzenia. Ze względu na zachowanie polityki prywatności Performance Monitoring pomija parametry `URL` w procesie budowania anonimowych wzorców adresów wyświetlanych w `konsoli Firebase`. Rejestrowanie zdarzeń sieciowych wspierane jest tylko dla żądań stworzony przy użyciu `OkHttp3`. W przypadku personalizacji raportowania zapytań sieciowych lub ich ręcznego wywołania można wykorzystać kod na poniższym listingu.
5077

51-
//TODO
5278
{% highlight kotlin %}
53-
val metric = FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
54-
FirebasePerformance.HttpMethod.GET)
55-
val url = URL("https://www.google.com")
56-
metric.start()
57-
val conn = url.openConnection() as HttpURLConnection
58-
conn.doOutput = true
59-
conn.setRequestProperty("Content-Type", "application/json")
60-
try {
61-
val outputStream = DataOutputStream(conn.outputStream)
62-
outputStream.write(data)
63-
} catch (ignored: IOException) {
79+
private fun download(link: String) {
80+
//run on background thread
81+
val url = URL(link)
82+
val metric = FirebasePerformance.getInstance().newHttpMetric(link, FirebasePerformance.HttpMethod.GET)
83+
metric.start()
84+
85+
//set connections
86+
val conn = url.openConnection() as HttpURLConnection
87+
conn.doOutput = true
88+
conn.setRequestProperty("Content-Type", "application/json")
89+
val content = convertStreamToString(conn.outputStream) //do something with content
90+
91+
metric.setHttpResponseCode(conn.responseCode)
92+
conn.disconnect()
93+
metric.stop()
6494
}
6595

66-
metric.setRequestPayloadSize(data.size.toLong())
67-
metric.setHttpResponseCode(conn.responseCode)
68-
printStreamContent(conn.inputStream)
69-
70-
conn.disconnect()
71-
metric.stop()
96+
fun convertStreamToString(outputStream: OutputStream): String {
97+
return "webpage content" //mock
98+
}
7299
{% endhighlight %}
73100

74101
## Debugowanie
@@ -103,4 +130,4 @@ Aby dokonywać zmian (włączenia lub wyłączenia raportowania) w trakcie dzia
103130

104131
{% highlight kotlin %}
105132
FirebasePerformance.getInstance().isPerformanceCollectionEnabled = true //get value from pref or remote config
106-
{% endhighlight %}
133+
{% endhighlight %}

0 commit comments

Comments
 (0)