feat: improve logger

This commit is contained in:
max_richter 2024-04-23 20:59:45 +02:00
parent 070a5b52d0
commit 415d773610
4 changed files with 60 additions and 39 deletions

View File

@ -78,11 +78,20 @@ export const createLogger = (() => {
return (scope: string) => { return (scope: string) => {
maxLength = Math.max(maxLength, scope.length); maxLength = Math.max(maxLength, scope.length);
let muted = false; let muted = false;
let isGrouped = false;
function s(color: string, ...args: any) {
return isGrouped ? [...args] : [`[%c${scope.padEnd(maxLength, " ")}]:`, `color: ${color}`, ...args];
}
return { return {
log: (...args: any[]) => !muted && console.log(`[%c${scope.padEnd(maxLength, " ")}]:`, "color: #888", ...args), log: (...args: any[]) => !muted && console.log(...s("#888", ...args)),
info: (...args: any[]) => !muted && console.info(`[%c${scope.padEnd(maxLength, " ")}]:`, "color: #888", ...args), info: (...args: any[]) => !muted && console.info(...s("#888", ...args)),
warn: (...args: any[]) => !muted && console.warn(`[%c${scope.padEnd(maxLength, " ")}]:`, "color: #888", ...args), warn: (...args: any[]) => !muted && console.warn(...s("#888", ...args)),
error: (...args: any[]) => console.error(`[%c${scope.padEnd(maxLength, " ")}]:`, "color: #f88", ...args), error: (...args: any[]) => console.error(...s("#f88", ...args)),
group: (...args: any[]) => { if (!muted) { console.groupCollapsed(...s("#888", ...args)); isGrouped = true; } },
groupEnd: () => { if (!muted) { console.groupEnd(); isGrouped = false } },
mute() { mute() {
muted = true; muted = true;
}, },

View File

@ -1,5 +1,8 @@
import type { Graph, NodeRegistry, NodeDefinition, RuntimeExecutor } from "@nodes/types"; import type { Graph, NodeRegistry, NodeDefinition, RuntimeExecutor } from "@nodes/types";
import { fastHash, concatEncodedArrays, encodeFloat, encodeNestedArray, decodeNestedArray } from "@nodes/utils" import { fastHash, concatEncodedArrays, encodeFloat, decodeNestedArray } from "@nodes/utils"
import { createLogger } from "./helpers";
const log = createLogger("runtime-executor");
export class MemoryRuntimeExecutor implements RuntimeExecutor { export class MemoryRuntimeExecutor implements RuntimeExecutor {
@ -131,7 +134,7 @@ export class MemoryRuntimeExecutor implements RuntimeExecutor {
if (input.value !== undefined) { if (input.value !== undefined) {
inputs[key] = input.value; inputs[key] = input.value;
} else { } else {
console.warn(`Setting ${input.setting} is not defined`); log.warn(`Setting ${input.setting} is not defined`);
} }
} else { } else {
inputs[key] = settings[input.setting] as number; inputs[key] = settings[input.setting] as number;
@ -160,8 +163,8 @@ export class MemoryRuntimeExecutor implements RuntimeExecutor {
} }
// console.log(" "); // log.log(" ");
// console.log("--> EXECUTING NODE " + node_type.id, node.id); // log.log("--> EXECUTING NODE " + node_type.id, node.id);
// execute the node and store the result // execute the node and store the result
@ -174,11 +177,11 @@ export class MemoryRuntimeExecutor implements RuntimeExecutor {
}))}`; }))}`;
const a1 = performance.now(); const a1 = performance.now();
// console.log(`${a1 - a0}ms hashed inputs: ${node.id} -> ${cacheKey}`); // log.log(`${a1 - a0}ms hashed inputs: ${node.id} -> ${cacheKey}`);
if (false && this.cache[cacheKey] && this.cache[cacheKey].eol > Date.now()) { if (false && this.cache[cacheKey] && this.cache[cacheKey].eol > Date.now()) {
results[node.id] = this.cache[cacheKey].value; results[node.id] = this.cache[cacheKey].value;
console.log(`Using cached value`); log.log(`Using cached value`);
continue; continue;
} }
@ -199,32 +202,32 @@ export class MemoryRuntimeExecutor implements RuntimeExecutor {
return value; return value;
}); });
// console.log(transformed_inputs); // log.log(transformed_inputs);
const a2 = performance.now(); const a2 = performance.now();
// console.log(`${a2 - a1}ms TRANSFORMED_INPUTS`); // log.log(`${a2 - a1}ms TRANSFORMED_INPUTS`);
const encoded_inputs = concatEncodedArrays(transformed_inputs); const encoded_inputs = concatEncodedArrays(transformed_inputs);
const a3 = performance.now(); const a3 = performance.now();
console.groupCollapsed(`executing ${node_type.id || node.id}`); log.group(`executing ${node_type.id || node.id}`);
console.log(`Inputs:`, transformed_inputs); log.log(`Inputs:`, transformed_inputs);
console.log(`Encoded Inputs:`, encoded_inputs); log.log(`Encoded Inputs:`, encoded_inputs);
results[node.id] = node_type.execute(encoded_inputs); results[node.id] = node_type.execute(encoded_inputs);
console.log("Result:", results[node.id]); log.log("Result:", results[node.id]);
console.log("Result (decoded):", decodeNestedArray(results[node.id])); log.log("Result (decoded):", decodeNestedArray(results[node.id]));
console.groupEnd(); log.groupEnd();
const duration = performance.now() - a3; const duration = performance.now() - a3;
if (duration > 5) { if (duration > 5) {
this.cache[cacheKey] = { eol: Date.now() + 10_000, value: results[node.id] }; this.cache[cacheKey] = { eol: Date.now() + 10_000, value: results[node.id] };
// console.log(`Caching for 10 seconds`); // log.log(`Caching for 10 seconds`);
} }
// console.log(`${duration}ms Executed`); // log.log(`${duration}ms Executed`);
const a4 = performance.now(); const a4 = performance.now();
// console.log(`${a4 - a0}ms e2e duration`); // log.log(`${a4 - a0}ms e2e duration`);
} catch (e) { } catch (e) {
console.groupEnd(); log.groupEnd();
console.error(`Error executing node ${node_type.id || node.id}`, e); log.error(`Error executing node ${node_type.id || node.id}`, e);
} }
} }

View File

@ -65,11 +65,21 @@
}, },
shortcuts: {}, shortcuts: {},
nodeStore: {}, nodeStore: {},
graph: {}, graph: {
id: "graph",
icon: "i-tabler-git-fork",
definition: {
randomSeed: {
type: "boolean",
label: "Random Seed",
value: true,
},
},
},
activeNode: { activeNode: {
id: "Active Node", id: "Active Node",
icon: "i-tabler-adjustments", icon: "i-tabler-adjustments",
props: { node: undefined, manager }, props: { node: undefined, manager: undefined },
component: ActiveNode, component: ActiveNode,
}, },
}; };
@ -122,18 +132,10 @@
graph = templates.tree(store.amount); graph = templates.tree(store.amount);
}; };
settings.graph = { settings.graph.settings = writable(ev.detail.values);
icon: "i-tabler-git-fork", settings.graph.definition = {
id: "graph", ...settings.graph.definition,
settings: writable(ev.detail.values),
definition: {
randomSeed: {
type: "boolean",
label: "Random Seed",
value: true,
},
...ev.detail.types, ...ev.detail.types,
},
}; };
settings = settings; settings = settings;

View File

@ -70,20 +70,27 @@ pub fn execute(input: &[i32]) -> Vec<i32> {
for i in 0..points { for i in 0..points {
let a = i as f64 / (points - 1) as f64; let a = i as f64 / (points - 1) as f64;
let px = Vector2::new(j as f64 + a * length * scale, a * scale as f64); let px = Vector2::new(1000.0 + j as f64 + a * length * scale, a * scale as f64);
let pz = Vector2::new(a * scale as f64, j as f64 + a * length * scale); let py = Vector2::new(2000.0 + j as f64 + a * length * scale, a * scale as f64);
let pz = Vector2::new(3000.0 + j as f64 + a * length * scale, a * scale as f64);
let nx = open_simplex_2d(px, &hasher) as f32 let nx = open_simplex_2d(px, &hasher) as f32
* strength * strength
* 0.1 * 0.1
* lerp(1.0, a as f32, fix_bottom); * lerp(1.0, a as f32, fix_bottom);
let ny = open_simplex_2d(py, &hasher) as f32
* strength
* 0.1
* lerp(1.0, a as f32, fix_bottom);
let nz = open_simplex_2d(pz, &hasher) as f32 let nz = open_simplex_2d(pz, &hasher) as f32
* strength * strength
* 0.1 * 0.1
* lerp(1.0, a as f32, fix_bottom); * lerp(1.0, a as f32, fix_bottom);
plant[3 + i * 4] = encode_float(decode_float(plant[3 + i * 4]) + nx); plant[3 + i * 4] = encode_float(decode_float(plant[3 + i * 4]) + nx);
plant[4 + i * 4] = encode_float(decode_float(plant[4 + i * 4]) + ny);
plant[5 + i * 4] = encode_float(decode_float(plant[5 + i * 4]) + nz); plant[5 + i * 4] = encode_float(decode_float(plant[5 + i * 4]) + nz);
} }