Beta: Add CPU & Memory Load to advanced view mode; Use integrated Ace editor if available; Right click to access context menu#74
Conversation
…-dev tags [skip ci]
…ble skipping [skip ci] commits
… Ace is missing When Ace fails to load, initEditorModal() returns early leaving editorModal.editors[type] undefined. loadEditorFiles(), saveTab(), and the post-save validation callback all accessed these without guards, causing TypeError crashes. Add null checks on every unguarded editorModal.editors[type] access in loadEditorFiles, saveTab, and the save-success validation callback.
Remove stale AceVersion parameter declaration, documentation, and print statement that were missed during the Ace removal.
The settings page doesn't include compose_manager_main.php, so the JS aceBasePath variable was undefined. The typeof fallback defaulted to /webGui/javascript/ace which is correct on 7.0.0+ but wrong on 6.x where ace lives in the plugin directory. Use the same PHP file_exists() detection to resolve the correct path server-side and emit it directly into the JS.
Ace modes try to load worker scripts (worker-yaml.js, worker-sh.js) via the module loader. Since we only bundle a minimal subset of Ace files, these would 404 and throw loader errors. Disable workers via session.setUseWorker(false) — we already validate YAML client-side via js-yaml so workers are redundant.
Only disable certificate checking when no system CA bundle exists. Previously wget --no-check-certificate was used unconditionally, which could allow MITM substitution of the downloaded JS assets.
Check unzip and cp exit codes and verify ace.js exists after install. Previously a failed extraction would silently print success, leaving users with missing editor files and no diagnostic output.
Help text said Default: 2.40.3 but actual default is 5.0.2.
When Ace fails to load, opening the editor modal would show an empty non-functional UI. Instead, prevent the modal from opening entirely and show a swal error prompting the user to reload or check the plugin installation.
Fix/use dynamix ace
…d enhance examples
- Add missing 'var loadMap = {}' declaration
- Fix cpuRaw used before declaration (moved above cpuNorm)
- Remove duplicate cpuNorm/loadMap assignments and orphan braces
- Add parts.length >= 3 guard to skip malformed rows
- Use Math.max(composeCpuCount, 1) to prevent division by zero
The .ct-col-icon class is defined in CSS but never used in any HTML output. Container detail tables have no icon column.
Stopped stacks and containers will never receive docker stats data, so showing '0%' / '0B' is misleading. Show '-' instead and hide the usage bar and memory span for non-running entries.
…es for accurate CPU count
…advanced view mode
…ex to avoid per-tick DOM traversal
…nd install scripts (shellcheck)
…d archive handling
… ensure its included in show_ttyd.php
… overwriting the good data with an empty string
… from Docker Compose
hasBuildConfig() previously ran 'docker compose config' (full config dump, ~300-500ms) on every page load for every stack, with only an in-memory cache that didn't survive across requests. Add a 'has_build' metadata file in the stack directory following the same pattern used by getProfiles(): read from file cache when the compose and override files haven't changed (mtime check), fall back to docker compose config on cache miss, and write-through on extraction. This eliminates N subprocess calls (one per stack) on warm page loads.
getDefinedServices() previously ran 'docker compose config --services' (~300-500ms) on every page load for every stack with no persistent cache at all. Add a 'services' metadata file in the stack directory following the same pattern used by getProfiles() and hasBuildConfig(): read from the JSON file cache when the compose and override files haven't changed (mtime check), fall back to docker compose config --services on cache miss, and write-through on extraction. This eliminates N subprocess calls (one per stack) on warm page loads.
…screens and mobile
Add isValidIconSrc() helper that accepts http(s) URLs, data URIs, and local server paths (starting with /) for icon sources. Update container detail view and action dialog icon checks to use it instead of http/https-only validation. Fixes icons showing fallback '?' on the Compose tab when a container's net.unraid.docker.icon label contains a local cached path. Ref: #82
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.
Beta: CPU & Memory Load, Integrated Ace Editor, Context Menus, Local Icon Paths, and More
Summary
This beta consolidates several features, bug fixes, and performance improvements across the Compose Manager plugin. Key highlights include real-time CPU & memory metrics in advanced view, refactored Ace Editor delivery, right-click context menus, local file path support for icons, and significant caching/performance work.
Features
dockerloadNchan WebSocket channel. Includes usage bars, visibility-aware rendering, stale-data pruning, and tab/browser-visibility optimizations./mnt/or/boot/config/plugins/compose.manager/projects/) in addition tohttp(s)URLs anddata:URIs.deploy.ps1and newdeploy.shnow accept multiple remote hosts for parallel deployments.build.sh,deploy.sh, andtest.shfor Linux-native workflows alongside the existing PowerShell scripts.Bug Fixes
docker compose config --profileswhen cache is stale.started_attimestamp instead of per-container earliest, preventing jumps when details are expanded.docker-compose.override.ymltocompose.override.yaml).Cache-Controltono-cache, must-revalidateso icon changes reflect immediately.show_ttyd.php— Ensureautov()is available with proper fallback.<?autov(...)?>to<?php autov(...); ?>across all page files for consistency.Performance
getDefinedServices()— Avoids re-runningdocker compose config --serviceson every page load when compose files haven't changed.hasBuildConfig()— Same staleness-based caching for build detection.getProfiles()now uses the metadata file with filemtime-based staleness checks.docker compose ls— Eliminated the batchdocker compose lscall fromcompose_list.phpthat was no longer needed.StackInfo::allFromRoot()$skipDockeroption — Allows skeleton rendering without triggering per-stack Docker calls.stackId → containerIds[]index avoids per-tick DOM traversal.CI/CD & Build
[skip ci]/ release-bot commit filtering.tag-release.ymlto exclude beta tags.ACE_VERSION— Removed fromversions.env, build workflows,build.ps1,build_in_docker.sh, andpkg_build.sh. Ace is now delivered at plugin install time.Code Quality
mapfileusage,read -r, proper[[ ]]conditionals acrosscompose.sh,autostart.sh,patch_util.sh,scheduled_backup.sh, andinstall.sh..bakrenames.docker-compose.yml→compose.yamlmigration block was removed from the PLG.Related Issues
Testing Notes
/mnt/user/.../icon.pngand verify it renders on the Compose tab. Use the file picker to browse and select an icon.--profileflag is passed correctly.docker-compose.override.ymlfiles should be used as-is without being renamed.deploy.sh -Dev -RemoteHost host1,host2to verify parallel deployment to multiple hosts.Diff
Full diff: v2026.03.28...dev