balena-supervisor/src/event-tracker.ts
Christina Ying Wang 7220e994dc Log takeLock and releaseLock steps as system events
Signed-off-by: Christina Ying Wang <christina@balena.io>
2024-04-04 14:07:47 -07:00

40 lines
1016 B
TypeScript

import mask = require('json-mask');
import log from './lib/supervisor-console';
export type EventTrackProperties = Dictionary<any>;
const mixpanelMask = [
'appId',
'force',
'services',
'delay',
'error',
'interval',
'image',
'app(appId,name)',
'service(appId,serviceId,serviceName,commit,releaseId,image,labels)',
'stateDiff/local(os_version,supervisor_version,ip_address,apps/*/services)',
].join(',');
export function track(
event: string,
properties: EventTrackProperties | Error = {},
) {
if (properties instanceof Error) {
properties = { error: properties };
}
properties = structuredClone(properties);
if (properties.error instanceof Error) {
// Format the error for printing, to avoid display as { }
properties.error = {
message: properties.error.message,
stack: properties.error.stack,
};
}
// Don't send potentially sensitive information, by using a whitelist
properties = mask(properties, mixpanelMask) || {};
log.event('Event:', event, JSON.stringify(properties));
}