[perf] Return Promise types

This commit is contained in:
Elliot Hesp 2018-07-12 13:25:11 +01:00
parent 417b6ba542
commit 2c776a60e8
5 changed files with 121 additions and 5 deletions

View File

@ -48,6 +48,7 @@ public class RNFirebasePerformance extends ReactContextBaseJavaModule {
@ReactMethod @ReactMethod
public void getTraceAttribute(String identifier, String attribute, Promise promise) { public void getTraceAttribute(String identifier, String attribute, Promise promise) {
promise.resolve(getOrCreateTrace(identifier).getAttribute(attribute)); promise.resolve(getOrCreateTrace(identifier).getAttribute(attribute));
<<<<<<< Updated upstream
} }
@ReactMethod @ReactMethod
@ -75,6 +76,35 @@ public class RNFirebasePerformance extends ReactContextBaseJavaModule {
} }
@ReactMethod @ReactMethod
=======
}
@ReactMethod
public void getTraceAttributes(String identifier, Promise promise) {
Map<String, String> attributes = getOrCreateTrace(identifier).getAttributes();
WritableMap map = Arguments.createMap();
for (Map.Entry<String, String> entry : attributes.entrySet()) {
map.putString(entry.getKey(), entry.getValue());
}
promise.resolve(map);
}
@ReactMethod
public void getTraceLongMetric(String identifier, String metricName, Promise promise) {
Integer value = Long.valueOf(getOrCreateTrace(identifier).getLongMetric(metricName)).intValue();
promise.resolve(value);
}
@ReactMethod
public void incrementTraceMetric(String identifier, String metricName, Integer incrementBy, Promise promise) {
getOrCreateTrace(identifier).incrementMetric(metricName, incrementBy.longValue());
promise.resolve(null);
}
@ReactMethod
>>>>>>> Stashed changes
public void putTraceAttribute(String identifier, String attribute, String value, Promise promise) { public void putTraceAttribute(String identifier, String attribute, String value, Promise promise) {
getOrCreateTrace(identifier).putAttribute(attribute, value); getOrCreateTrace(identifier).putAttribute(attribute, value);
promise.resolve(null); promise.resolve(null);
@ -197,8 +227,40 @@ public class RNFirebasePerformance extends ReactContextBaseJavaModule {
if (httpMetrics.containsKey(identifier)) { if (httpMetrics.containsKey(identifier)) {
return httpMetrics.get(identifier); return httpMetrics.get(identifier);
} }
<<<<<<< Updated upstream
HttpMetric httpMetric = FirebasePerformance.getInstance().newHttpMetric(url, httpMethod); HttpMetric httpMetric = FirebasePerformance.getInstance().newHttpMetric(url, httpMethod);
httpMetrics.put(identifier, httpMetric); httpMetrics.put(identifier, httpMetric);
return httpMetric; return httpMetric;
} }
=======
HttpMetric httpMetric = FirebasePerformance.getInstance().newHttpMetric(url, this.mapStringToMethod(httpMethod));
httpMetrics.put(identifier, httpMetric);
return httpMetric;
}
private String mapStringToMethod(String value) {
switch (value) {
case "CONNECT":
return FirebasePerformance.HttpMethod.CONNECT;
case "DELETE":
return FirebasePerformance.HttpMethod.DELETE;
case "GET":
return FirebasePerformance.HttpMethod.GET;
case "HEAD":
return FirebasePerformance.HttpMethod.HEAD;
case "OPTIONS":
return FirebasePerformance.HttpMethod.OPTIONS;
case "PATCH":
return FirebasePerformance.HttpMethod.PATCH;
case "POST":
return FirebasePerformance.HttpMethod.POST;
case "PUT":
return FirebasePerformance.HttpMethod.PUT;
case "TRACE":
return FirebasePerformance.HttpMethod.TRACE;
}
return "";
}
>>>>>>> Stashed changes
} }

View File

@ -30,6 +30,7 @@ describe('perf()', () => {
describe('newHttpMetric()', () => { describe('newHttpMetric()', () => {
it('returns an instance of HttpMetric', async () => { it('returns an instance of HttpMetric', async () => {
<<<<<<< Updated upstream
const trace = firebase.perf().newHttpMetric('foo', 'bar'); const trace = firebase.perf().newHttpMetric('foo', 'bar');
trace.constructor.name.should.be.equal('HttpMetric'); trace.constructor.name.should.be.equal('HttpMetric');
}); });
@ -38,6 +39,20 @@ describe('perf()', () => {
(() => firebase.perf().newHttpMetric(123, [1, 2])).should.throw( (() => firebase.perf().newHttpMetric(123, [1, 2])).should.throw(
'firebase.perf().newHttpMetric() requires url and httpMethod string values' 'firebase.perf().newHttpMetric() requires url and httpMethod string values'
); );
=======
const trace = firebase.perf().newHttpMetric('foo', 'GET');
trace.constructor.name.should.be.equal('HttpMetric');
});
it('errors if url/httpMethod not a string', async () => {
(() => firebase.perf().newHttpMetric(123, [1, 2])).should.throw(
'firebase.perf().newHttpMetric() requires url and httpMethod string values'
);
});
it('errors if httpMethod not a valid type', async () => {
(() => firebase.perf().newHttpMetric('foo', 'FOO')).should.throw(); // TODO error
>>>>>>> Stashed changes
}); });
}); });
}); });

View File

@ -16,7 +16,7 @@ export default class HttpMetric {
this.httpMethod = httpMethod; this.httpMethod = httpMethod;
} }
getAttribute(attribute: string): Promise<string> { getAttribute(attribute: string): Promise<string | null> {
return getNativeModule(this._perf).getHttpMetricAttribute( return getNativeModule(this._perf).getHttpMetricAttribute(
this.url, this.url,
this.httpMethod, this.httpMethod,
@ -31,7 +31,8 @@ export default class HttpMetric {
); );
} }
putAttribute(attribute: string, value: string): Promise<null> { // TODO return true or false
putAttribute(attribute: string, value: string): Promise<true | false> {
return getNativeModule(this._perf).putHttpMetricAttribute( return getNativeModule(this._perf).putHttpMetricAttribute(
this.url, this.url,
this.httpMethod, this.httpMethod,

View File

@ -14,7 +14,7 @@ export default class Trace {
this.identifier = identifier; this.identifier = identifier;
} }
getAttribute(attribute: string): Promise<string> { getAttribute(attribute: string): Promise<string | null> {
return getNativeModule(this._perf).getTraceAttribute( return getNativeModule(this._perf).getTraceAttribute(
this.identifier, this.identifier,
attribute attribute
@ -40,7 +40,8 @@ export default class Trace {
); );
} }
putAttribute(attribute: string, value: string): Promise<null> { // TODO return true or false
putAttribute(attribute: string, value: string): Promise<true | false> {
return getNativeModule(this._perf).putTraceAttribute( return getNativeModule(this._perf).putTraceAttribute(
this.identifier, this.identifier,
attribute, attribute,

View File

@ -12,6 +12,29 @@ import type App from '../core/app';
export const MODULE_NAME = 'RNFirebasePerformance'; export const MODULE_NAME = 'RNFirebasePerformance';
export const NAMESPACE = 'perf'; export const NAMESPACE = 'perf';
const HTTP_METHODS = {
CONNECT: true,
DELETE: true,
GET: true,
HEAD: true,
OPTIONS: true,
PATCH: true,
POST: true,
PUT: true,
TRACE: true,
};
type HttpMethod =
| 'CONNECT'
| 'DELETE'
| 'GET'
| 'HEAD'
| 'OPTIONS'
| 'PATCH'
| 'POST'
| 'PUT'
| 'TRACE';
export default class PerformanceMonitoring extends ModuleBase { export default class PerformanceMonitoring extends ModuleBase {
constructor(app: App) { constructor(app: App) {
super(app, { super(app, {
@ -49,13 +72,27 @@ export default class PerformanceMonitoring extends ModuleBase {
return new Trace(this, trace); return new Trace(this, trace);
} }
newHttpMetric(url: string, httpMethod: string) { /**
* Return a new HttpMetric instance
* @param url
* @param httpMethod
* @returns {HttpMetric}
*/
newHttpMetric(url: string, httpMethod: HttpMethod): HttpMetric {
if (typeof url !== 'string' || typeof httpMethod !== 'string') { if (typeof url !== 'string' || typeof httpMethod !== 'string') {
throw new Error( throw new Error(
'firebase.perf().newHttpMetric() requires url and httpMethod string values' 'firebase.perf().newHttpMetric() requires url and httpMethod string values'
); );
} }
if (!HTTP_METHODS[httpMethod]) {
throw new Error(
`firebase.perf().newHttpMetric() httpMethod should be one of ${Object.keys(
HTTP_METHODS
).join(', ')}`
);
}
return new HttpMetric(this, url, httpMethod); return new HttpMetric(this, url, httpMethod);
} }
} }