4264fc066e
* Remove variables from dequeue log message * Continue snapshot throw json * Waiting for deploy error removed * Realtime ECONNRESET is expected * Redis worker logErrors changes, removed ids * Preview branch without a branch shouldn't log an error, it's a user provided issue * "Task run is not in a cancellable state" isn't an error, it's expected * "CreateCheckpointService: Child run already resumed" is expected * "CreateCheckpointService: Batch already resumed" is expected * "Failed to insert events, will attempt bisection" changed to info, we have errors for complete failures * Ignore "PrismaClient error" * Don't log Redis worker DLQ errors if we're ignoring * "Failed to parse machine config" is fine, sometimes a config is null or undefined * "Failed to parse machine config" for v3 * MetadataTooLargeError shouldn't log an error
66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
import { MachineConfig, MachinePreset, MachinePresetName } from "@trigger.dev/core/v3";
|
|
import { defaultMachine, machines } from "~/services/platform.v3.server";
|
|
import { logger } from "~/services/logger.server";
|
|
|
|
export function machinePresetFromConfig(config: unknown): MachinePreset {
|
|
const parsedConfig = MachineConfig.safeParse(config);
|
|
|
|
if (!parsedConfig.success) {
|
|
logger.info("Failed to parse machine config", { config });
|
|
|
|
return machinePresetFromName("small-1x");
|
|
}
|
|
|
|
if (parsedConfig.data.preset) {
|
|
return machinePresetFromName(parsedConfig.data.preset);
|
|
}
|
|
|
|
if (parsedConfig.data.cpu && parsedConfig.data.memory) {
|
|
const name = derivePresetNameFromValues(parsedConfig.data.cpu, parsedConfig.data.memory);
|
|
|
|
return machinePresetFromName(name);
|
|
}
|
|
|
|
return machinePresetFromName("small-1x");
|
|
}
|
|
|
|
export function machinePresetFromName(name: MachinePresetName): MachinePreset {
|
|
return {
|
|
name,
|
|
...machines[name],
|
|
};
|
|
}
|
|
|
|
export function machinePresetFromRun(run: { machinePreset: string | null }): MachinePreset | null {
|
|
const presetName = MachinePresetName.safeParse(run.machinePreset).data;
|
|
|
|
if (!presetName) {
|
|
return null;
|
|
}
|
|
|
|
return machinePresetFromName(presetName);
|
|
}
|
|
|
|
// Finds the smallest machine preset name that satisfies the given CPU and memory requirements
|
|
function derivePresetNameFromValues(cpu: number, memory: number): MachinePresetName {
|
|
for (const [name, preset] of Object.entries(machines)) {
|
|
if (preset.cpu >= cpu && preset.memory >= memory) {
|
|
return name as MachinePresetName;
|
|
}
|
|
}
|
|
|
|
return defaultMachine;
|
|
}
|
|
|
|
export function allMachines(): Record<string, MachinePreset> {
|
|
return Object.fromEntries(
|
|
Object.entries(machines).map(([name, preset]) => [
|
|
name,
|
|
{
|
|
name: name as MachinePresetName,
|
|
...preset,
|
|
},
|
|
])
|
|
);
|
|
}
|