mirror of
https://github.com/HeyPuter/puter.git
synced 2026-05-04 00:20:45 +00:00
dev: extension.span
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
const { kv } = extension.import('data');
|
||||
|
||||
const spanify = extension.import('core').spanify;
|
||||
const svc_trace = extension.import('service:traceService');
|
||||
const span = extension.span;
|
||||
|
||||
/**
|
||||
* Here we create an interface called 'hello-world'. This interface
|
||||
@@ -69,7 +68,11 @@ extension.on('create.drivers', event => {
|
||||
|
||||
extension.on('create.drivers', event => {
|
||||
event.createDriver('hello-world', 'slow-hello', {
|
||||
greet: spanify('slow-hello:greet', async ({ subject }) => {
|
||||
greet: span('slow-hello:greet', async ({ subject }) => {
|
||||
await new Promise(rslv => setTimeout(rslv, 1000));
|
||||
await span.run(async () => {
|
||||
await new Promise(rslv => setTimeout(rslv, 1000));
|
||||
});
|
||||
await new Promise(rslv => setTimeout(rslv, 1000));
|
||||
return `Hello, ${subject ?? 'World'}!`;
|
||||
}),
|
||||
|
||||
@@ -361,6 +361,29 @@ class Extension extends AdvancedBase {
|
||||
return extensionConsole;
|
||||
}
|
||||
|
||||
get tracer () {
|
||||
const trace = this.import('tel').trace;
|
||||
return trace.getTracer(`extension:${this.name}`);
|
||||
}
|
||||
|
||||
get span () {
|
||||
const span = (label, fn) => {
|
||||
const spanify = this.import('core').spanify;
|
||||
return spanify(label, fn, this.tracer);
|
||||
};
|
||||
|
||||
// Add `.run` for more readable immediate invocation
|
||||
span.run = (label, fn) => {
|
||||
if ( typeof label === 'function' ) {
|
||||
fn = label;
|
||||
label = fn.name || 'span.run';
|
||||
}
|
||||
return span(label, fn)();
|
||||
};
|
||||
|
||||
return span;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will create the "default service" for an extension.
|
||||
* This is specifically for Puter extensions that do not define their
|
||||
|
||||
@@ -42,7 +42,7 @@ promises.push(tracer.startActiveSpan(`job:${job.id}`, (span) => {
|
||||
}));
|
||||
*/
|
||||
|
||||
const spanify = (label, fn) => async (...args) => {
|
||||
const spanify = (label, fn, tracer) => async (...args) => {
|
||||
const context = Context.get();
|
||||
if ( ! context ) {
|
||||
// We don't use the proper logger here because we would normally
|
||||
@@ -50,7 +50,7 @@ const spanify = (label, fn) => async (...args) => {
|
||||
console.error('spanify failed', new Error('missing context'));
|
||||
}
|
||||
|
||||
const tracer = context.get('services').get('traceService').tracer;
|
||||
tracer = tracer ?? context.get('services').get('traceService').tracer;
|
||||
let result;
|
||||
await tracer.startActiveSpan(label, async span => {
|
||||
result = await fn(...args);
|
||||
|
||||
Reference in New Issue
Block a user