Repository navigation
Updated Website - #82
Open
alexanderoster wants to merge 280 commits into
Open
alexanderoster wants to merge 280 commits into
alexanderoster wants to merge 280 commits into
Conversation
…ing (#47) - Updated the SMC job recording configuration to use `slsc_RecordSet_HeadAPosition` instead of the previous `slsc_RecordSet_SetPositions` for record set A. - Ensures that the recorded data includes set and actual scanner head A position information during job execution. Signed-off-by: Yury Rodzikau <y.rodzikau@c1-technologies.com>
…ent (#46) This fixes error: "invalid execution delay error". This could occur after NTP clock adjustments causing system clock to jump backwards.
* Signalslot unittest: Use valid UUIDs to make tests pass * AccessControl unittests: fix invalid permission identifiers, e.g perm_read, not perm.read
Allowing config.xml to define upload controls with attribute "acceptedtypes". Example: <upload class="image" caption="Select png file to upload" acceptedtypes=".png" successevent="onfileuploadfinished"/>
ModuleExecutionList and ModuleBuildList rendered every entry. With 10,000 executions, Build History created 10,003 rows (130,189 DOM elements) and froze the browser. Both lists now show one page of module.entriesperpage rows, with a first/previous/next/last pager. The Build History scroll area capped its root height but not its viewport, so rows past about 500 px were clipped and could not be scrolled to. The cap now applies to the viewport. Adds an npm test script that runs the paging tests with node --test.
GCC 15's libstdc++ no longer pulls <cstdint> in transitively via <memory>, <string> and friends, so every header that names uint32_t/uint64_t without including it fails to compile. 76 headers under Implementation/ and ten driver headers (ADS, A3200, BuR journal group/value, CifX, Euler, Marlin serial controller, Pylon, Rasterizer algorithm, RayLase) relied on that transitive include; each now includes <cstdint> directly. Separately, GCC 15 defaults to C23, where "bool" is a keyword, which rejects the vendored libzip's "typedef ... bool" in zipint.h. Pin CMAKE_C_STANDARD to 17.
ModuleImage.svelte read module.imageresourceuuid, but the core AMCModule_Image sets imageresource, so no <image> content rendered in the Svelte client. Read imageresource, and skip the null-UUID default so an image without a resource renders nothing instead of a broken image (same guard as the build/part/execution list thumbnails).
…m an existing storage stream (#71)
Failed (e.g. aborted) executions also have an end time stamp, but the execution list only read it for finished ones, so the client showed the end time as a formatted Unix time stamp 0 (Jan 1, 1970).
The Svelte ExecutionList put the execution UUID under buttonvalueuuid only, so the plugin's selecteduuid was the null UUID and Build History "Reprint job" and "Details" failed with BUILDJOBEXECUTIONNOTFOUND. The server maps buttonvalueuuid to buttonuuid/buttonname, so it must carry the button UUID; BuildList sent the build UUID there too. Both modules now use core's triggerSelectEvent/triggerButtonEvent, as vue2 does: selection value = row UUID, button value = button UUID.
Upstream made every top-level module of a page as high as the page, so on a page with several contents only the first was usable and the rest could not be scrolled to. A page with one top-level module (a grid) still fills the page; several now stack at their natural height and the page scrolls.
Table cells default to whitespace-nowrap, so long job_info descriptions made the Parameter column ~1370px wide. The table outgrew the vertical-only ScrollArea, and the table container's horizontal scrollbar sat at the bottom of the full table height, off screen: only the Parameter column was visible. Body cells of auto-sized columns now wrap. Columns with a configured or drag-resized width keep the single-line ellipsis.
config.xml names icons by MDI name ("mdi-library"), and vue2 ships the
whole @mdi/font, so any MDI name works there. The Svelte client maps
names to lucide icons through a short table and drew an empty circle
for everything else. The example configs hit the same gap.
Names missing from the table now render from @mdi/font, the same font
vue2 uses. The lucide table stays, so mapped icons look as before. The
glyph is sized from the caller's h-*/w-* box (font-size 100cqh in a
size container), so call sites are unchanged. Names that are not
"mdi-[a-z0-9-]+" still get the circle, which keeps config values out
of the class list.
The lockfile carries only the @mdi/font entries; npm would also have
rewritten unrelated "dev" flags.
Detect ccache in CMakeLists.txt and use it as the C/C++ compiler launcher when available. No effect if ccache is not installed.
Commits b0c3b07 and 945d402 updated the lib3mf headers in Libraries/lib3mf/ and the lib3mf_win64.dll artifact, but not the linux64 and rpi shared libraries. The headers load 837 lib3mf_* functions. The old .so files (built from 5c58ceb2) export only 810 of them and lack the 27 new toolpath functions such as lib3mf_model_getbuildtoolpath and lib3mf_toolpath_gettoolpathtype. On Linux, amc_server therefore failed at startup in CToolpathHandler::setLibraryPath with COULDNOTFINDLIBRARYEXPORT, whichever plugin was configured. Both libraries are rebuilt from lib3mf f6a9bb3606f91b8e13d4207b3d0d6e9799bfac5c (branch toolpath_squashed, "Added Profile Value checks", 2026-09-29). That is a ref whose Autogenerated/Bindings/CppDynamic files match the vendored headers exactly, and the ref the current win64 dll was built from: the dll contains a toolpath profile error string first added in f6a9bb36. _githash_lib3mf.txt (the win64 dll) said 8a6f9824, the parent of 5c58ceb2, but the dll was built from f6a9bb36 as shown above. All three _githash_*lib3mf.txt files now name f6a9bb36. Build: a debian:bookworm-slim container with build-essential, cmake and crossbuild-essential-arm64 installed. linux64 uses native gcc 12.2.0 and rpi is cross-compiled with aarch64-linux-gnu-gcc 12.2.0. Commands: cmake -DCMAKE_BUILD_TYPE=Release -DLIB3MF_TESTS=OFF <lib3mf source> cmake --build . --target lib3mf For rpi, the first command also gets: -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ Everything else uses lib3mf defaults: bundled zlib/libzip, stripped, and libstdc++ linked dynamically. Both libraries need at most GLIBC 2.36 and GLIBCXX 3.4.29. The previous linux64 build needed GLIBC 2.38, so the new one also runs on Debian 12. The NEEDED libraries and the SONAME (lib3mf.so.2) are unchanged. Verification: nm -D shows 837 of 837 referenced exports in both libraries, including all 810 old exports. The linux64 build dlopens and reports version 2.4.0, and amc_server starts with it. The rpi build was not run, because the build host has no arm64 emulation.
Telemetry recording is unconditional and unbounded: every state machine state and signal slot records on every cycle, which can reach gigabytes per day and fill the disk of a long-running machine. Add an optional telemetry attribute on the <data> node: <data directory="data/" database="sqlite" sqlitedb="storage.db" telemetry="off" /> "on" or omitted keeps current behaviour; "off" creates no telemetry_*.data file and writes no entries; any other value fails at startup with INVALIDTELEMETRYSETTING. The flag is passed via new DataModel::SetTelemetryEnabled/GetTelemetryEnabled methods rather than a new InitialiseDatabase parameter, so a mismatched libmcdata fails with COULDNOTFINDLIBRARYEXPORT instead of misreading arguments, and existing InitialiseDatabase callers are unchanged. Entries are dropped in CTelemetryWriter::writeEntry, not at marker creation, because the signal slot reaction/finish/acknowledge timing parameters are computed from the in-memory marker statistics. Channel registration is also unchanged, so an "off" session stays readable by TelemetryReader. Retention of existing telemetry/journal files and the session_metrics table are out of scope.
* Keep at most one fallback frontend poll in flight When the event stream is unavailable, the client polls /api/frontend every 600 ms. Each tick sent a request whether or not the previous one had returned, so a server slower than the interval got an ever growing number of overlapping requests: more load on a server that is already behind. In a browser against a server answering polls after 3 s, five polls were in flight at once and the queued ones ran into the 10 s request timeout, because they also took the browser's connections. The reply serials only dropped out-of-order results; the requests still went out. A tick is now skipped while a request sent by retrieveFrontendState is pending (frontendRequestsInFlight), so a poll tick never adds a second request and the effective interval stretches to the server's response time. The counter is released however the request ends; the default 10 s timeout of axiosGetRequest bounds how long a hung request holds polling back. Navigation refreshes are not held back: the new page's values are needed at once, and the existing serials keep an older poll reply from overwriting them. A poll still pending when the stream takes over is dropped as before but keeps the gate until it settles, also if the client falls back to polling again in the meantime. Each tick also calls updateModules, which is what refreshes module data such as parameter lists and logs while polling. A skipped tick skips that too, so with a slow /api/frontend those modules are refreshed once per reply rather than every 600 ms, even if their own endpoints are fast. A server that slow is likely slow for them as well. The other periodic client requests (parameter list, logs, configuration list, part list, execution list deltas) already allow one request at a time. The change is in Client/core, so it applies to both the Vue and the Svelte client. * Add node:test tests for the fallback frontend poll gate Client/core is framework-agnostic ES module code, so it can be tested under plain node without a browser or the client's npm packages. Client/tests is a small harness for that: support/coreLoader.mjs imports core modules through loader hooks (support/coreLoaderHooks.mjs) that load core's .js files as ES modules and replace the third-party imports (axios, luxon, three) with stubs. There are no dependencies; run "npm test" in Client/tests, or "node --test 'Client/tests/*.test.mjs'" from the repository root. frontendPollGate.test.mjs covers the gate from the previous commit: its release on reply, error and timeout, a server slower than the interval, a navigation refresh during a pending poll, and switching to the stream and back. Loading AMCApplication.js imports the list modules, which need Client/core/common/AMCListDeltaSync.js, so the tests require that file.
The wrapper of a lone page module was not a flex container, so the logs module's flex-1 had no effect and it grew to its full content height. The page scrolled instead of the log, taking the app bar, log toolbar and table header with it and breaking scroll-to-latest. The wrapper is now a flex column, so the log stays within the page and scrolls itself. The sidebar ScrollArea lacked min-h-0, so on short screens the menu overflowed; clicking a low item scrolled the overflow-hidden root and pushed the app bar off screen.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.