Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 9f4ee48

Browse files
Merge pull request #1582 from EddyVerbruggen/performance-http-metrics
Performance http metrics
2 parents 9d01fef + 1d741b6 commit 9f4ee48

File tree

4 files changed

+112
-0
lines changed

4 files changed

+112
-0
lines changed

docs/PERFORMANCE_MONITORING.md

+38
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,41 @@ if (firebaseTrace) {
8484
firebaseTrace = undefined;
8585
}
8686
```
87+
88+
### `startHttpMetric`
89+
To be able to interact with a started HTTP metric, you can remember it in a property (in this case `firebaseHttpMetric`):
90+
91+
```typescript
92+
import { performance as firebasePerformance } from "nativescript-plugin-firebase";
93+
import { FirebaseHttpMetric } from "nativescript-plugin-firebase/performance/performance";
94+
95+
const firebaseHttpMetric: FirebaseHttpMetric = firebasePerformance.startHttpMetric("https://postman-echo.com/get", "GET");
96+
```
97+
98+
Now you can call several functions on the remembered metric object, read on below. And don't forget to use `metric.stop` afterwards.
99+
100+
### `metric.setRequestPayloadSize`
101+
102+
```typescript
103+
if (firebaseHttpMetric) {
104+
firebaseHttpMetric.setRequestPayloadSize(42);
105+
}
106+
```
107+
108+
### `metric.setHttpResponseCode`
109+
110+
```typescript
111+
if (firebaseHttpMetric) {
112+
firebaseHttpMetric.setHttpResponseCode(200);
113+
}
114+
```
115+
116+
### `metric.stop`
117+
To stop the metric, call `stop` on the remembered metric object:
118+
119+
```typescript
120+
if (firebaseHttpMetric) {
121+
firebaseHttpMetric.stop();
122+
firebaseHttpMetric = undefined;
123+
}
124+
```

src/performance/performance.android.ts

+22
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ export function startTrace(name: string): FirebaseTrace {
44
return new FirebaseTrace(trace);
55
}
66

7+
export function startHttpMetric(url: string, method: string) {
8+
const httpMetric = com.google.firebase.perf.FirebasePerformance.getInstance().newHttpMetric(url, method);
9+
httpMetric.start();
10+
return new FirebaseHttpMetric(httpMetric);
11+
}
12+
713
export class FirebaseTrace {
814
constructor(private nativeTrace: com.google.firebase.perf.metrics.Trace) {
915
}
@@ -39,3 +45,19 @@ export class FirebaseTrace {
3945
this.nativeTrace.stop();
4046
}
4147
}
48+
49+
export class FirebaseHttpMetric {
50+
constructor(private nativeHttpMetric: com.google.firebase.perf.metrics.HttpMetric) {}
51+
52+
setRequestPayloadSize(size: number) {
53+
this.nativeHttpMetric.setRequestPayloadSize(size);
54+
}
55+
56+
setHttpResponseCode(responseCode: number) {
57+
this.nativeHttpMetric.setHttpResponseCode(responseCode);
58+
}
59+
60+
stop(): void {
61+
this.nativeHttpMetric.stop();
62+
}
63+
}

src/performance/performance.d.ts

+8
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,11 @@ export declare class FirebaseTrace {
88
}
99

1010
export declare function startTrace(name: string): FirebaseTrace;
11+
12+
export declare class FirebaseHttpMetric {
13+
setRequestPayloadSize(size: number): void;
14+
setHttpResponseCode(responseCode: number): void;
15+
stop(): void;
16+
}
17+
18+
export declare function startHttpMetric(url: string, method: string): FirebaseHttpMetric;

src/performance/performance.ios.ts

+44
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ export function startTrace(name: string): FirebaseTrace {
44
return new FirebaseTrace(FIRPerformance.startTraceWithName(name));
55
}
66

7+
export function startHttpMetric(url: string, method: string) {
8+
const httpMetric = FIRHTTPMetric.alloc().initWithURLHTTPMethod(NSURL.URLWithString(url), getHttpMethodFromString(method));
9+
httpMetric.start();
10+
return new FirebaseHttpMetric(httpMetric);
11+
}
12+
713
export class FirebaseTrace {
814
constructor(private nativeTrace: FIRTrace) {
915
}
@@ -32,3 +38,41 @@ export class FirebaseTrace {
3238
this.nativeTrace.stop();
3339
}
3440
}
41+
42+
export class FirebaseHttpMetric {
43+
constructor(private nativeHttpMetric: FIRHTTPMetric) {
44+
}
45+
46+
setRequestPayloadSize(size: number) {
47+
this.nativeHttpMetric.requestPayloadSize = size;
48+
}
49+
50+
setHttpResponseCode(responseCode: number) {
51+
this.nativeHttpMetric.responseCode = responseCode;
52+
}
53+
54+
stop(): void {
55+
this.nativeHttpMetric.stop();
56+
}
57+
}
58+
59+
function getHttpMethodFromString(method: string): FIRHTTPMethod {
60+
switch (method) {
61+
case 'GET':
62+
return FIRHTTPMethod.GET;
63+
case 'PUT':
64+
return FIRHTTPMethod.PUT;
65+
case 'POST':
66+
return FIRHTTPMethod.POST;
67+
case 'DELETE':
68+
return FIRHTTPMethod.DELETE;
69+
case 'HEAD':
70+
return FIRHTTPMethod.HEAD;
71+
case 'PATCH':
72+
return FIRHTTPMethod.PATCH;
73+
case 'OPTIONS':
74+
return FIRHTTPMethod.OPTIONS;
75+
default:
76+
return null;
77+
}
78+
}

0 commit comments

Comments
 (0)