Manually instrument some archive logic (#44)
This commit is contained in:
parent
27886a92d3
commit
b5b79b94f2
|
@ -4,6 +4,7 @@ const assert = require('assert');
|
||||||
const urlJoin = require('url-join');
|
const urlJoin = require('url-join');
|
||||||
|
|
||||||
const { fetchEndpointAsJson } = require('./lib/fetch-endpoint');
|
const { fetchEndpointAsJson } = require('./lib/fetch-endpoint');
|
||||||
|
const { traceFunction } = require('./tracing/trace-utilities');
|
||||||
|
|
||||||
const config = require('./lib/config');
|
const config = require('./lib/config');
|
||||||
const matrixServerUrl = config.get('matrixServerUrl');
|
const matrixServerUrl = config.get('matrixServerUrl');
|
||||||
|
@ -140,4 +141,4 @@ async function fetchEventsInRange(accessToken, roomId, startTs, endTs, limit) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = fetchEventsInRange;
|
module.exports = traceFunction(fetchEventsInRange);
|
||||||
|
|
|
@ -4,6 +4,7 @@ const assert = require('assert');
|
||||||
|
|
||||||
const urlJoin = require('url-join');
|
const urlJoin = require('url-join');
|
||||||
const { fetchEndpointAsJson } = require('./lib/fetch-endpoint');
|
const { fetchEndpointAsJson } = require('./lib/fetch-endpoint');
|
||||||
|
const { traceFunction } = require('./tracing/trace-utilities');
|
||||||
|
|
||||||
const config = require('./lib/config');
|
const config = require('./lib/config');
|
||||||
const matrixServerUrl = config.get('matrixServerUrl');
|
const matrixServerUrl = config.get('matrixServerUrl');
|
||||||
|
@ -48,4 +49,4 @@ async function fetchRoomData(accessToken, roomId) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = fetchRoomData;
|
module.exports = traceFunction(fetchRoomData);
|
||||||
|
|
|
@ -8,6 +8,7 @@ const fork = require('child_process').fork;
|
||||||
|
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const RethrownError = require('../lib/rethrown-error');
|
const RethrownError = require('../lib/rethrown-error');
|
||||||
|
const { traceFunction } = require('../tracing/trace-utilities');
|
||||||
|
|
||||||
// The render should be fast. If it's taking more than 5 seconds, something has
|
// The render should be fast. If it's taking more than 5 seconds, something has
|
||||||
// gone really wrong.
|
// gone really wrong.
|
||||||
|
@ -105,4 +106,4 @@ async function renderHydrogenToString(options) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = renderHydrogenToString;
|
module.exports = traceFunction(renderHydrogenToString);
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const assert = require('assert');
|
||||||
|
const opentelemetryApi = require('@opentelemetry/api');
|
||||||
|
|
||||||
|
const packageInfo = require('../../package.json');
|
||||||
|
assert(packageInfo.name);
|
||||||
|
assert(packageInfo.version);
|
||||||
|
|
||||||
|
const tracer = opentelemetryApi.trace.getTracer(packageInfo.name, packageInfo.version);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps an existing function to instrument it with OpenTelemetry tracing. Now
|
||||||
|
* whenever the function runs, it will create a span with the given name. It's
|
||||||
|
* basically `tracer.startActiveSpan` with some sensible default behaviors to
|
||||||
|
* automatically end spans:
|
||||||
|
* - when function completes successfully, status of span also set
|
||||||
|
* - when function throws (exception recorded against span)
|
||||||
|
* - if function returns a Promise, the promise is resolved
|
||||||
|
* @param name Span name, passed through to `tracer.startActiveSpan`
|
||||||
|
* @param fn The function to wrap
|
||||||
|
* @returns The wrapped function
|
||||||
|
*
|
||||||
|
* via
|
||||||
|
* https://github.com/open-telemetry/opentelemetry-js-api/issues/164#issuecomment-1174925516
|
||||||
|
*/
|
||||||
|
function trace(name, fn) {
|
||||||
|
return function (...args) {
|
||||||
|
return tracer.startActiveSpan(name, async (span) => {
|
||||||
|
try {
|
||||||
|
const result = await Promise.resolve(fn(...args));
|
||||||
|
span.setStatus({
|
||||||
|
code: opentelemetryApi.SpanStatusCode.OK,
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
} catch (e) {
|
||||||
|
const err = e;
|
||||||
|
span.recordException(err);
|
||||||
|
span.setStatus({
|
||||||
|
code: opentelemetryApi.SpanStatusCode.ERROR,
|
||||||
|
message: err.message,
|
||||||
|
});
|
||||||
|
throw err;
|
||||||
|
} finally {
|
||||||
|
span.end();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps an existing function to instrument it with OpenTelemetry tracing. The
|
||||||
|
* span name will be the name of the function.
|
||||||
|
*/
|
||||||
|
function traceFunction(fn) {
|
||||||
|
return trace(fn.name, fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
trace,
|
||||||
|
traceFunction,
|
||||||
|
};
|
Loading…
Reference in New Issue