mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-02-20 17:52:51 +00:00
Merge pull request #1317 from balena-io/cache-service-names
Cache service names in local log backend
This commit is contained in:
commit
a2f06d5934
@ -331,10 +331,18 @@ export function createV2Api(router: Router, applications: ApplicationManager) {
|
||||
});
|
||||
|
||||
router.get('/v2/local/logs', async (_req, res) => {
|
||||
const serviceNameCache: { [sId: number]: string } = {};
|
||||
const backend = applications.logger.getLocalBackend();
|
||||
backend.assignServiceNameResolver(
|
||||
applications.serviceNameFromId.bind(applications),
|
||||
);
|
||||
// Cache the service names to IDs per call to the endpoint
|
||||
backend.assignServiceNameResolver(async (id: number) => {
|
||||
if (id in serviceNameCache) {
|
||||
return serviceNameCache[id];
|
||||
} else {
|
||||
const name = await applications.serviceNameFromId(id);
|
||||
serviceNameCache[id] = name;
|
||||
return name;
|
||||
}
|
||||
});
|
||||
|
||||
// Get the stream, and stream it into res
|
||||
const listenStream = backend.attachListener();
|
||||
|
@ -10,7 +10,9 @@ import log from '../lib/supervisor-console';
|
||||
export class LocalLogBackend extends LogBackend {
|
||||
private globalListeners: Readable[] = [];
|
||||
|
||||
private serviceNameResolver: (serviceId: number) => Bluebird<string>;
|
||||
private serviceNameResolver: (
|
||||
serviceId: number,
|
||||
) => Promise<string> | Bluebird<string>;
|
||||
|
||||
public log(message: LogMessage): void {
|
||||
if (this.publishEnabled) {
|
||||
@ -31,9 +33,11 @@ export class LocalLogBackend extends LogBackend {
|
||||
}
|
||||
// TODO: Can we cache this value? The service ids are reused, so
|
||||
// we would need a way of invalidating the cache
|
||||
return this.serviceNameResolver(svcId).then(serviceName => {
|
||||
return _.assign({}, { serviceName }, message);
|
||||
});
|
||||
return (this.serviceNameResolver(svcId) as Promise<string>).then(
|
||||
(serviceName: string) => {
|
||||
return _.assign({}, { serviceName }, message);
|
||||
},
|
||||
);
|
||||
} else {
|
||||
return message;
|
||||
}
|
||||
@ -65,7 +69,7 @@ export class LocalLogBackend extends LogBackend {
|
||||
}
|
||||
|
||||
public assignServiceNameResolver(
|
||||
resolver: (serviceId: number) => Bluebird<string>,
|
||||
resolver: LocalLogBackend['serviceNameResolver'],
|
||||
) {
|
||||
this.serviceNameResolver = resolver;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user