Files
automatisch/packages/backend/src/helpers/telemetry/index.ts
2022-05-05 02:12:05 +02:00

149 lines
3.7 KiB
TypeScript

import Analytics, { apiObject } from '@rudderstack/rudder-sdk-node';
import organizationId from './organization-id';
import instanceId from './instance-id';
import appConfig from '../../config/app';
import Step from '../../models/step';
import Flow from '../../models/flow';
import Execution from '../../models/execution';
import ExecutionStep from '../../models/execution-step';
import Connection from '../../models/connection';
import os from 'os';
const WRITE_KEY = '284Py4VgK2MsNYV7xlKzyrALx0v';
const DATA_PLANE_URL = 'https://telemetry.automatisch.io/v1/batch';
const CPUS = os.cpus();
const SIX_HOURS_IN_MILLISECONDS = 21600000;
class Telemetry {
organizationId: string;
instanceId: string;
client: Analytics;
constructor() {
this.client = new Analytics(WRITE_KEY, DATA_PLANE_URL);
this.organizationId = organizationId();
this.instanceId = instanceId();
}
track(name: string, properties: apiObject) {
properties = {
...properties,
appEnv: appConfig.appEnv,
instanceId: this.instanceId,
};
this.client.track({
userId: this.organizationId,
event: name,
properties,
});
}
stepCreated(step: Step) {
this.track('stepCreated', {
stepId: step.id,
flowId: step.flowId,
createdAt: step.createdAt,
updatedAt: step.updatedAt,
});
}
stepUpdated(step: Step) {
this.track('stepUpdated', {
stepId: step.id,
flowId: step.flowId,
key: step.key,
appKey: step.appKey,
type: step.type,
position: step.position,
status: step.status,
createdAt: step.createdAt,
updatedAt: step.updatedAt,
});
}
flowCreated(flow: Flow) {
this.track('flowCreated', {
flowId: flow.id,
name: flow.name,
active: flow.active,
createdAt: flow.createdAt,
updatedAt: flow.updatedAt,
});
}
flowUpdated(flow: Flow) {
this.track('flowUpdated', {
flowId: flow.id,
name: flow.name,
active: flow.active,
createdAt: flow.createdAt,
updatedAt: flow.updatedAt,
});
}
executionCreated(execution: Execution) {
this.track('executionCreated', {
executionId: execution.id,
flowId: execution.flowId,
testRun: execution.testRun,
createdAt: execution.createdAt,
updatedAt: execution.updatedAt,
});
}
executionStepCreated(executionStep: ExecutionStep) {
this.track('executionStepCreated', {
executionStepId: executionStep.id,
executionId: executionStep.executionId,
stepId: executionStep.stepId,
status: executionStep.status,
createdAt: executionStep.createdAt,
updatedAt: executionStep.updatedAt,
});
}
connectionCreated(connection: Connection) {
this.track('connectionCreated', {
connectionId: connection.id,
key: connection.key,
verified: connection.verified,
createdAt: connection.createdAt,
updatedAt: connection.updatedAt,
});
}
connectionUpdated(connection: Connection) {
this.track('connectionUpdated', {
connectionId: connection.id,
key: connection.key,
verified: connection.verified,
createdAt: connection.createdAt,
updatedAt: connection.updatedAt,
});
}
diagnosticInfo() {
this.track('diagnosticInfo', {
automatischVersion: process.env.npm_package_version,
operatingSystem: {
type: os.type(),
version: os.version(),
},
memory: os.totalmem() / (1024 * 1024), // To get as megabytes
cpus: {
count: CPUS.length,
model: CPUS[0].model,
speed: CPUS[0].speed,
},
});
setTimeout(this.diagnosticInfo, SIX_HOURS_IN_MILLISECONDS);
}
}
const telemetry = new Telemetry();
telemetry.diagnosticInfo();
export default telemetry;