dev: add otel spans for permission scans and db

This commit is contained in:
KernelDeimos
2025-07-06 15:59:07 -04:00
parent fd956cb1cd
commit 3f483c5bf5
3 changed files with 40 additions and 18 deletions
@@ -322,9 +322,12 @@ class PermissionService extends BaseService {
async check (actor, permission_options) {
// TODO: optimized implementation for check instead of
// delegating to the scan() method
const reading = await this.scan(actor, permission_options);
const options = PermissionUtil.reading_to_options(reading);
return options.length > 0;
const svc_trace = this.services.get('traceService');
return await svc_trace.spanify(`permission:check`, async () => {
const reading = await this.scan(actor, permission_options);
const options = PermissionUtil.reading_to_options(reading);
return options.length > 0;
});
}
@@ -344,6 +347,12 @@ class PermissionService extends BaseService {
* @returns {Promise<Array>} A promise that resolves to an array of permission readings.
*/
async scan (actor, permission_options, _reserved, state) {
const svc_trace = this.services.get('traceService');
return await svc_trace.spanify(`permission:scan`, async () => {
return await this.scan_(actor, permission_options, _reserved, state);
}, { attributes: { permission_options }, actor: actor.uid });
}
async scan_ (actor, permission_options, _reserved, state) {
if ( ! state ) this.log.info('scan', {
actor: actor.uid,
permission_options,
@@ -56,8 +56,11 @@ class BaseDatabaseAccessService extends BaseService {
return this;
}
read (query, params) {
return this._read(query, params);
async read (query, params) {
const svc_trace = this.services.get('traceService');
return await svc_trace.spanify(`database:read`, async () => {
return await this._read(query, params);
}, { attributes: { query } });
}
/**
@@ -91,12 +94,18 @@ class BaseDatabaseAccessService extends BaseService {
return results;
}
pread (query, params) {
return this._read(query, params, { use_primary: true });
async pread (query, params) {
const svc_trace = this.services.get('traceService');
return await svc_trace.spanify(`database:pread`, async () => {
return await this._read(query, params, { use_primary: true });
}, { attributes: { query } });
}
write (query, params) {
return this._write(query, params);
async write (query, params) {
const svc_trace = this.services.get('traceService');
return await svc_trace.spanify(`database:write`, async () => {
return await this._write(query, params);
}, { attributes: { query } });
}
insert (table_name, data) {
@@ -343,16 +343,20 @@ class DriverService extends BaseService {
svc_event.emit('driver.create-call-context', event);
return event.context.arun(async () => {
const result = await this.call_new_({
actor,
service,
service_name: driver,
iface, method, args: processed_args,
skip_usage,
const svc_trace = this.services.get('traceService');
return await svc_trace.spanify(`driver:${driver}:${iface}:${method}`, async () => {
return event.context.arun(async () => {
const result = await this.call_new_({
actor,
service,
service_name: driver,
iface, method, args: processed_args,
skip_usage,
});
result.metadata = client_driver_call.response_metadata;
return result;
});
result.metadata = client_driver_call.response_metadata;
return result;
});
}