From 2c88541256aced9d4f2e546bff78a7a68232edca Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 7 Nov 2025 16:52:23 +0100 Subject: [PATCH 001/109] Updated Electros GUI to v3.0.5 --- electros-electron/package.json | 2 +- elemento-gui-new | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electros-electron/package.json b/electros-electron/package.json index 962d020..2994a55 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "Electros", - "version": "3.0.4", + "version": "3.0.5", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", diff --git a/elemento-gui-new b/elemento-gui-new index cd19120..94dc5dd 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit cd1912031f9ad0391b74bca834dad54f3a324206 +Subproject commit 94dc5dd17b08bdfd2654ad2e227998c3de9e2bf3 From 06646c4a7fdfc2417f5b1bb8b65ddabdafc0ccfc Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 13 Nov 2025 11:53:29 +0100 Subject: [PATCH 002/109] Updated Electros GUI to v3.0.6 --- electros-electron/package.json | 2 +- elemento-gui-new | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electros-electron/package.json b/electros-electron/package.json index 2994a55..f120656 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "Electros", - "version": "3.0.5", + "version": "3.0.6", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", diff --git a/elemento-gui-new b/elemento-gui-new index 94dc5dd..c0b3f74 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 94dc5dd17b08bdfd2654ad2e227998c3de9e2bf3 +Subproject commit c0b3f74df165e162fd87cfdfb43e5109e2ba740c From 726fb48719a74c9129cd1bf3eb5f828c6e566a1c Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 14 Nov 2025 11:02:26 +0100 Subject: [PATCH 003/109] Updated Electros GUI to v3.0.7 --- electros-electron/package.json | 2 +- elemento-gui-new | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electros-electron/package.json b/electros-electron/package.json index f120656..395caf2 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "Electros", - "version": "3.0.6", + "version": "3.0.7", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", diff --git a/elemento-gui-new b/elemento-gui-new index c0b3f74..ab2a32c 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit c0b3f74df165e162fd87cfdfb43e5109e2ba740c +Subproject commit ab2a32c2a617f2564df3f31dd2d104d2a5d6917a From f8f9c94a8372595c25df2947ea27e91a7facdd18 Mon Sep 17 00:00:00 2001 From: Filippo Valle Date: Fri, 14 Nov 2025 12:49:07 +0100 Subject: [PATCH 004/109] update egn --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index ab2a32c..e255f59 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit ab2a32c2a617f2564df3f31dd2d104d2a5d6917a +Subproject commit e255f5922ed105c1fbedf9b1be9a886478c65df1 From 726194f8340e004582a15053791054c55bfd55f4 Mon Sep 17 00:00:00 2001 From: Filippo Valle Date: Fri, 14 Nov 2025 16:25:00 +0100 Subject: [PATCH 005/109] update 3.1.0 --- electros-electron/package.json | 2 +- elemento-gui-new | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electros-electron/package.json b/electros-electron/package.json index 395caf2..5dcb64e 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "Electros", - "version": "3.0.7", + "version": "3.1.0", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", diff --git a/elemento-gui-new b/elemento-gui-new index e255f59..305cc3a 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit e255f5922ed105c1fbedf9b1be9a886478c65df1 +Subproject commit 305cc3abb16ad643cbd53a87fe7ded8c5eb40b65 From b9eb42c9fb2d4e98aeb42418a85bbb77427b4051 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 17 Nov 2025 17:09:38 +0100 Subject: [PATCH 006/109] Updated Electros GUI to v3.1.1 --- electros-electron/package.json | 2 +- elemento-gui-new | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electros-electron/package.json b/electros-electron/package.json index 5dcb64e..c68e791 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "Electros", - "version": "3.1.0", + "version": "3.1.1", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", diff --git a/elemento-gui-new b/elemento-gui-new index 305cc3a..7831fac 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 305cc3abb16ad643cbd53a87fe7ded8c5eb40b65 +Subproject commit 7831fac2f853352fc496dc39eec0f3f55195f19d From c024be6c6001c467588cd10e8d617384cbed7e06 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 18 Nov 2025 17:02:31 +0100 Subject: [PATCH 007/109] Updated Electros GUI to v3.1.2 --- electros-electron/package.json | 2 +- elemento-gui-new | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electros-electron/package.json b/electros-electron/package.json index c68e791..c3ea2c7 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "Electros", - "version": "3.1.1", + "version": "3.1.2", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", diff --git a/elemento-gui-new b/elemento-gui-new index 7831fac..a800b5a 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 7831fac2f853352fc496dc39eec0f3f55195f19d +Subproject commit a800b5ab0939551f9c54ffcf894da81dfc755d13 From 0e72a0b3add3a95b65ee46b10dc1395dc8981772 Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Tue, 18 Nov 2025 17:06:35 +0100 Subject: [PATCH 008/109] added files --- .github/workflows/docker-build.yml | 44 ++++++++++++++++++++++++++++++ .gitignore | 1 + docker/Dockerfile | 25 +++++++++++++++++ docker/compose.yml | 0 docker/nginx.conf | 17 ++++++++++++ docker/startup.sh | 9 ++++++ 6 files changed, 96 insertions(+) create mode 100644 .github/workflows/docker-build.yml create mode 100644 docker/Dockerfile create mode 100644 docker/compose.yml create mode 100644 docker/nginx.conf create mode 100644 docker/startup.sh diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 0000000..687c160 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,44 @@ +name: Build and Push Electros docker image + +on: + push: + branches: [dev-docker-instance] + pull_request: + branches: [dev-docker-instance] + workflow_dispatch: + +permissions: + contents: write + packages: write + +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + + # build and push the docker image to ghcr.io + + - name: Checkout code + uses: actions/checkout@v4 + with: + token: ${{ secrets.CI_TOKEN }} + submodules: recursive + ref: ${{ github.ref }} + + - name: Populate daemons folder + run: | + export CI_TOKEN=${{ secrets.CI_TOKEN }} + ./populate-daemons.sh --platform linux --arch x64 + + - name: Login to GHCR + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.REPO_KEY }} + + - name: Build and push Docker image + run: | + OWNER_NAME=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') + docker build -f docker/Dockerfile -t ghcr.io/${OWNER_NAME}/elemento-electros-instance:latest . + docker push ghcr.io/${OWNER_NAME}/elemento-electros-instance:latest diff --git a/.gitignore b/.gitignore index 208bf4d..d604d05 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ electros-daemons electros-nwjs/nwjs-sdk-* .DS_Store electros-electron/venv +.env diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..b9369dd --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,25 @@ +FROM nginx:trixie + +# gather daemons +# copy app code +# daemons must run in background - ./daemons +# entrypoint must run the electros app on port 80 +COPY docker/nginx.conf /etc/nginx/nginx.conf +COPY electros-daemons/linux/x64/* /opt/daemons/ +COPY elemento-gui-new/ /usr/share/nginx/html/ +COPY docker/startup.sh /opt/app/startup.sh + +RUN chmod +x /opt/daemons/* +RUN chmod +x /opt/app/startup.sh + +RUN ls -lah /usr/share/nginx/html/ + +EXPOSE 80 + +ENTRYPOINT [ "/opt/app/startup.sh" ] + + + + + + diff --git a/docker/compose.yml b/docker/compose.yml new file mode 100644 index 0000000..e69de29 diff --git a/docker/nginx.conf b/docker/nginx.conf new file mode 100644 index 0000000..59a049b --- /dev/null +++ b/docker/nginx.conf @@ -0,0 +1,17 @@ +events {} + +http { + server { + listen 80; + + # Set electros.html as the default homepage + index electros/electros.html; + + # Serve files from the Nginx default directory + root /usr/share/nginx/html; + + location / { + try_files $uri $uri/ =404; + } + } +} \ No newline at end of file diff --git a/docker/startup.sh b/docker/startup.sh new file mode 100644 index 0000000..db02dc2 --- /dev/null +++ b/docker/startup.sh @@ -0,0 +1,9 @@ +#! /bin/bash + +# start background daemons + +/opt/daemons/elemento_daemons_linux_x86 > /var/log/elemento_daemons.log 2>&1 & + +# run the project + +nginx -g 'daemon off;' \ No newline at end of file From b53b03ff6cf8093eb0d434a851126469e332567f Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Tue, 18 Nov 2025 17:34:22 +0100 Subject: [PATCH 009/109] nginx routes --- docker/nginx.conf | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/docker/nginx.conf b/docker/nginx.conf index 59a049b..c017030 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -1,6 +1,10 @@ events {} http { + + include /etc/nginx/mime.types; # important + default_type application/octet-stream; + server { listen 80; @@ -10,8 +14,71 @@ http { # Serve files from the Nginx default directory root /usr/share/nginx/html; + + location / { try_files $uri $uri/ =404; + + # CORS headers + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization' always; + + # Handle preflight OPTIONS requests + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + } + + location /js/ { + alias /usr/share/nginx/html/electros/js/; + } + + location /css/ { + alias /usr/share/nginx/html/electros/css/; + } + + location /pages/ { + alias /usr/share/nginx/html/electros/pages/; + } + + location /assets/ { + alias /usr/share/nginx/html/electros/assets/; + } + + location /Electros.svg { + alias /usr/share/nginx/html/electros/Electros.svg; + } + + location /configs/ { + alias /usr/share/nginx/html/electros/configs/; + } + + location /remotes/ { + alias /usr/share/nginx/html/electros/remotes/; + } + + location /favicon/ { + alias /usr/share/nginx/html/electros/favicon/; + } + + location /ecd/ { + alias /usr/share/nginx/html/electros/ecd/; + } + + location /epm/ { + alias /usr/share/nginx/html/electros/epm/; + } + + location /ist/ { + alias /usr/share/nginx/html/electros/ist/; + } + + location /docs/ { + alias /usr/share/nginx/html/electros/docs/; } } } \ No newline at end of file From 532545794ddb54e38cfea3f12b3c633a5e7c746b Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Tue, 18 Nov 2025 18:04:16 +0100 Subject: [PATCH 010/109] stream test | spoiler doesn't work --- docker/nginx.conf | 46 +++++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/docker/nginx.conf b/docker/nginx.conf index c017030..ae5c54c 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -17,20 +17,8 @@ http { location / { - try_files $uri $uri/ =404; - # CORS headers - add_header 'Access-Control-Allow-Origin' '*' always; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; - add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization' always; - - # Handle preflight OPTIONS requests - if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Max-Age' 1728000; - add_header 'Content-Type' 'text/plain charset=UTF-8'; - add_header 'Content-Length' 0; - return 204; - } + try_files $uri $uri/ =404; } location /js/ { @@ -81,4 +69,36 @@ http { alias /usr/share/nginx/html/electros/docs/; } } +} + +stream { + server { + listen 47777; + proxy_pass localhost:47777; + } + + server { + listen 17777; + proxy_pass localhost:17777; + } + + server { + listen 27777; + proxy_pass localhost:27777; + } + + server { + listen 37777; + proxy_pass localhost:37777; + } + + server { + listen 57777; + proxy_pass localhost:57777; + } + + server { + listen 6777; + proxy_pass localhost:6777; + } } \ No newline at end of file From 6fb4a12efefe2bc180dc676f9d5775eadcf6270e Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Tue, 18 Nov 2025 18:52:55 +0100 Subject: [PATCH 011/109] revert to normal config - use beta daemons --- .github/workflows/docker-build.yml | 6 +- docker/Dockerfile | 2 + docker/nginx.conf | 31 - docker/startup.sh | 2 +- logs/elemento_daemons.log | 1643 ++++++++++++++++++++++++++++ 5 files changed, 1647 insertions(+), 37 deletions(-) create mode 100644 logs/elemento_daemons.log diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 687c160..8ccf64c 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,10 +1,6 @@ name: Build and Push Electros docker image on: - push: - branches: [dev-docker-instance] - pull_request: - branches: [dev-docker-instance] workflow_dispatch: permissions: @@ -28,7 +24,7 @@ jobs: - name: Populate daemons folder run: | export CI_TOKEN=${{ secrets.CI_TOKEN }} - ./populate-daemons.sh --platform linux --arch x64 + ./populate_daemons.sh --platform linux --arch x64 --develop - name: Login to GHCR uses: docker/login-action@v2 diff --git a/docker/Dockerfile b/docker/Dockerfile index b9369dd..064ce12 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -12,6 +12,8 @@ COPY docker/startup.sh /opt/app/startup.sh RUN chmod +x /opt/daemons/* RUN chmod +x /opt/app/startup.sh +RUN mkdir -p /var/log/elemento + RUN ls -lah /usr/share/nginx/html/ EXPOSE 80 diff --git a/docker/nginx.conf b/docker/nginx.conf index ae5c54c..e3bb045 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -68,37 +68,6 @@ http { location /docs/ { alias /usr/share/nginx/html/electros/docs/; } - } -} -stream { - server { - listen 47777; - proxy_pass localhost:47777; - } - - server { - listen 17777; - proxy_pass localhost:17777; - } - - server { - listen 27777; - proxy_pass localhost:27777; - } - - server { - listen 37777; - proxy_pass localhost:37777; - } - - server { - listen 57777; - proxy_pass localhost:57777; - } - - server { - listen 6777; - proxy_pass localhost:6777; } } \ No newline at end of file diff --git a/docker/startup.sh b/docker/startup.sh index db02dc2..1a68666 100644 --- a/docker/startup.sh +++ b/docker/startup.sh @@ -2,7 +2,7 @@ # start background daemons -/opt/daemons/elemento_daemons_linux_x86 > /var/log/elemento_daemons.log 2>&1 & +/opt/daemons/Elemento_Daemons_linux_x86 > /var/log/elemento/elemento_daemons.log 2>&1 & # run the project diff --git a/logs/elemento_daemons.log b/logs/elemento_daemons.log new file mode 100644 index 0000000..aa90cc5 --- /dev/null +++ b/logs/elemento_daemons.log @@ -0,0 +1,1643 @@ +[2025-11-18 17:44:26.050] [INFO] __main__:main:222 Running all daemons... +[2025-11-18 17:44:26.090] [SUCCESS] __main__:_watch_settings:178 Watching settings file... +[2025-11-18 17:44:26.091] [SUCCESS] __main__:_watch_ipList:147 Watching hosts file... +[2025-11-18 17:44:26.091] [INFO] __main__:watch_settings_for:136 Started watching settings and hosts files +[2025-11-18 17:44:26.109] [INFO] templateshandler:run:135 Templates daemon started +[2025-11-18 17:44:26,110] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26,110] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26,110] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26.110] [FLASK] timeloop.app:start:60 Starting Timeloop.. +[2025-11-18 17:44:26,113] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26,113] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26,113] [timeloop] [INFO] Registered job .retrieveRunningSpecsLoop at 0x7efd14804e50> +[2025-11-18 17:44:26,113] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26.123] [FLASK] timeloop.app:start:60 Starting Timeloop.. +[2025-11-18 17:44:26,113] [timeloop] [INFO] Registered job .retrieveRunningSpecsLoop at 0x7efd14804e50> +[2025-11-18 17:44:26,113] [timeloop] [INFO] Registered job .retrieveRunningSpecsLoop at 0x7efd14804e50> +[2025-11-18 17:44:26.124] [FLASK] timeloop.app:_start_jobs:42 Registered job .retrieveRunningSpecsLoop at 0x7efd14804e50> +[2025-11-18 17:44:26,124] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26,124] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26,124] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26.124] [FLASK] timeloop.app:start:63 Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_networks_loop at 0x7efd11f6aca0> +[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_networks_loop at 0x7efd11f6aca0> +[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_networks_loop at 0x7efd11f6aca0> +[2025-11-18 17:44:26.125] [FLASK] timeloop.app:_start_jobs:42 Registered job .retrieve_online_networks_loop at 0x7efd11f6aca0> +[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_forwards_loop at 0x7efd11f6aee0> +[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_forwards_loop at 0x7efd11f6aee0> +[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_forwards_loop at 0x7efd11f6aee0> +[2025-11-18 17:44:26.125] [FLASK] timeloop.app:_start_jobs:42 Registered job .retrieve_online_forwards_loop at 0x7efd11f6aee0> +[2025-11-18 17:44:26,125] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26,125] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26,125] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26.125] [FLASK] timeloop.app:start:63 Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26.134] [INFO] storageclient:uid:311 Generated and stored uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:44:26.135] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:26.136] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP + * Serving Flask app 'Elemento Service Client' + * Debug mode: off + * Serving Flask app 'Elemento Target Client' +[2025-11-18 17:44:26.137] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused + * Serving Flask app 'Elemento Matcher Client' +[2025-11-18 17:44:26.138] [INFO] storageclient:verifyCache:480 Verifying cache... + * Debug mode: off + * Debug mode: off + * Serving Flask app 'Elemento Network Client' + * Debug mode: off +[2025-11-18 17:44:26.141] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:44:26.142] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:26.142] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:26.143] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:44:26,146] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26,146] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26,146] [timeloop] [INFO] Starting Timeloop.. +[2025-11-18 17:44:26.146] [FLASK] timeloop.app:start:60 Starting Timeloop.. +[2025-11-18 17:44:26,146] [timeloop] [INFO] Registered job .verifyCache at 0x7efd105074c0> +[2025-11-18 17:44:26,146] [timeloop] [INFO] Registered job .verifyCache at 0x7efd105074c0> +[2025-11-18 17:44:26,146] [timeloop] [INFO] Registered job .verifyCache at 0x7efd105074c0> +[2025-11-18 17:44:26.147] [FLASK] timeloop.app:_start_jobs:42 Registered job .verifyCache at 0x7efd105074c0> +[2025-11-18 17:44:26,147] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26,147] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26,147] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26.147] [FLASK] timeloop.app:start:63 Timeloop now started. Jobs will run based on the interval set +[2025-11-18 17:44:26.148] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://localhost:57777 + * Serving Flask app 'Elemento Storage Client' +[2025-11-18 17:44:26.148] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit + * Debug mode: off +[2025-11-18 17:44:26.148] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://localhost:37777 +[2025-11-18 17:44:26.149] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://localhost:6777 +[2025-11-18 17:44:26.149] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://localhost:17777 +[2025-11-18 17:44:26.150] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit +[2025-11-18 17:44:26.151] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit +[2025-11-18 17:44:26.151] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit +[2025-11-18 17:44:26.151] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://localhost:27777 +[2025-11-18 17:44:26.151] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit +INFO: Started server process [10] +INFO: Waiting for application startup. +INFO: Application startup complete. +INFO: Uvicorn running on http://localhost:47777 (Press CTRL+C to quit) +[2025-11-18 17:44:31.115] [INFO] matcherclient:uid:328 Generated and stored uuid: ['3cbd694ec4a611f09d6082665226e08c'] +INFO: 127.0.0.1:51944 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:31.125] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:44:31.125] [INFO] networkclient:uid:236 Generated and stored uuid: ['3cbf0f6ac4a611f0bf9382665226e08c'] +[2025-11-18 17:44:31.126] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:44:31.127] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +INFO: 127.0.0.1:51948 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:31.129] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:44:31.129] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:44:31.130] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:44:31.146] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:51960 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:31.149] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:31.149] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:31.150] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:44:31.150] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:51974 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:31.152] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:44:31.152] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:31.152] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:31.153] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +INFO: 127.0.0.1:54822 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:36.132] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:44:36.132] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:44:36.134] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:44:36.136] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:54828 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:36.137] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:44:36.138] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:44:36.153] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:54838 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:36.155] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:36.155] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:36.156] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:44:36.156] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:54854 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:36.158] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:44:36.158] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:36.158] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:36.159] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +INFO: 127.0.0.1:60178 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:41.137] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:44:41.137] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:44:41.137] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:44:41.139] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:60194 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:41.142] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:44:41.143] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:44:41.159] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:60202 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:41.161] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:41.162] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:41.162] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:44:41.162] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:60204 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:41.164] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:44:41.164] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:41.164] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:41.165] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +INFO: 127.0.0.1:35490 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:46.141] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:44:46.141] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:44:46.141] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:44:46.142] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:35500 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:46.145] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:44:46.147] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:44:46.165] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:35506 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:46.168] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:46.168] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:46.169] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:44:46.169] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:35518 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:46.170] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:44:46.171] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:46.171] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:46.171] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +INFO: 127.0.0.1:51654 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:51.145] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:44:51.146] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:44:51.147] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:44:51.147] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:51666 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:51.150] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:44:51.151] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:44:51.172] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:51668 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:51.175] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:51.175] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:51.176] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:44:51.176] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:51680 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:51.178] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:44:51.178] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:51.178] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:51.179] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:44:56.149] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:44:56.151] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:51892 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:56.152] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:44:56.153] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:51896 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:56.154] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:44:56.155] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:44:56.179] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:51906 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:56.181] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:56.182] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:56.182] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:44:56.182] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:51914 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:44:56.184] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:44:56.184] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:44:56.184] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:44:56.185] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:01.152] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:01.155] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44234 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:01.157] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:44246 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:01.158] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:01.158] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:45:01.158] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:01.185] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44252 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:01.188] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:01.189] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:01.189] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:01.189] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44264 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:01.190] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:01.190] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:01.190] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:01.191] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:06.156] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:06.157] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44436 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:06.163] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:44452 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:06.163] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:45:06.164] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:06.164] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:06.191] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44464 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:06.193] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:06.194] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:06.194] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:06.194] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44478 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:06.196] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:06.196] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:06.196] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:06.197] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:11.158] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:11.159] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:58414 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:11.168] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:11.169] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:58412 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:11.169] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:45:11.170] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:11.197] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:58416 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:11.199] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:11.199] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:11.200] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:11.201] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:58432 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:11.202] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:11.202] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:11.202] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:11.203] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:16.160] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:16.162] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:58742 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:16.173] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +INFO: 127.0.0.1:58728 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:16.174] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:16.175] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:16.175] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:16.203] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:58756 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:16.207] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:16.207] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:16.208] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:16.208] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:58770 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:16.209] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:16.210] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:16.210] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:16.211] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:21.163] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:21.164] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:56866 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:21.180] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:45:21.181] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:56854 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:21.182] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:21.182] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:21.211] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:56878 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:21.215] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:21.215] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:21.216] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:21.216] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:56880 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:21.218] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:21.218] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:21.218] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:21.219] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:26.165] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:26.166] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:57250 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:26.186] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +INFO: 127.0.0.1:57264 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:26.188] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:26.189] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:26.189] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:26.219] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:57276 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:26.222] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:26.222] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:26.222] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:26.223] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:57290 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:26.224] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:26.224] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:26.224] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:26.224] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:31.167] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:31.169] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:36668 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:36670 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:31.195] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:31.196] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:45:31.197] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:31.197] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:31.226] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:36682 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:31.230] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:31.230] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:31.231] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:31.231] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:36692 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:31.232] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:31.232] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:31.232] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:31.233] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:36.170] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:36.172] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:37174 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:36.202] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +INFO: 127.0.0.1:37164 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:36.203] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:36.204] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:36.204] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:36.234] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:37184 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:36.238] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:36.239] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:36.239] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:36.240] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:37192 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:36.242] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:36.242] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:36.242] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:36.243] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:41.173] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:41.174] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:52612 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:52610 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:41.209] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:41.209] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:45:41.209] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:41.210] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:41.244] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:52626 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:41.249] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:41.249] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:41.250] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:41.250] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:52630 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:41.253] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:41.253] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:41.253] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:41.253] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:46.175] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:46.176] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:53322 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:46.214] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +INFO: 127.0.0.1:53318 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:46.215] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:46.216] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:46.216] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:46.254] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:53332 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:46.256] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:46.256] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:46.257] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:46.257] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:53344 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:46.258] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:46.258] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:46.258] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:46.259] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:51.176] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:51.178] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:43016 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:43012 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:51.220] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:45:51.220] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:51.221] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:51.221] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:51.259] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:43154 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:51.262] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:51.262] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:51.263] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:51.263] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:43166 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:51.265] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:51.265] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:51.265] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:51.265] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:56.178] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:45:56.179] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44104 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:44102 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:56.226] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:45:56.226] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:45:56.226] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:45:56.227] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:45:56.266] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44226 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:56.268] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:56.268] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:56.269] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:45:56.269] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44230 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:45:56.271] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:45:56.271] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:45:56.271] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:45:56.271] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:01.179] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:01.181] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:38098 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:38104 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:01.230] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:01.231] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:01.231] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:01.232] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:01.272] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:38110 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:01.274] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:01.274] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:01.275] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:01.275] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:38118 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:01.277] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:01.277] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:01.277] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:01.278] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:06.181] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:06.182] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:38650 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:06.238] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:06.239] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:38652 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:06.240] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:06.240] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:06.278] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:38668 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:06.282] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:06.282] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:06.283] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:06.283] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:38672 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:06.285] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:06.285] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:06.285] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:06.286] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:11.183] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:11.184] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:43990 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:44002 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:11.244] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:11.245] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:11.246] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:11.246] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:11.286] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44012 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:11.288] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:11.288] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:11.289] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:11.289] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44016 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:11.290] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:11.290] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:11.290] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:11.291] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:16.185] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:16.186] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44848 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:44852 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:16.251] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:16.251] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:16.252] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:16.252] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:16.292] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44868 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:16.295] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:16.295] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:16.295] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:16.296] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44884 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:16.298] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:16.298] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:16.298] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:16.298] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:21.186] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:21.188] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:54320 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:54304 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:21.257] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:21.257] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:21.258] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:21.258] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:21.299] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:54352 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:21.302] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:21.302] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:21.303] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:21.303] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:54360 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:21.304] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:21.304] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:21.304] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:21.305] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:26.189] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:26.190] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:55564 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:55578 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:26.262] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:26.262] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:26.263] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:26.263] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:26.305] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:55588 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:26.308] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:26.308] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:26.309] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:26.309] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:55590 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:26.311] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:26.311] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:26.311] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:26.312] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:31.190] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:31.191] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:47632 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:31.266] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:47638 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:31.267] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:31.267] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:31.268] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:31.312] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:47642 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:31.315] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:31.315] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:31.315] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:31.315] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:47646 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:31.317] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:31.317] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:31.317] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:31.317] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:36.192] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:36.193] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:48666 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:48668 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:36.273] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:36.273] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:36.274] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:36.274] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:36.318] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:48680 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:36.320] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:36.321] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:36.321] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:36.321] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:48694 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:36.323] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:36.323] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:36.323] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:36.324] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:41.194] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:41.195] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:55174 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:55164 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:41.278] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:41.278] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:41.279] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:41.279] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:41.324] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:55176 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:41.326] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:41.326] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:41.327] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:41.327] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:55186 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:41.328] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:41.328] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:41.328] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:41.329] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:46.195] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:46.196] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:55296 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:55294 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:46.283] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:46.284] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:46.284] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:46.284] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:46.329] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:55322 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:46.332] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:46.332] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:46.333] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:46.333] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:55324 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:46.335] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:46.335] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:46.335] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:46.335] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:51.197] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:51.198] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44296 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:44280 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:51.288] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:51.288] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:51.289] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:51.289] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:51.336] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44310 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:51.339] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:51.339] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:51.340] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:51.340] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44320 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:51.341] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:51.341] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:51.342] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:51.342] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:56.199] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:46:56.200] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44582 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:44598 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:56.294] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:46:56.295] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:46:56.295] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:46:56.296] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:46:56.343] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44614 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:56.345] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:56.346] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:56.346] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:46:56.346] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44622 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:46:56.348] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:46:56.348] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:46:56.348] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:46:56.349] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:01.200] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:01.201] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:42454 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:42448 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:01.300] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:47:01.300] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:01.301] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:01.301] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:01.349] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:42456 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:01.352] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:01.352] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:01.352] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:01.352] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:42458 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:01.354] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:01.354] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:01.354] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:01.354] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:06.202] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:06.203] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:42618 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:42616 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:06.306] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:47:06.306] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:06.307] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:06.307] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:06.355] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:42628 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:06.357] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:06.358] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:06.359] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:06.359] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:42632 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:06.361] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:06.361] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:06.361] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:06.361] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:11.203] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:11.204] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:54468 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:54454 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:11.311] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:11.311] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:47:11.312] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:11.312] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:11.362] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:54474 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:11.364] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:11.364] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:11.365] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:11.365] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:54490 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:11.366] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:11.366] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:11.366] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:11.367] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:16.205] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:16.207] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:54824 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:54812 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:16.317] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:47:16.317] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:16.317] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:16.318] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:16.367] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:54836 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:16.370] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:16.370] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:16.371] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:16.371] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:54848 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:16.372] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:16.372] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:16.372] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:16.373] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:21.207] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:21.209] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:40804 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:40814 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:21.322] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:47:21.322] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:21.323] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:21.323] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:21.373] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:40820 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:21.375] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:21.375] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:21.376] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:21.376] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:40834 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:21.377] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:21.377] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:21.377] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:21.378] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:26.210] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:26.212] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:41120 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:26.327] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:41124 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:26.328] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:26.329] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:26.329] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:26.378] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:41132 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:26.381] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:26.381] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:26.382] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:26.382] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:41148 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:26.384] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:26.384] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:26.384] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:26.385] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:31.212] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:31.237] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:50312 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:31.333] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:50326 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:31.333] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:31.334] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:31.335] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:31.385] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:50342 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:31.390] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:31.390] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:31.390] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:31.391] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:50350 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:31.392] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:31.393] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:31.393] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:31.393] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:36.238] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:36.239] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:50740 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:36.336] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:47:36.336] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:50756 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:36.338] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:36.339] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:36.394] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:50768 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:36.396] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:36.396] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:36.397] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:36.397] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:50778 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:36.398] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:36.398] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:36.398] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:36.399] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:41.240] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:41.242] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:38210 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:41.342] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:38212 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:41.343] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:41.343] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:41.344] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:41.399] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:38220 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:41.402] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:41.402] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:41.403] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:41.403] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:38234 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:41.405] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:41.405] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:41.405] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:41.406] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:46.242] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:46.244] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:38924 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:46.349] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:38936 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:46.350] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:46.351] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:46.351] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:46.407] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:38946 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:46.412] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:46.412] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:46.413] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:46.413] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:38948 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:46.416] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:46.416] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:46.416] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:46.418] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:51.245] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:51.247] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:46328 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:51.356] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:47:51.356] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:46326 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:51.357] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:51.357] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:51.418] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:46346 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:51.421] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:51.422] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:51.422] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:51.423] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:46358 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:51.425] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:51.425] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:51.425] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:51.425] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:56.247] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:47:56.249] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:47182 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:47186 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:56.361] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:47:56.361] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:47:56.362] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:47:56.362] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:47:56.426] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:47188 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:56.429] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:56.429] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:56.430] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:47:56.430] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:47192 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:47:56.431] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:47:56.431] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:47:56.431] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:47:56.432] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:01.249] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:01.250] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:54640 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:01.366] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:54654 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:01.367] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:01.367] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:01.367] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:01.432] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:54666 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:01.435] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:01.435] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:01.436] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:01.436] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:54680 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:01.437] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:01.437] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:01.437] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:01.438] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:06.251] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:06.252] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:55548 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:55560 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:06.372] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:06.372] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:06.373] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:06.373] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:06.438] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:55564 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:06.441] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:06.441] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:06.442] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:06.442] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:55568 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:06.443] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:06.443] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:06.443] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:06.444] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:11.253] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:11.254] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:40918 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:40920 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:11.378] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:11.378] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:11.378] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:11.379] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:11.444] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:40924 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:11.446] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:11.446] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:11.447] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:11.447] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:40934 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:11.448] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:11.448] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:11.448] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:11.449] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:16.254] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:16.256] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:42254 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:42252 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:16.382] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:16.383] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:16.383] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:16.383] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:16.449] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:42274 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:16.452] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:16.452] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:16.453] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:16.456] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:42278 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:16.458] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:16.459] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:16.459] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:16.459] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:21.256] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:21.258] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:52084 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:52082 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:21.388] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:21.388] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:21.389] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:21.389] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:21.460] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:52102 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:21.463] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:21.463] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:21.464] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:21.464] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:52112 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:21.466] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:21.466] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:21.466] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:21.467] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:26.258] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:26.260] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:53620 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:53606 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:26.393] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:26.393] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:26.394] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:26.394] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:26.467] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:53622 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:26.470] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:26.470] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:26.471] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:26.471] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:53630 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:26.472] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:26.472] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:26.472] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:26.473] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:31.260] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:31.262] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:52124 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:52108 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:31.398] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:31.398] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:31.399] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:31.399] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:31.473] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:52294 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:31.476] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:31.476] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:31.477] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:31.477] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:52302 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:31.479] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:31.479] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:31.479] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:31.480] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:36.262] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:36.264] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:53162 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:53176 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:36.403] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:36.403] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:36.404] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:36.404] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:36.480] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:53192 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:36.482] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:36.482] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:36.483] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:36.483] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:53206 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:36.485] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:36.485] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:36.485] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:36.485] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:41.264] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:41.266] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:51446 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:51430 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:41.410] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:41.410] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:41.410] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:41.411] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:41.486] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:51450 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:41.491] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:41.491] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:41.492] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:41.492] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:51462 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:41.493] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:41.493] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:41.493] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:41.494] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:46.266] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:46.268] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:52684 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:52694 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:46.416] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:46.416] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:46.416] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:46.416] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:46.495] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:52710 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:46.497] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:46.497] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:46.498] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:46.498] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:52714 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:46.499] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:46.499] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:46.499] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:46.500] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:51.268] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:51.269] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:59990 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:59998 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:51.421] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:48:51.421] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:51.422] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:51.422] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:51.500] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:60008 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:51.503] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:51.503] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:51.504] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:51.504] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:60010 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:51.505] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:51.505] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:51.505] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:51.506] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:56.269] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:48:56.271] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:60834 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:56.425] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:60838 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:56.426] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:48:56.427] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:48:56.427] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:48:56.506] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:60900 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:56.510] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:56.510] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:56.511] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:48:56.511] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:60914 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:48:56.512] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:48:56.512] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:48:56.512] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:48:56.513] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:01.271] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:01.272] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:41428 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:01.430] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:41432 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:01.432] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:01.432] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:01.432] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:01.513] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:41474 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:01.516] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:01.516] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:01.517] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:01.517] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:41480 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:01.519] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:01.519] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:01.519] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:01.520] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:06.272] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:06.274] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:42800 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:42816 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:06.436] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:06.437] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:06.437] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:06.438] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:06.521] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:42906 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:06.524] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:06.524] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:06.525] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:06.526] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:42918 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:06.528] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:06.528] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:06.528] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:06.529] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:11.274] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:11.275] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:43536 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:43552 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:11.443] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:11.443] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:11.444] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:11.444] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:11.530] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:43628 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:11.533] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:11.533] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:11.534] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:11.534] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:43634 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:11.536] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:11.536] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:11.536] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:11.536] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:16.276] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:16.277] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44892 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:44894 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:16.449] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:16.449] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:16.450] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:16.450] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:16.537] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44900 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:16.540] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:16.540] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:16.541] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:16.541] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44902 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:16.543] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:16.543] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:16.543] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:16.544] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:21.278] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:21.279] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:48452 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:48456 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:21.454] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:21.455] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:21.455] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:21.455] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:21.544] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:48472 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:21.547] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:21.547] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:21.548] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:21.548] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:48486 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:21.549] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:21.549] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:21.549] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:21.550] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:26.279] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:26.280] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:49768 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:49774 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:26.460] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:26.460] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:26.461] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:26.461] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:26.550] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:49782 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:26.554] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:26.554] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:26.555] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:26.555] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:49790 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:26.557] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:26.557] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:26.557] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:26.558] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:31.281] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:31.282] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:37748 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:37746 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:31.467] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:31.467] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:31.467] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:31.468] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:31.558] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:37850 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:31.562] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:31.562] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:31.563] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:31.563] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:37860 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:31.565] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:31.565] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:31.565] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:31.566] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:36.283] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:36.284] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:38872 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:38880 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:36.472] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:36.473] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:36.473] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:36.473] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:36.566] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:38888 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:36.569] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:36.569] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:36.569] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:36.569] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:38900 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:36.571] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:36.571] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:36.571] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:36.572] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:41.284] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:41.286] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:40356 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:40370 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:41.478] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:41.478] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:41.479] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:41.479] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:41.572] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:40384 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:41.575] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:41.575] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:41.576] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:41.576] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:40396 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:41.577] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:41.578] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:41.578] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:41.578] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:46.286] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:46.288] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:41606 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:41610 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:46.484] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:46.484] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:46.485] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:46.485] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:46.579] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:41632 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:46.581] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:46.581] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:46.582] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:46.582] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:41638 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:46.584] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:46.584] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:46.584] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:46.585] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:51.288] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:51.289] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:35506 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:35508 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:51.489] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:51.489] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:51.490] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:51.490] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:51.585] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:35542 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:51.588] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:51.588] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:51.588] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:51.589] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:35546 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:51.590] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:51.590] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:51.590] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:51.590] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:56.290] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:49:56.291] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:36842 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:36848 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:56.494] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:49:56.494] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:49:56.495] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:49:56.495] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:49:56.591] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:36852 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:56.594] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:56.594] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:56.595] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:49:56.595] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:36866 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:49:56.597] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:49:56.598] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:49:56.598] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:49:56.599] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:01.291] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:01.293] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:42510 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:42512 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:01.500] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:01.500] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:01.501] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:01.501] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:01.599] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:42516 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:01.604] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:01.605] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:01.605] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:01.606] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:42528 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:01.608] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:01.608] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:01.608] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:01.608] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:06.293] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:06.294] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:43904 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:43900 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:06.505] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:06.505] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:06.506] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:06.506] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:06.609] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:43938 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:06.611] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:06.611] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:06.612] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:06.612] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:43952 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:06.613] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:06.613] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:06.613] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:06.614] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:11.295] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:11.296] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:37050 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:37034 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:11.511] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:11.511] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:11.512] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:11.512] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:11.614] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:37118 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:11.617] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:11.617] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:11.618] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:11.618] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:37132 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:11.619] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:11.619] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:11.619] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:11.620] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:16.296] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:16.298] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:38386 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:38396 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:16.517] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:16.517] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:16.518] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:16.518] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:16.620] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:38412 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:16.623] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:16.623] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:16.623] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:16.623] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:38424 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:16.625] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:16.625] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:16.625] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:16.626] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:21.299] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:21.300] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:60228 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:60226 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:21.522] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:21.522] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:21.522] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:21.522] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:21.626] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:60256 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:21.629] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:21.629] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:21.630] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:21.630] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:60272 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:21.632] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:21.632] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:21.632] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:21.633] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:26.300] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:26.302] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:33316 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:33308 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:26.527] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:26.527] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:26.528] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:26.528] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:26.633] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:33320 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:26.636] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:26.637] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:26.637] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:26.637] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:33330 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:26.639] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:26.639] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:26.639] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:26.639] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:31.302] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:31.303] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:57430 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:57428 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:31.533] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:31.533] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:31.534] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:31.534] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:31.640] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:57450 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:31.642] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:31.642] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:31.643] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:31.643] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:57464 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:31.645] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:31.645] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:31.645] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:31.646] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:36.303] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:36.305] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:58754 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:58758 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:36.540] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:36.540] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:36.541] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:36.541] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:36.646] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:58974 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:36.649] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:36.650] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:36.650] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:36.650] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:58990 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:36.652] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:36.652] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:36.652] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:36.652] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:41.305] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:41.307] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:43328 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:41.546] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:43340 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:41.547] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:41.548] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:41.549] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:41.653] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:43346 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:41.656] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:41.656] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:41.657] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:41.657] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:43350 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:41.658] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:41.658] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:41.658] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:41.659] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:46.307] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:46.309] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44756 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:44760 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:46.554] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:46.554] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:46.555] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:46.555] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:46.659] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44784 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:46.662] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:46.662] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:46.663] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:46.663] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44786 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:46.665] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:46.665] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:46.665] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:46.666] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:51.309] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:51.310] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44878 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:51.561] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +INFO: 127.0.0.1:44886 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:51.562] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +[2025-11-18 17:50:51.562] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:51.563] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:51.666] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44990 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:51.669] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:51.669] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:51.669] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:51.669] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44996 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:51.671] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:51.671] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:51.671] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:51.672] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:56.311] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:50:56.312] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:46334 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:56.566] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:50:56.566] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:46348 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:56.569] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:50:56.570] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:50:56.672] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:46584 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:56.675] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:56.675] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:56.676] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:50:56.676] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:46594 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:50:56.678] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:50:56.678] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:50:56.678] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:50:56.679] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:51:01.313] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:51:01.314] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:53932 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:01.571] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:51:01.571] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:53948 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:01.574] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:51:01.575] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:51:01.679] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:53952 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:01.682] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:51:01.683] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:51:01.683] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:51:01.684] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:53962 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:01.686] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:51:01.686] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:51:01.686] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:51:01.687] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:51:06.315] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:51:06.316] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:55586 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:06.575] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:51:06.575] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:55594 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:06.578] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:51:06.579] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:51:06.687] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:55610 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:06.690] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:51:06.691] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:51:06.692] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:51:06.692] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:55624 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:06.694] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:51:06.694] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:51:06.694] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:51:06.695] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:51:11.316] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:51:11.318] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:55446 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:11.578] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:51:11.578] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:55458 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:11.582] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:51:11.583] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:51:11.695] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:55482 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:11.698] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:51:11.698] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:51:11.698] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:51:11.698] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:55492 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:11.700] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:51:11.700] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:51:11.700] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:51:11.700] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:51:16.318] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks +[2025-11-18 17:51:16.319] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +INFO: 127.0.0.1:44176 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:16.581] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] +[2025-11-18 17:51:16.581] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable +INFO: 127.0.0.1:44190 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:16.587] [INFO] networkclient:retrieve_online_networks:141 Looking for networks +[2025-11-18 17:51:16.588] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +[2025-11-18 17:51:16.701] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +INFO: 127.0.0.1:44196 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:16.703] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:51:16.703] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:51:16.704] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused +[2025-11-18 17:51:16.704] [INFO] storageclient:verifyCache:480 Verifying cache... +INFO: 127.0.0.1:44208 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK +[2025-11-18 17:51:16.705] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] +[2025-11-18 17:51:16.705] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c +[2025-11-18 17:51:16.706] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP +[2025-11-18 17:51:16.706] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused From b56e7496ef0d52f77ff897c91c19a9f9cd468daf Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Tue, 18 Nov 2025 19:22:10 +0100 Subject: [PATCH 012/109] remove logs --- .gitignore | 1 + logs/elemento_daemons.log | 1643 ------------------------------------- 2 files changed, 1 insertion(+), 1643 deletions(-) delete mode 100644 logs/elemento_daemons.log diff --git a/.gitignore b/.gitignore index d604d05..7b2ad4f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ electros-nwjs/nwjs-sdk-* .DS_Store electros-electron/venv .env +logs/ \ No newline at end of file diff --git a/logs/elemento_daemons.log b/logs/elemento_daemons.log deleted file mode 100644 index aa90cc5..0000000 --- a/logs/elemento_daemons.log +++ /dev/null @@ -1,1643 +0,0 @@ -[2025-11-18 17:44:26.050] [INFO] __main__:main:222 Running all daemons... -[2025-11-18 17:44:26.090] [SUCCESS] __main__:_watch_settings:178 Watching settings file... -[2025-11-18 17:44:26.091] [SUCCESS] __main__:_watch_ipList:147 Watching hosts file... -[2025-11-18 17:44:26.091] [INFO] __main__:watch_settings_for:136 Started watching settings and hosts files -[2025-11-18 17:44:26.109] [INFO] templateshandler:run:135 Templates daemon started -[2025-11-18 17:44:26,110] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26,110] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26,110] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26.110] [FLASK] timeloop.app:start:60 Starting Timeloop.. -[2025-11-18 17:44:26,113] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26,113] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26,113] [timeloop] [INFO] Registered job .retrieveRunningSpecsLoop at 0x7efd14804e50> -[2025-11-18 17:44:26,113] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26.123] [FLASK] timeloop.app:start:60 Starting Timeloop.. -[2025-11-18 17:44:26,113] [timeloop] [INFO] Registered job .retrieveRunningSpecsLoop at 0x7efd14804e50> -[2025-11-18 17:44:26,113] [timeloop] [INFO] Registered job .retrieveRunningSpecsLoop at 0x7efd14804e50> -[2025-11-18 17:44:26.124] [FLASK] timeloop.app:_start_jobs:42 Registered job .retrieveRunningSpecsLoop at 0x7efd14804e50> -[2025-11-18 17:44:26,124] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26,124] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26,124] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26.124] [FLASK] timeloop.app:start:63 Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_networks_loop at 0x7efd11f6aca0> -[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_networks_loop at 0x7efd11f6aca0> -[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_networks_loop at 0x7efd11f6aca0> -[2025-11-18 17:44:26.125] [FLASK] timeloop.app:_start_jobs:42 Registered job .retrieve_online_networks_loop at 0x7efd11f6aca0> -[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_forwards_loop at 0x7efd11f6aee0> -[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_forwards_loop at 0x7efd11f6aee0> -[2025-11-18 17:44:26,125] [timeloop] [INFO] Registered job .retrieve_online_forwards_loop at 0x7efd11f6aee0> -[2025-11-18 17:44:26.125] [FLASK] timeloop.app:_start_jobs:42 Registered job .retrieve_online_forwards_loop at 0x7efd11f6aee0> -[2025-11-18 17:44:26,125] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26,125] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26,125] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26.125] [FLASK] timeloop.app:start:63 Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26.134] [INFO] storageclient:uid:311 Generated and stored uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:44:26.135] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:26.136] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP - * Serving Flask app 'Elemento Service Client' - * Debug mode: off - * Serving Flask app 'Elemento Target Client' -[2025-11-18 17:44:26.137] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused - * Serving Flask app 'Elemento Matcher Client' -[2025-11-18 17:44:26.138] [INFO] storageclient:verifyCache:480 Verifying cache... - * Debug mode: off - * Debug mode: off - * Serving Flask app 'Elemento Network Client' - * Debug mode: off -[2025-11-18 17:44:26.141] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:44:26.142] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:26.142] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:26.143] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:44:26,146] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26,146] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26,146] [timeloop] [INFO] Starting Timeloop.. -[2025-11-18 17:44:26.146] [FLASK] timeloop.app:start:60 Starting Timeloop.. -[2025-11-18 17:44:26,146] [timeloop] [INFO] Registered job .verifyCache at 0x7efd105074c0> -[2025-11-18 17:44:26,146] [timeloop] [INFO] Registered job .verifyCache at 0x7efd105074c0> -[2025-11-18 17:44:26,146] [timeloop] [INFO] Registered job .verifyCache at 0x7efd105074c0> -[2025-11-18 17:44:26.147] [FLASK] timeloop.app:_start_jobs:42 Registered job .verifyCache at 0x7efd105074c0> -[2025-11-18 17:44:26,147] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26,147] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26,147] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26.147] [FLASK] timeloop.app:start:63 Timeloop now started. Jobs will run based on the interval set -[2025-11-18 17:44:26.148] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on http://localhost:57777 - * Serving Flask app 'Elemento Storage Client' -[2025-11-18 17:44:26.148] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit - * Debug mode: off -[2025-11-18 17:44:26.148] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on http://localhost:37777 -[2025-11-18 17:44:26.149] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on http://localhost:6777 -[2025-11-18 17:44:26.149] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on http://localhost:17777 -[2025-11-18 17:44:26.150] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit -[2025-11-18 17:44:26.151] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit -[2025-11-18 17:44:26.151] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit -[2025-11-18 17:44:26.151] [FLASK] werkzeug._internal:_log:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on http://localhost:27777 -[2025-11-18 17:44:26.151] [FLASK] werkzeug._internal:_log:97 Press CTRL+C to quit -INFO: Started server process [10] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: Uvicorn running on http://localhost:47777 (Press CTRL+C to quit) -[2025-11-18 17:44:31.115] [INFO] matcherclient:uid:328 Generated and stored uuid: ['3cbd694ec4a611f09d6082665226e08c'] -INFO: 127.0.0.1:51944 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:31.125] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:44:31.125] [INFO] networkclient:uid:236 Generated and stored uuid: ['3cbf0f6ac4a611f0bf9382665226e08c'] -[2025-11-18 17:44:31.126] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:44:31.127] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -INFO: 127.0.0.1:51948 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:31.129] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:44:31.129] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:44:31.130] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:44:31.146] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:51960 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:31.149] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:31.149] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:31.150] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:44:31.150] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:51974 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:31.152] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:44:31.152] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:31.152] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:31.153] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -INFO: 127.0.0.1:54822 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:36.132] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:44:36.132] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:44:36.134] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:44:36.136] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:54828 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:36.137] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:44:36.138] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:44:36.153] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:54838 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:36.155] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:36.155] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:36.156] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:44:36.156] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:54854 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:36.158] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:44:36.158] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:36.158] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:36.159] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -INFO: 127.0.0.1:60178 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:41.137] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:44:41.137] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:44:41.137] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:44:41.139] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:60194 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:41.142] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:44:41.143] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:44:41.159] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:60202 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:41.161] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:41.162] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:41.162] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:44:41.162] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:60204 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:41.164] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:44:41.164] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:41.164] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:41.165] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -INFO: 127.0.0.1:35490 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:46.141] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:44:46.141] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:44:46.141] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:44:46.142] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:35500 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:46.145] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:44:46.147] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:44:46.165] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:35506 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:46.168] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:46.168] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:46.169] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:44:46.169] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:35518 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:46.170] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:44:46.171] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:46.171] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:46.171] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -INFO: 127.0.0.1:51654 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:51.145] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:44:51.146] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:44:51.147] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:44:51.147] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:51666 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:51.150] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:44:51.151] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:44:51.172] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:51668 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:51.175] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:51.175] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:51.176] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:44:51.176] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:51680 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:51.178] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:44:51.178] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:51.178] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:51.179] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:44:56.149] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:44:56.151] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:51892 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:56.152] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:44:56.153] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:51896 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:56.154] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:44:56.155] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:44:56.179] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:51906 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:56.181] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:56.182] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:56.182] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:44:56.182] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:51914 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:44:56.184] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:44:56.184] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:44:56.184] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:44:56.185] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:01.152] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:01.155] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44234 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:01.157] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:44246 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:01.158] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:01.158] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:45:01.158] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:01.185] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44252 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:01.188] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:01.189] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:01.189] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:01.189] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44264 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:01.190] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:01.190] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:01.190] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:01.191] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:06.156] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:06.157] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44436 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:06.163] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:44452 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:06.163] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:45:06.164] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:06.164] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:06.191] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44464 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:06.193] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:06.194] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:06.194] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:06.194] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44478 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:06.196] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:06.196] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:06.196] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:06.197] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:11.158] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:11.159] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:58414 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:11.168] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:11.169] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:58412 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:11.169] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:45:11.170] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:11.197] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:58416 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:11.199] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:11.199] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:11.200] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:11.201] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:58432 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:11.202] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:11.202] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:11.202] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:11.203] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:16.160] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:16.162] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:58742 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:16.173] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -INFO: 127.0.0.1:58728 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:16.174] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:16.175] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:16.175] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:16.203] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:58756 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:16.207] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:16.207] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:16.208] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:16.208] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:58770 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:16.209] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:16.210] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:16.210] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:16.211] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:21.163] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:21.164] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:56866 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:21.180] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:45:21.181] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:56854 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:21.182] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:21.182] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:21.211] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:56878 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:21.215] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:21.215] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:21.216] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:21.216] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:56880 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:21.218] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:21.218] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:21.218] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:21.219] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:26.165] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:26.166] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:57250 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:26.186] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -INFO: 127.0.0.1:57264 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:26.188] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:26.189] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:26.189] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:26.219] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:57276 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:26.222] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:26.222] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:26.222] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:26.223] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:57290 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:26.224] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:26.224] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:26.224] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:26.224] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:31.167] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:31.169] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:36668 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:36670 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:31.195] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:31.196] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:45:31.197] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:31.197] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:31.226] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:36682 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:31.230] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:31.230] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:31.231] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:31.231] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:36692 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:31.232] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:31.232] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:31.232] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:31.233] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:36.170] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:36.172] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:37174 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:36.202] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -INFO: 127.0.0.1:37164 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:36.203] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:36.204] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:36.204] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:36.234] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:37184 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:36.238] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:36.239] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:36.239] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:36.240] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:37192 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:36.242] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:36.242] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:36.242] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:36.243] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:41.173] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:41.174] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:52612 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:52610 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:41.209] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:41.209] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:45:41.209] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:41.210] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:41.244] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:52626 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:41.249] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:41.249] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:41.250] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:41.250] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:52630 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:41.253] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:41.253] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:41.253] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:41.253] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:46.175] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:46.176] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:53322 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:46.214] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -INFO: 127.0.0.1:53318 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:46.215] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:46.216] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:46.216] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:46.254] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:53332 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:46.256] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:46.256] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:46.257] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:46.257] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:53344 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:46.258] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:46.258] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:46.258] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:46.259] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:51.176] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:51.178] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:43016 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:43012 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:51.220] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:45:51.220] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:51.221] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:51.221] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:51.259] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:43154 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:51.262] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:51.262] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:51.263] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:51.263] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:43166 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:51.265] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:51.265] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:51.265] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:51.265] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:56.178] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:45:56.179] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44104 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:44102 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:56.226] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:45:56.226] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:45:56.226] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:45:56.227] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:45:56.266] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44226 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:56.268] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:56.268] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:56.269] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:45:56.269] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44230 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:45:56.271] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:45:56.271] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:45:56.271] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:45:56.271] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:01.179] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:01.181] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:38098 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:38104 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:01.230] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:01.231] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:01.231] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:01.232] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:01.272] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:38110 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:01.274] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:01.274] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:01.275] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:01.275] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:38118 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:01.277] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:01.277] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:01.277] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:01.278] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:06.181] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:06.182] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:38650 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:06.238] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:06.239] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:38652 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:06.240] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:06.240] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:06.278] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:38668 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:06.282] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:06.282] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:06.283] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:06.283] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:38672 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:06.285] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:06.285] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:06.285] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:06.286] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:11.183] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:11.184] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:43990 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:44002 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:11.244] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:11.245] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:11.246] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:11.246] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:11.286] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44012 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:11.288] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:11.288] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:11.289] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:11.289] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44016 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:11.290] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:11.290] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:11.290] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:11.291] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:16.185] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:16.186] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44848 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:44852 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:16.251] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:16.251] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:16.252] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:16.252] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:16.292] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44868 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:16.295] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:16.295] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:16.295] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:16.296] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44884 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:16.298] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:16.298] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:16.298] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:16.298] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:21.186] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:21.188] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:54320 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:54304 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:21.257] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:21.257] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:21.258] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:21.258] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:21.299] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:54352 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:21.302] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:21.302] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:21.303] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:21.303] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:54360 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:21.304] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:21.304] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:21.304] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:21.305] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:26.189] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:26.190] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:55564 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:55578 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:26.262] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:26.262] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:26.263] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:26.263] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:26.305] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:55588 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:26.308] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:26.308] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:26.309] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:26.309] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:55590 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:26.311] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:26.311] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:26.311] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:26.312] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:31.190] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:31.191] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:47632 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:31.266] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:47638 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:31.267] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:31.267] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:31.268] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:31.312] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:47642 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:31.315] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:31.315] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:31.315] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:31.315] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:47646 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:31.317] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:31.317] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:31.317] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:31.317] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:36.192] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:36.193] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:48666 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:48668 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:36.273] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:36.273] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:36.274] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:36.274] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:36.318] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:48680 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:36.320] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:36.321] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:36.321] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:36.321] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:48694 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:36.323] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:36.323] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:36.323] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:36.324] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:41.194] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:41.195] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:55174 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:55164 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:41.278] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:41.278] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:41.279] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:41.279] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:41.324] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:55176 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:41.326] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:41.326] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:41.327] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:41.327] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:55186 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:41.328] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:41.328] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:41.328] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:41.329] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:46.195] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:46.196] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:55296 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:55294 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:46.283] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:46.284] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:46.284] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:46.284] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:46.329] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:55322 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:46.332] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:46.332] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:46.333] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:46.333] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:55324 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:46.335] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:46.335] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:46.335] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:46.335] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:51.197] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:51.198] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44296 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:44280 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:51.288] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:51.288] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:51.289] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:51.289] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:51.336] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44310 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:51.339] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:51.339] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:51.340] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:51.340] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44320 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:51.341] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:51.341] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:51.342] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:51.342] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:56.199] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:46:56.200] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44582 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:44598 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:56.294] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:46:56.295] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:46:56.295] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:46:56.296] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:46:56.343] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44614 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:56.345] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:56.346] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:56.346] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:46:56.346] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44622 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:46:56.348] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:46:56.348] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:46:56.348] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:46:56.349] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:01.200] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:01.201] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:42454 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:42448 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:01.300] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:47:01.300] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:01.301] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:01.301] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:01.349] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:42456 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:01.352] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:01.352] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:01.352] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:01.352] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:42458 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:01.354] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:01.354] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:01.354] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:01.354] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:06.202] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:06.203] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:42618 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:42616 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:06.306] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:47:06.306] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:06.307] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:06.307] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:06.355] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:42628 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:06.357] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:06.358] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:06.359] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:06.359] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:42632 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:06.361] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:06.361] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:06.361] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:06.361] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:11.203] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:11.204] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:54468 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:54454 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:11.311] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:11.311] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:47:11.312] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:11.312] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:11.362] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:54474 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:11.364] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:11.364] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:11.365] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:11.365] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:54490 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:11.366] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:11.366] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:11.366] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:11.367] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:16.205] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:16.207] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:54824 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:54812 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:16.317] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:47:16.317] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:16.317] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:16.318] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:16.367] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:54836 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:16.370] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:16.370] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:16.371] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:16.371] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:54848 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:16.372] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:16.372] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:16.372] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:16.373] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:21.207] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:21.209] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:40804 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:40814 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:21.322] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:47:21.322] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:21.323] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:21.323] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:21.373] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:40820 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:21.375] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:21.375] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:21.376] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:21.376] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:40834 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:21.377] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:21.377] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:21.377] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:21.378] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:26.210] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:26.212] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:41120 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:26.327] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:41124 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:26.328] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:26.329] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:26.329] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:26.378] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:41132 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:26.381] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:26.381] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:26.382] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:26.382] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:41148 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:26.384] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:26.384] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:26.384] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:26.385] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:31.212] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:31.237] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:50312 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:31.333] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:50326 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:31.333] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:31.334] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:31.335] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:31.385] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:50342 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:31.390] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:31.390] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:31.390] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:31.391] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:50350 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:31.392] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:31.393] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:31.393] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:31.393] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:36.238] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:36.239] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:50740 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:36.336] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:47:36.336] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:50756 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:36.338] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:36.339] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:36.394] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:50768 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:36.396] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:36.396] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:36.397] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:36.397] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:50778 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:36.398] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:36.398] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:36.398] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:36.399] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:41.240] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:41.242] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:38210 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:41.342] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:38212 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:41.343] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:41.343] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:41.344] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:41.399] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:38220 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:41.402] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:41.402] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:41.403] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:41.403] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:38234 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:41.405] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:41.405] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:41.405] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:41.406] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:46.242] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:46.244] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:38924 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:46.349] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:38936 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:46.350] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:46.351] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:46.351] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:46.407] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:38946 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:46.412] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:46.412] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:46.413] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:46.413] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:38948 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:46.416] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:46.416] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:46.416] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:46.418] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:51.245] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:51.247] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:46328 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:51.356] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:47:51.356] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:46326 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:51.357] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:51.357] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:51.418] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:46346 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:51.421] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:51.422] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:51.422] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:51.423] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:46358 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:51.425] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:51.425] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:51.425] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:51.425] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:56.247] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:47:56.249] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:47182 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:47186 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:56.361] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:47:56.361] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:47:56.362] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:47:56.362] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:47:56.426] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:47188 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:56.429] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:56.429] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:56.430] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:47:56.430] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:47192 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:47:56.431] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:47:56.431] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:47:56.431] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:47:56.432] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:01.249] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:01.250] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:54640 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:01.366] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:54654 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:01.367] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:01.367] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:01.367] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:01.432] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:54666 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:01.435] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:01.435] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:01.436] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:01.436] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:54680 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:01.437] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:01.437] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:01.437] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:01.438] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:06.251] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:06.252] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:55548 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:55560 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:06.372] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:06.372] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:06.373] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:06.373] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:06.438] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:55564 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:06.441] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:06.441] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:06.442] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:06.442] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:55568 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:06.443] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:06.443] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:06.443] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:06.444] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:11.253] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:11.254] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:40918 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:40920 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:11.378] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:11.378] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:11.378] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:11.379] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:11.444] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:40924 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:11.446] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:11.446] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:11.447] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:11.447] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:40934 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:11.448] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:11.448] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:11.448] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:11.449] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:16.254] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:16.256] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:42254 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:42252 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:16.382] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:16.383] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:16.383] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:16.383] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:16.449] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:42274 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:16.452] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:16.452] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:16.453] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:16.456] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:42278 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:16.458] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:16.459] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:16.459] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:16.459] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:21.256] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:21.258] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:52084 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:52082 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:21.388] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:21.388] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:21.389] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:21.389] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:21.460] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:52102 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:21.463] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:21.463] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:21.464] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:21.464] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:52112 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:21.466] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:21.466] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:21.466] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:21.467] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:26.258] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:26.260] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:53620 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:53606 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:26.393] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:26.393] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:26.394] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:26.394] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:26.467] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:53622 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:26.470] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:26.470] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:26.471] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:26.471] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:53630 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:26.472] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:26.472] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:26.472] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:26.473] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:31.260] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:31.262] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:52124 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:52108 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:31.398] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:31.398] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:31.399] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:31.399] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:31.473] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:52294 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:31.476] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:31.476] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:31.477] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:31.477] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:52302 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:31.479] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:31.479] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:31.479] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:31.480] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:36.262] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:36.264] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:53162 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:53176 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:36.403] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:36.403] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:36.404] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:36.404] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:36.480] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:53192 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:36.482] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:36.482] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:36.483] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:36.483] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:53206 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:36.485] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:36.485] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:36.485] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:36.485] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:41.264] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:41.266] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:51446 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:51430 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:41.410] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:41.410] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:41.410] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:41.411] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:41.486] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:51450 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:41.491] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:41.491] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:41.492] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:41.492] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:51462 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:41.493] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:41.493] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:41.493] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:41.494] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:46.266] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:46.268] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:52684 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:52694 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:46.416] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:46.416] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:46.416] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:46.416] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:46.495] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:52710 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:46.497] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:46.497] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:46.498] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:46.498] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:52714 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:46.499] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:46.499] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:46.499] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:46.500] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:51.268] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:51.269] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:59990 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:59998 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:51.421] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:48:51.421] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:51.422] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:51.422] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:51.500] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:60008 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:51.503] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:51.503] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:51.504] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:51.504] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:60010 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:51.505] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:51.505] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:51.505] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:51.506] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:56.269] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:48:56.271] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:60834 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:56.425] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:60838 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:56.426] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:48:56.427] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:48:56.427] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:48:56.506] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:60900 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:56.510] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:56.510] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:56.511] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:48:56.511] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:60914 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:48:56.512] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:48:56.512] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:48:56.512] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:48:56.513] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:01.271] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:01.272] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:41428 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:01.430] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:41432 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:01.432] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:01.432] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:01.432] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:01.513] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:41474 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:01.516] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:01.516] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:01.517] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:01.517] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:41480 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:01.519] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:01.519] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:01.519] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:01.520] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:06.272] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:06.274] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:42800 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:42816 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:06.436] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:06.437] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:06.437] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:06.438] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:06.521] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:42906 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:06.524] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:06.524] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:06.525] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:06.526] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:42918 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:06.528] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:06.528] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:06.528] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:06.529] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:11.274] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:11.275] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:43536 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:43552 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:11.443] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:11.443] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:11.444] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:11.444] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:11.530] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:43628 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:11.533] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:11.533] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:11.534] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:11.534] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:43634 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:11.536] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:11.536] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:11.536] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:11.536] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:16.276] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:16.277] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44892 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:44894 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:16.449] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:16.449] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:16.450] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:16.450] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:16.537] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44900 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:16.540] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:16.540] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:16.541] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:16.541] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44902 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:16.543] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:16.543] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:16.543] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:16.544] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:21.278] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:21.279] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:48452 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:48456 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:21.454] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:21.455] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:21.455] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:21.455] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:21.544] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:48472 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:21.547] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:21.547] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:21.548] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:21.548] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:48486 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:21.549] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:21.549] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:21.549] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:21.550] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:26.279] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:26.280] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:49768 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:49774 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:26.460] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:26.460] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:26.461] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:26.461] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:26.550] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:49782 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:26.554] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:26.554] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:26.555] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:26.555] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:49790 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:26.557] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:26.557] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:26.557] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:26.558] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:31.281] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:31.282] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:37748 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:37746 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:31.467] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:31.467] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:31.467] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:31.468] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:31.558] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:37850 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:31.562] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:31.562] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:31.563] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:31.563] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:37860 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:31.565] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:31.565] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:31.565] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:31.566] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:36.283] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:36.284] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:38872 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:38880 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:36.472] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:36.473] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:36.473] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:36.473] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:36.566] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:38888 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:36.569] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:36.569] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:36.569] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:36.569] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:38900 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:36.571] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:36.571] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:36.571] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:36.572] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:41.284] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:41.286] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:40356 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:40370 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:41.478] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:41.478] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:41.479] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:41.479] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:41.572] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:40384 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:41.575] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:41.575] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:41.576] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:41.576] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:40396 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:41.577] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:41.578] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:41.578] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:41.578] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:46.286] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:46.288] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:41606 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:41610 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:46.484] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:46.484] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:46.485] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:46.485] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:46.579] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:41632 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:46.581] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:46.581] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:46.582] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:46.582] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:41638 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:46.584] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:46.584] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:46.584] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:46.585] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:51.288] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:51.289] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:35506 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:35508 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:51.489] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:51.489] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:51.490] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:51.490] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:51.585] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:35542 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:51.588] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:51.588] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:51.588] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:51.589] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:35546 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:51.590] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:51.590] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:51.590] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:51.590] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:56.290] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:49:56.291] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:36842 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:36848 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:56.494] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:49:56.494] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:49:56.495] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:49:56.495] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:49:56.591] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:36852 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:56.594] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:56.594] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:56.595] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:49:56.595] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:36866 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:49:56.597] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:49:56.598] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:49:56.598] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:49:56.599] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:01.291] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:01.293] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:42510 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:42512 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:01.500] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:01.500] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:01.501] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:01.501] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:01.599] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:42516 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:01.604] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:01.605] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:01.605] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:01.606] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:42528 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:01.608] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:01.608] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:01.608] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:01.608] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:06.293] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:06.294] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:43904 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:43900 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:06.505] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:06.505] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:06.506] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:06.506] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:06.609] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:43938 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:06.611] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:06.611] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:06.612] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:06.612] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:43952 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:06.613] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:06.613] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:06.613] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:06.614] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:11.295] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:11.296] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:37050 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:37034 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:11.511] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:11.511] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:11.512] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:11.512] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:11.614] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:37118 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:11.617] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:11.617] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:11.618] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:11.618] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:37132 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:11.619] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:11.619] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:11.619] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:11.620] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:16.296] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:16.298] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:38386 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:38396 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:16.517] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:16.517] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:16.518] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:16.518] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:16.620] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:38412 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:16.623] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:16.623] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:16.623] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:16.623] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:38424 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:16.625] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:16.625] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:16.625] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:16.626] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:21.299] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:21.300] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:60228 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:60226 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:21.522] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:21.522] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:21.522] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:21.522] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:21.626] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:60256 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:21.629] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:21.629] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:21.630] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:21.630] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:60272 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:21.632] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:21.632] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:21.632] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:21.633] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:26.300] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:26.302] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:33316 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:33308 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:26.527] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:26.527] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:26.528] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:26.528] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:26.633] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:33320 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:26.636] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:26.637] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:26.637] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:26.637] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:33330 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:26.639] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:26.639] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:26.639] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:26.639] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:31.302] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:31.303] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:57430 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:57428 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:31.533] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:31.533] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:31.534] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:31.534] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:31.640] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:57450 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:31.642] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:31.642] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:31.643] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:31.643] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:57464 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:31.645] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:31.645] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:31.645] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:31.646] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:36.303] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:36.305] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:58754 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:58758 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:36.540] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:36.540] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:36.541] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:36.541] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:36.646] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:58974 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:36.649] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:36.650] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:36.650] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:36.650] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:58990 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:36.652] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:36.652] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:36.652] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:36.652] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:41.305] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:41.307] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:43328 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:41.546] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:43340 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:41.547] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:41.548] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:41.549] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:41.653] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:43346 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:41.656] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:41.656] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:41.657] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:41.657] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:43350 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:41.658] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:41.658] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:41.658] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:41.659] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:46.307] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:46.309] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44756 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:44760 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:46.554] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:46.554] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:46.555] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:46.555] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:46.659] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44784 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:46.662] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:46.662] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:46.663] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:46.663] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44786 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:46.665] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:46.665] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:46.665] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:46.666] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:51.309] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:51.310] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44878 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:51.561] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -INFO: 127.0.0.1:44886 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:51.562] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -[2025-11-18 17:50:51.562] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:51.563] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:51.666] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44990 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:51.669] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:51.669] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:51.669] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:51.669] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44996 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:51.671] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:51.671] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:51.671] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:51.672] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:56.311] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:50:56.312] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:46334 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:56.566] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:50:56.566] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:46348 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:56.569] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:50:56.570] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:50:56.672] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:46584 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:56.675] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:56.675] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:56.676] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:50:56.676] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:46594 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:50:56.678] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:50:56.678] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:50:56.678] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:50:56.679] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:51:01.313] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:51:01.314] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:53932 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:01.571] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:51:01.571] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:53948 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:01.574] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:51:01.575] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:51:01.679] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:53952 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:01.682] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:51:01.683] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:51:01.683] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:51:01.684] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:53962 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:01.686] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:51:01.686] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:51:01.686] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:51:01.687] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:51:06.315] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:51:06.316] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:55586 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:06.575] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:51:06.575] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:55594 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:06.578] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:51:06.579] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:51:06.687] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:55610 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:06.690] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:51:06.691] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:51:06.692] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:51:06.692] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:55624 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:06.694] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:51:06.694] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:51:06.694] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:51:06.695] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:51:11.316] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:51:11.318] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:55446 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:11.578] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:51:11.578] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:55458 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:11.582] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:51:11.583] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:51:11.695] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:55482 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:11.698] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:51:11.698] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:51:11.698] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:51:11.698] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:55492 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:11.700] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:51:11.700] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:51:11.700] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:51:11.700] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:51:16.318] [INFO] networkclient:retrieve_port_forwards:186 Looking for networks -[2025-11-18 17:51:16.319] [ERROR] networkclient:retrieve_port_forwards:216 Could not retrieve port forwards for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/portforwards (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -INFO: 127.0.0.1:44176 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:16.581] [INFO] matcherclient:retrieveRunningSpecs:210 List of servers and gateways: ['http://127.0.0.1:7777'] -[2025-11-18 17:51:16.581] [WARNING] matcherclient:retrieveRunningSpecs:216 Server http://127.0.0.1:7777 unreachable -INFO: 127.0.0.1:44190 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:16.587] [INFO] networkclient:retrieve_online_networks:141 Looking for networks -[2025-11-18 17:51:16.588] [ERROR] networkclient:retrieve_online_networks:175 Could not retrieve networks for https://127.0.0.1:7776: HTTPSConnectionPool(host='127.0.0.1', port=7776): Max retries exceeded with url: /api/v1.0/list (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[2025-11-18 17:51:16.701] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -INFO: 127.0.0.1:44196 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:16.703] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:51:16.703] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:51:16.704] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused -[2025-11-18 17:51:16.704] [INFO] storageclient:verifyCache:480 Verifying cache... -INFO: 127.0.0.1:44208 - "GET /api/v1/authenticate/status HTTP/1.1" 200 OK -[2025-11-18 17:51:16.705] [INFO] storageclient:uid:306 Found and loaded uuid: ['39c5722cc4a611f0ba8282665226e08c'] -[2025-11-18 17:51:16.705] [INFO] storageclient:discoverStorageServers:429 Looking for volumes belonging to 39c5722cc4a611f0ba8282665226e08c -[2025-11-18 17:51:16.706] [INFO] storageclient:discoverStorageServers:448 Trying http://127.0.0.1:7772 TCP -[2025-11-18 17:51:16.706] [ERROR] storageclient:discoverStorageServers:471 http://127.0.0.1:7772 connection refused From 955b88e1e39b990fc31df2839916020c6cde7098 Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Tue, 18 Nov 2025 22:17:23 +0100 Subject: [PATCH 013/109] nginx reverse proxy to daemons ports --- docker/nginx.conf | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/docker/nginx.conf b/docker/nginx.conf index e3bb045..d7266d4 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -69,5 +69,36 @@ http { alias /usr/share/nginx/html/electros/docs/; } + location /api/v1.0/client/authenticate/ { + proxy_pass http://localhost:47777/ + } + + location /api/v1.0/client/backups/ { + proxy_pass http://localhost:17777/ + } + + location /api/v1.0/client/vm/ { + proxy_pass http://localhost:17777/ + } + + # special case for network attach/detach for a VM + location ~ ^/api/v1.0/client/network/(attach|detach) { + proxy_pass http://localhost:17777/ + } + + location /api/v1.0/client/volume/ { + proxy_pass http://localhost:27777/ + } + + location /api/v1.0/client/network/ { + proxy_pass http://localhost:37777/ + } + + location /api/v1.0/service/ { + proxy_pass proxy_pass http://localhost:6777/ + } + + + } } \ No newline at end of file From daedec51c1ea0de5ccd12dca45776f1a16377159 Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Wed, 19 Nov 2025 12:38:31 +0100 Subject: [PATCH 014/109] edited nginx (server works - frontend give CORS error) --- docker/nginx.conf | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/docker/nginx.conf b/docker/nginx.conf index d7266d4..e8586cd 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -1,26 +1,20 @@ events {} http { - - include /etc/nginx/mime.types; # important + include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80; - # Set electros.html as the default homepage - index electros/electros.html; - - # Serve files from the Nginx default directory root /usr/share/nginx/html; - - + index electros/electros.html; location / { - try_files $uri $uri/ =404; } + # Static asset aliases location /js/ { alias /usr/share/nginx/html/electros/js/; } @@ -69,36 +63,34 @@ http { alias /usr/share/nginx/html/electros/docs/; } + # API proxying location /api/v1.0/client/authenticate/ { - proxy_pass http://localhost:47777/ + proxy_pass http://localhost:47777/; } location /api/v1.0/client/backups/ { - proxy_pass http://localhost:17777/ + proxy_pass http://localhost:17777/; } location /api/v1.0/client/vm/ { - proxy_pass http://localhost:17777/ + proxy_pass http://localhost:17777/; } - # special case for network attach/detach for a VM + # Special case: attach/detach VM networking location ~ ^/api/v1.0/client/network/(attach|detach) { - proxy_pass http://localhost:17777/ + proxy_pass http://localhost:17777; } location /api/v1.0/client/volume/ { - proxy_pass http://localhost:27777/ + proxy_pass http://localhost:27777/; } - + location /api/v1.0/client/network/ { - proxy_pass http://localhost:37777/ + proxy_pass http://localhost:37777/; } location /api/v1.0/service/ { - proxy_pass proxy_pass http://localhost:6777/ + proxy_pass http://localhost:6777/; } - - - } -} \ No newline at end of file +} From f26f0515bb909e8089a5a72081f4a6c1a9395ce3 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 09:16:36 +0100 Subject: [PATCH 015/109] Initial nginx config for daemons --- docker/loginGui/login.html | 11 +++++++++ docker/loginGui/readme.md | 2 ++ docker/nginx.conf | 47 ++++++++++++++++++++++++++++++-------- 3 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 docker/loginGui/login.html create mode 100644 docker/loginGui/readme.md diff --git a/docker/loginGui/login.html b/docker/loginGui/login.html new file mode 100644 index 0000000..d5353cd --- /dev/null +++ b/docker/loginGui/login.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/docker/loginGui/readme.md b/docker/loginGui/readme.md new file mode 100644 index 0000000..1f2d42a --- /dev/null +++ b/docker/loginGui/readme.md @@ -0,0 +1,2 @@ +# Electros on AtomOS Login GUI +This folder contains the GUI for the login screen, served by the instance manager. diff --git a/docker/nginx.conf b/docker/nginx.conf index e3bb045..0478f2b 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -6,6 +6,12 @@ http { default_type application/octet-stream; server { + set $compute http://localhost:17777; + set $storage http://localhost:27777; + set $network http://localhost:37777; + set $authenticate http://localhost:47777; + set $services http://localhost:6777; + listen 80; # Set electros.html as the default homepage @@ -14,13 +20,6 @@ http { # Serve files from the Nginx default directory root /usr/share/nginx/html; - - - location / { - - try_files $uri $uri/ =404; - } - location /js/ { alias /usr/share/nginx/html/electros/js/; } @@ -65,8 +64,38 @@ http { alias /usr/share/nginx/html/electros/ist/; } - location /docs/ { - alias /usr/share/nginx/html/electros/docs/; + location /api/v1/authenticate/ { + return 200 "Porcodio"; + proxy_pass $authenticate; + } + + location /api/v1.0/client/backups/ { + proxy_pass $compute; + } + + location /api/v1.0/client/vm/ { + proxy_pass $compute; + } + + # special case for network attach/detach for a VM + location ~ ^/api/v1.0/client/network/(attach|detach) { + proxy_pass $compute; + } + + location /api/v1.0/client/volume/ { + proxy_pass $storage; + } + + location /api/v1.0/client/network/ { + proxy_pass $network; + } + + location /api/v1.0/service/ { + proxy_pass $services; + } + + location / { + try_files $uri $uri/ =404; } } From 5d6fc0207661ef771c201f48129e759a932683c7 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 09:16:48 +0100 Subject: [PATCH 016/109] Updated elemento-gui-new --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index a800b5a..89494c3 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit a800b5ab0939551f9c54ffcf894da81dfc755d13 +Subproject commit 89494c3c964de597213880b52c5fc10f19661dca From c2bd3abc090a48211b4fb82a815365332621ca06 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 09:50:50 +0100 Subject: [PATCH 017/109] Modified configuration for NGinx - Added proxying of daemon calls - Added copy of correct flags - Updated electros GUI --- docker/Dockerfile | 1 + docker/nginx.conf | 35 ++++++++++++++++++++++++++++------- elemento-gui-new | 2 +- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 064ce12..88922b9 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -7,6 +7,7 @@ FROM nginx:trixie COPY docker/nginx.conf /etc/nginx/nginx.conf COPY electros-daemons/linux/x64/* /opt/daemons/ COPY elemento-gui-new/ /usr/share/nginx/html/ +COPY elemento-gui-new/electros/configs/atomosFlags.json /usr/share/nginx/html/electros/configs/flags.json COPY docker/startup.sh /opt/app/startup.sh RUN chmod +x /opt/daemons/* diff --git a/docker/nginx.conf b/docker/nginx.conf index 0478f2b..36fbee6 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -3,14 +3,14 @@ events {} http { include /etc/nginx/mime.types; # important - default_type application/octet-stream; + default_type application/json; server { - set $compute http://localhost:17777; - set $storage http://localhost:27777; - set $network http://localhost:37777; - set $authenticate http://localhost:47777; - set $services http://localhost:6777; + set $compute http://127.0.0.1:17777; + set $storage http://127.0.0.1:27777; + set $network https://127.0.0.1:37777; + set $authenticate http://127.0.0.1:47777; + set $services http://127.0.0.1:6777; listen 80; @@ -64,8 +64,29 @@ http { alias /usr/share/nginx/html/electros/ist/; } + # Daemon statuses handlers + location /authStatus { + proxy_pass $authenticate/; + } + + location /computeStatus { + proxy_pass $compute/; + } + + location /storageStatus { + proxy_pass $storage/; + } + + location /networksStatus { + proxy_pass $network/; + } + + location /servicesStatus { + proxy_pass $services/; + } + + # Daemon handlers location /api/v1/authenticate/ { - return 200 "Porcodio"; proxy_pass $authenticate; } diff --git a/elemento-gui-new b/elemento-gui-new index 89494c3..851e738 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 89494c3c964de597213880b52c5fc10f19661dca +Subproject commit 851e73802cdbc6b9368e52f5584705acd855dc72 From bd6280047a64e399286d373b0033c6764a985a02 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 09:55:17 +0100 Subject: [PATCH 018/109] Fixed duplicate entry in nginx config --- docker/nginx.conf | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/docker/nginx.conf b/docker/nginx.conf index 89f13ed..afd6226 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -115,11 +115,5 @@ http { location /api/v1.0/service/ { proxy_pass $services; - } - - location / { - try_files $uri $uri/ =404; - } - - } + } } } \ No newline at end of file From fa2206ce2a0ce94cdade765331ef7e57db288ed0 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 09:59:24 +0100 Subject: [PATCH 019/109] Added startup and dockerfile for arm64 environments --- docker/arm_Dockerfile | 28 ++++++++++++++++++++++++++++ docker/arm_startup.sh | 10 ++++++++++ 2 files changed, 38 insertions(+) create mode 100644 docker/arm_Dockerfile create mode 100644 docker/arm_startup.sh diff --git a/docker/arm_Dockerfile b/docker/arm_Dockerfile new file mode 100644 index 0000000..37887e1 --- /dev/null +++ b/docker/arm_Dockerfile @@ -0,0 +1,28 @@ +FROM nginx:trixie + +# gather daemons +# copy app code +# daemons must run in background - ./daemons +# entrypoint must run the electros app on port 80 +COPY ./docker/nginx.conf /etc/nginx/nginx.conf +COPY electros-daemons/linux/arm64/* /opt/daemons/ +COPY elemento-gui-new/ /usr/share/nginx/html/ +COPY elemento-gui-new/electros/configs/atomosFlags.json /usr/share/nginx/html/electros/configs/flags.json +COPY ./docker/arm_startup.sh /opt/app/startup.sh + +RUN chmod +x /opt/daemons/* +RUN chmod +x /opt/app/startup.sh + +RUN mkdir -p /var/log/elemento + +RUN ls -lah /usr/share/nginx/html/ + +EXPOSE 80 + +ENTRYPOINT [ "/opt/app/startup.sh" ] + + + + + + diff --git a/docker/arm_startup.sh b/docker/arm_startup.sh new file mode 100644 index 0000000..b775a88 --- /dev/null +++ b/docker/arm_startup.sh @@ -0,0 +1,10 @@ +#! /bin/bash + +# start background daemons + +#/opt/daemons/Elemento_Daemons_linux_x86 > /var/log/elemento/elemento_daemons.log 2>&1 & +/opt/daemons/Elemento_Daemons_linux_arm > /var/log/elemento/elemento_daemons.log 2>&1 & + +# run the project + +nginx -g 'daemon off;' From f7bf5d9343fa626f33aa3a81611a1912e5ffb7c1 Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Thu, 20 Nov 2025 10:26:43 +0100 Subject: [PATCH 020/109] trigger action --- .github/workflows/docker-build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 8ccf64c..4cf4d5a 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,6 +1,8 @@ name: Build and Push Electros docker image on: + push: + branches: [ dev-docker-instance ] workflow_dispatch: permissions: From 41dc251e2b23f825e1d2783ab07a16e5514f8a7b Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Thu, 20 Nov 2025 11:13:40 +0100 Subject: [PATCH 021/109] deleting unused file --- docker/compose.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docker/compose.yml diff --git a/docker/compose.yml b/docker/compose.yml deleted file mode 100644 index e69de29..0000000 From 5b29ffa9373470904bd604a3dacb30994f751de8 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 11:56:40 +0100 Subject: [PATCH 022/109] Updated Nginx config to allow networks and targets --- docker/nginx.conf | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docker/nginx.conf b/docker/nginx.conf index afd6226..69dfd27 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -6,11 +6,12 @@ http { default_type application/json; server { + set $authenticate http://127.0.0.1:47777; set $compute http://127.0.0.1:17777; set $storage http://127.0.0.1:27777; - set $network https://127.0.0.1:37777; - set $authenticate http://127.0.0.1:47777; + set $network http://127.0.0.1:37777; set $services http://127.0.0.1:6777; + set $targets http://127.0.0.1:57777; listen 80; @@ -87,6 +88,10 @@ http { proxy_pass $services/; } + location /targetsStatus { + proxy_pass $targets/; + } + # Daemon handlers location /api/v1/authenticate/ { proxy_pass $authenticate; @@ -115,5 +120,10 @@ http { location /api/v1.0/service/ { proxy_pass $services; - } } + } + + location /api/v1.0/client/target/ { + proxy_pass $targets; + } + } } \ No newline at end of file From a4877ef713898055c227a48af296cf8d031425ec Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 14:34:30 +0100 Subject: [PATCH 023/109] Updated GUI for Docker system --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 851e738..5d52196 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 851e73802cdbc6b9368e52f5584705acd855dc72 +Subproject commit 5d52196dcd08e554b066ff828c1d1eeddf1bccf6 From cc80f0abe0aceedead4875b92cbc1766d5956675 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 14:47:21 +0100 Subject: [PATCH 024/109] Updated GUI for Docker system --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 5d52196..bf4a6bb 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 5d52196dcd08e554b066ff828c1d1eeddf1bccf6 +Subproject commit bf4a6bb6f4f17f2460ca70da1d4c3987a06a0961 From cd0f4506a4e30e0adaa1da9cee40e8ee13732841 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 14:52:05 +0100 Subject: [PATCH 025/109] Updated GUI for Docker system --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index bf4a6bb..ee8ab8a 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit bf4a6bb6f4f17f2460ca70da1d4c3987a06a0961 +Subproject commit ee8ab8a0d7d95c0d26dae8f5d896c69b32c94db5 From 912b7d3990ab318f1402d26537131e51d0fb804c Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 15:18:23 +0100 Subject: [PATCH 026/109] Updated GUI for Docker system to have new splashscreen --- docker/Dockerfile | 1 + elemento-gui-new | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 88922b9..4ff21f2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,6 +8,7 @@ COPY docker/nginx.conf /etc/nginx/nginx.conf COPY electros-daemons/linux/x64/* /opt/daemons/ COPY elemento-gui-new/ /usr/share/nginx/html/ COPY elemento-gui-new/electros/configs/atomosFlags.json /usr/share/nginx/html/electros/configs/flags.json +COPY elemento-gui-new/electros/electrosOnAtomos.html /usr/share/nginx/html/electros/electros.html COPY docker/startup.sh /opt/app/startup.sh RUN chmod +x /opt/daemons/* diff --git a/elemento-gui-new b/elemento-gui-new index ee8ab8a..a5289e0 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit ee8ab8a0d7d95c0d26dae8f5d896c69b32c94db5 +Subproject commit a5289e023939a2dfff8220cadf5128f078133c97 From b67280bfe9119e1d25a193ae964f985a22995cf1 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 15:24:49 +0100 Subject: [PATCH 027/109] Updated logo in info settings for GUI --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index a5289e0..2bf564e 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit a5289e023939a2dfff8220cadf5128f078133c97 +Subproject commit 2bf564e005a83e9cb4f028788600f3bd70ff713e From bf16e159f5c0a693f5f8fdf0c1ac23feb67de1cd Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 17:17:40 +0100 Subject: [PATCH 028/109] Updated Electros GUI to v3.1.3 --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index a800b5a..43a535b 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit a800b5ab0939551f9c54ffcf894da81dfc755d13 +Subproject commit 43a535ba613c81ea1dfc577e79a78bd5b395ce23 From deb83a04db32aa688fd73d86fc7f92aab1ad58fa Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 20 Nov 2025 17:21:28 +0100 Subject: [PATCH 029/109] Updated Electros GUI to v3.1.3 --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 43a535b..a5289e0 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 43a535ba613c81ea1dfc577e79a78bd5b395ce23 +Subproject commit a5289e023939a2dfff8220cadf5128f078133c97 From f7ad493a8bc97bddd9dec1128276b8d8fed071a7 Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Wed, 26 Nov 2025 13:13:33 +0100 Subject: [PATCH 030/109] Deleted old gui folder --- docker/loginGui/login.html | 11 ----------- docker/loginGui/readme.md | 2 -- 2 files changed, 13 deletions(-) delete mode 100644 docker/loginGui/login.html delete mode 100644 docker/loginGui/readme.md diff --git a/docker/loginGui/login.html b/docker/loginGui/login.html deleted file mode 100644 index d5353cd..0000000 --- a/docker/loginGui/login.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/docker/loginGui/readme.md b/docker/loginGui/readme.md deleted file mode 100644 index 1f2d42a..0000000 --- a/docker/loginGui/readme.md +++ /dev/null @@ -1,2 +0,0 @@ -# Electros on AtomOS Login GUI -This folder contains the GUI for the login screen, served by the instance manager. From 01eabad9de9c96480a41f59491693248578e8799 Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Wed, 26 Nov 2025 13:13:47 +0100 Subject: [PATCH 031/109] Added License and Author(s) --- docker/Dockerfile | 28 ++++++++++++++++++++++++++++ docker/arm_Dockerfile | 29 +++++++++++++++++++++++++++++ docker/arm_startup.sh | 29 ++++++++++++++++++++++++++++- docker/nginx.conf | 31 ++++++++++++++++++++++++++++++- docker/startup.sh | 32 +++++++++++++++++++++++++++++--- 5 files changed, 144 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 4ff21f2..9d8dd4f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,3 +1,31 @@ +# #******************************************************************************# +# # Copyright(c) 2019-2023, Elemento srl, All rights reserved # +# # Author: Elemento srl # +# # Contributors are mentioned in the code where appropriate. # +# # Permission to use and modify this software and its documentation strictly # +# # for personal purposes is hereby granted without fee, # +# # provided that the above copyright notice appears in all copies # +# # and that both the copyright notice and this permission notice appear in the # +# # supporting documentation. # +# # Modifications to this work are allowed for personal use. # +# # Such modifications have to be licensed under a # +# # Creative Commons BY-NC-ND 4.0 International License available at # +# # http://creativecommons.org/licenses/by-nc-nd/4.0/ and have to be made # +# # available to the Elemento user community # +# # through the original distribution channels. # +# # The authors make no claims about the suitability # +# # of this software for any purpose. # +# # It is provided "as is" without express or implied warranty. # +# #******************************************************************************# +# +# #------------------------------------------------------------------------------# +# #Electros # +# #Authors: # +# #- Filippo Ferrando Damillano (fferrando at elemento.cloud) # +# #------------------------------------------------------------------------------# +# + + FROM nginx:trixie # gather daemons diff --git a/docker/arm_Dockerfile b/docker/arm_Dockerfile index 37887e1..b58cb98 100644 --- a/docker/arm_Dockerfile +++ b/docker/arm_Dockerfile @@ -1,3 +1,32 @@ +# #******************************************************************************# +# # Copyright(c) 2019-2023, Elemento srl, All rights reserved # +# # Author: Elemento srl # +# # Contributors are mentioned in the code where appropriate. # +# # Permission to use and modify this software and its documentation strictly # +# # for personal purposes is hereby granted without fee, # +# # provided that the above copyright notice appears in all copies # +# # and that both the copyright notice and this permission notice appear in the # +# # supporting documentation. # +# # Modifications to this work are allowed for personal use. # +# # Such modifications have to be licensed under a # +# # Creative Commons BY-NC-ND 4.0 International License available at # +# # http://creativecommons.org/licenses/by-nc-nd/4.0/ and have to be made # +# # available to the Elemento user community # +# # through the original distribution channels. # +# # The authors make no claims about the suitability # +# # of this software for any purpose. # +# # It is provided "as is" without express or implied warranty. # +# #******************************************************************************# +# +# #------------------------------------------------------------------------------# +# #Electros # +# #Authors: # +# #- Filippo Ferrando Damillano (fferrando at elemento.cloud) # +# #- Simone Robaldo (srobaldo at elemento.cloud) # +# #------------------------------------------------------------------------------# +# + + FROM nginx:trixie # gather daemons diff --git a/docker/arm_startup.sh b/docker/arm_startup.sh index b775a88..03570a2 100644 --- a/docker/arm_startup.sh +++ b/docker/arm_startup.sh @@ -1,9 +1,36 @@ #! /bin/bash +# #******************************************************************************# +# # Copyright(c) 2019-2023, Elemento srl, All rights reserved # +# # Author: Elemento srl # +# # Contributors are mentioned in the code where appropriate. # +# # Permission to use and modify this software and its documentation strictly # +# # for personal purposes is hereby granted without fee, # +# # provided that the above copyright notice appears in all copies # +# # and that both the copyright notice and this permission notice appear in the # +# # supporting documentation. # +# # Modifications to this work are allowed for personal use. # +# # Such modifications have to be licensed under a # +# # Creative Commons BY-NC-ND 4.0 International License available at # +# # http://creativecommons.org/licenses/by-nc-nd/4.0/ and have to be made # +# # available to the Elemento user community # +# # through the original distribution channels. # +# # The authors make no claims about the suitability # +# # of this software for any purpose. # +# # It is provided "as is" without express or implied warranty. # +# #******************************************************************************# +# +# #------------------------------------------------------------------------------# +# #Electros # +# #Authors: # +# #- Filippo Ferrando Damillano (fferrando at elemento.cloud) # +# #- Simone Robaldo (srobaldo at elemento.cloud) # +# #------------------------------------------------------------------------------# +# # start background daemons #/opt/daemons/Elemento_Daemons_linux_x86 > /var/log/elemento/elemento_daemons.log 2>&1 & -/opt/daemons/Elemento_Daemons_linux_arm > /var/log/elemento/elemento_daemons.log 2>&1 & +/opt/daemons/Elemento_Daemons_linux_arm >/var/log/elemento/elemento_daemons.log 2>&1 & # run the project diff --git a/docker/nginx.conf b/docker/nginx.conf index 69dfd27..6b8e5e5 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -1,3 +1,32 @@ +# #******************************************************************************# +# # Copyright(c) 2019-2023, Elemento srl, All rights reserved # +# # Author: Elemento srl # +# # Contributors are mentioned in the code where appropriate. # +# # Permission to use and modify this software and its documentation strictly # +# # for personal purposes is hereby granted without fee, # +# # provided that the above copyright notice appears in all copies # +# # and that both the copyright notice and this permission notice appear in the # +# # supporting documentation. # +# # Modifications to this work are allowed for personal use. # +# # Such modifications have to be licensed under a # +# # Creative Commons BY-NC-ND 4.0 International License available at # +# # http://creativecommons.org/licenses/by-nc-nd/4.0/ and have to be made # +# # available to the Elemento user community # +# # through the original distribution channels. # +# # The authors make no claims about the suitability # +# # of this software for any purpose. # +# # It is provided "as is" without express or implied warranty. # +# #******************************************************************************# +# +# #------------------------------------------------------------------------------# +# #Electros # +# #Authors: # +# #- Filippo Ferrando Damillano (fferrando at elemento.cloud) # +# #- Simone Robaldo (srobaldo at elemento.cloud) # +# #------------------------------------------------------------------------------# +# + + events {} http { @@ -126,4 +155,4 @@ http { proxy_pass $targets; } } -} \ No newline at end of file +} diff --git a/docker/startup.sh b/docker/startup.sh index 1a68666..06dced7 100644 --- a/docker/startup.sh +++ b/docker/startup.sh @@ -1,9 +1,35 @@ #! /bin/bash - +# #******************************************************************************# +# # Copyright(c) 2019-2023, Elemento srl, All rights reserved # +# # Author: Elemento srl # +# # Contributors are mentioned in the code where appropriate. # +# # Permission to use and modify this software and its documentation strictly # +# # for personal purposes is hereby granted without fee, # +# # provided that the above copyright notice appears in all copies # +# # and that both the copyright notice and this permission notice appear in the # +# # supporting documentation. # +# # Modifications to this work are allowed for personal use. # +# # Such modifications have to be licensed under a # +# # Creative Commons BY-NC-ND 4.0 International License available at # +# # http://creativecommons.org/licenses/by-nc-nd/4.0/ and have to be made # +# # available to the Elemento user community # +# # through the original distribution channels. # +# # The authors make no claims about the suitability # +# # of this software for any purpose. # +# # It is provided "as is" without express or implied warranty. # +# #******************************************************************************# +# +# #------------------------------------------------------------------------------# +# #Electros # +# #Authors: # +# #- Filippo Ferrando Damillano (fferrando at elemento.cloud) # +# #------------------------------------------------------------------------------# +# # start background daemons -/opt/daemons/Elemento_Daemons_linux_x86 > /var/log/elemento/elemento_daemons.log 2>&1 & +/opt/daemons/Elemento_Daemons_linux_x86 >/var/log/elemento/elemento_daemons.log 2>&1 & # run the project -nginx -g 'daemon off;' \ No newline at end of file +nginx -g 'daemon off;' + From 0307518f6f53d6fdd738880afa6ea03a22e984c9 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 27 Nov 2025 16:18:40 +0100 Subject: [PATCH 032/109] Fixed SSH Implementation for Electros --- electros-electron/main.js | 9 ++------- electros-electron/package.json | 4 ++-- elemento-gui-new | 2 +- package-lock.json | 6 ------ 4 files changed, 5 insertions(+), 16 deletions(-) delete mode 100644 package-lock.json diff --git a/electros-electron/main.js b/electros-electron/main.js index 355773f..b915099 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -988,28 +988,24 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { } }); - var ssh_port = undefined; + let ssh_port = undefined; try { - // Get an available port for the SSH server ssh_port = getAvailablePort().toString(); - console.log("connectionDetails: ", connectionDetails) const baseDir = app.isPackaged ? process.resourcesPath : __dirname; const sshPath = path.join( baseDir, app.isPackaged ? 'app.asar.unpacked' : '', - 'electros', 'remotes', 'ssh', 'ssh.js' + 'electros', 'remotes', 'ssh', 'ssh.cjs' ); // Start the SSH server process const sshServer = require(sshPath); await sshServer.runSSHServer(ssh_port, baseDir); - // Store port reference event.sender.ssh_port = ssh_port; - // Inject custom titlebar after the page loads sshWindow.webContents.on('did-finish-load', () => { const sshTitlebarJS = titlebarCustomJS.replace( 'titleElement.textContent = document.title;', @@ -1051,7 +1047,6 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { await sshWindow.loadURL(`http://localhost:${ssh_port}/?host=${encodeURIComponent(connectionDetails.ip)}&username=${encodeURIComponent(connectionDetails.username)}&password=${encodeURIComponent(connectionDetails.password)}`); return sshWindow.id; - } catch (error) { console.error('Error setting up SSH window:', error); if (ssh_port) { diff --git a/electros-electron/package.json b/electros-electron/package.json index c3ea2c7..6b41df9 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { - "name": "Electros", - "version": "3.1.2", + "name": "electros", + "version": "3.1.5", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", diff --git a/elemento-gui-new b/elemento-gui-new index a5289e0..3aceefb 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit a5289e023939a2dfff8220cadf5128f078133c97 +Subproject commit 3aceefb4b4df2b7488114f5bab302052e800a3b0 diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index b94528d..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "ElectrosGUI", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} From d4ccbed21ac0157c8a80f0b24c20dadfd423864c Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 1 Dec 2025 10:51:49 +0100 Subject: [PATCH 033/109] Updated GUI to v3.1.5 for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 3aceefb..19577c8 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 3aceefb4b4df2b7488114f5bab302052e800a3b0 +Subproject commit 19577c8999e4379a974cdcc6defcdd85365292af From 41587a68efd970fc06cfa182d533a2aa3331f98e Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Tue, 2 Dec 2025 11:31:24 +0100 Subject: [PATCH 034/109] fix: update gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 208bf4d..7a51d03 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ electros-daemons electros-nwjs/nwjs-sdk-* .DS_Store electros-electron/venv +.env +env/ From d2b625612b28084c2b460037b5f0108e9c4caf2b Mon Sep 17 00:00:00 2001 From: filippo-ferrando Date: Tue, 9 Dec 2025 15:11:01 +0100 Subject: [PATCH 035/109] chore: changed base branch for docker image build --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 4cf4d5a..2c3bc66 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -2,7 +2,7 @@ name: Build and Push Electros docker image on: push: - branches: [ dev-docker-instance ] + branches: [ develop ] workflow_dispatch: permissions: From 0c0a10046949337279a1e25862f0c9931d740643 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 11 Dec 2025 12:14:24 +0100 Subject: [PATCH 036/109] Updated GUI to v3.1.5 (second build) for beta test build --- .github/workflows/nightly.yml | 408 +++++++++++++++++++++++++++++++++ electros-electron/package.json | 2 +- elemento-gui-new | 2 +- 3 files changed, 410 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/nightly.yml diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000..c2b392e --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,408 @@ +name: nightly.yml + +on: + schedule: + - cron: "0 17 * * *" + workflow_dispatch: + +jobs: + remove-old-releases: + name: Remove old releases + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' + steps: + - name: Delete old releases + uses: s00d/delete-older-releases@0.2.1 + with: + repo: Elemento-Modular-Cloud/Electros + keep_latest: 3 + delete_type: 'release' + delete_branch: ${{ github.ref }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Delete old prereleases + uses: s00d/delete-older-releases@0.2.1 + with: + repo: Elemento-Modular-Cloud/Electros + keep_latest: 1 + delete_type: 'prerelease' + delete_branch: ${{ github.ref }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + sync-submodule: + name: Sync GUI Submoudle + runs-on: ubuntu-latest + + create-release: + name: Create Release + needs: remove-old-releases + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' + outputs: + tag_name: ${{ steps.get_tag_name.outputs.tag_name }} + tag_name_nodate: ${{ steps.get_tag_name.outputs.tag_name_nodate }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + token: ${{ secrets.CI_TOKEN }} + submodules: recursive + ref: ${{ github.ref }} + + - name: Get current date + id: date + run: | + echo "date=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT + echo "time=$(date +'%H%M%S')" >> $GITHUB_OUTPUT + + - name: Get tag name + id: get_tag_name + run: | + VERSION=$(node -p "require('./electros-electron/package.json').version") + echo "tag_name=v${VERSION}-${{ steps.date.outputs.date }}-${{ steps.date.outputs.time }}-nightly-${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + echo "tag_name_nodate=${VERSION}-nightly" >> $GITHUB_OUTPUT + + - name: Create release + id: create_release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create ${{ steps.get_tag_name.outputs.tag_name }} \ + --prerelease \ + --title "ElectrosRelease ${{ steps.get_tag_name.outputs.tag_name }}" \ + --generate-notes + + build: + name: Build (${{ matrix.os }}-${{ matrix.arch }}) + needs: create-release + runs-on: ${{ matrix.platform }} + strategy: + fail-fast: false + matrix: + include: + - platform: macos-latest + os: mac + arch: x64 + - platform: macos-latest + os: mac + arch: arm64 + - platform: macos-latest + os: win + arch: x64 + - platform: ubuntu-latest + os: linux + arch: x64 + - platform: ubuntu-latest + os: linux + arch: arm64 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + token: ${{ secrets.CI_TOKEN }} + submodules: recursive + ref: ${{ github.ref }} + + - name: Get tag name + id: get_tag_name + run: | + VERSION=$(node -p "require('./electros-electron/package.json').version") + echo "tag_name=v${VERSION}-${{ steps.date.outputs.date }}-${{ steps.date.outputs.time }}-${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + echo "tag_name_nodate=${VERSION}" >> $GITHUB_OUTPUT + + + - name: Setup step + if: runner.os != 'Windows' + run: | + export CI_TOKEN=${{ secrets.CI_TOKEN }} + cd ./electros-electron + chmod +x ./setup.sh + ./setup.sh + shell: bash + + - name: Populate Daemons step + if: runner.os != 'Windows' + run: | + export CI_TOKEN=${{ secrets.CI_TOKEN }} + chmod +x ./populate_daemons.sh + ./populate_daemons.sh --platform ${{ matrix.os }} --arch ${{ matrix.arch }} --develop + shell: bash + + - name: Build step (${{ matrix.os }}-${{ matrix.arch }}) + if: runner.os != 'Windows' + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} + P12_PASSWORD: ${{ secrets.P12_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: | + if [ ${{ matrix.os }} == "mac" ]; then + # Create keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain + security default-keychain -s build.keychain + security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain + security set-keychain-settings -t 3600 -u build.keychain + + # Import certificate + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output certificate.p12 + security import certificate.p12 -k build.keychain -P "$P12_PASSWORD" -T /usr/bin/codesign + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain + rm -fr *.p12 + fi + + # Clean up + cd ./electros-electron + chmod +x ./autobuild.sh + ./autobuild.sh --platform ${{ matrix.os }} --arch ${{ matrix.arch }} --version ${{ steps.get_tag_name.outputs.tag_name_nodate }} + shell: bash + + - name: Upload un-notarized & un-stapled DMG artifact + uses: actions/upload-artifact@v4 + if: matrix.os == 'mac' + with: + name: Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}-unsigned.dmg + path: electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}/Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg + + - name: Apple notarize step + if: runner.os != 'Windows' && matrix.os == 'mac' + env: + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + APP_ID: app.elemento.cloud + run: | + # Load keychain + security default-keychain -s build.keychain + security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain + + cd "electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}" + + # First, extract the .app from the unsigned DMG + echo "Extracting .app bundle from DMG..." + VOLUME_NAME=$(hdiutil attach "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg" | tail -1 | awk '{$1=$2=""; print substr($0,3)}') + cp -R "$VOLUME_NAME/Electros.app" ./ + hdiutil detach "$VOLUME_NAME" + + # First get the signing identity from the keychain + SIGNING_IDENTITY=$(security find-identity -v -p codesigning build.keychain | grep -o '".*"' | head -1 | tr -d '"') + codesign -s "$SIGNING_IDENTITY" -vvv --deep --timestamp --options=runtime --entitlements ../../../entitlements.plist Electros.app/Contents/Resources/app.asar.unpacked/node_modules/ssh2/lib/protocol/crypto/build/node_gyp_bins/python3 --force + codesign -s "$SIGNING_IDENTITY" -vvv --deep --timestamp --options=runtime --entitlements ../../../entitlements.plist ./Electros.app --force + + # Now notarize the extracted .app bundle + echo "Notarizing .app bundle..." + ditto -c -k --keepParent "Electros.app" "Electros.zip" + xcrun notarytool submit --apple-id $APPLE_ID --password $APPLE_APP_SPECIFIC_PASSWORD --team-id $APPLE_TEAM_ID ./Electros.zip | tee app-${{ matrix.os }}-${{ matrix.arch }}-notarize.log + + # Wait for app notarization to complete and staple the app + while read -r line; do + if [[ $line =~ "id: "([^\ ]+) ]]; then + submission_id="${BASH_REMATCH[1]}" + echo "Waiting for app notarization to complete..." + xcrun notarytool wait "$submission_id" --apple-id $APPLE_ID --password $APPLE_APP_SPECIFIC_PASSWORD --team-id $APPLE_TEAM_ID + xcrun stapler staple "Electros.app" + break + fi + done < app-${{ matrix.os }}-${{ matrix.arch }}-notarize.log + + rm Electros.zip + + # Create new DMG with the notarized app while preserving electron-builder layout + echo "Creating new DMG with notarized app..." + mv "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg" "./original.dmg" + + # Mount the original DMG + VOLUME_NAME=$(hdiutil attach -nobrowse "./original.dmg" | tail -1 | awk '{$1=$2=""; print substr($0,3)}') + + # Create a temporary read-write DMG + hdiutil convert "./original.dmg" -format UDRW -o "./temp.dmg" + hdiutil detach "$VOLUME_NAME" + + # Mount the temporary DMG + VOLUME_NAME=$(hdiutil attach -nobrowse "./temp.dmg" | tail -1 | awk '{$1=$2=""; print substr($0,3)}') + + # Replace the .app with the notarized version + rm -rf "$VOLUME_NAME/Electros.app" + cp -R "./Electros.app" "$VOLUME_NAME/" + + # Unmount the temporary DMG + hdiutil detach "$VOLUME_NAME" + + # Convert back to compressed read-only DMG + hdiutil convert "./temp.dmg" -format UDZO -o "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg" + + # Clean up temporary files + rm "./temp.dmg" "./original.dmg" + + # Sign the DMG with the same identity used for the app + echo "Signing DMG..." + codesign -s "$SIGNING_IDENTITY" -vvv --deep --timestamp --options=runtime \ + "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg" + + # Now notarize the new DMG + echo "Notarizing DMG..." + xcrun notarytool submit --apple-id $APPLE_ID --password $APPLE_APP_SPECIFIC_PASSWORD --team-id $APPLE_TEAM_ID ./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg | tee ${{ matrix.os }}-${{ matrix.arch }}-notarize.log + + # Wait for DMG notarization to complete and staple + while read -r line; do + if [[ $line =~ "id: "([^\ ]+) ]]; then + submission_id="${BASH_REMATCH[1]}" + echo "Waiting for DMG notarization to complete..." + xcrun notarytool wait "$submission_id" --apple-id $APPLE_ID --password $APPLE_APP_SPECIFIC_PASSWORD --team-id $APPLE_TEAM_ID + xcrun stapler staple "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg" + break + fi + done < ${{ matrix.os }}-${{ matrix.arch }}-notarize.log + + - name: Upload Apple notarize logs artifact + uses: actions/upload-artifact@v4 + if: matrix.os == 'mac' + with: + name: ${{ matrix.os }}-${{ matrix.arch }}-notarize.log + path: electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.os }}-${{ matrix.arch }}-notarize.log electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}/app-${{ matrix.os }}-${{ matrix.arch }}-notarize.log + + - name: Upload Apple notarize + uses: actions/upload-artifact@v4 + if: matrix.os == 'mac' + with: + name: Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg + path: electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}/Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg + + - name: Upload win exe artifact + uses: actions/upload-artifact@v4 + if: matrix.os == 'win' + with: + name: Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.exe + path: electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}/Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.exe + + - name: Upload linux artifacts + uses: actions/upload-artifact@v4 + if: matrix.os == 'linux' + with: + name: Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}-artifacts + path: | + electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}/Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.AppImage + electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}/Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.deb + electros-electron/build/${{ matrix.os }}/${{ matrix.arch }}/Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.rpm + + + - name: Generate checksums + run: | + cd electros-electron/build + + # Create the checksum file with absolute path + checksum_file="$(pwd)/checksums-${{ matrix.os }}-${{ matrix.arch }}.txt" + + # Create a single checksums file + echo "# Electros ${{ needs.create-release.outputs.tag_name }} Checksums" > "$checksum_file" + echo "# Generated on $(date)" >> "$checksum_file" + echo "" >> "$checksum_file" + + # Function to generate checksums for a file + generate_checksums() { + local file=$1 + if [ -f "$file" ]; then + echo "Generating checksums for $file" + echo "## $file" >> "$checksum_file" + if [[ "$RUNNER_OS" == "macOS" ]]; then + echo "MD5: $(md5 -r "$file" | cut -d' ' -f1)" >> "$checksum_file" + echo "SHA256: $(shasum -a 256 "$file" | cut -d' ' -f1)" >> "$checksum_file" + else + echo "MD5: $(md5sum "$file" | cut -d' ' -f1)" >> "$checksum_file" + echo "SHA256: $(sha256sum "$file" | cut -d' ' -f1)" >> "$checksum_file" + fi + echo "" >> "$checksum_file" + fi + } + + cd "${{ matrix.os }}/${{ matrix.arch }}" + + if [ ${{ matrix.os }} == "mac" ]; then + generate_checksums "Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg" + + gh release upload ${{ needs.create-release.outputs.tag_name }} \ + "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.dmg" + elif [ ${{ matrix.os }} == "win" ]; then + generate_checksums "Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.exe" + + gh release upload ${{ needs.create-release.outputs.tag_name }} \ + "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.exe" + elif [ ${{ matrix.os }} == "linux" ]; then + generate_checksums "Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.AppImage" + generate_checksums "Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.deb" + + gh release upload ${{ needs.create-release.outputs.tag_name }} \ + "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.AppImage" \ + "./Electros-${{ steps.get_tag_name.outputs.tag_name_nodate }}-${{ matrix.os }}-${{ matrix.arch }}.deb" + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload checksums artifact + uses: actions/upload-artifact@v4 + with: + name: checksums-${{ matrix.os }}-${{ matrix.arch }} + path: electros-electron/build/checksums-${{ matrix.os }}-${{ matrix.arch }}.txt + + combine-checksums: + name: Combine Checksums + needs: [create-release, build] + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + token: ${{ secrets.CI_TOKEN }} + ref: ${{ github.ref }} + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Combine checksums and update release notes + run: | + # Create header for combined checksums + { + echo "# Electros ${{ needs.create-release.outputs.tag_name }} Checksums" + echo "# Generated on $(date)" + echo "# This file contains checksums for all platform builds" + echo "" + } > combined_checksums.txt + + # Find and combine all checksum files + find artifacts -name "checksums-*.txt" -type f | while read -r file; do + echo "Processing $file" + platform=$(basename "$file" | sed 's/checksums-\(.*\)\.txt/\1/') + echo "## Platform: $platform" >> combined_checksums.txt + # Skip the header lines and add the content + tail -n +4 "$file" >> combined_checksums.txt + echo "" >> combined_checksums.txt + done + + # Get existing release notes + gh release view ${{ needs.create-release.outputs.tag_name }} --json body -q .body > existing_notes.txt + + # Combine existing notes with checksums + { + cat existing_notes.txt + echo "" + echo "
" + echo "Build Checksums" + echo "" + cat combined_checksums.txt + echo "
" + } > updated_notes.txt + + # Update release notes + gh release edit ${{ needs.create-release.outputs.tag_name }} --notes-file updated_notes.txt + + # Still upload the checksums file separately for direct access + gh release upload ${{ needs.create-release.outputs.tag_name }} combined_checksums.txt --clobber + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/electros-electron/package.json b/electros-electron/package.json index 6b41df9..a1007f6 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "electros", - "version": "3.1.5", + "version": "3.1.5 beta 2", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", diff --git a/elemento-gui-new b/elemento-gui-new index 2bf564e..81f5608 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 2bf564e005a83e9cb4f028788600f3bd70ff713e +Subproject commit 81f5608cb65300ae493eba1fad75bfd53143804a From 372bad839d435a008744b0a8b472427f997b47f5 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 11 Dec 2025 12:17:21 +0100 Subject: [PATCH 037/109] Updated GUI to v3.1.5 (second build) for beta test build --- electros-electron/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electros-electron/package.json b/electros-electron/package.json index a1007f6..cbb0c20 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "electros", - "version": "3.1.5 beta 2", + "version": "3.1.5_beta_2", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", From f56d653c3165c454262d4d1c5e52162635477b2c Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 11 Dec 2025 12:19:34 +0100 Subject: [PATCH 038/109] Updated GUI to v3.1.5 (second build) for beta test build --- electros-electron/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electros-electron/package.json b/electros-electron/package.json index cbb0c20..6b41df9 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -1,6 +1,6 @@ { "name": "electros", - "version": "3.1.5_beta_2", + "version": "3.1.5", "description": "Electros Desktop Application", "main": "main.js", "homepage": "https://elemento.cloud", From 0abe035a55e537fb51dbddf4d4c91a04e750a59f Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 18 Dec 2025 16:48:34 +0100 Subject: [PATCH 039/109] Updated GUI to v3.1.5 (third build) for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 81f5608..2ee9832 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 81f5608cb65300ae493eba1fad75bfd53143804a +Subproject commit 2ee98325fafad2b206835f9c5f78153c2c274f42 From 6595f24c4abb00a4e931cebd24b8efa4a852b814 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 19 Dec 2025 12:52:28 +0100 Subject: [PATCH 040/109] Updated GUI to v3.1.5 (fourth build) for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 2ee9832..eee36a7 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 2ee98325fafad2b206835f9c5f78153c2c274f42 +Subproject commit eee36a756c192fd5577a0d805159811fe98848ea From 4321036508c8f580dda97e31e8b07f49bb9b319f Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 22 Dec 2025 17:19:08 +0100 Subject: [PATCH 041/109] Updated GUI to v3.1.5 (fifth build) for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index eee36a7..73183ec 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit eee36a756c192fd5577a0d805159811fe98848ea +Subproject commit 73183ec6d8f9245d9dcd094af7ee87b0bd710117 From d9f12f89fe067160596f83a011bfcf239dde78d1 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 23 Dec 2025 09:52:40 +0100 Subject: [PATCH 042/109] Updated GUI to v3.1.5 (sixth build) for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 73183ec..1c08a8e 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 73183ec6d8f9245d9dcd094af7ee87b0bd710117 +Subproject commit 1c08a8e6eca8aa0541f938a87b3970b7cd96dd8e From fe402f0813a7de4d2fbf9e41a7fd3b0a09be9dce Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 23 Dec 2025 10:53:35 +0100 Subject: [PATCH 043/109] Updated GUI to v3.1.5 (seventh build) for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 1c08a8e..018f67d 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 1c08a8e6eca8aa0541f938a87b3970b7cd96dd8e +Subproject commit 018f67dd429f82ec1d8f50ef01ced4cf6188ba51 From 74f75e7ad1299098bf8cd5bfdb08d595866f2a54 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 23 Dec 2025 12:58:59 +0100 Subject: [PATCH 044/109] Updated GUI to v3.1.5 (eight build) for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 018f67d..c37d86e 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 018f67dd429f82ec1d8f50ef01ced4cf6188ba51 +Subproject commit c37d86e058d56e19d540702d7991c25bc279c793 From e575f82fc5cb6d3ec8ead10364f1602209333bfd Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 23 Dec 2025 13:01:49 +0100 Subject: [PATCH 045/109] Updated GUI to v3.1.5 (ninth build) for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index c37d86e..bb0244b 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit c37d86e058d56e19d540702d7991c25bc279c793 +Subproject commit bb0244bfeaf95e0384f6e352d4cc39481fe1b193 From 794d50a34d6cca52b72d5b5e3778f986e5812ac3 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 23 Dec 2025 13:06:07 +0100 Subject: [PATCH 046/109] Updated GUI to v3.1.5 (tenth build) for beta test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index bb0244b..2fe9db6 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit bb0244bfeaf95e0384f6e352d4cc39481fe1b193 +Subproject commit 2fe9db6cd85d3e0ed94daa00b10185a861cae8e3 From 6ea5e2761aa26dde39b6728e1ce3ad245d25d94d Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 30 Dec 2025 11:34:09 +0100 Subject: [PATCH 047/109] Created Common utilities files to ease code maintenance --- electros-electron/common/Loaders.js | 67 +++++++++++++++++ electros-electron/common/MenuBar.js | 87 +++++++++++++++++++++++ electros-electron/common/WindowOptions.js | 14 ++++ 3 files changed, 168 insertions(+) create mode 100644 electros-electron/common/Loaders.js create mode 100644 electros-electron/common/MenuBar.js create mode 100644 electros-electron/common/WindowOptions.js diff --git a/electros-electron/common/Loaders.js b/electros-electron/common/Loaders.js new file mode 100644 index 0000000..53f5514 --- /dev/null +++ b/electros-electron/common/Loaders.js @@ -0,0 +1,67 @@ +import fs from "fs"; +import path from "path"; + + +export class Loaders { + Css = { + Themes: null, + FormControl: null, + Titlebar: null + } + + Js = { + Titlebar: null, + Themes: null, + FormStyle: null + } + + constructor(__dirname) { + try { + this.Css.Titlebar = fs.readFileSync(path.join(__dirname, 'titlebar', 'titlebar.css'), 'utf8'); + const titlebarTempJs = fs.readFileSync(path.join(__dirname, 'titlebar', 'titlebar.js'), 'utf8'); + this.Css.Themes = fs.readFileSync(path.join(__dirname, 'electros', 'css', 'themes.css'), 'utf8'); + this.Css.FormControl = fs.readFileSync(path.join(__dirname, 'electros', 'css', 'form-controls.css'), 'utf8'); + + this.Js.Themes = ` + var theme = document.createElement('style'); + theme.textContent = ${JSON.stringify(this.Css.Themes || '')}; + document.head.appendChild(theme); + `; + + this.Js.FormStyle = ` + var formstyle = document.createElement('style'); + formstyle.textContent = ${JSON.stringify(this.Css.FormControl || '')}; + document.head.appendChild(formstyle); + `; + + this.Js.Titlebar = ` + ${this.Js.Themes} + ${this.Js.FormControl} + + var style = document.createElement('style'); + style.textContent = ${JSON.stringify(this.Css.Titlebar || '')}; + document.head.appendChild(style); + + // Create titlebar div and title element + var titlebar = document.createElement('div'); + titlebar.className = 'electros-titlebar'; + + var titleElement = document.createElement('div'); + titleElement.className = 'electros-titlebar-title'; + titleElement.textContent = document.title; + + document.body.insertBefore(titlebar, document.body.firstChild); + + // Load and execute titlebar.js content + ${titlebarTempJs} + + initializeTitlebar(options = { minimizeOnly: false }); + + titlebar.appendChild(titleElement); + `; + } catch (e) { + console.error(e); + throw e; + } + } +} diff --git a/electros-electron/common/MenuBar.js b/electros-electron/common/MenuBar.js new file mode 100644 index 0000000..5b2e431 --- /dev/null +++ b/electros-electron/common/MenuBar.js @@ -0,0 +1,87 @@ +export function BuildMenuTemplate( + terminalWindow, getDaemonProcess, killDaemons +) { + return [ + { + label: 'Electros', + submenu:[ + {role: 'quit'} + ] + }, + { + label: 'Edit', + submenu: [ + {role: 'undo'}, + {role: 'redo'}, + {type: 'separator'}, + {role: 'cut'}, + {role: 'copy'}, + {role: 'paste'}, + {role: 'delete'}, + {type: 'separator'}, + {role: 'selectAll'} + ] + }, + { + label: 'View', + submenu: [ + { + label: 'Toggle Terminal', + accelerator: 'CmdOrCtrl+T', + click: () => { + if (terminalWindow) { + terminalWindow.isVisible() ? terminalWindow.hide() : terminalWindow.show(); + } + } + }, + {type: 'separator'}, + {role: 'resetZoom', zoomFactor: 0.8}, + {role: 'zoomIn'}, + {role: 'zoomOut'}, + {type: 'separator'}, + {role: 'togglefullscreen'} + ] + }, + { + label: 'Developer', + submenu:[ + { + label: 'Terminate Daemons', + click: async () => { + console.log("manual daemon termination triggered"); + try { + if (getDaemonProcess() === null) { + killDaemons(true); + } + + if(Notification.isSupported()) { + new Notification({ + title: "Daemons Terminated", + body: "Electros Client Daemons successfully terminated.", + silent: true, + icon: './electros.iconset/icon_256x256.png', + urgency: 'low' + }).show(); + } + } catch (e) { + console.error(e); + if(Notification.isSupported()) { + new Notification({ + title: "Failed to Terminate Daemons", + body: "Electros Client Daemons were not terminated.", + silent: true, + urgency: 'low' + }).show(); + } + } + } + }, + {label: 'Reload', role: 'reload'}, + {label: 'Toggle DevTools', role: 'toggleDevTools'}, + {label: 'Toggle Fullscreen', role: 'toggleFullScreen'}, + {label: 'Toggle Zoom', role: 'toggleZoom'}, + ] + } + ] +} + diff --git a/electros-electron/common/WindowOptions.js b/electros-electron/common/WindowOptions.js new file mode 100644 index 0000000..fec4e6b --- /dev/null +++ b/electros-electron/common/WindowOptions.js @@ -0,0 +1,14 @@ +export const WindowOptions = Object.freeze({ + Common: { + frame: false, + transparent: false, + titleBarStyle: 'hiddenInset', + trafficLightPosition: { x: -100, y: -100 }, + alwaysOnTop: false + }, + Default: { + frame: true, + transparent: false, + alwaysOnTop: false + } +}); \ No newline at end of file From daf120e69716316a85b04e95b48d0926f39e277d Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 30 Dec 2025 11:55:15 +0100 Subject: [PATCH 048/109] Created common utility for Platform and Port Handler --- electros-electron/common/Platform.js | 20 ++ electros-electron/common/PortHandler.js | 18 ++ electros-electron/main.js | 271 ++++-------------------- 3 files changed, 84 insertions(+), 225 deletions(-) create mode 100644 electros-electron/common/Platform.js create mode 100644 electros-electron/common/PortHandler.js diff --git a/electros-electron/common/Platform.js b/electros-electron/common/Platform.js new file mode 100644 index 0000000..d447787 --- /dev/null +++ b/electros-electron/common/Platform.js @@ -0,0 +1,20 @@ +import * as os from "node:os"; + +export class Platform { + os = os.platform(); + arch = os.arch(); + + constructor() { + if (this.os === 'darwin') { + this.os = 'mac'; + } else if (this.os === 'linux') { + this.os = 'linux'; + } else if (this.os.includes('win')) { + this.os = 'win'; + } + + if (this.arch.toLowerCase() === 'x86' || this.arch.toLowerCase() === 'x64') { + this.arch = 'x64'; + } + } +} diff --git a/electros-electron/common/PortHandler.js b/electros-electron/common/PortHandler.js new file mode 100644 index 0000000..2371460 --- /dev/null +++ b/electros-electron/common/PortHandler.js @@ -0,0 +1,18 @@ + +export class PortHandler { + static _ActivePorts = new Set(); + static _NextPort = 49152; + + static GetAvailablePort () { + while (this._ActivePorts.has(this._NextPort)) { + this._NextPort++; + if (this._NextPort > 65535) this._NextPort = 49152; + } + this._ActivePorts.add(this._NextPort); + return this._NextPort++; + } + + static ReleasePort (port) { + this._ActivePorts.delete(port); + } +} diff --git a/electros-electron/main.js b/electros-electron/main.js index b915099..27951b1 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -10,6 +10,12 @@ const { globalShortcut } = require('electron'); // Import handlers from separate files. They are apparently unused since called by name in the preload.js const configHandlers = require('./js/config-ipc'); const titlebarHandlers = require('./js/titlebar-ipc'); +const { Loaders } = require("./common/Loaders"); +const { WindowOptions } = require("./common/WindowOptions"); +const { BuildMenuTemplate } = require("./common/MenuBar"); +const PortHandler = require("./common/PortHandler"); +const { Platform } = require("./common/Platform"); + let mainWindow = null; let terminalWindow = null; @@ -22,215 +28,28 @@ let stderrBuffer = ''; const BUFFER_SIZE = 1024; // 1KB chunks let flushInterval = null; -let platform = os.platform(); - -const commonWindowOptions = { - frame: false, - transparent: false, - titleBarStyle: 'hiddenInset', - trafficLightPosition: { x: -100, y: -100 }, - alwaysOnTop: false -} - -const defaultWindowOptions = { - frame: true, - transparent: false, - alwaysOnTop: false -} - -// Pre-load CSS files to avoid synchronous file reading during startup -let themesCSS = null; -let formControlsCSS = null; -let titlebarCSS = null; -let titlebarJS = null; - -function preloadCSSFiles() { - try { - themesCSS = fs.readFileSync(path.join(__dirname, 'electros', 'css', 'themes.css'), 'utf8'); - formControlsCSS = fs.readFileSync(path.join(__dirname, 'electros', 'css', 'form-controls.css'), 'utf8'); - titlebarCSS = fs.readFileSync(path.join(__dirname, 'titlebar', 'titlebar.css'), 'utf8'); - titlebarJS = fs.readFileSync(path.join(__dirname, 'titlebar', 'titlebar.js'), 'utf8'); - } catch (error) { - console.error('Error preloading CSS files:', error); - } -} - -// Pre-load files before creating windows -preloadCSSFiles(); - -const themesLoaderJS = ` - // Create and load CSS inline - var theme = document.createElement('style'); - theme.textContent = ${JSON.stringify(themesCSS || '')}; - document.head.appendChild(theme); -` - -const formStyleLoaderJS = ` - // Create and load CSS inline - var formstyle = document.createElement('style'); - formstyle.textContent = ${JSON.stringify(formControlsCSS || '')}; - document.head.appendChild(formstyle); -` - -const titlebarCustomJS = ` - ${themesLoaderJS} - ${formStyleLoaderJS} - - var style = document.createElement('style'); - style.textContent = ${JSON.stringify(titlebarCSS || '')}; - document.head.appendChild(style); - - // Create titlebar div and title element - var titlebar = document.createElement('div'); - titlebar.className = 'electros-titlebar'; - - var titleElement = document.createElement('div'); - titleElement.className = 'electros-titlebar-title'; - titleElement.textContent = document.title; - - document.body.insertBefore(titlebar, document.body.firstChild); - - // Load and execute titlebar.js content - ${titlebarJS || ''} - - initializeTitlebar(options = { minimizeOnly: false }); - - titlebar.appendChild(titleElement); -`; - -const menuTemplate = [ - { - label: 'Electros', - submenu:[ - {role: 'quit'} - ] - }, - { - label: 'Edit', - submenu: [ - {role: 'undo'}, - {role: 'redo'}, - {type: 'separator'}, - {role: 'cut'}, - {role: 'copy'}, - {role: 'paste'}, - {role: 'delete'}, - {type: 'separator'}, - {role: 'selectAll'} - ] - }, - { - label: 'View', - submenu: [ - { - label: 'Toggle Terminal', - accelerator: 'CmdOrCtrl+T', - click: () => { - if (terminalWindow) { - terminalWindow.isVisible() ? terminalWindow.hide() : terminalWindow.show(); - } - } - }, - {type: 'separator'}, - {role: 'resetZoom', zoomFactor: 0.8}, - {role: 'zoomIn'}, - {role: 'zoomOut'}, - {type: 'separator'}, - {role: 'togglefullscreen'} - ] - }, - { - label: 'Developer', - submenu:[ - { - label: 'Terminate Daemons', - click: async () => { - console.log("manual daemon termination triggered"); - try { - if (daemonProcess === null) { - killDaemons(true); - } - - if(Notification.isSupported()) { - new Notification({ - title: "Daemons Terminated", - body: "Electros Client Daemons successfully terminated.", - silent: true, - icon: './electros.iconset/icon_256x256.png', - urgency: 'low' - }).show(); - } - } catch (e) { - console.error(e); - if(Notification.isSupported()) { - new Notification({ - title: "Failed to Terminate Daemons", - body: "Electros Client Daemons were not terminated.", - silent: true, - urgency: 'low' - }).show(); - } - } - } - }, - {label: 'Reload', role: 'reload'}, - {label: 'Toggle DevTools', role: 'toggleDevTools'}, - {label: 'Toggle Fullscreen', role: 'toggleFullScreen'}, - {label: 'Toggle Zoom', role: 'toggleZoom'}, - ] - } -] - -const activePorts = new Set(); -let nextPort = 49152; +const PreloadedContent = new Loaders(__dirname); +const platform = new Platform(); -function getAvailablePort() { - while (activePorts.has(nextPort)) { - nextPort++; - if (nextPort > 65535) nextPort = 49152; - } - activePorts.add(nextPort); - return nextPort++; -} - -function releasePort(port) { - activePorts.delete(port); -} function getDaemonCommand() { - console.log(`The platform is: ${platform}`); - var arch = os.arch(); - console.log(`The CPU architecture is: ${arch}`); - - if (platform === 'darwin') { - platform = 'mac'; - } else if (platform === 'linux') { - platform = 'linux'; - } else if (platform.includes('win')) { - platform = 'win'; - } - - if (arch.toLowerCase() === 'x86' || arch.toLowerCase() === 'x64') { - arch = 'x64'; - } - // Use process.resourcesPath in production, fallback to __dirname in development const baseDir = app.isPackaged ? process.resourcesPath : path.join(__dirname, '..'); - const deamons_path = path.join(baseDir, 'electros-daemons', platform, arch); + const deamons_path = path.join(baseDir, 'electros-daemons', platform.os, platform.arch); console.log(`The deamons path is: ${deamons_path}`); let daemons_cmd = ''; - if (platform === 'mac') { + if (platform.os === 'mac') { daemons_cmd = path.join(deamons_path, "elemento_client_daemons.app/Contents/MacOS/elemento_client_daemons"); - } else if (platform === 'linux') { - if (arch === 'arm64') { + } else if (platform.os === 'linux') { + if (platform.arch === 'arm64') { daemons_cmd = path.join(deamons_path, `elemento_daemons_linux_arm`); } else { daemons_cmd = path.join(deamons_path, `elemento_daemons_linux_x86`); } - } else if (platform === 'win') { - if (arch === 'x64' || arch === 'x86') { + } else if (platform.os === 'win') { + if (platform.arch === 'x64' || platform.arch === 'x86') { daemons_cmd = path.join(deamons_path, `elemento_daemons_windows_x86.exe`); if (!fs.existsSync(daemons_cmd)) { daemons_cmd = path.join(deamons_path, `elemento_daemons_windows_x64.exe`); @@ -251,20 +70,20 @@ function createTrayIcon() { const isLight = nativeTheme.shouldUseDarkColors; console.log(`The theme is light: ${isLight}`); - if (platform === 'mac') { + if (platform.os === 'mac') { const templateIcon = path.join(__dirname, 'electros.iconset', 'tray_icon_black_32x32@2x.png'); const icon = nativeImage.createFromPath(templateIcon); icon.setTemplateImage(true); return icon; } - if (platform === 'win') { + if (platform.os === 'win') { const iconName = path.join(__dirname, 'electros.iconset', 'tray_icon.ico'); const icon = nativeImage.createFromPath(iconName); return icon; } - if (platform === 'linux') { + if (platform.os === 'linux') { const iconName = path.join(__dirname, 'electros.iconset', 'tray_icon.png'); const icon = nativeImage.createFromPath(iconName); return icon; @@ -275,7 +94,7 @@ function createMainWindow() { const win = new BrowserWindow({ width: 1800, height: 1200, - ...commonWindowOptions, + ...WindowOptions.Common, webPreferences: { nodeIntegration: true, contextIsolation: true, @@ -287,7 +106,7 @@ function createMainWindow() { } }); - if (platform === 'mac') { + if (platform.os === 'mac') { win.setWindowButtonVisibility(false); } @@ -297,11 +116,11 @@ function createMainWindow() { win.webContents.on('did-finish-load', () => { try { // Ensure titlebarCustomJS is a string and properly escaped - const safeJS = typeof titlebarCustomJS === 'string' - ? titlebarCustomJS - : JSON.stringify(titlebarCustomJS); + const safeJS = typeof PreloadedContent.Js.Titlebar === 'string' + ? PreloadedContent.Js.Titlebar + : JSON.stringify(PreloadedContent.Js.Titlebar); - win.webContents.executeJavaScript(safeJS).catch(err => {}); + win.webContents.executeJavaScript(safeJS).catch(err => { throw err; }); } catch (error) { console.error('Error injecting titlebar:', error); } @@ -315,7 +134,7 @@ function createTerminalWindow() { terminalWindow = new BrowserWindow({ width: 800, height: 600, - ...commonWindowOptions, + ...WindowOptions.Common, show: false, frame: false, webPreferences: { @@ -380,7 +199,7 @@ function createTerminalWindow() { }, 100); // Flush every 100ms // Inject custom titlebar - const popupTitlebarJS = titlebarCustomJS.replace( + const popupTitlebarJS = PreloadedContent.Js.Titlebar.replace( 'titleElement.textContent = document.title;', `titleElement.textContent = ${JSON.stringify(terminalWindow.title)};` ) //.replace( @@ -547,7 +366,7 @@ ipcMain.handle('create-popup', async (event, options = {}) => { // Inject custom titlebar CSS and HTML before loading the URL if (!options.defaultTitlebar) { popup.webContents.on('did-finish-load', () => { - const popupTitlebarJS = titlebarCustomJS.replace( + const popupTitlebarJS = PreloadedContent.Js.Titlebar.replace( 'titleElement.textContent = document.title;', `titleElement.textContent = ${JSON.stringify(options.title)};` ); @@ -582,7 +401,7 @@ ipcMain.handle('create-popup', async (event, options = {}) => { function cleanupRDPProcess(webContents, port) { // Release the port if (port) { - releasePort(parseInt(port)); + PortHandler.ReleasePort(parseInt(port)); } // Kill the mstsc process if it exists @@ -590,7 +409,7 @@ function cleanupRDPProcess(webContents, port) { try { const proc = webContents.mstscProcess; - if (platform === 'mac' || platform === 'linux') { + if (platform.os === 'mac' || platform.os === 'linux') { // On Unix systems, kill the entire process group try { process.kill(-proc.pid, 'SIGTERM'); @@ -606,7 +425,7 @@ function cleanupRDPProcess(webContents, port) { console.error('Error killing mstsc process group:', err); } } - } else if (platform === 'win') { + } else if (platform.os === 'win') { // On Windows, use taskkill to force kill the process tree try { spawn('taskkill', ['/pid', proc.pid.toString(), '/T', '/F']); @@ -638,7 +457,7 @@ function cleanupRDPProcess(webContents, port) { // Clear the process reference webContents.mstscProcess = null; if (webContents.mstscPort) { - releasePort(parseInt(webContents.mstscPort)); + PortHandler.ReleasePort(parseInt(webContents.mstscPort)); webContents.mstscPort = null; } } @@ -647,7 +466,7 @@ function cleanupRDPProcess(webContents, port) { function killDaemons(rethrowExceptions = false) { if (daemonProcess) { - if (platform === 'mac') { + if (platform.os === 'mac') { try { if (daemonProcess.pid) { process.kill(daemonProcess.pid, 'SIGTERM'); @@ -662,7 +481,7 @@ function killDaemons(rethrowExceptions = false) { if(rethrowExceptions) throw err; } - } else if (platform === 'linux' && daemonProcess.pid) { + } else if (platform.os === 'linux' && daemonProcess.pid) { try { process.kill(daemonProcess.pid, 0); process.kill(-daemonProcess.pid); @@ -763,7 +582,9 @@ ipcMain.handle('check-port', async (event, { ip, port }) => { }); app.whenReady().then(() => { - const menu = Menu.buildFromTemplate(menuTemplate); + const menu = Menu.buildFromTemplate( + BuildMenuTemplate(terminalWindow, () => daemonProcess, () => { killDaemons() }) + ); Menu.setApplicationMenu(menu); createWindows(); }); @@ -796,7 +617,7 @@ ipcMain.handle('open-rdp', async (event, connectionDetails) => { const rdpWindow = new BrowserWindow({ width: 1024, height: 768, - ...commonWindowOptions, + ...WindowOptions.Common, webPreferences: { nodeIntegration: true, contextIsolation: true, @@ -831,7 +652,7 @@ ipcMain.handle('open-rdp', async (event, connectionDetails) => { // Inject custom titlebar after the page loads rdpWindow.webContents.on('did-finish-load', () => { - const rdpTitlebarJS = titlebarCustomJS.replace( + const rdpTitlebarJS = PreloadedContent.Js.Titlebar.replace( 'titleElement.textContent = document.title;', `titleElement.textContent = "RDP connection to ${connectionDetails.vmName}";` ); @@ -897,7 +718,7 @@ ipcMain.handle('os-prefers-reduced-transparency', (event) => { // Add these IPC handlers ipcMain.handle('launch-rdp-process', async (event, { credentials, width, height }) => { try { - const ws_port = getAvailablePort().toString(); + const ws_port = PortHandler.GetAvailablePort().toString(); const args = [ '--target', credentials.ip, @@ -919,7 +740,7 @@ ipcMain.handle('launch-rdp-process', async (event, { credentials, width, height // Set detached option for proper process group handling on Unix systems const spawnOptions = { - detached: platform === 'mac' || platform === 'linux', + detached: platform.os === 'mac' || platform.os === 'linux', env: process.env }; @@ -941,7 +762,7 @@ ipcMain.handle('launch-rdp-process', async (event, { credentials, width, height console.log(`mstsc-rs process exited with code ${code}`); // Release the port when the process closes if (event.sender.mstscPort) { - releasePort(parseInt(event.sender.mstscPort)); + PortHandler.ReleasePort(parseInt(event.sender.mstscPort)); event.sender.mstscPort = null; } // Check if the window still exists before sending the message @@ -954,7 +775,7 @@ ipcMain.handle('launch-rdp-process', async (event, { credentials, width, height } catch (error) { console.error('Error launching RDP process:', error); if (ws_port) { - releasePort(parseInt(ws_port)); + PortHandler.ReleasePort(parseInt(ws_port)); } return { success: false, error: error.message }; } @@ -975,7 +796,7 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { const sshWindow = new BrowserWindow({ width: 1024, height: 768, - ...commonWindowOptions, + ...WindowOptions.Common, webPreferences: { nodeIntegration: true, contextIsolation: true, @@ -991,7 +812,7 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { let ssh_port = undefined; try { - ssh_port = getAvailablePort().toString(); + ssh_port = PortHandler.GetAvailablePort().toString(); const baseDir = app.isPackaged ? process.resourcesPath : __dirname; const sshPath = path.join( @@ -1007,7 +828,7 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { event.sender.ssh_port = ssh_port; sshWindow.webContents.on('did-finish-load', () => { - const sshTitlebarJS = titlebarCustomJS.replace( + const sshTitlebarJS = PreloadedContent.Js.Titlebar.replace( 'titleElement.textContent = document.title;', `titleElement.textContent = "SSH connection to ${connectionDetails.vmName}";` ); @@ -1027,7 +848,7 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { } // Release the port - releasePort(parseInt(ssh_port)); + PortHandler.ReleasePort(parseInt(ssh_port)); // Wait a moment for cleanup await new Promise(resolve => setTimeout(resolve, 100)); @@ -1050,7 +871,7 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { } catch (error) { console.error('Error setting up SSH window:', error); if (ssh_port) { - releasePort(parseInt(ssh_port)); + PortHandler.ReleasePort(parseInt(ssh_port)); } throw error; } From 19ab236988f77fc665beaac0f68641b6f2fc8503 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 30 Dec 2025 12:13:13 +0100 Subject: [PATCH 049/109] Added tray icon utility class --- electros-electron/common/TrayIcon.js | 86 ++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 electros-electron/common/TrayIcon.js diff --git a/electros-electron/common/TrayIcon.js b/electros-electron/common/TrayIcon.js new file mode 100644 index 0000000..eac45e6 --- /dev/null +++ b/electros-electron/common/TrayIcon.js @@ -0,0 +1,86 @@ +import { Tray, nativeImage, nativeTheme, Menu, app } from 'electron'; +import path from 'path'; + + +export class TrayIcon { + get tray() { return this._tray; } + + _tray = null; + + /** + * + * @param terminalWindow + * @param {Platform} platform + * @param __dirname + * @return {Electron.NativeImage} + */ + constructor(terminalWindow, platform, __dirname) { + this._tray = new Tray(this._getIcon(platform, __dirname)); + + nativeTheme.on('updated', () => { + this._tray.setImage(this._getIcon(platform, __dirname)); + }); + + this._tray.setToolTip('Electros Daemons'); + this._tray.setContextMenu(this._getMenu(terminalWindow)); + } + + _getIcon(platform, __dirname) { + const isLight = nativeTheme.shouldUseDarkColors; + console.log(`The theme is light: ${isLight}`); + + if (platform.os === 'mac') { + const templateIcon = path.join(__dirname, 'electros.iconset', 'tray_icon_black_32x32@2x.png'); + const icon = nativeImage.createFromPath(templateIcon); + icon.setTemplateImage(true); + return icon; + } + + if (platform.os === 'win') { + const iconName = path.join(__dirname, 'electros.iconset', 'tray_icon.ico'); + return nativeImage.createFromPath(iconName); + } + + if (platform.os === 'linux') { + const iconName = path.join(__dirname, 'electros.iconset', 'tray_icon.png'); + const icon = nativeImage.createFromPath(iconName); + return icon; + } + } + + _getMenu(terminalWindow) { + return Menu.buildFromTemplate([ + { + label: 'Show Terminal', + click: () => { + terminalWindow.show(); + } + }, + { + label: 'Hide Terminal', + click: () => { + terminalWindow.hide(); + } + }, + { type: 'separator' }, + { + label: 'Quit', + click: () => { + app.quit(); + } + } + ]); + } +} + + +/* + +let tray = null; + +function createTrayIcon() { + +} + + + */ From 3b4a44811c2df801b58f5201d492422749e9fdc1 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 30 Dec 2025 16:04:21 +0100 Subject: [PATCH 050/109] Upgraded daemon process handling --- electros-electron/common/Daemons.js | 97 +++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 electros-electron/common/Daemons.js diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js new file mode 100644 index 0000000..993b7e2 --- /dev/null +++ b/electros-electron/common/Daemons.js @@ -0,0 +1,97 @@ +import { app } from "electron"; +import path from "path"; +import fs from "fs"; +import { spawn } from "child_process"; + + +export class Daemons { + static _Process = null; + static _Ports = {}; + + static stdoutBuffer = ""; + static stderrBuffer = ""; + static BUFFER_SIZE = 1024; + static flushInterval = null; + + static DataUpdateStdoutHook = null; + static DataUpdateStderrHook = null; + static DataUpdateCriticalHook = null; + + static Launch(platform, __dirname) { + const execPath = Daemons._GetCommand(platform, __dirname); + + Daemons._Process = spawn( + execPath, [], { + env: { ...process.env, GUI_APP: '1' }, + stdio: ['pipe', 'pipe', 'pipe'], + detached: false, + } + ); + + console.trace(`Daemons process has been launched with PID`); + console.dir(Daemons._Process); + + Daemons._Process.stdout.on("data", (data) => { + this.stdoutBuffer += data.toString(); + + if (this.stdoutBuffer.length > Daemons.BUFFER_SIZE) { + if (Daemons.DataUpdateStdoutHook) { Daemons.DataUpdateStdoutHook(data); } + Daemons.stdoutBuffer = ""; + } + }); + + Daemons._Process.stderr.on("data", (data) => { + this.stderrBuffer += data.toString(); + + if (this.stderrBuffer.length > Daemons.BUFFER_SIZE) { + if (Daemons.DataUpdateStderrHook) { Daemons.DataUpdateStderrHook(data); } + Daemons.stderrBuffer = ""; + } + }); + + Daemons._Process.on("error", (data) => { + if (Daemons.DataUpdateCriticalHook) { Daemons.DataUpdateCriticalHook(data); } + }); + } + + static Terminate() { + let r = true; + if (Daemons._Process) { + if (!Daemons._Process.killed) { + r = Daemons._Process.kill(); + } + Daemons._Process = null; + } + + return r; + } + + static _GetCommand(platform, __dirname) { + const baseDir = app.isPackaged ? process.resourcesPath : path.join(__dirname, '..'); + const daemonsPath = path.join(baseDir, 'electros-daemons', platform.os, platform.arch); + + let daemonsCmd = ''; + + if (platform.os === 'mac') { + daemonsCmd = path.join(daemonsPath, "elemento_client_daemons.app/Contents/MacOS/elemento_client_daemons"); + } else if (platform.os === 'linux') { + if (platform.arch === 'arm64') { + daemonsCmd = path.join(daemonsPath, `elemento_daemons_linux_arm`); + } else { + daemonsCmd = path.join(daemonsPath, `elemento_daemons_linux_x86`); + } + } else if (platform.os === 'win') { + if (platform.arch === 'x64' || platform.arch === 'x86') { + daemonsCmd = path.join(daemonsPath, `elemento_daemons_windows_x86.exe`); + if (!fs.existsSync(daemonsCmd)) { + daemonsCmd = path.join(daemonsPath, `elemento_daemons_windows_x64.exe`); + } + } else { + daemonsCmd = path.join(daemonsPath, `elemento_daemons_windows_arm64.exe`); + } + } + + return daemonsCmd; + } +} + From 878375de4ee7ce22ae9b12c00c168dd07b673c32 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 30 Dec 2025 16:07:06 +0100 Subject: [PATCH 051/109] Upgraded daemon process handling --- electros-electron/common/MenuBar.js | 13 +- electros-electron/main.js | 224 ++++------------------------ 2 files changed, 30 insertions(+), 207 deletions(-) diff --git a/electros-electron/common/MenuBar.js b/electros-electron/common/MenuBar.js index 5b2e431..d814094 100644 --- a/electros-electron/common/MenuBar.js +++ b/electros-electron/common/MenuBar.js @@ -1,5 +1,7 @@ +import { Daemons } from "./Daemons"; + export function BuildMenuTemplate( - terminalWindow, getDaemonProcess, killDaemons + terminalWindow ) { return [ { @@ -49,11 +51,7 @@ export function BuildMenuTemplate( label: 'Terminate Daemons', click: async () => { console.log("manual daemon termination triggered"); - try { - if (getDaemonProcess() === null) { - killDaemons(true); - } - + if(Daemons.Terminate()) { if(Notification.isSupported()) { new Notification({ title: "Daemons Terminated", @@ -63,8 +61,7 @@ export function BuildMenuTemplate( urgency: 'low' }).show(); } - } catch (e) { - console.error(e); + } else { if(Notification.isSupported()) { new Notification({ title: "Failed to Terminate Daemons", diff --git a/electros-electron/main.js b/electros-electron/main.js index 27951b1..ea9199a 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -1,9 +1,6 @@ -const { app, BrowserWindow, ipcMain, Menu, Tray, Notification, nativeTheme , shell } = require('electron'); +const { app, BrowserWindow, ipcMain, Menu, Notification, nativeTheme , shell } = require('electron'); const path = require('path'); -const fs = require('fs'); -const os = require('os'); const { spawn } = require('child_process'); -const nativeImage = require('electron').nativeImage; const net = require('net'); const { globalShortcut } = require('electron'); @@ -13,83 +10,20 @@ const titlebarHandlers = require('./js/titlebar-ipc'); const { Loaders } = require("./common/Loaders"); const { WindowOptions } = require("./common/WindowOptions"); const { BuildMenuTemplate } = require("./common/MenuBar"); -const PortHandler = require("./common/PortHandler"); +const { PortHandler } = require("./common/PortHandler"); const { Platform } = require("./common/Platform"); +const {TrayIcon} = require("./common/TrayIcon"); +const {Daemons} = require("./common/Daemons"); let mainWindow = null; let terminalWindow = null; -let daemonProcess = null; -let tray = null; - -// Add buffering variables for daemon output -let stdoutBuffer = ''; -let stderrBuffer = ''; -const BUFFER_SIZE = 1024; // 1KB chunks -let flushInterval = null; const PreloadedContent = new Loaders(__dirname); const platform = new Platform(); +let Tray = null; -function getDaemonCommand() { - // Use process.resourcesPath in production, fallback to __dirname in development - const baseDir = app.isPackaged ? process.resourcesPath : path.join(__dirname, '..'); - const deamons_path = path.join(baseDir, 'electros-daemons', platform.os, platform.arch); - console.log(`The deamons path is: ${deamons_path}`); - - let daemons_cmd = ''; - - if (platform.os === 'mac') { - daemons_cmd = path.join(deamons_path, "elemento_client_daemons.app/Contents/MacOS/elemento_client_daemons"); - } else if (platform.os === 'linux') { - if (platform.arch === 'arm64') { - daemons_cmd = path.join(deamons_path, `elemento_daemons_linux_arm`); - } else { - daemons_cmd = path.join(deamons_path, `elemento_daemons_linux_x86`); - } - } else if (platform.os === 'win') { - if (platform.arch === 'x64' || platform.arch === 'x86') { - daemons_cmd = path.join(deamons_path, `elemento_daemons_windows_x86.exe`); - if (!fs.existsSync(daemons_cmd)) { - daemons_cmd = path.join(deamons_path, `elemento_daemons_windows_x64.exe`); - } - } else { - daemons_cmd = path.join(deamons_path, `elemento_daemons_windows_arm64.exe`); - } - } - - console.log(`The daemons command is: ${daemons_cmd}`); - return daemons_cmd; -} - -const daemons_cmd = getDaemonCommand(); - -// Add this function to create different tray icons -function createTrayIcon() { - const isLight = nativeTheme.shouldUseDarkColors; - console.log(`The theme is light: ${isLight}`); - - if (platform.os === 'mac') { - const templateIcon = path.join(__dirname, 'electros.iconset', 'tray_icon_black_32x32@2x.png'); - const icon = nativeImage.createFromPath(templateIcon); - icon.setTemplateImage(true); - return icon; - } - - if (platform.os === 'win') { - const iconName = path.join(__dirname, 'electros.iconset', 'tray_icon.ico'); - const icon = nativeImage.createFromPath(iconName); - return icon; - } - - if (platform.os === 'linux') { - const iconName = path.join(__dirname, 'electros.iconset', 'tray_icon.png'); - const icon = nativeImage.createFromPath(iconName); - return icon; - } -} - function createMainWindow() { const win = new BrowserWindow({ width: 1800, @@ -99,10 +33,11 @@ function createMainWindow() { nodeIntegration: true, contextIsolation: true, preload: path.join(__dirname, 'preload.js'), - zoomFactor: 0.8, + zoomFactor: 1.0, backgroundThrottling: false, enableRemoteModule: false, - experimentalFeatures: false + experimentalFeatures: false, + devTools: !app.isPackaged, } }); @@ -154,49 +89,19 @@ function createTerminalWindow() { // Wait for the terminal window to be ready terminalWindow.webContents.on('did-finish-load', () => { - - // Start the daemon process with the actual daemon command - daemonProcess = spawn(daemons_cmd, [], { - env: { - ...process.env, - GUI_APP: '1' - }, - stdio: ['pipe', 'pipe', 'pipe'], - detached: false - }); - - // Buffered process output to the renderer - daemonProcess.stdout.on('data', (data) => { - stdoutBuffer += data.toString(); - if (stdoutBuffer.length >= BUFFER_SIZE) { - terminalWindow.webContents.send('terminal-output', stdoutBuffer); - stdoutBuffer = ''; - } - }); - - daemonProcess.stderr.on('data', (data) => { - stderrBuffer += data.toString(); - if (stderrBuffer.length >= BUFFER_SIZE) { - terminalWindow.webContents.send('terminal-output', stderrBuffer); - stderrBuffer = ''; - } - }); - - daemonProcess.on('error', (error) => { - terminalWindow.webContents.send('terminal-output', `Error: ${error.message}\n`); - }); - - // Set up periodic buffer flushing - flushInterval = setInterval(() => { - if (stdoutBuffer) { - terminalWindow.webContents.send('terminal-output', stdoutBuffer); - stdoutBuffer = ''; - } - if (stderrBuffer) { - terminalWindow.webContents.send('terminal-output', stderrBuffer); - stderrBuffer = ''; - } - }, 100); // Flush every 100ms + Daemons.Launch(platform, __dirname); + + // // Set up periodic buffer flushing + // flushInterval = setInterval(() => { + // if (stdoutBuffer) { + // terminalWindow.webContents.send('terminal-output', stdoutBuffer); + // stdoutBuffer = ''; + // } + // if (stderrBuffer) { + // terminalWindow.webContents.send('terminal-output', stderrBuffer); + // stderrBuffer = ''; + // } + // }, 100); // Flush every 100ms // Inject custom titlebar const popupTitlebarJS = PreloadedContent.Js.Titlebar.replace( @@ -210,39 +115,8 @@ function createTerminalWindow() { terminalWindow.webContents.executeJavaScript(popupTitlebarJS); }); - // Create tray icon if it doesn't exist - if (!tray) { - tray = new Tray(createTrayIcon()); - - // Update icon when system theme changes - nativeTheme.on('updated', () => { - tray.setImage(createTrayIcon()); - }); - - const contextMenu = Menu.buildFromTemplate([ - { - label: 'Show Terminal', - click: () => { - terminalWindow.show(); - } - }, - { - label: 'Hide Terminal', - click: () => { - terminalWindow.hide(); - } - }, - { type: 'separator' }, - { - label: 'Quit', - click: () => { - app.quit(); - } - } - ]); - - tray.setToolTip('Electros Daemons'); - tray.setContextMenu(contextMenu); + if (Tray === null) { + Tray = new TrayIcon(terminalWindow, platform, __dirname); } // Handle window close button @@ -464,54 +338,6 @@ function cleanupRDPProcess(webContents, port) { } } -function killDaemons(rethrowExceptions = false) { - if (daemonProcess) { - if (platform.os === 'mac') { - try { - if (daemonProcess.pid) { - process.kill(daemonProcess.pid, 'SIGTERM'); - process.kill(-daemonProcess.pid); // Kill process group - } - } catch (err) { - if (err.code === 'ESRCH') { - console.log('Daemon process or group already terminated'); - } else { - console.error('Error killing daemon process on macOS:', err); - } - - if(rethrowExceptions) throw err; - } - } else if (platform.os === 'linux' && daemonProcess.pid) { - try { - process.kill(daemonProcess.pid, 0); - process.kill(-daemonProcess.pid); - } catch (err) { - if (err.code === 'ESRCH') { - console.log('Daemon process group already terminated'); - } else { - console.error('Error killing daemon process group:', err); - } - - if(rethrowExceptions) throw err; - } - } - - try { - if (!daemonProcess.killed) { - daemonProcess.kill(); - } - } catch (err) { - if (err.code === 'ESRCH') { - console.log('Daemon process already terminated'); - } else { - console.error('Error killing daemon process:', err); - } - - if(rethrowExceptions) throw err; - } - } -} - // Then modify the before-quit handler to use the cleanup function directly app.on('before-quit', () => { console.log('Quitting app, killing processes'); @@ -546,7 +372,7 @@ app.on('before-quit', () => { }); // Kill daemon process - killDaemons(); + Daemons.Terminate(); // Finally destroy the terminal window if (terminalWindow && !terminalWindow.isDestroyed()) { @@ -583,7 +409,7 @@ ipcMain.handle('check-port', async (event, { ip, port }) => { app.whenReady().then(() => { const menu = Menu.buildFromTemplate( - BuildMenuTemplate(terminalWindow, () => daemonProcess, () => { killDaemons() }) + BuildMenuTemplate(terminalWindow), ); Menu.setApplicationMenu(menu); createWindows(); From 771e4d617fc46945d9128ba40a77e8a8c229220e Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 30 Dec 2025 16:16:20 +0100 Subject: [PATCH 052/109] Added `--no-daemons` flag --- electros-electron/common/Daemons.js | 8 +++++--- electros-electron/common/MenuBar.js | 2 +- electros-electron/main.js | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js index 993b7e2..0a21d90 100644 --- a/electros-electron/common/Daemons.js +++ b/electros-electron/common/Daemons.js @@ -18,6 +18,11 @@ export class Daemons { static DataUpdateCriticalHook = null; static Launch(platform, __dirname) { + if (app.commandLine.hasSwitch("no-daemons")) { + console.log("Daemons have been disabled by `--no-daemons`"); + return; + } + const execPath = Daemons._GetCommand(platform, __dirname); Daemons._Process = spawn( @@ -28,9 +33,6 @@ export class Daemons { } ); - console.trace(`Daemons process has been launched with PID`); - console.dir(Daemons._Process); - Daemons._Process.stdout.on("data", (data) => { this.stdoutBuffer += data.toString(); diff --git a/electros-electron/common/MenuBar.js b/electros-electron/common/MenuBar.js index d814094..bf9e174 100644 --- a/electros-electron/common/MenuBar.js +++ b/electros-electron/common/MenuBar.js @@ -1,4 +1,4 @@ -import { Daemons } from "./Daemons"; +import { Daemons } from "./Daemons.js"; export function BuildMenuTemplate( terminalWindow diff --git a/electros-electron/main.js b/electros-electron/main.js index ea9199a..defa7a8 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -1,4 +1,4 @@ -const { app, BrowserWindow, ipcMain, Menu, Notification, nativeTheme , shell } = require('electron'); +const { app, BrowserWindow, ipcMain, Menu, nativeTheme , shell } = require('electron'); const path = require('path'); const { spawn } = require('child_process'); const net = require('net'); From e80b09350618d9b0f54c94e90603b91fec192282 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 30 Dec 2025 16:36:26 +0100 Subject: [PATCH 053/109] Fixed issue that forbid Electros from Closing --- electros-electron/main.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/electros-electron/main.js b/electros-electron/main.js index defa7a8..e8e2f23 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -343,20 +343,20 @@ app.on('before-quit', () => { console.log('Quitting app, killing processes'); // Clean up flush interval - if (flushInterval) { - clearInterval(flushInterval); - flushInterval = null; - } - - // Flush any remaining buffers - if (stdoutBuffer && terminalWindow && !terminalWindow.isDestroyed()) { - terminalWindow.webContents.send('terminal-output', stdoutBuffer); - stdoutBuffer = ''; - } - if (stderrBuffer && terminalWindow && !terminalWindow.isDestroyed()) { - terminalWindow.webContents.send('terminal-output', stderrBuffer); - stderrBuffer = ''; - } + // // if (flushInterval) { + // // clearInterval(flushInterval); + // // flushInterval = null; + // // } + // + // // Flush any remaining buffers + // if (stdoutBuffer && terminalWindow && !terminalWindow.isDestroyed()) { + // terminalWindow.webContents.send('terminal-output', stdoutBuffer); + // stdoutBuffer = ''; + // } + // if (stderrBuffer && terminalWindow && !terminalWindow.isDestroyed()) { + // terminalWindow.webContents.send('terminal-output', stderrBuffer); + // stderrBuffer = ''; + // } // Close all windows except terminal const windows = BrowserWindow.getAllWindows(); From 23e2a3bf864725f623ebe8dae2134b90a6732fb3 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 5 Jan 2026 10:51:38 +0100 Subject: [PATCH 054/109] Fixed minor code errors --- electros-electron/common/TrayIcon.js | 6 +- electros-electron/main.js | 25 +-- electros-electron/package.json | 4 +- electros-electron/remotes/rdp.js | 235 ++++++++++++++++++++++++++ electros-electron/remotes/ssh.js | 92 ++++++++++ electros-electron/windows/Terminal.js | 54 ++++++ 6 files changed, 393 insertions(+), 23 deletions(-) create mode 100644 electros-electron/remotes/rdp.js create mode 100644 electros-electron/remotes/ssh.js create mode 100644 electros-electron/windows/Terminal.js diff --git a/electros-electron/common/TrayIcon.js b/electros-electron/common/TrayIcon.js index eac45e6..f126ecc 100644 --- a/electros-electron/common/TrayIcon.js +++ b/electros-electron/common/TrayIcon.js @@ -9,10 +9,10 @@ export class TrayIcon { /** * - * @param terminalWindow + * @param {BrowserWindow} terminalWindow * @param {Platform} platform - * @param __dirname - * @return {Electron.NativeImage} + * @param {string} __dirname + * @return {TrayIcon} */ constructor(terminalWindow, platform, __dirname) { this._tray = new Tray(this._getIcon(platform, __dirname)); diff --git a/electros-electron/main.js b/electros-electron/main.js index e8e2f23..1100134 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -12,8 +12,8 @@ const { WindowOptions } = require("./common/WindowOptions"); const { BuildMenuTemplate } = require("./common/MenuBar"); const { PortHandler } = require("./common/PortHandler"); const { Platform } = require("./common/Platform"); -const {TrayIcon} = require("./common/TrayIcon"); -const {Daemons} = require("./common/Daemons"); +const { TrayIcon } = require("./common/TrayIcon"); +const { Daemons } = require("./common/Daemons"); let mainWindow = null; @@ -75,7 +75,7 @@ function createTerminalWindow() { webPreferences: { nodeIntegration: true, contextIsolation: false, - zoomFactor: 0.8, + zoomFactor: 1, backgroundThrottling: false, enableRemoteModule: false, experimentalFeatures: false, @@ -103,16 +103,7 @@ function createTerminalWindow() { // } // }, 100); // Flush every 100ms - // Inject custom titlebar - const popupTitlebarJS = PreloadedContent.Js.Titlebar.replace( - 'titleElement.textContent = document.title;', - `titleElement.textContent = ${JSON.stringify(terminalWindow.title)};` - ) //.replace( -// 'initializeTitlebar(options = { minimizeOnly: false });', -// 'initializeTitlebar(options = { minimizeOnly: true });' -// ); - - terminalWindow.webContents.executeJavaScript(popupTitlebarJS); + terminalWindow.webContents.executeJavaScript(PreloadedContent.Js.Titlebar); }); if (Tray === null) { @@ -213,7 +204,7 @@ ipcMain.handle('create-popup', async (event, options = {}) => { contextIsolation: true, preload: path.join(__dirname, 'preload.js'), webSecurity: false, - zoomFactor: 0.8, + zoomFactor: 1, backgroundThrottling: false, enableRemoteModule: false, experimentalFeatures: false @@ -371,10 +362,8 @@ app.on('before-quit', () => { } }); - // Kill daemon process Daemons.Terminate(); - // Finally destroy the terminal window if (terminalWindow && !terminalWindow.isDestroyed()) { terminalWindow.destroy(); } @@ -449,7 +438,7 @@ ipcMain.handle('open-rdp', async (event, connectionDetails) => { contextIsolation: true, preload: path.join(__dirname, 'preload.js'), webSecurity: false, - zoomFactor: 0.8, + zoomFactor: 1, backgroundThrottling: false, enableRemoteModule: false, experimentalFeatures: false @@ -628,7 +617,7 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { contextIsolation: true, preload: path.join(__dirname, 'preload.js'), webSecurity: false, - zoomFactor: 0.8, + zoomFactor: 1, backgroundThrottling: false, enableRemoteModule: false, experimentalFeatures: false diff --git a/electros-electron/package.json b/electros-electron/package.json index 6b41df9..44c8167 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -6,7 +6,7 @@ "homepage": "https://elemento.cloud", "repository": { "type": "git", - "url": "https://github.com/Elemento-Modular-Cloud/ElectrosGUI.git" + "url": "https://github.com/Elemento-Modular-Cloud/Electros.git" }, "author": { "name": "Elemento Cloud Srl", @@ -42,7 +42,7 @@ "!**/{.env,.env.*,.venv,venv,*.venv}", "!**/node_modules/*/{CONTRIBUTING.md,HISTORY.md,History.md,AUTHORS,CONTRIBUTORS,CHANGES,CHANGELOG.md}", "!.github", - "!docs", + "!**/docs/*", "!**/node_modules/*/{benchmark,coverage,example,examples}/**/*", "!**/node_modules/**/*.{ts,map,md,txt,log,yml,yaml}" ], diff --git a/electros-electron/remotes/rdp.js b/electros-electron/remotes/rdp.js new file mode 100644 index 0000000..c566dbc --- /dev/null +++ b/electros-electron/remotes/rdp.js @@ -0,0 +1,235 @@ +// Add these IPC handlers +import {BrowserWindow, ipcMain} from "electron"; +import path from "path"; +import {spawn} from "child_process"; + +ipcMain.handle('launch-rdp-process', async (event, { credentials, width, height }) => { + try { + const ws_port = getAvailablePort().toString(); + + const args = [ + '--target', credentials.ip, + '--user', credentials.username, + '--dom', credentials.domain, + '--pass', credentials.password, + '--width', width.toString(), + '--height', height.toString(), + '--ws_port', ws_port + ]; + + // Use process.resourcesPath in production, fallback to __dirname in development + const baseDir = app.isPackaged ? process.resourcesPath : __dirname; + const mstscPath = path.join( + baseDir, + app.isPackaged ? 'app.asar.unpacked' : '', + 'electros', 'remotes', 'rdp', 'mstsc-rs' + ); + + // Set detached option for proper process group handling on Unix systems + const spawnOptions = { + detached: platform === 'mac' || platform === 'linux', + env: process.env + }; + + const mstscProcess = spawn(mstscPath, args, spawnOptions); + + // Store process reference and port + event.sender.mstscProcess = mstscProcess; + event.sender.mstscPort = ws_port; + + mstscProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + mstscProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + mstscProcess.on('close', (code) => { + console.log(`mstsc-rs process exited with code ${code}`); + // Release the port when the process closes + if (event.sender.mstscPort) { + releasePort(parseInt(event.sender.mstscPort)); + event.sender.mstscPort = null; + } + // Check if the window still exists before sending the message + if (!event.sender.isDestroyed()) { + event.sender.send('rdp-process-closed'); + } + }); + + return { success: true, ws_port: ws_port }; + } catch (error) { + console.error('Error launching RDP process:', error); + if (ws_port) { + releasePort(parseInt(ws_port)); + } + return { success: false, error: error.message }; + } +}); + +// Keep only one IPC handler for cleanup-rdp-process +ipcMain.handle('cleanup-rdp-process', (event, port) => { + cleanupRDPProcess(event.sender, port); +}); + +ipcMain.handle('open-rdp', async (event, connectionDetails) => { + const rdpWindow = new BrowserWindow({ + width: 1024, + height: 768, + ...commonWindowOptions, + webPreferences: { + nodeIntegration: true, + contextIsolation: true, + preload: path.join(__dirname, 'preload.js'), + webSecurity: false, + zoomFactor: 0.8, + backgroundThrottling: false, + enableRemoteModule: false, + experimentalFeatures: false + } + }); + + // Set up ALL certificate handlers before loading the page + rdpWindow.webContents.session.setCertificateVerifyProc((request, callback) => { + callback(0); // 0 means success + }); + + rdpWindow.webContents.on('certificate-error', (event, url, error, certificate, callback) => { + event.preventDefault(); + callback(true); + }); + + // Additional certificate bypass for self-signed certificates + rdpWindow.webContents.session.setPermissionRequestHandler((webContents, permission, callback) => { + callback(true); + }); + + // Set additional security options + rdpWindow.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => { + callback({ requestHeaders: { ...details.requestHeaders } }); + }); + + // Inject custom titlebar after the page loads + rdpWindow.webContents.on('did-finish-load', () => { + const rdpTitlebarJS = titlebarCustomJS.replace( + 'titleElement.textContent = document.title;', + `titleElement.textContent = "RDP connection to ${connectionDetails.vmName}";` + ); + rdpWindow.webContents.executeJavaScript(rdpTitlebarJS); + }); + + // Set up window-specific shortcuts + setupWindowShortcuts(rdpWindow); + + // Load the RDP client page with connection details + try { + await rdpWindow.loadFile('electros/remotes/rdp/index.html', { + query: connectionDetails + }); + } catch (error) { + console.error('Error loading RDP window:', error); + throw error; + } + + // Modify the RDP window close handler + rdpWindow.on('close', async (event) => { + try { + // Prevent the window from closing immediately + event.preventDefault(); + + // Send the close event to the renderer + if (!rdpWindow.isDestroyed()) { + rdpWindow.webContents.send('window-close'); + } + + // Clean up the RDP process directly + if (rdpWindow.webContents.mstscProcess) { + cleanupRDPProcess(rdpWindow.webContents); + } + + // Wait a moment for cleanup + await new Promise(resolve => setTimeout(resolve, 100)); + + // Now destroy the window + if (!rdpWindow.isDestroyed()) { + rdpWindow.destroy(); + } + } catch (error) { + console.error('Error during window cleanup:', error); + // Ensure the window is destroyed even if there's an error + if (!rdpWindow.isDestroyed()) { + rdpWindow.destroy(); + } + } + }); + + return rdpWindow.id; +}); + +// First, let's define our cleanup function separately so we can reuse it +function cleanupRDPProcess(webContents, port) { + // Release the port + if (port) { + releasePort(parseInt(port)); + } + + // Kill the mstsc process if it exists + if (webContents.mstscProcess) { + try { + const proc = webContents.mstscProcess; + + if (platform === 'mac' || platform === 'linux') { + // On Unix systems, kill the entire process group + try { + process.kill(-proc.pid, 'SIGTERM'); + setTimeout(() => { + try { + process.kill(-proc.pid, 'SIGKILL'); + } catch (e) { + // Process already dead, ignore + } + }, 1000); + } catch (err) { + if (err.code !== 'ESRCH') { + console.error('Error killing mstsc process group:', err); + } + } + } else if (platform === 'win') { + // On Windows, use taskkill to force kill the process tree + try { + spawn('taskkill', ['/pid', proc.pid.toString(), '/T', '/F']); + } catch (err) { + console.error('Error killing mstsc process on Windows:', err); + } + } + + // Also try to kill the process directly + try { + if (!proc.killed) { + proc.kill('SIGTERM'); + setTimeout(() => { + try { + if (!proc.killed) { + proc.kill('SIGKILL'); + } + } catch (e) { + // Process already dead, ignore + } + }, 1000); + } + } catch (err) { + if (err.code !== 'ESRCH') { + console.error('Error killing mstsc process directly:', err); + } + } + } finally { + // Clear the process reference + webContents.mstscProcess = null; + if (webContents.mstscPort) { + releasePort(parseInt(webContents.mstscPort)); + webContents.mstscPort = null; + } + } + } +} diff --git a/electros-electron/remotes/ssh.js b/electros-electron/remotes/ssh.js new file mode 100644 index 0000000..d3aa3ad --- /dev/null +++ b/electros-electron/remotes/ssh.js @@ -0,0 +1,92 @@ +import {app, BrowserWindow, ipcMain} from "electron"; +import path from "path"; + + + + + +ipcMain.handle('open-ssh', async (event, connectionDetails) => { + const sshWindow = new BrowserWindow({ + width: 1024, + height: 768, + ...commonWindowOptions, + webPreferences: { + nodeIntegration: true, + contextIsolation: true, + preload: path.join(__dirname, 'preload.js'), + webSecurity: false, + zoomFactor: 0.8, + backgroundThrottling: false, + enableRemoteModule: false, + experimentalFeatures: false + } + }); + + let ssh_port = undefined; + + try { + ssh_port = getAvailablePort().toString(); + + const baseDir = app.isPackaged ? process.resourcesPath : __dirname; + const sshPath = path.join( + baseDir, + app.isPackaged ? 'app.asar.unpacked' : '', + 'electros', 'remotes', 'ssh', 'ssh.cjs' + ); + + // Start the SSH server process + const sshServer = require(sshPath); + await sshServer.runSSHServer(ssh_port, baseDir); + + event.sender.ssh_port = ssh_port; + + sshWindow.webContents.on('did-finish-load', () => { + const sshTitlebarJS = titlebarCustomJS.replace( + 'titleElement.textContent = document.title;', + `titleElement.textContent = "SSH connection to ${connectionDetails.vmName}";` + ); + sshWindow.webContents.executeJavaScript(sshTitlebarJS); + }); + + // Set up window-specific shortcuts + setupWindowShortcuts(sshWindow); + + // Add connection cleanup on window close + sshWindow.on('close', async (event) => { + try { + event.preventDefault(); + + if (!sshWindow.isDestroyed()) { + sshWindow.webContents.send('window-close'); + } + + // Release the port + releasePort(parseInt(ssh_port)); + + // Wait a moment for cleanup + await new Promise(resolve => setTimeout(resolve, 100)); + + if (!sshWindow.isDestroyed()) { + sshWindow.destroy(); + } + } catch (error) { + console.error('Error during SSH window cleanup:', error); + if (!sshWindow.isDestroyed()) { + sshWindow.destroy(); + } + } + }); + + // Load the SSH client page with connection details and port + await sshWindow.loadURL(`http://localhost:${ssh_port}/?host=${encodeURIComponent(connectionDetails.ip)}&username=${encodeURIComponent(connectionDetails.username)}&password=${encodeURIComponent(connectionDetails.password)}`); + + return sshWindow.id; + } catch (error) { + console.error('Error setting up SSH window:', error); + if (ssh_port) { + releasePort(parseInt(ssh_port)); + } + throw error; + } +}); + diff --git a/electros-electron/windows/Terminal.js b/electros-electron/windows/Terminal.js new file mode 100644 index 0000000..bebedc2 --- /dev/null +++ b/electros-electron/windows/Terminal.js @@ -0,0 +1,54 @@ +import {BrowserWindow, ipcMain} from "electron"; +import {WindowOptions} from "../common/WindowOptions.js"; + +export class Terminal { + static _Window = null; + + static CreateWindow(PreloadedContent, platform) { + Terminal._Window = new BrowserWindow({ + width: 800, + height: 600, + ...WindowOptions.Common, + show: true, + hiddenInMissionControl: (platform.os === "mac") ? true : undefined, + frame: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + zoomFactor: 0.8, + backgroundThrottling: false, + enableRemoteModule: false, + experimentalFeatures: false, + webSecurity: false + }, + backgroundColor: "#000000", + title: "Electros Daemons" + }); + + Terminal._Window.loadFile("terminal/terminal.html"); + + Terminal._Window.webContents.on("did-finish-load", () => { + const popupTitlebarJS = PreloadedContent.Js.Titlebar.replace( + 'titleElement.textContent = document.title;', + `titleElement.textContent = ${JSON.stringify(Terminal._Window.title)};` + ) //.replace( +// 'initializeTitlebar(options = { minimizeOnly: false });', +// 'initializeTitlebar(options = { minimizeOnly: true });' +// ); + + Terminal._Window.webContents.executeJavaScript(popupTitlebarJS); + }); + + Terminal._Window.on('close', (e) => { + + }); + + ipcMain.on("minimize-window", () => { + Terminal._Window.minimize(); + }); + + ipcMain.on("hide-window", () => { + Terminal._Window.hide(); + }); + } +} From 1cbbc459e13583bdf3b99f00ace1ceb21dc32547 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 5 Jan 2026 10:52:08 +0100 Subject: [PATCH 055/109] Updated GUI --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 2fe9db6..6c34994 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 2fe9db6cd85d3e0ed94daa00b10185a861cae8e3 +Subproject commit 6c34994bfe66f8421bfb34411dc294b8abb063d1 From 9d3d7572c11c6cc3726ef2a9efb8a0374fbd5eaf Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 5 Jan 2026 12:47:04 +0100 Subject: [PATCH 056/109] Moved RDP Handlers into Class --- electros-electron/common/Platform.js | 12 + electros-electron/main.js | 234 +------------- electros-electron/remotes/rdp.js | 447 +++++++++++++++------------ electros-electron/remotes/ssh.js | 5 +- 4 files changed, 263 insertions(+), 435 deletions(-) diff --git a/electros-electron/common/Platform.js b/electros-electron/common/Platform.js index d447787..bd3aa7a 100644 --- a/electros-electron/common/Platform.js +++ b/electros-electron/common/Platform.js @@ -17,4 +17,16 @@ export class Platform { this.arch = 'x64'; } } + + isWin() { + return this.os === 'win'; + } + + isMac() { + return this.os === 'mac'; + } + + isLinux() { + return this.os === 'linux'; + } } diff --git a/electros-electron/main.js b/electros-electron/main.js index 1100134..31181b8 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -14,6 +14,7 @@ const { PortHandler } = require("./common/PortHandler"); const { Platform } = require("./common/Platform"); const { TrayIcon } = require("./common/TrayIcon"); const { Daemons } = require("./common/Daemons"); +const { RdpWindow } = require("./remotes/rdp.js"); let mainWindow = null; @@ -22,6 +23,7 @@ let terminalWindow = null; const PreloadedContent = new Loaders(__dirname); const platform = new Platform(); let Tray = null; +const Rdp = new RdpWindow(PreloadedContent, platform, __dirname); function createMainWindow() { @@ -262,72 +264,6 @@ ipcMain.handle('create-popup', async (event, options = {}) => { } }); -// First, let's define our cleanup function separately so we can reuse it -function cleanupRDPProcess(webContents, port) { - // Release the port - if (port) { - PortHandler.ReleasePort(parseInt(port)); - } - - // Kill the mstsc process if it exists - if (webContents.mstscProcess) { - try { - const proc = webContents.mstscProcess; - - if (platform.os === 'mac' || platform.os === 'linux') { - // On Unix systems, kill the entire process group - try { - process.kill(-proc.pid, 'SIGTERM'); - setTimeout(() => { - try { - process.kill(-proc.pid, 'SIGKILL'); - } catch (e) { - // Process already dead, ignore - } - }, 1000); - } catch (err) { - if (err.code !== 'ESRCH') { - console.error('Error killing mstsc process group:', err); - } - } - } else if (platform.os === 'win') { - // On Windows, use taskkill to force kill the process tree - try { - spawn('taskkill', ['/pid', proc.pid.toString(), '/T', '/F']); - } catch (err) { - console.error('Error killing mstsc process on Windows:', err); - } - } - - // Also try to kill the process directly - try { - if (!proc.killed) { - proc.kill('SIGTERM'); - setTimeout(() => { - try { - if (!proc.killed) { - proc.kill('SIGKILL'); - } - } catch (e) { - // Process already dead, ignore - } - }, 1000); - } - } catch (err) { - if (err.code !== 'ESRCH') { - console.error('Error killing mstsc process directly:', err); - } - } - } finally { - // Clear the process reference - webContents.mstscProcess = null; - if (webContents.mstscPort) { - PortHandler.ReleasePort(parseInt(webContents.mstscPort)); - webContents.mstscPort = null; - } - } - } -} // Then modify the before-quit handler to use the cleanup function directly app.on('before-quit', () => { @@ -354,7 +290,7 @@ app.on('before-quit', () => { windows.forEach(window => { // Clean up any mstsc processes if (window.webContents.mstscProcess) { - cleanupRDPProcess(window.webContents); + Rdp.handleCloseRdpProcess(window.webContents); } if (window !== terminalWindow && !window.isDestroyed()) { @@ -428,100 +364,6 @@ app.on('activate', () => { } }); -ipcMain.handle('open-rdp', async (event, connectionDetails) => { - const rdpWindow = new BrowserWindow({ - width: 1024, - height: 768, - ...WindowOptions.Common, - webPreferences: { - nodeIntegration: true, - contextIsolation: true, - preload: path.join(__dirname, 'preload.js'), - webSecurity: false, - zoomFactor: 1, - backgroundThrottling: false, - enableRemoteModule: false, - experimentalFeatures: false - } - }); - - // Set up ALL certificate handlers before loading the page - rdpWindow.webContents.session.setCertificateVerifyProc((request, callback) => { - callback(0); // 0 means success - }); - - rdpWindow.webContents.on('certificate-error', (event, url, error, certificate, callback) => { - event.preventDefault(); - callback(true); - }); - - // Additional certificate bypass for self-signed certificates - rdpWindow.webContents.session.setPermissionRequestHandler((webContents, permission, callback) => { - callback(true); - }); - - // Set additional security options - rdpWindow.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => { - callback({ requestHeaders: { ...details.requestHeaders } }); - }); - - // Inject custom titlebar after the page loads - rdpWindow.webContents.on('did-finish-load', () => { - const rdpTitlebarJS = PreloadedContent.Js.Titlebar.replace( - 'titleElement.textContent = document.title;', - `titleElement.textContent = "RDP connection to ${connectionDetails.vmName}";` - ); - rdpWindow.webContents.executeJavaScript(rdpTitlebarJS); - }); - - // Set up window-specific shortcuts - setupWindowShortcuts(rdpWindow); - - // Load the RDP client page with connection details - try { - await rdpWindow.loadFile('electros/remotes/rdp/index.html', { - query: connectionDetails - }); - } catch (error) { - console.error('Error loading RDP window:', error); - throw error; - } - - // Modify the RDP window close handler - rdpWindow.on('close', async (event) => { - try { - // Prevent the window from closing immediately - event.preventDefault(); - - // Send the close event to the renderer - if (!rdpWindow.isDestroyed()) { - rdpWindow.webContents.send('window-close'); - } - - // Clean up the RDP process directly - if (rdpWindow.webContents.mstscProcess) { - cleanupRDPProcess(rdpWindow.webContents); - } - - // Wait a moment for cleanup - await new Promise(resolve => setTimeout(resolve, 100)); - - // Now destroy the window - if (!rdpWindow.isDestroyed()) { - rdpWindow.destroy(); - } - } catch (error) { - console.error('Error during window cleanup:', error); - // Ensure the window is destroyed even if there's an error - if (!rdpWindow.isDestroyed()) { - rdpWindow.destroy(); - } - } - }); - - return rdpWindow.id; -}); - ipcMain.handle('os-prefers-dark-theme', (event) => { return nativeTheme?.shouldUseDarkColors ?? false; }) @@ -530,76 +372,6 @@ ipcMain.handle('os-prefers-reduced-transparency', (event) => { return nativeTheme?.prefersReducedTransparency ?? false; }) -// Add these IPC handlers -ipcMain.handle('launch-rdp-process', async (event, { credentials, width, height }) => { - try { - const ws_port = PortHandler.GetAvailablePort().toString(); - - const args = [ - '--target', credentials.ip, - '--user', credentials.username, - '--dom', credentials.domain, - '--pass', credentials.password, - '--width', width.toString(), - '--height', height.toString(), - '--ws_port', ws_port - ]; - - // Use process.resourcesPath in production, fallback to __dirname in development - const baseDir = app.isPackaged ? process.resourcesPath : __dirname; - const mstscPath = path.join( - baseDir, - app.isPackaged ? 'app.asar.unpacked' : '', - 'electros', 'remotes', 'rdp', 'mstsc-rs' - ); - - // Set detached option for proper process group handling on Unix systems - const spawnOptions = { - detached: platform.os === 'mac' || platform.os === 'linux', - env: process.env - }; - - const mstscProcess = spawn(mstscPath, args, spawnOptions); - - // Store process reference and port - event.sender.mstscProcess = mstscProcess; - event.sender.mstscPort = ws_port; - - mstscProcess.stdout.on('data', (data) => { - console.log(`stdout: ${data}`); - }); - - mstscProcess.stderr.on('data', (data) => { - console.error(`stderr: ${data}`); - }); - - mstscProcess.on('close', (code) => { - console.log(`mstsc-rs process exited with code ${code}`); - // Release the port when the process closes - if (event.sender.mstscPort) { - PortHandler.ReleasePort(parseInt(event.sender.mstscPort)); - event.sender.mstscPort = null; - } - // Check if the window still exists before sending the message - if (!event.sender.isDestroyed()) { - event.sender.send('rdp-process-closed'); - } - }); - - return { success: true, ws_port: ws_port }; - } catch (error) { - console.error('Error launching RDP process:', error); - if (ws_port) { - PortHandler.ReleasePort(parseInt(ws_port)); - } - return { success: false, error: error.message }; - } -}); - -// Keep only one IPC handler for cleanup-rdp-process -ipcMain.handle('cleanup-rdp-process', (event, port) => { - cleanupRDPProcess(event.sender, port); -}); ipcMain.handle('open-browser', async (event, { url diff --git a/electros-electron/remotes/rdp.js b/electros-electron/remotes/rdp.js index c566dbc..74b4080 100644 --- a/electros-electron/remotes/rdp.js +++ b/electros-electron/remotes/rdp.js @@ -1,235 +1,278 @@ // Add these IPC handlers -import {BrowserWindow, ipcMain} from "electron"; +import { app, BrowserWindow, ipcMain } from "electron"; import path from "path"; -import {spawn} from "child_process"; - -ipcMain.handle('launch-rdp-process', async (event, { credentials, width, height }) => { - try { - const ws_port = getAvailablePort().toString(); - - const args = [ - '--target', credentials.ip, - '--user', credentials.username, - '--dom', credentials.domain, - '--pass', credentials.password, - '--width', width.toString(), - '--height', height.toString(), - '--ws_port', ws_port - ]; - - // Use process.resourcesPath in production, fallback to __dirname in development - const baseDir = app.isPackaged ? process.resourcesPath : __dirname; - const mstscPath = path.join( - baseDir, - app.isPackaged ? 'app.asar.unpacked' : '', - 'electros', 'remotes', 'rdp', 'mstsc-rs' - ); - - // Set detached option for proper process group handling on Unix systems - const spawnOptions = { - detached: platform === 'mac' || platform === 'linux', - env: process.env - }; - - const mstscProcess = spawn(mstscPath, args, spawnOptions); - - // Store process reference and port - event.sender.mstscProcess = mstscProcess; - event.sender.mstscPort = ws_port; - - mstscProcess.stdout.on('data', (data) => { - console.log(`stdout: ${data}`); +import { spawn } from "child_process"; +import { WindowOptions } from "../common/WindowOptions.js"; +import { PortHandler } from "../common/PortHandler.js"; + + +export class RdpWindow { + /** @type {?BrowserWindow} */ + _window = null; + + /** + * + * @param {Loaders} PreloadedRes + * @param {Platform} platform + * @param {string} __dirname + */ + constructor(PreloadedRes, platform, __dirname) { + this.PreloadedRes = PreloadedRes; + this._platform = platform; + this.__dirname = __dirname; + + this._setupIpcChannels(); + + } + + _setupIpcChannels() { + ipcMain.handle('launch-rdp-process', (event, { credentials, width, height }) => { + this.handleLaunchRdpProcess({event, credentials, width, height}).then(r => { + return r; + }).catch(e => { + return e; + }) }); - mstscProcess.stderr.on('data', (data) => { - console.error(`stderr: ${data}`); + ipcMain.handle('cleanup-rdp-process', (event, port) => { + this.handleCloseRdpProcess({eventSender: event.sender, port}).then(() => { }).catch(e => { }); }); - mstscProcess.on('close', (code) => { - console.log(`mstsc-rs process exited with code ${code}`); - // Release the port when the process closes - if (event.sender.mstscPort) { - releasePort(parseInt(event.sender.mstscPort)); - event.sender.mstscPort = null; - } - // Check if the window still exists before sending the message - if (!event.sender.isDestroyed()) { - event.sender.send('rdp-process-closed'); - } + ipcMain.handle("open-rdp", async (event, connectionDetails) => { + return await this.openRdpWindow(connectionDetails); }); + } - return { success: true, ws_port: ws_port }; - } catch (error) { - console.error('Error launching RDP process:', error); - if (ws_port) { - releasePort(parseInt(ws_port)); - } - return { success: false, error: error.message }; + async openRdpWindow(connectionDetails) { + this._constructWindow(); + this._setupWindowEvents(connectionDetails); + this._loadContent(connectionDetails).then(() => { + return this._window.id; + }).catch((err) => { + console.error(err); + return -1; + }); } -}); - -// Keep only one IPC handler for cleanup-rdp-process -ipcMain.handle('cleanup-rdp-process', (event, port) => { - cleanupRDPProcess(event.sender, port); -}); - -ipcMain.handle('open-rdp', async (event, connectionDetails) => { - const rdpWindow = new BrowserWindow({ - width: 1024, - height: 768, - ...commonWindowOptions, - webPreferences: { - nodeIntegration: true, - contextIsolation: true, - preload: path.join(__dirname, 'preload.js'), - webSecurity: false, - zoomFactor: 0.8, - backgroundThrottling: false, - enableRemoteModule: false, - experimentalFeatures: false - } - }); - - // Set up ALL certificate handlers before loading the page - rdpWindow.webContents.session.setCertificateVerifyProc((request, callback) => { - callback(0); // 0 means success - }); - - rdpWindow.webContents.on('certificate-error', (event, url, error, certificate, callback) => { - event.preventDefault(); - callback(true); - }); - - // Additional certificate bypass for self-signed certificates - rdpWindow.webContents.session.setPermissionRequestHandler((webContents, permission, callback) => { - callback(true); - }); - - // Set additional security options - rdpWindow.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => { - callback({ requestHeaders: { ...details.requestHeaders } }); - }); - - // Inject custom titlebar after the page loads - rdpWindow.webContents.on('did-finish-load', () => { - const rdpTitlebarJS = titlebarCustomJS.replace( - 'titleElement.textContent = document.title;', - `titleElement.textContent = "RDP connection to ${connectionDetails.vmName}";` - ); - rdpWindow.webContents.executeJavaScript(rdpTitlebarJS); - }); - - // Set up window-specific shortcuts - setupWindowShortcuts(rdpWindow); - - // Load the RDP client page with connection details - try { - await rdpWindow.loadFile('electros/remotes/rdp/index.html', { - query: connectionDetails + + handleLaunchRdpProcess({event, credentials, width, height}) { + return new Promise((resolve, reject) => { + try { + const websocketPort = PortHandler.GetAvailablePort(); + + const args = [ + '--target', credentials.ip, + '--user', credentials.username, + '--dom', credentials.domain, + '--pass', credentials.password, + '--width', width.toString(), + '--height', height.toString(), + '--ws_port', websocketPort + ]; + + const baseDir = app.isPackaged ? process.resourcesPath : this.__dirname; + const mstscPath = path.join( + baseDir, + app.isPackaged ? 'app.asar.unpacked' : '', + 'electros', 'remotes', 'rdp', 'mstsc-rs' + ); + + const spawnOptions = { + detached: this._platform.isMac() || this._platform.isLinux(), + env: process.env + }; + + const mstscProcess = spawn(mstscPath, args, spawnOptions); + + event.sender.mstscProcess = mstscProcess; + event.sender.mstscPort = websocketPort; + + mstscProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + mstscProcess.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + mstscProcess.on('close', (code) => { + console.log(`mstsc-rs process exited with code ${code}`); + // Release the port when the process closes + if (event.sender.mstscPort) { + PortHandler.ReleasePort(parseInt(event.sender.mstscPort)); + event.sender.mstscPort = null; + } + // Check if the window still exists before sending the message + if (!event.sender.isDestroyed()) { + event.sender.send('rdp-process-closed'); + } + }); + + resolve({ success: true, ws_port: websocketPort }); + } catch (error) { + console.error(error); + PortHandler.ReleasePort(parseInt(event.sender.mstscPort)); + reject({ success: false, error: error.message }); + } }); - } catch (error) { - console.error('Error loading RDP window:', error); - throw error; } - // Modify the RDP window close handler - rdpWindow.on('close', async (event) => { - try { - // Prevent the window from closing immediately - event.preventDefault(); + handleCloseRdpProcess({eventSender = null, port = null}) { + console.debug(`Clearing MSTSC process ${eventSender} ${port}`); + if (port) { PortHandler.ReleasePort(parseInt(port)); } + + const proc = eventSender.mstscProcess; - // Send the close event to the renderer - if (!rdpWindow.isDestroyed()) { - rdpWindow.webContents.send('window-close'); + return new Promise((resolve, reject) => { + try { + if (this._platform.isWin()) { + this._killProcessOnWindows(proc); + } else { + this._killProcessOnUnix(proc); + } + + try { + this._killProcessDirectly(proc); + } catch (e) { + console.warn(e); + } + + eventSender.mstscProcess = null; + } catch (e) { + console.error("Error killing MSTSC Process: ", e); + + if (eventSender.mstscPort) { + PortHandler.ReleasePort(parseInt(eventSender.mstscPort)); + eventSender.mstscPort = null; + } + + eventSender.mstscPort = null; + reject({ success: false, error: e }); } - // Clean up the RDP process directly - if (rdpWindow.webContents.mstscProcess) { - cleanupRDPProcess(rdpWindow.webContents); + resolve(); + }); + } + + _killProcessOnUnix(proc) { + try { + process.kill(-proc.pid, 'SIGTERM'); + setTimeout(() => { + try { process.kill(-proc.pid, 'SIGKILL'); } catch (e) { } + }, 1000); + } catch (err) { + if (err.code !== 'ESRCH') { + console.warn('Process for MSTSC Could not be found, likely to be dead:', err); + } else { + throw err; } + } + } - // Wait a moment for cleanup - await new Promise(resolve => setTimeout(resolve, 100)); + _killProcessOnWindows(proc) { + spawn("taskkill", ["/pid", proc.pid.toString(), "/T", "/F"]); + } - // Now destroy the window - if (!rdpWindow.isDestroyed()) { - rdpWindow.destroy(); + _killProcessDirectly(proc) { + try { + if (!proc.killed) { + proc.kill('SIGTERM'); + setTimeout(() => { + try { if (!proc.killed) { proc.kill('SIGKILL'); } } catch (e) { } + }, 1000); } - } catch (error) { - console.error('Error during window cleanup:', error); - // Ensure the window is destroyed even if there's an error - if (!rdpWindow.isDestroyed()) { - rdpWindow.destroy(); + } catch (err) { + if (err.code !== 'ESRCH') { + console.error('Error killing mstsc process directly:', err); + } else { + throw err; } } - }); + } - return rdpWindow.id; -}); + _constructWindow() { + if (this._window) { + console.warn("RDP Window Singleton already instantiated"); + return; + } -// First, let's define our cleanup function separately so we can reuse it -function cleanupRDPProcess(webContents, port) { - // Release the port - if (port) { - releasePort(parseInt(port)); + this._window = new BrowserWindow({ + width: 1024, + height: 768, + ...WindowOptions.Common, + webPreferences: { + nodeIntegration: true, + contextIsolation: true, + preload: path.join(this.__dirname, 'preload.js'), + webSecurity: false, + zoomFactor: 1, + backgroundThrottling: false, + enableRemoteModule: false, + experimentalFeatures: false + } + }); } - // Kill the mstsc process if it exists - if (webContents.mstscProcess) { - try { - const proc = webContents.mstscProcess; + _setupWindowEvents(connectionDetails) { + if (this._window === null) { + throw new Error("RDP Window not instantiated"); + } - if (platform === 'mac' || platform === 'linux') { - // On Unix systems, kill the entire process group - try { - process.kill(-proc.pid, 'SIGTERM'); - setTimeout(() => { - try { - process.kill(-proc.pid, 'SIGKILL'); - } catch (e) { - // Process already dead, ignore - } - }, 1000); - } catch (err) { - if (err.code !== 'ESRCH') { - console.error('Error killing mstsc process group:', err); - } - } - } else if (platform === 'win') { - // On Windows, use taskkill to force kill the process tree - try { - spawn('taskkill', ['/pid', proc.pid.toString(), '/T', '/F']); - } catch (err) { - console.error('Error killing mstsc process on Windows:', err); - } - } + this._window.webContents.session.setCertificateVerifyProc((request, callback) => { + callback(0); // 0 means success + }); + + this._window.webContents.on('certificate-error', (event, url, error, certificate, callback) => { + event.preventDefault(); + callback(true); + }); + + this._window.webContents.session.setPermissionRequestHandler((webContents, permission, callback) => { + callback(true); + }); + + this._window.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => { + callback({ requestHeaders: { ...details.requestHeaders } }); + }); + + this._window.webContents.on('did-finish-load', () => { + const rdpTitlebarJS = this.PreloadedRes.Js.Titlebar.replace( + 'titleElement.textContent = document.title;', + `titleElement.textContent = "RDP connection to ${connectionDetails.vmName}";` + ); + this._window.webContents.executeJavaScript(rdpTitlebarJS); + }); - // Also try to kill the process directly + this._window.on('close', async (event) => { try { - if (!proc.killed) { - proc.kill('SIGTERM'); - setTimeout(() => { - try { - if (!proc.killed) { - proc.kill('SIGKILL'); - } - } catch (e) { - // Process already dead, ignore - } - }, 1000); - } - } catch (err) { - if (err.code !== 'ESRCH') { - console.error('Error killing mstsc process directly:', err); + event.preventDefault(); + if (!this._window.isDestroyed()) { this._window.webContents.send('window-close'); } + + if (this._window.webContents.mstscProcess) { + this.handleCloseRdpProcess(this._window.webContents).then(() => { }).catch(() => { }); } + + await new Promise(resolve => setTimeout(resolve, 100)); + if (!this._window.isDestroyed()) { this._window.destroy(); } + this._window = null; + } catch (error) { + console.error('Error during window cleanup:', error); + if (!this._window.isDestroyed()) { this._window.destroy(); } + this._window = null; } - } finally { - // Clear the process reference - webContents.mstscProcess = null; - if (webContents.mstscPort) { - releasePort(parseInt(webContents.mstscPort)); - webContents.mstscPort = null; - } + }); + } + + async _loadContent(connectionDetails) { + if (this._window === null) { + throw new Error("RDP Window not instantiated"); + } + try { + await this._window.loadFile('electros/remotes/rdp/index.html', { + query: connectionDetails + }); + } catch (error) { + console.error('Error loading RDP window:', error); + throw error; } } } diff --git a/electros-electron/remotes/ssh.js b/electros-electron/remotes/ssh.js index d3aa3ad..dcf20d5 100644 --- a/electros-electron/remotes/ssh.js +++ b/electros-electron/remotes/ssh.js @@ -1,5 +1,6 @@ import {app, BrowserWindow, ipcMain} from "electron"; import path from "path"; +import {WindowOptions} from "../common/WindowOptions.js"; @@ -9,13 +10,13 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { const sshWindow = new BrowserWindow({ width: 1024, height: 768, - ...commonWindowOptions, + ...WindowOptions.Common, webPreferences: { nodeIntegration: true, contextIsolation: true, preload: path.join(__dirname, 'preload.js'), webSecurity: false, - zoomFactor: 0.8, + zoomFactor: 1, backgroundThrottling: false, enableRemoteModule: false, experimentalFeatures: false From d24c93c856ea06f37bcf9a5c59b4819437a87b7b Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 5 Jan 2026 13:10:56 +0100 Subject: [PATCH 057/109] Modified menubar to be in line with Apple guidelines --- electros-electron/common/MenuBar.js | 41 +++++++++++++++-------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/electros-electron/common/MenuBar.js b/electros-electron/common/MenuBar.js index bf9e174..6314229 100644 --- a/electros-electron/common/MenuBar.js +++ b/electros-electron/common/MenuBar.js @@ -1,13 +1,19 @@ import { Daemons } from "./Daemons.js"; +import { Terminal } from "../windows/Terminal.js"; +import {app, Notification} from "electron"; -export function BuildMenuTemplate( - terminalWindow -) { - return [ + +export function BuildMenuTemplate() { + const baseMenu = [ { label: 'Electros', submenu:[ - {role: 'quit'} + {role: 'quit'}, + { + label: 'Toggle Terminal', + accelerator: 'CmdOrCtrl+T', + click: () => { Terminal.ToggleVisibility(); } + } ] }, { @@ -27,24 +33,17 @@ export function BuildMenuTemplate( { label: 'View', submenu: [ - { - label: 'Toggle Terminal', - accelerator: 'CmdOrCtrl+T', - click: () => { - if (terminalWindow) { - terminalWindow.isVisible() ? terminalWindow.hide() : terminalWindow.show(); - } - } - }, - {type: 'separator'}, - {role: 'resetZoom', zoomFactor: 0.8}, + {role: 'resetZoom', zoomFactor: 1}, {role: 'zoomIn'}, {role: 'zoomOut'}, {type: 'separator'}, {role: 'togglefullscreen'} ] - }, - { + } + ]; + + if (!app.isPackaged) { + baseMenu.push({ label: 'Developer', submenu:[ { @@ -78,7 +77,9 @@ export function BuildMenuTemplate( {label: 'Toggle Fullscreen', role: 'toggleFullScreen'}, {label: 'Toggle Zoom', role: 'toggleZoom'}, ] - } - ] + }) + } + + return baseMenu; } From 936790e5201c9c3cebabc22879ae1c694ae733ba Mon Sep 17 00:00:00 2001 From: srobaldo Date: Wed, 7 Jan 2026 12:52:26 +0100 Subject: [PATCH 058/109] Modified Daemons behaviour to die with parent app --- electros-electron/common/Daemons.js | 6 +- electros-electron/common/MenuBar.js | 3 +- electros-electron/common/Platform.js | 66 +++++++++++++++++++ electros-electron/main.js | 46 +++---------- electros-electron/remotes/{ssh.js => Ssh.js} | 53 ++++++++++++--- electros-electron/terminal/terminal.html | 4 +- .../{remotes/rdp.js => windows/Rdp.js} | 0 electros-electron/windows/Terminal.js | 53 +++++++++++++-- 8 files changed, 174 insertions(+), 57 deletions(-) rename electros-electron/remotes/{ssh.js => Ssh.js} (68%) rename electros-electron/{remotes/rdp.js => windows/Rdp.js} (100%) diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js index 0a21d90..f6b645e 100644 --- a/electros-electron/common/Daemons.js +++ b/electros-electron/common/Daemons.js @@ -74,15 +74,15 @@ export class Daemons { let daemonsCmd = ''; - if (platform.os === 'mac') { + if (platform.isMac()) { daemonsCmd = path.join(daemonsPath, "elemento_client_daemons.app/Contents/MacOS/elemento_client_daemons"); - } else if (platform.os === 'linux') { + } else if (platform.isLinux()) { if (platform.arch === 'arm64') { daemonsCmd = path.join(daemonsPath, `elemento_daemons_linux_arm`); } else { daemonsCmd = path.join(daemonsPath, `elemento_daemons_linux_x86`); } - } else if (platform.os === 'win') { + } else if (platform.isWin()) { if (platform.arch === 'x64' || platform.arch === 'x86') { daemonsCmd = path.join(daemonsPath, `elemento_daemons_windows_x86.exe`); if (!fs.existsSync(daemonsCmd)) { diff --git a/electros-electron/common/MenuBar.js b/electros-electron/common/MenuBar.js index 6314229..ed0d5f9 100644 --- a/electros-electron/common/MenuBar.js +++ b/electros-electron/common/MenuBar.js @@ -9,6 +9,7 @@ export function BuildMenuTemplate() { label: 'Electros', submenu:[ {role: 'quit'}, + {label: 'Reload', role: 'reload'}, { label: 'Toggle Terminal', accelerator: 'CmdOrCtrl+T', @@ -56,7 +57,6 @@ export function BuildMenuTemplate() { title: "Daemons Terminated", body: "Electros Client Daemons successfully terminated.", silent: true, - icon: './electros.iconset/icon_256x256.png', urgency: 'low' }).show(); } @@ -72,7 +72,6 @@ export function BuildMenuTemplate() { } } }, - {label: 'Reload', role: 'reload'}, {label: 'Toggle DevTools', role: 'toggleDevTools'}, {label: 'Toggle Fullscreen', role: 'toggleFullScreen'}, {label: 'Toggle Zoom', role: 'toggleZoom'}, diff --git a/electros-electron/common/Platform.js b/electros-electron/common/Platform.js index bd3aa7a..ff0a2ef 100644 --- a/electros-electron/common/Platform.js +++ b/electros-electron/common/Platform.js @@ -1,5 +1,12 @@ import * as os from "node:os"; +// import { execSync } from "node:child_process"; + +/** + * @summary Utility class that has the current OS platform. + * + * @author srobaldo + */ export class Platform { os = os.platform(); arch = os.arch(); @@ -18,15 +25,74 @@ export class Platform { } } + /** + * Checks if the Current OS is `win` + * + * @return {boolean} + */ isWin() { return this.os === 'win'; } + /** + * Checks if the Current OS is `mac` (darwin) + * @return {boolean} + */ isMac() { return this.os === 'mac'; } + /** + * Checks if the Current OS is `linux` + * @return {boolean} + */ isLinux() { return this.os === 'linux'; } + + /** + * Checks if the Current OS is either `linux`, `mac` or `darwin` + * @return {boolean} + */ + isUnix() { + return this.isLinux() || this.isMac(); + } + + /** + * Checks if the Current OS is neither UNIX nor Windows. + * @return {boolean} + */ + isUndefined() { + return (!this.isWin()) && (!this.isUnix()); + } + + /** + * Checks through DBus if the OS supports Tray Icons + * @return {boolean} + */ + dbusHasTraySupport() { + if (!this.isLinux()) { + return true; + } + + return false; + + // method doesn't always work, cannot be trusted; assuming that all Linux distros don't have Tray Icons to + // avoid making a permanent backg. process. + // @author srobaldo + + // try { + // execSync( + // "dbus-send --session --dest=org.freedesktop.DBus" + + // "--type=method_call /org/freedesktop/DBus" + + // "org.freedesktop.DBus.NameHasOwner" + + // "string:org.kde.StatusNotifierWatcher", + // { stdio: "ignore" } + // ); + // + // return true; + // } catch (e) { + // return false; + // } + } } diff --git a/electros-electron/main.js b/electros-electron/main.js index 31181b8..21a1824 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -12,9 +12,9 @@ const { WindowOptions } = require("./common/WindowOptions"); const { BuildMenuTemplate } = require("./common/MenuBar"); const { PortHandler } = require("./common/PortHandler"); const { Platform } = require("./common/Platform"); -const { TrayIcon } = require("./common/TrayIcon"); const { Daemons } = require("./common/Daemons"); -const { RdpWindow } = require("./remotes/rdp.js"); +const { Terminal } = require("./windows/Terminal"); +const { RdpWindow } = require("./windows/Rdp.js"); let mainWindow = null; @@ -22,7 +22,6 @@ let terminalWindow = null; const PreloadedContent = new Loaders(__dirname); const platform = new Platform(); -let Tray = null; const Rdp = new RdpWindow(PreloadedContent, platform, __dirname); @@ -66,7 +65,6 @@ function createMainWindow() { return win; } -// Replace the daemon spawn code with this function createTerminalWindow() { terminalWindow = new BrowserWindow({ width: 800, @@ -107,30 +105,11 @@ function createTerminalWindow() { terminalWindow.webContents.executeJavaScript(PreloadedContent.Js.Titlebar); }); - - if (Tray === null) { - Tray = new TrayIcon(terminalWindow, platform, __dirname); - } - - // Handle window close button - terminalWindow.on('close', (event) => { - event.preventDefault(); // Prevent window from closing - terminalWindow.hide(); // Hide instead of close - }); - - // Add IPC handlers for window controls - ipcMain.on('minimize-window', () => { - terminalWindow.minimize(); - }); - - ipcMain.on('hide-window', () => { - terminalWindow.hide(); - }); } function createWindows() { try { - createTerminalWindow(); + Terminal.CreateWindow(PreloadedContent, platform, __dirname); mainWindow = createMainWindow(); mainWindow.on('closed', () => { @@ -298,11 +277,8 @@ app.on('before-quit', () => { } }); + Terminal.DestroyWindow(); Daemons.Terminate(); - - if (terminalWindow && !terminalWindow.isDestroyed()) { - terminalWindow.destroy(); - } }); // Add this IPC handler before app.whenReady() @@ -334,7 +310,7 @@ ipcMain.handle('check-port', async (event, { ip, port }) => { app.whenReady().then(() => { const menu = Menu.buildFromTemplate( - BuildMenuTemplate(terminalWindow), + BuildMenuTemplate(), ); Menu.setApplicationMenu(menu); createWindows(); @@ -366,18 +342,16 @@ app.on('activate', () => { ipcMain.handle('os-prefers-dark-theme', (event) => { return nativeTheme?.shouldUseDarkColors ?? false; -}) +}); ipcMain.handle('os-prefers-reduced-transparency', (event) => { return nativeTheme?.prefersReducedTransparency ?? false; -}) - +}); -ipcMain.handle('open-browser', async (event, { - url -}) => { +ipcMain.handle('open-browser', async (event, { url }) => { await shell.openExternal(url); -}) +}); + ipcMain.handle('open-ssh', async (event, connectionDetails) => { const sshWindow = new BrowserWindow({ diff --git a/electros-electron/remotes/ssh.js b/electros-electron/remotes/Ssh.js similarity index 68% rename from electros-electron/remotes/ssh.js rename to electros-electron/remotes/Ssh.js index dcf20d5..b69ef34 100644 --- a/electros-electron/remotes/ssh.js +++ b/electros-electron/remotes/Ssh.js @@ -1,8 +1,52 @@ import {app, BrowserWindow, ipcMain} from "electron"; import path from "path"; import {WindowOptions} from "../common/WindowOptions.js"; +import {PortHandler} from "../common/PortHandler.js"; +class SshWindow { + /** @type {Array} */ + _windows = []; + + constructor(PreloadedRes, platform, __dirname) { + this._preloaded = PreloadedRes; + this._platform = platform; + this.__dirname = __dirname; + } + + _constructWindow() { + const sshWindow = new BrowserWindow({ + width: 1024, + height: 768, + ...WindowOptions.Common, + webPreferences: { + nodeIntegration: true, + contextIsolation: true, + preload: path.join(this.__dirname, 'preload.js'), + webSecurity: false, + zoomFactor: 1, + backgroundThrottling: false, + enableRemoteModule: false, + experimentalFeatures: false + } + }); + } + + _setupSsh() { + const port = PortHandler.GetAvailablePort(); + + try { + const baseDir = app.isPackaged ? process.resourcesPath : this.__dirname; + const sshPath = path.join( + baseDir, app.isPackaged ? 'app.asar.unpacked' : '', + 'electros', 'remotes', 'ssh', 'ssh.cjs' + ); + + + } + } +} + @@ -26,14 +70,7 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { let ssh_port = undefined; try { - ssh_port = getAvailablePort().toString(); - - const baseDir = app.isPackaged ? process.resourcesPath : __dirname; - const sshPath = path.join( - baseDir, - app.isPackaged ? 'app.asar.unpacked' : '', - 'electros', 'remotes', 'ssh', 'ssh.cjs' - ); + // Start the SSH server process const sshServer = require(sshPath); diff --git a/electros-electron/terminal/terminal.html b/electros-electron/terminal/terminal.html index eedc247..5ba53a7 100644 --- a/electros-electron/terminal/terminal.html +++ b/electros-electron/terminal/terminal.html @@ -58,7 +58,7 @@ }); } - // Initialize the terminal + // Initialise the terminal const term = new Terminal({ fontSize: 12, // Smaller font size lineHeight: 1.2, @@ -70,7 +70,7 @@ convertEol: true, theme: { background: '#0a0e14', - foreground: '#ffa600' // Set terminal text color to green + foreground: '#ffa600' } }); diff --git a/electros-electron/remotes/rdp.js b/electros-electron/windows/Rdp.js similarity index 100% rename from electros-electron/remotes/rdp.js rename to electros-electron/windows/Rdp.js diff --git a/electros-electron/windows/Terminal.js b/electros-electron/windows/Terminal.js index bebedc2..ae2397c 100644 --- a/electros-electron/windows/Terminal.js +++ b/electros-electron/windows/Terminal.js @@ -1,21 +1,29 @@ import {BrowserWindow, ipcMain} from "electron"; import {WindowOptions} from "../common/WindowOptions.js"; +import {TrayIcon} from "../common/TrayIcon.js"; + export class Terminal { static _Window = null; + static _Tray = null; + static _DaemonsProc = null; + + static CreateWindow(PreloadedContent, platform, __dirname) { + if (this._Window) { + return; + } - static CreateWindow(PreloadedContent, platform) { Terminal._Window = new BrowserWindow({ width: 800, height: 600, ...WindowOptions.Common, - show: true, - hiddenInMissionControl: (platform.os === "mac") ? true : undefined, + show: false, + hiddenInMissionControl: (platform.isMac()) ? true : undefined, frame: false, webPreferences: { nodeIntegration: true, contextIsolation: false, - zoomFactor: 0.8, + zoomFactor: 1, backgroundThrottling: false, enableRemoteModule: false, experimentalFeatures: false, @@ -36,11 +44,14 @@ export class Terminal { // 'initializeTitlebar(options = { minimizeOnly: true });' // ); - Terminal._Window.webContents.executeJavaScript(popupTitlebarJS); + // Terminal._Window.webContents.executeJavaScript(popupTitlebarJS); }); - Terminal._Window.on('close', (e) => { + Terminal._Tray = new TrayIcon(Terminal._Window, platform, __dirname); + Terminal._Window.on('close', (e) => { + e.preventDefault(); + this._Window.hide(); }); ipcMain.on("minimize-window", () => { @@ -51,4 +62,34 @@ export class Terminal { Terminal._Window.hide(); }); } + + static ToggleVisibility(to = undefined) { + if (Terminal._Window === null) { return; } + + let isVisible = to; + if (to === undefined) { + isVisible = Terminal._Window.isVisible(); + } + + if (isVisible) { + Terminal._Window.show(); + } else { + Terminal._Window.hide(); + } + } + + static DestroyWindow() { + if (Terminal._Window === null) { return; } + + /** @type {BrowserWindow} */ + const x = Terminal._Window; + + Terminal._Window.close(); + + setTimeout(() => { + if (!Terminal._Window.isDestroyed()) { + Terminal._Window.destroy(); + } + }, 500); + } } From 4bc7cce6836d673b9f4bc12fc124b99f2189ecf6 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Wed, 14 Jan 2026 15:35:21 +0100 Subject: [PATCH 059/109] GUI Updated for test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 6c34994..e39cabf 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 6c34994bfe66f8421bfb34411dc294b8abb063d1 +Subproject commit e39cabf5c688797a29dccb0e40a8042df19b10ef From 5be0a71141911a39efd3f7dc53b70988307ee8b1 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 15 Jan 2026 11:41:10 +0100 Subject: [PATCH 060/109] GUI Updated for test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index e39cabf..0b6bff2 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit e39cabf5c688797a29dccb0e40a8042df19b10ef +Subproject commit 0b6bff27bd15c47ab81c1468795ab3faa70bdcbb From 97d0c414805471d04cc439bd0d37d59d4d30c8bb Mon Sep 17 00:00:00 2001 From: srobaldo Date: Thu, 15 Jan 2026 12:11:12 +0100 Subject: [PATCH 061/109] Development test build push; likely broken --- electros-electron/common/Daemons.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js index f6b645e..27a0a43 100644 --- a/electros-electron/common/Daemons.js +++ b/electros-electron/common/Daemons.js @@ -93,6 +93,8 @@ export class Daemons { } } + console.log(`Daemon ${daemonsCmd}`); + return daemonsCmd; } } From 6d893c077023f49b81ae1b87673faf9caf39f656 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 16 Jan 2026 11:36:44 +0100 Subject: [PATCH 062/109] Fixed missing daemon launch call --- electros-electron/common/Daemons.js | 7 ++++--- electros-electron/main.js | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js index 27a0a43..19b3547 100644 --- a/electros-electron/common/Daemons.js +++ b/electros-electron/common/Daemons.js @@ -4,6 +4,9 @@ import fs from "fs"; import { spawn } from "child_process"; +export class DaemonsNotEnabledError extends Error {} + + export class Daemons { static _Process = null; static _Ports = {}; @@ -20,7 +23,7 @@ export class Daemons { static Launch(platform, __dirname) { if (app.commandLine.hasSwitch("no-daemons")) { console.log("Daemons have been disabled by `--no-daemons`"); - return; + throw new DaemonsNotEnabledError(); } const execPath = Daemons._GetCommand(platform, __dirname); @@ -93,8 +96,6 @@ export class Daemons { } } - console.log(`Daemon ${daemonsCmd}`); - return daemonsCmd; } } diff --git a/electros-electron/main.js b/electros-electron/main.js index 21a1824..6d6ae50 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -313,6 +313,15 @@ app.whenReady().then(() => { BuildMenuTemplate(), ); Menu.setApplicationMenu(menu); + + try { + Daemons.Launch(platform, __dirname); + } catch (e) { + if (!(e instanceof DaemonsNotEnabledError)) { + console.error(e); + } + } + createWindows(); }); From 296082e2afe6ee618bcd2b5f05b63eb56a273c29 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 16 Jan 2026 13:03:14 +0100 Subject: [PATCH 063/109] Modified daemon launch --- electros-electron/common/Daemons.js | 21 +++++++++++++++++---- electros-electron/common/package.json | 3 +++ electros-electron/main.js | 7 ++++--- electros-electron/windows/package.json | 3 +++ 4 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 electros-electron/common/package.json create mode 100644 electros-electron/windows/package.json diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js index 19b3547..db1f82b 100644 --- a/electros-electron/common/Daemons.js +++ b/electros-electron/common/Daemons.js @@ -1,7 +1,7 @@ -import { app } from "electron"; +import {app} from "electron"; import path from "path"; import fs from "fs"; -import { spawn } from "child_process"; +import {spawn} from "child_process"; export class DaemonsNotEnabledError extends Error {} @@ -28,6 +28,8 @@ export class Daemons { const execPath = Daemons._GetCommand(platform, __dirname); + console.trace(`Daemons path is ${execPath}`) + Daemons._Process = spawn( execPath, [], { env: { ...process.env, GUI_APP: '1' }, @@ -36,7 +38,13 @@ export class Daemons { } ); + console.trace(`Process is:`); + console.dir(Daemons._Process); + + Daemons._Process.stdout.on("data", (data) => { + console.log(`DAEMONS LOG: ${data.toString()}`) + this.stdoutBuffer += data.toString(); if (this.stdoutBuffer.length > Daemons.BUFFER_SIZE) { @@ -46,6 +54,8 @@ export class Daemons { }); Daemons._Process.stderr.on("data", (data) => { + console.error(`DAEMONS LOG: ${data.toString()}`) + this.stderrBuffer += data.toString(); if (this.stderrBuffer.length > Daemons.BUFFER_SIZE) { @@ -71,10 +81,13 @@ export class Daemons { return r; } - static _GetCommand(platform, __dirname) { + static _GetPath(platform, __dirname) { const baseDir = app.isPackaged ? process.resourcesPath : path.join(__dirname, '..'); - const daemonsPath = path.join(baseDir, 'electros-daemons', platform.os, platform.arch); + return path.join(baseDir, 'electros-daemons', platform.os, platform.arch); + } + static _GetCommand(platform, __dirname) { + const daemonsPath = Daemons._GetPath(platform, __dirname); let daemonsCmd = ''; if (platform.isMac()) { diff --git a/electros-electron/common/package.json b/electros-electron/common/package.json new file mode 100644 index 0000000..aead43d --- /dev/null +++ b/electros-electron/common/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} \ No newline at end of file diff --git a/electros-electron/main.js b/electros-electron/main.js index 6d6ae50..ee6077e 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -15,6 +15,7 @@ const { Platform } = require("./common/Platform"); const { Daemons } = require("./common/Daemons"); const { Terminal } = require("./windows/Terminal"); const { RdpWindow } = require("./windows/Rdp.js"); +const {DaemonsNotEnabledError} = require("./common/Daemons.js"); let mainWindow = null; @@ -326,9 +327,9 @@ app.whenReady().then(() => { }); app.on('window-all-closed', () => { - if (process.platform !== 'mac') { - app.quit(); - } + // if (process.platform !== 'mac') { + app.quit(); + // } }); app.on('activate', () => { diff --git a/electros-electron/windows/package.json b/electros-electron/windows/package.json new file mode 100644 index 0000000..aead43d --- /dev/null +++ b/electros-electron/windows/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} \ No newline at end of file From efdc62c38cad28605569a3610ceb571cf0750d43 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 16 Jan 2026 13:21:48 +0100 Subject: [PATCH 064/109] Modified Daemon Population Script The filename is forcefully converted to lowercase in all cases to avoid potential issues with Electros loading the correct path --- populate_daemons.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/populate_daemons.sh b/populate_daemons.sh index e41ee79..67fd767 100755 --- a/populate_daemons.sh +++ b/populate_daemons.sh @@ -122,7 +122,7 @@ get_release_assets() { # Function to download a single asset download_asset() { local asset_id="$1" - local filename="$2" + local filename="$(echo "$2" | tr '[:upper:]' '[:lower:]')" local target_dir="$3" local repo="Elemento-Modular-Cloud/elemento-monorepo-client" From 112da65c89322a47b148bc315c40b90e4f415a94 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 16 Jan 2026 13:46:12 +0100 Subject: [PATCH 065/109] Modified close event On a main window close event; the app will terminate --- electros-electron/common/Daemons.js | 6 ------ electros-electron/main.js | 6 +----- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js index db1f82b..1fc7600 100644 --- a/electros-electron/common/Daemons.js +++ b/electros-electron/common/Daemons.js @@ -28,8 +28,6 @@ export class Daemons { const execPath = Daemons._GetCommand(platform, __dirname); - console.trace(`Daemons path is ${execPath}`) - Daemons._Process = spawn( execPath, [], { env: { ...process.env, GUI_APP: '1' }, @@ -38,10 +36,6 @@ export class Daemons { } ); - console.trace(`Process is:`); - console.dir(Daemons._Process); - - Daemons._Process.stdout.on("data", (data) => { console.log(`DAEMONS LOG: ${data.toString()}`) diff --git a/electros-electron/main.js b/electros-electron/main.js index ee6077e..7693022 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -114,9 +114,7 @@ function createWindows() { mainWindow = createMainWindow(); mainWindow.on('closed', () => { - if (terminalWindow) { - terminalWindow.hide(); - } + app.quit(); }); // Register a local shortcut for the main window @@ -327,9 +325,7 @@ app.whenReady().then(() => { }); app.on('window-all-closed', () => { - // if (process.platform !== 'mac') { app.quit(); - // } }); app.on('activate', () => { From a3769d716ada7f059ab3de3f228af091c9d49653 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 16 Jan 2026 16:38:09 +0100 Subject: [PATCH 066/109] Added catcher for Alt+F4 on Win/Linux with focus checker --- electros-electron/main.js | 21 +++++++++++++++++++++ electros-electron/windows/Terminal.js | 1 - 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/electros-electron/main.js b/electros-electron/main.js index 7693022..b2a09c6 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -129,6 +129,27 @@ function setupWindowShortcuts(window) { // Keep track of registered shortcuts for this window const shortcuts = []; + if (shortcuts.length === 0) { + let quitShortcut = false; + + window.on('focus', () => { + if (platform.isMac()) { + } else { + if (!quitShortcut) { + globalShortcut.register('Alt+F4', () => { + Daemons.Terminate(); + app.quit(); + }); + quitShortcut = true; + } + } + }); + + window.on('blur', () => { + globalShortcut.unregister('Alt+F4'); + }) + } + // When window is focused, set up its shortcuts window.on('focus', () => { // Only register if not already registered diff --git a/electros-electron/windows/Terminal.js b/electros-electron/windows/Terminal.js index ae2397c..9b2ef57 100644 --- a/electros-electron/windows/Terminal.js +++ b/electros-electron/windows/Terminal.js @@ -6,7 +6,6 @@ import {TrayIcon} from "../common/TrayIcon.js"; export class Terminal { static _Window = null; static _Tray = null; - static _DaemonsProc = null; static CreateWindow(PreloadedContent, platform, __dirname) { if (this._Window) { From 46781329b934afed39f6299d6c435becc2ed9753 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 16 Jan 2026 17:28:15 +0100 Subject: [PATCH 067/109] Fixed wrong kill order for windows and daemons --- electros-electron/common/Daemons.js | 4 +- electros-electron/main.js | 152 ++++++++++------------------ 2 files changed, 58 insertions(+), 98 deletions(-) diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js index 1fc7600..4eb5bde 100644 --- a/electros-electron/common/Daemons.js +++ b/electros-electron/common/Daemons.js @@ -63,9 +63,9 @@ export class Daemons { }); } - static Terminate() { + static Terminate(platform = null) { let r = true; - if (Daemons._Process) { + if (Daemons._Process !== null) { if (!Daemons._Process.killed) { r = Daemons._Process.kill(); } diff --git a/electros-electron/main.js b/electros-electron/main.js index b2a09c6..773d5b5 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -1,20 +1,20 @@ -const { app, BrowserWindow, ipcMain, Menu, nativeTheme , shell } = require('electron'); +const {app, BrowserWindow, ipcMain, Menu, nativeTheme, shell} = require('electron'); const path = require('path'); -const { spawn } = require('child_process'); +const {spawn} = require('child_process'); const net = require('net'); -const { globalShortcut } = require('electron'); +const {globalShortcut} = require('electron'); // Import handlers from separate files. They are apparently unused since called by name in the preload.js const configHandlers = require('./js/config-ipc'); const titlebarHandlers = require('./js/titlebar-ipc'); -const { Loaders } = require("./common/Loaders"); -const { WindowOptions } = require("./common/WindowOptions"); -const { BuildMenuTemplate } = require("./common/MenuBar"); -const { PortHandler } = require("./common/PortHandler"); -const { Platform } = require("./common/Platform"); -const { Daemons } = require("./common/Daemons"); -const { Terminal } = require("./windows/Terminal"); -const { RdpWindow } = require("./windows/Rdp.js"); +const {Loaders} = require("./common/Loaders"); +const {WindowOptions} = require("./common/WindowOptions"); +const {BuildMenuTemplate} = require("./common/MenuBar"); +const {PortHandler} = require("./common/PortHandler"); +const {Platform} = require("./common/Platform"); +const {Daemons} = require("./common/Daemons"); +const {Terminal} = require("./windows/Terminal"); +const {RdpWindow} = require("./windows/Rdp.js"); const {DaemonsNotEnabledError} = require("./common/Daemons.js"); @@ -54,10 +54,12 @@ function createMainWindow() { try { // Ensure titlebarCustomJS is a string and properly escaped const safeJS = typeof PreloadedContent.Js.Titlebar === 'string' - ? PreloadedContent.Js.Titlebar + ? PreloadedContent.Js.Titlebar : JSON.stringify(PreloadedContent.Js.Titlebar); - win.webContents.executeJavaScript(safeJS).catch(err => { throw err; }); + win.webContents.executeJavaScript(safeJS).catch(err => { + throw err; + }); } catch (error) { console.error('Error injecting titlebar:', error); } @@ -118,76 +120,35 @@ function createWindows() { }); // Register a local shortcut for the main window - setupWindowShortcuts(mainWindow); + setupWindowShortcuts(); } catch (error) { console.error('Error creating windows:', error); } } // Add this function to set up window-specific shortcuts -function setupWindowShortcuts(window) { - // Keep track of registered shortcuts for this window - const shortcuts = []; - - if (shortcuts.length === 0) { - let quitShortcut = false; - - window.on('focus', () => { - if (platform.isMac()) { - } else { - if (!quitShortcut) { - globalShortcut.register('Alt+F4', () => { - Daemons.Terminate(); - app.quit(); - }); - quitShortcut = true; - } - } - }); - - window.on('blur', () => { - globalShortcut.unregister('Alt+F4'); - }) - } +function setupWindowShortcuts() { + let quitShortcut = false; - // When window is focused, set up its shortcuts window.on('focus', () => { - // Only register if not already registered - if (shortcuts.length === 0) { - // For Windows/Linux: Alt+F4 closes current window instead of app -// const altF4Registered = globalShortcut.register('Alt+F4', () => { -// const focusedWindow = BrowserWindow.getFocusedWindow(); -// if (focusedWindow) { -// focusedWindow.close(); -// return true; // Prevent default behavior -// } -// // For main window, let the default Alt+F4 behavior happen -// return false; -// }); -// if (altF4Registered) { -// shortcuts.push('Alt+F4'); -// } - - // For macOS: Cmd+Q closes current window if it's not main - // const cmdQRegistered = globalShortcut.register('Command+Q', () => { - // const focusedWindow = BrowserWindow.getFocusedWindow(); - // if (focusedWindow) { - // focusedWindow.close(); - // return true; // Prevent default quit - // } - // // Let the default Cmd+Q behavior happen for main window - // return false; - // }); - // if (cmdQRegistered) { - // shortcuts.push('Command+Q'); - // } + if (platform.isMac()) { + } else { + if (!quitShortcut) { + globalShortcut.register('Alt+F4', () => { + Daemons.Terminate(platform); + app.quit(); + }); + quitShortcut = true; + } } }); - // Clean up when window is closed + window.on('blur', () => { + globalShortcut.unregister('Alt+F4'); + }); + window.on('closed', () => { - shortcuts.forEach(shortcut => globalShortcut.unregister(shortcut)); - shortcuts.length = 0; // Clear the array + globalShortcut.unregister('Alt+F4'); }); } @@ -213,9 +174,6 @@ ipcMain.handle('create-popup', async (event, options = {}) => { ...options }); - // Set up window-specific shortcuts for this popup - setupWindowShortcuts(popup); - if (options.title) { popup.setTitle(options.title); popup.webContents.on('page-title-updated', (event) => { @@ -269,10 +227,10 @@ app.on('before-quit', () => { console.log('Quitting app, killing processes'); // Clean up flush interval - // // if (flushInterval) { - // // clearInterval(flushInterval); - // // flushInterval = null; - // // } + // if (flushInterval) { + // clearInterval(flushInterval); + // flushInterval = null; + // } // // // Flush any remaining buffers // if (stdoutBuffer && terminalWindow && !terminalWindow.isDestroyed()) { @@ -285,24 +243,29 @@ app.on('before-quit', () => { // } // Close all windows except terminal - const windows = BrowserWindow.getAllWindows(); - windows.forEach(window => { - // Clean up any mstsc processes - if (window.webContents.mstscProcess) { - Rdp.handleCloseRdpProcess(window.webContents); - } + try { + const windows = BrowserWindow.getAllWindows(); + windows.forEach(window => { + // Clean up any mstsc processes + if (window.webContents.mstscProcess) { + Rdp.handleCloseRdpProcess(window.webContents); + } - if (window !== terminalWindow && !window.isDestroyed()) { - window.destroy(); - } - }); + if (window !== terminalWindow && !window.isDestroyed()) { + window.destroy(); + } + }); - Terminal.DestroyWindow(); - Daemons.Terminate(); + Terminal.DestroyWindow(); + } catch (error) { + console.error(error); + } + + Daemons.Terminate(platform); }); // Add this IPC handler before app.whenReady() -ipcMain.handle('check-port', async (event, { ip, port }) => { +ipcMain.handle('check-port', async (event, {ip, port}) => { return new Promise((resolve) => { const socket = new net.Socket(); @@ -372,10 +335,10 @@ ipcMain.handle('os-prefers-dark-theme', (event) => { }); ipcMain.handle('os-prefers-reduced-transparency', (event) => { - return nativeTheme?.prefersReducedTransparency ?? false; + return nativeTheme?.prefersReducedTransparency ?? false; }); -ipcMain.handle('open-browser', async (event, { url }) => { +ipcMain.handle('open-browser', async (event, {url}) => { await shell.openExternal(url); }); @@ -423,9 +386,6 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { sshWindow.webContents.executeJavaScript(sshTitlebarJS); }); - // Set up window-specific shortcuts - setupWindowShortcuts(sshWindow); - // Add connection cleanup on window close sshWindow.on('close', async (event) => { try { From b4b6c40bbeb75aec584ab3aa073ae3ea4f7e3df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriele=20Fronz=C3=A9?= Date: Fri, 16 Jan 2026 19:17:51 +0100 Subject: [PATCH 068/109] Adds script to start ElectrOS Electron app Introduces a bash script to automate the setup and execution of the ElectrOS Electron application. This script handles checking for Node.js and npm, installing dependencies, and starting the application, ensuring a consistent and easy startup process. --- electros-electron/start-venv.sh | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 electros-electron/start-venv.sh diff --git a/electros-electron/start-venv.sh b/electros-electron/start-venv.sh new file mode 100755 index 0000000..fef3819 --- /dev/null +++ b/electros-electron/start-venv.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# Script to start electros-electron app with dependencies + +set -e # Exit on error + +# Get the directory where this script is located (handles symlinks) +SCRIPT_PATH="${BASH_SOURCE[0]}" +while [ -L "$SCRIPT_PATH" ]; do + SCRIPT_DIR="$(cd -P "$(dirname "$SCRIPT_PATH")" && pwd)" + SCRIPT_PATH="$(readlink "$SCRIPT_PATH")" + [[ $SCRIPT_PATH != /* ]] && SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT_PATH" +done +SCRIPT_DIR="$(cd -P "$(dirname "$SCRIPT_PATH")" && pwd)" +cd "$SCRIPT_DIR" + +echo "==========================================" +echo "ElectrOS Electron App - Setup & Start" +echo "==========================================" + +# Check if Node.js is available +if ! command -v node &> /dev/null; then + echo "Error: Node.js is not installed or not in PATH" + echo "Please install Node.js from https://nodejs.org/" + exit 1 +fi + +# Check if npm is available +if ! command -v npm &> /dev/null; then + echo "Error: npm is not installed or not in PATH" + echo "Please install npm (usually comes with Node.js)" + exit 1 +fi + +echo "Node.js version: $(node --version)" +echo "npm version: $(npm --version)" +echo "" + +# Check if package.json exists +if [ ! -f "package.json" ]; then + echo "Error: package.json not found" + exit 1 +fi + +# Install dependencies if node_modules doesn't exist or package.json is newer +if [ ! -d "node_modules" ] || [ "package.json" -nt "node_modules" ]; then + echo "Installing npm dependencies..." + npm install + echo "Dependencies installed" +else + echo "Dependencies already installed" +fi + +echo "" +echo "==========================================" +echo "Starting ElectrOS Electron App..." +echo "==========================================" +echo "" + +# Start the electron app +npm run start From 77c4573836bc7bf93c8f600dcdd935616dea17d4 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 19 Jan 2026 11:15:39 +0100 Subject: [PATCH 069/109] GUI Updated for test build --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 0b6bff2..109e852 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 0b6bff27bd15c47ab81c1468795ab3faa70bdcbb +Subproject commit 109e8529f5677a91760834926015f9b3658ad51e From bf75b003f426877f9bbe3a8b22a0054c96cde6c4 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 19 Jan 2026 12:39:45 +0100 Subject: [PATCH 070/109] GUI Updated for test build for latest v3.1.5 beta --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 109e852..77c0615 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 109e8529f5677a91760834926015f9b3658ad51e +Subproject commit 77c0615a725ef30ca449ef91261205a552e3006c From 05e76623e8ed0dafeb261dd2e5c419baa3ca37bf Mon Sep 17 00:00:00 2001 From: srobaldo Date: Mon, 19 Jan 2026 15:40:21 +0100 Subject: [PATCH 071/109] Improved zoom factors to avoid weird scaling issues --- electros-electron/common/MenuBar.js | 33 +++++++++++++++++++++--- electros-electron/main.js | 8 ++++++ electros-electron/remotes/Ssh.js | 4 +++ electros-electron/terminal/terminal.html | 3 ++- electros-electron/windows/Rdp.js | 2 ++ electros-electron/windows/Terminal.js | 2 ++ 6 files changed, 47 insertions(+), 5 deletions(-) diff --git a/electros-electron/common/MenuBar.js b/electros-electron/common/MenuBar.js index ed0d5f9..2b7b602 100644 --- a/electros-electron/common/MenuBar.js +++ b/electros-electron/common/MenuBar.js @@ -34,9 +34,35 @@ export function BuildMenuTemplate() { { label: 'View', submenu: [ - {role: 'resetZoom', zoomFactor: 1}, - {role: 'zoomIn'}, - {role: 'zoomOut'}, + { + label: 'Actual Size', + accelerator: 'CmdOrCtrl+0', + click: (menuItem, browserWindow) => { + if (browserWindow) { + browserWindow.webContents.setZoomFactor(1); + } + } + }, + { + label: 'Zoom In', + accelerator: 'CmdOrCtrl+=', + click: (menuItem, browserWindow) => { + if (browserWindow) { + const currentZoom = browserWindow.webContents.getZoomFactor(); + browserWindow.webContents.setZoomFactor(currentZoom + 0.1); + } + } + }, + { + label: 'Zoom Out', + accelerator: 'CmdOrCtrl+-', + click: (menuItem, browserWindow) => { + if (browserWindow) { + const currentZoom = browserWindow.webContents.getZoomFactor(); + browserWindow.webContents.setZoomFactor(Math.max(0.1, currentZoom - 0.1)); + } + } + }, {type: 'separator'}, {role: 'togglefullscreen'} ] @@ -74,7 +100,6 @@ export function BuildMenuTemplate() { }, {label: 'Toggle DevTools', role: 'toggleDevTools'}, {label: 'Toggle Fullscreen', role: 'toggleFullScreen'}, - {label: 'Toggle Zoom', role: 'toggleZoom'}, ] }) } diff --git a/electros-electron/main.js b/electros-electron/main.js index 773d5b5..63259d1 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -1,4 +1,6 @@ const {app, BrowserWindow, ipcMain, Menu, nativeTheme, shell} = require('electron'); + +app.commandLine.appendSwitch('disable-zoom-level-persistence'); const path = require('path'); const {spawn} = require('child_process'); const net = require('net'); @@ -65,6 +67,8 @@ function createMainWindow() { } }); + win.webContents.setVisualZoomLevelLimits(1, 1); + return win; } @@ -88,6 +92,8 @@ function createTerminalWindow() { title: 'Electros Daemons' }); + terminalWindow.webContents.setVisualZoomLevelLimits(1, 1); + terminalWindow.loadFile('terminal/terminal.html'); // Wait for the terminal window to be ready @@ -174,6 +180,8 @@ ipcMain.handle('create-popup', async (event, options = {}) => { ...options }); + popup.webContents.setVisualZoomLevelLimits(1, 1); + if (options.title) { popup.setTitle(options.title); popup.webContents.on('page-title-updated', (event) => { diff --git a/electros-electron/remotes/Ssh.js b/electros-electron/remotes/Ssh.js index b69ef34..038af38 100644 --- a/electros-electron/remotes/Ssh.js +++ b/electros-electron/remotes/Ssh.js @@ -30,6 +30,8 @@ class SshWindow { experimentalFeatures: false } }); + + sshWindow.webContents.setVisualZoomLevelLimits(1, 1); } _setupSsh() { @@ -67,6 +69,8 @@ ipcMain.handle('open-ssh', async (event, connectionDetails) => { } }); + sshWindow.webContents.setVisualZoomLevelLimits(1, 1); + let ssh_port = undefined; try { diff --git a/electros-electron/terminal/terminal.html b/electros-electron/terminal/terminal.html index 5ba53a7..d834a98 100644 --- a/electros-electron/terminal/terminal.html +++ b/electros-electron/terminal/terminal.html @@ -1,5 +1,5 @@ - + @@ -21,6 +21,7 @@ } + Electros Daemons
diff --git a/electros-electron/windows/Rdp.js b/electros-electron/windows/Rdp.js index 74b4080..bdcbfee 100644 --- a/electros-electron/windows/Rdp.js +++ b/electros-electron/windows/Rdp.js @@ -210,6 +210,8 @@ export class RdpWindow { experimentalFeatures: false } }); + + this._window.webContents.setVisualZoomLevelLimits(1, 1); } _setupWindowEvents(connectionDetails) { diff --git a/electros-electron/windows/Terminal.js b/electros-electron/windows/Terminal.js index 9b2ef57..e55e7b2 100644 --- a/electros-electron/windows/Terminal.js +++ b/electros-electron/windows/Terminal.js @@ -32,6 +32,8 @@ export class Terminal { title: "Electros Daemons" }); + Terminal._Window.webContents.setVisualZoomLevelLimits(1, 1); + Terminal._Window.loadFile("terminal/terminal.html"); Terminal._Window.webContents.on("did-finish-load", () => { From 732ba308031f9055cd6a334acb7379a9fedd81a6 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 20 Jan 2026 12:00:42 +0100 Subject: [PATCH 072/109] Fixed Terminal visisbility --- electros-electron/common/MenuBar.js | 2 +- electros-electron/common/TrayIcon.js | 23 ++++++++--------------- electros-electron/windows/Terminal.js | 14 +++++++++++--- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/electros-electron/common/MenuBar.js b/electros-electron/common/MenuBar.js index 2b7b602..688e287 100644 --- a/electros-electron/common/MenuBar.js +++ b/electros-electron/common/MenuBar.js @@ -11,7 +11,7 @@ export function BuildMenuTemplate() { {role: 'quit'}, {label: 'Reload', role: 'reload'}, { - label: 'Toggle Terminal', + label: 'Open Terminal', accelerator: 'CmdOrCtrl+T', click: () => { Terminal.ToggleVisibility(); } } diff --git a/electros-electron/common/TrayIcon.js b/electros-electron/common/TrayIcon.js index f126ecc..0bb4758 100644 --- a/electros-electron/common/TrayIcon.js +++ b/electros-electron/common/TrayIcon.js @@ -9,12 +9,11 @@ export class TrayIcon { /** * - * @param {BrowserWindow} terminalWindow * @param {Platform} platform * @param {string} __dirname * @return {TrayIcon} */ - constructor(terminalWindow, platform, __dirname) { + constructor(platform, __dirname) { this._tray = new Tray(this._getIcon(platform, __dirname)); nativeTheme.on('updated', () => { @@ -22,44 +21,38 @@ export class TrayIcon { }); this._tray.setToolTip('Electros Daemons'); - this._tray.setContextMenu(this._getMenu(terminalWindow)); + this._tray.setContextMenu(this._getMenu()); } _getIcon(platform, __dirname) { const isLight = nativeTheme.shouldUseDarkColors; console.log(`The theme is light: ${isLight}`); - if (platform.os === 'mac') { + if (platform.isMac()) { const templateIcon = path.join(__dirname, 'electros.iconset', 'tray_icon_black_32x32@2x.png'); const icon = nativeImage.createFromPath(templateIcon); icon.setTemplateImage(true); return icon; } - if (platform.os === 'win') { + if (platform.isWin()) { const iconName = path.join(__dirname, 'electros.iconset', 'tray_icon.ico'); return nativeImage.createFromPath(iconName); } - if (platform.os === 'linux') { + if (platform.isLinux()) { const iconName = path.join(__dirname, 'electros.iconset', 'tray_icon.png'); const icon = nativeImage.createFromPath(iconName); return icon; } } - _getMenu(terminalWindow) { + _getMenu() { return Menu.buildFromTemplate([ { - label: 'Show Terminal', + label: 'Toggle Terminal', click: () => { - terminalWindow.show(); - } - }, - { - label: 'Hide Terminal', - click: () => { - terminalWindow.hide(); + Terminal.ToggleVisibility(); } }, { type: 'separator' }, diff --git a/electros-electron/windows/Terminal.js b/electros-electron/windows/Terminal.js index e55e7b2..2c71704 100644 --- a/electros-electron/windows/Terminal.js +++ b/electros-electron/windows/Terminal.js @@ -48,7 +48,7 @@ export class Terminal { // Terminal._Window.webContents.executeJavaScript(popupTitlebarJS); }); - Terminal._Tray = new TrayIcon(Terminal._Window, platform, __dirname); + Terminal._Tray = new TrayIcon(platform, __dirname); Terminal._Window.on('close', (e) => { e.preventDefault(); @@ -72,13 +72,21 @@ export class Terminal { isVisible = Terminal._Window.isVisible(); } + console.trace(`Terminal Window has ${isVisible} visibility`); + if (isVisible) { - Terminal._Window.show(); - } else { Terminal._Window.hide(); + } else { + Terminal._Window.show(); } } + static GetVisibility() { + if (Terminal._Window === null) { return false; } + + return Terminal._Window.isVisible(); + } + static DestroyWindow() { if (Terminal._Window === null) { return; } From 0e192d2a1eb82b9ea188289c8a0fe5cbe152f77f Mon Sep 17 00:00:00 2001 From: srobaldo Date: Tue, 20 Jan 2026 12:37:54 +0100 Subject: [PATCH 073/109] Fixed terminal titlebar --- electros-electron/main.js | 5 +- electros-electron/terminal/terminal.html | 86 +++++++++++++----------- electros-electron/titlebar/titlebar.js | 4 +- electros-electron/windows/Terminal.js | 14 ---- 4 files changed, 50 insertions(+), 59 deletions(-) diff --git a/electros-electron/main.js b/electros-electron/main.js index 63259d1..f31fd5f 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -125,15 +125,14 @@ function createWindows() { app.quit(); }); - // Register a local shortcut for the main window - setupWindowShortcuts(); + setupWindowShortcuts(mainWindow); } catch (error) { console.error('Error creating windows:', error); } } // Add this function to set up window-specific shortcuts -function setupWindowShortcuts() { +function setupWindowShortcuts(window) { let quitShortcut = false; window.on('focus', () => { diff --git a/electros-electron/terminal/terminal.html b/electros-electron/terminal/terminal.html index d834a98..58caaed 100644 --- a/electros-electron/terminal/terminal.html +++ b/electros-electron/terminal/terminal.html @@ -29,46 +29,62 @@ - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - \ No newline at end of file diff --git a/electros-ultralight/archive/browser/assets/ui.js b/electros-ultralight/archive/browser/assets/ui.js deleted file mode 100644 index fa77f8e..0000000 --- a/electros-ultralight/archive/browser/assets/ui.js +++ /dev/null @@ -1,27 +0,0 @@ -function updateBack(enable) { - if (enable) - document.getElementById("back").classList.remove("disabled"); - else - document.getElementById("back").classList.add("disabled"); -} - -function updateForward(enable) { - if (enable) - document.getElementById("forward").classList.remove("disabled"); - else - document.getElementById("forward").classList.add("disabled"); -} - -function updateLoading(is_loading) { - if (is_loading) { - document.getElementById("refresh").style.display = "none"; - document.getElementById("stop").style.display = "inline-block"; - } else { - document.getElementById("refresh").style.display = "inline-block"; - document.getElementById("stop").style.display = "none"; - } -} - -function updateURL(url) { - document.getElementById('address').value = url; -} \ No newline at end of file diff --git a/electros-ultralight/archive/browser/cmake/Electros.cmake b/electros-ultralight/archive/browser/cmake/Electros.cmake deleted file mode 100644 index 2bf6dbb..0000000 --- a/electros-ultralight/archive/browser/cmake/Electros.cmake +++ /dev/null @@ -1,122 +0,0 @@ -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -include(${CMAKE_ROOT}/Modules/ExternalProject.cmake) - -set(SDK_ROOT "${CMAKE_BINARY_DIR}/SDK/") -set(ULTRALIGHT_INCLUDE_DIR "${SDK_ROOT}/include") -set(ULTRALIGHT_BINARY_DIR "${SDK_ROOT}/bin") -set(ULTRALIGHT_RESOURCES_DIR "${SDK_ROOT}/resources") -set(ULTRALIGHT_INSPECTOR_DIR "${SDK_ROOT}/inspector") - -if (NOT PLATFORM) - if (UNIX) - if (APPLE) - set(PORT UltralightMac) - set(PLATFORM "mac") - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/bin") - else () - set(PORT UltralightLinux) - set(PLATFORM "linux") - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/bin") - endif () - elseif (CMAKE_SYSTEM_NAME MATCHES "Windows") - set(PORT UltralightWin) - set(PLATFORM "win") - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/lib") - else () - message(FATAL_ERROR "Unknown OS '${CMAKE_SYSTEM_NAME}'") - endif () -else () - if (PLATFORM MATCHES "mac") - set(PORT UltralightMac) - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/bin") - elseif (PLATFORM MATCHES "linux") - set(PORT UltralightLinux) - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/bin") - elseif (PLATFORM MATCHES "win") - set(PORT UltralightWin) - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/lib") - else () - message(FATAL_ERROR "Unknown platform '${PLATFORM}'") - endif () -endif () - -if (NOT ARCHITECTURE) - set(ARCHITECTURE "arm64") -endif() - -if(NOT VERSION) - set(VERSION "1.4.0b") -endif() - -if(NOT BASE_URL) - set(BASE_URL "ultralight-files.sfo3.cdn.digitaloceanspaces.com") -endif() - -ExternalProject_Add(UltralightSDK - URL https://${BASE_URL}/ultralight-sdk-${VERSION}-${PLATFORM}-${ARCHITECTURE}.7z - SOURCE_DIR "${SDK_ROOT}" - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" -) - -MACRO(ADD_APP source_list) - set(APP_NAME ${CMAKE_PROJECT_NAME}) - - include_directories("${ULTRALIGHT_INCLUDE_DIR}") - link_directories("${ULTRALIGHT_LIBRARY_DIR}") - link_libraries(UltralightCore AppCore Ultralight WebCore) - - if (PORT MATCHES "UltralightLinux") - SET(CMAKE_SKIP_BUILD_RPATH FALSE) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) - SET(CMAKE_INSTALL_RPATH "$\{ORIGIN\}") - endif () - - if (PORT MATCHES "UltralightMac") - SET(CMAKE_SKIP_BUILD_RPATH FALSE) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) - SET(CMAKE_INSTALL_RPATH "@executable_path/") - endif () - - add_executable(${APP_NAME} WIN32 MACOSX_BUNDLE ${source_list}) - - if (APPLE) - # Enable High-DPI on macOS through our custom Info.plist template - set_target_properties(${APP_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Info.plist.in) - endif() - - if (MSVC) - # Tell MSVC to use main instead of WinMain for Windows subsystem executables - set_target_properties(${APP_NAME} PROPERTIES LINK_FLAGS "/ENTRY:mainCRTStartup") - endif() - - # Copy all binaries to target directory - add_custom_command(TARGET ${APP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${ULTRALIGHT_BINARY_DIR}" $) - - # Set the assets path to "/assets" or "/../Resources/assets" on macOS - if (APPLE) - set(ASSETS_PATH "$/../Resources/assets") - else () - set(ASSETS_PATH "$/assets") - endif () - - # Copy assets to assets path - add_custom_command(TARGET ${APP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/assets/" "${ASSETS_PATH}") - - if(${ENABLE_INSPECTOR}) - # Copy inspector to assets directory - add_custom_command(TARGET ${APP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${ULTRALIGHT_INSPECTOR_DIR}" "${ASSETS_PATH}/inspector") - endif () - - # Copy resources to assets directory - add_custom_command(TARGET ${APP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${ULTRALIGHT_RESOURCES_DIR}" "${ASSETS_PATH}/resources") - - add_dependencies(${APP_NAME} UltralightSDK) -ENDMACRO() \ No newline at end of file diff --git a/electros-ultralight/archive/browser/cmake/Info.plist.in b/electros-ultralight/archive/browser/cmake/Info.plist.in deleted file mode 100644 index b782d3b..0000000 --- a/electros-ultralight/archive/browser/cmake/Info.plist.in +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${MACOSX_BUNDLE_EXECUTABLE_NAME} - CFBundleGetInfoString - ${MACOSX_BUNDLE_INFO_STRING} - CFBundleIconFile - ${MACOSX_BUNDLE_ICON_FILE} - CFBundleIdentifier - ${MACOSX_BUNDLE_GUI_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleLongVersionString - ${MACOSX_BUNDLE_LONG_VERSION_STRING} - CFBundleName - ${MACOSX_BUNDLE_BUNDLE_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - ${MACOSX_BUNDLE_SHORT_VERSION_STRING} - CFBundleSignature - ???? - CFBundleVersion - ${MACOSX_BUNDLE_BUNDLE_VERSION} - CSResourcesFileMapped - - NSHumanReadableCopyright - ${MACOSX_BUNDLE_COPYRIGHT} - NSHighResolutionCapable - true - - diff --git a/electros-ultralight/archive/browser/src/Browser.cpp b/electros-ultralight/archive/browser/src/Browser.cpp deleted file mode 100644 index bc7069c..0000000 --- a/electros-ultralight/archive/browser/src/Browser.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "Browser.h" -#include -#include -#include - -Browser::Browser() { - Settings settings; - Config config; - config.scroll_timer_delay = 1.0 / 90.0; - app_ = App::Create(settings, config); - - window_ = Window::Create(app_->main_monitor(), 1800, 1200, false, - kWindowFlags_Resizable | kWindowFlags_Titled | kWindowFlags_Maximizable); - window_->SetTitle("Elemento Electros"); - - // Create the UI - ui_.reset(new UI(window_)); - window_->set_listener(ui_.get()); -} - -Browser::~Browser() { - window_->set_listener(nullptr); - - ui_.reset(); - - window_ = nullptr; - app_ = nullptr; -} - -void Browser::Run() { - app_->Run(); -} diff --git a/electros-ultralight/archive/browser/src/Browser.h b/electros-ultralight/archive/browser/src/Browser.h deleted file mode 100644 index 8b23e14..0000000 --- a/electros-ultralight/archive/browser/src/Browser.h +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "UI.h" - -using namespace ultralight; - -class Browser { -public: - Browser(); - virtual ~Browser(); - - virtual void Run(); - -protected: - RefPtr app_; - RefPtr window_; - std::unique_ptr ui_; -}; diff --git a/electros-ultralight/archive/browser/src/Tab.cpp b/electros-ultralight/archive/browser/src/Tab.cpp deleted file mode 100644 index 2a3c8f7..0000000 --- a/electros-ultralight/archive/browser/src/Tab.cpp +++ /dev/null @@ -1,181 +0,0 @@ -#include "Tab.h" -#include "UI.h" -#include -#include - -#define INSPECTOR_DRAG_HANDLE_HEIGHT 10 - -Tab::Tab(UI* ui, uint64_t id, uint32_t width, uint32_t height, int x, int y) - : ui_(ui), id_(id), container_width_(width), container_height_(height) { - overlay_ = Overlay::Create(ui->window_, width, height, x, y); - view()->set_view_listener(this); - view()->set_load_listener(this); -} - -Tab::~Tab() { - view()->set_view_listener(nullptr); - view()->set_load_listener(nullptr); -} - -void Tab::Show() { - overlay_->Show(); - overlay_->Focus(); - - if (inspector_overlay_) - inspector_overlay_->Show(); -} - -void Tab::Hide() { - overlay_->Hide(); - overlay_->Unfocus(); - - if (inspector_overlay_) - inspector_overlay_->Hide(); -} - -void Tab::ToggleInspector() { - if (!inspector_overlay_) { - view()->CreateLocalInspectorView(); - } else { - if (inspector_overlay_->is_hidden()) { - inspector_overlay_->Show(); - } else { - inspector_overlay_->Hide(); - } - } - - // Force resize to update layout -} - - -bool Tab::IsInspectorShowing() const { - if (!inspector_overlay_) - return false; - - return !inspector_overlay_->is_hidden(); -} - -IntRect Tab::GetInspectorResizeDragHandle() const { - if (!IsInspectorShowing()) - return IntRect::MakeEmpty(); - - int drag_handle_height_px = (uint32_t)std::round(INSPECTOR_DRAG_HANDLE_HEIGHT * ui_->window()->scale()); - - // This drag handle should span the width of the UI and be centered vertically at the boundary between - // the page overlay and inspector overlay. - - int drag_handle_x = (int)inspector_overlay_->x(); - int drag_handle_y = (int)inspector_overlay_->y() - drag_handle_height_px / 2; - - return { drag_handle_x, drag_handle_y, drag_handle_x + (int)inspector_overlay_->width(), - drag_handle_y + drag_handle_height_px }; -} - -int Tab::GetInspectorHeight() const { - if (inspector_overlay_) - return inspector_overlay_->height(); - - return 0; -} - -void Tab::SetInspectorHeight(int height) { - if (height > 2) { - inspector_overlay_->Resize(inspector_overlay_->width(), height); - - // Trigger a resize to perform re-layout / re-size of content overlay - Resize(container_width_, container_height_); - } -} - -void Tab::Resize(uint32_t width, uint32_t height) { - container_width_ = width; - container_height_ = height; - - uint32_t content_height = container_height_; - if (inspector_overlay_ && !inspector_overlay_->is_hidden()) { - content_height -= inspector_overlay_->height(); - } - - if (content_height < 1) - content_height = 1; - - overlay_->Resize(container_width_, content_height); - - if (inspector_overlay_ && !inspector_overlay_->is_hidden()) { - inspector_overlay_->MoveTo(0, overlay_->y() + overlay_->height()); - inspector_overlay_->Resize(container_width_, inspector_overlay_->height()); - } -} - -void Tab::OnChangeTitle(View* caller, const String& title) { - ui_->UpdateTabTitle(id_, title); -} - -void Tab::OnChangeURL(View* caller, const String& url) { - ui_->UpdateTabURL(id_, url); -} - -void Tab::OnChangeTooltip(View* caller, const String& tooltip) {} - -void Tab::OnChangeCursor(View* caller, Cursor cursor) { - if (id_ == ui_->active_tab_id_) - ui_->SetCursor(cursor); -} - -void Tab::OnAddConsoleMessage(View* caller, const ConsoleMessage& msg) { -} - -RefPtr Tab::OnCreateChildView(ultralight::View* caller, - const String& opener_url, const String& target_url, - bool is_popup, const IntRect& popup_rect) { - return ui_->CreateNewTabForChildView(target_url); -} - -RefPtr Tab::OnCreateInspectorView(ultralight::View* caller, bool is_local, - const String& inspected_url) { - if (inspector_overlay_) - return nullptr; - - inspector_overlay_ = Overlay::Create(ui_->window_, container_width_, container_height_ / 2, 0, 0); - - // Force resize to update layout - Resize(container_width_, container_height_); - inspector_overlay_->Show(); - - return inspector_overlay_->view(); -} - -void Tab::OnBeginLoading(View* caller, uint64_t frame_id, bool is_main_frame, const String& url) { - ui_->UpdateTabNavigation(id_, caller->is_loading(), caller->CanGoBack(), caller->CanGoForward()); -} - -void Tab::OnFinishLoading(View* caller, uint64_t frame_id, bool is_main_frame, const String& url) { - ui_->UpdateTabNavigation(id_, caller->is_loading(), caller->CanGoBack(), caller->CanGoForward()); -} - -void Tab::OnFailLoading(View* caller, uint64_t frame_id, bool is_main_frame, const String& url, - const String& description, const String& error_domain, int error_code) { - if (is_main_frame) { - char error_code_str[16]; - sprintf(error_code_str,"%d", error_code); - - String html_string = ""; - html_string += "

A Network Error was Encountered

"; - html_string += "
"; - html_string += "
URL
" + url + "
"; - html_string += "
Description
" + description + "
"; - html_string += "
Error Domain
" + error_domain + "
"; - html_string += "
Error Code
" + String(error_code_str) + "
"; - html_string += "
"; - - view()->LoadHTML(html_string); - } -} - -void Tab::OnUpdateHistory(View* caller) { - ui_->UpdateTabNavigation(id_, caller->is_loading(), caller->CanGoBack(), caller->CanGoForward()); -} diff --git a/electros-ultralight/archive/browser/src/Tab.h b/electros-ultralight/archive/browser/src/Tab.h deleted file mode 100644 index 9e4b66c..0000000 --- a/electros-ultralight/archive/browser/src/Tab.h +++ /dev/null @@ -1,67 +0,0 @@ -#pragma once -#include -#include - -class UI; -using namespace ultralight; - -/** -* Browser Tab UI implementation. Renders the actual page content in bottom pane. -*/ -class Tab : public ViewListener, - public LoadListener { -public: - Tab(UI* ui, uint64_t id, uint32_t width, uint32_t height, int x, int y); - ~Tab(); - - void set_ready_to_close(bool ready) { ready_to_close_ = ready; } - bool ready_to_close() { return ready_to_close_; } - - RefPtr view() { return overlay_->view(); } - - void Show(); - - void Hide(); - - void ToggleInspector(); - - bool IsInspectorShowing() const; - - IntRect GetInspectorResizeDragHandle() const; - - int GetInspectorHeight() const; - - void SetInspectorHeight(int height); - - void Resize(uint32_t width, uint32_t height); - - // Inherited from Listener::View - virtual void OnChangeTitle(View* caller, const String& title) override; - virtual void OnChangeURL(View* caller, const String& url) override; - virtual void OnChangeTooltip(View* caller, const String& tooltip) override; - virtual void OnChangeCursor(View* caller, Cursor cursor) override; - virtual void OnAddConsoleMessage(View* caller, const ConsoleMessage& msg) override; - virtual RefPtr OnCreateChildView(ultralight::View* caller, - const String& opener_url, const String& target_url, - bool is_popup, const IntRect& popup_rect) override; - virtual RefPtr OnCreateInspectorView(ultralight::View* caller, bool is_local, - const String& inspected_url) override; - - // Inherited from Listener::Load - virtual void OnBeginLoading(View* caller, uint64_t frame_id, - bool is_main_frame, const String& url) override; - virtual void OnFinishLoading(View* caller, uint64_t frame_id, - bool is_main_frame, const String& url) override; - virtual void OnFailLoading(View* caller, uint64_t frame_id, - bool is_main_frame, const String& url, const String& description, - const String& error_domain, int error_code) override; - virtual void OnUpdateHistory(View* caller) override; - -protected: - UI* ui_; - RefPtr overlay_; - RefPtr inspector_overlay_; - uint64_t id_; - bool ready_to_close_ = false; - uint32_t container_width_, container_height_; -}; diff --git a/electros-ultralight/archive/browser/src/UI.cpp b/electros-ultralight/archive/browser/src/UI.cpp deleted file mode 100644 index 9da970e..0000000 --- a/electros-ultralight/archive/browser/src/UI.cpp +++ /dev/null @@ -1,284 +0,0 @@ -#include "UI.h" - -static UI* g_ui = 0; - -#define UI_HEIGHT 80 - -UI::UI(RefPtr window) : window_(window), cur_cursor_(Cursor::kCursor_Pointer), -is_resizing_inspector_(false), is_over_inspector_resize_drag_handle_(false) { - uint32_t window_width = window_->width(); - ui_height_ = (uint32_t)std::round(UI_HEIGHT * window_->scale()); - overlay_ = Overlay::Create(window_, window_width, ui_height_, 0, 0); - g_ui = this; - - view()->set_load_listener(this); - view()->set_view_listener(this); - view()->LoadURL("file:///ui.html"); -} - -UI::~UI() { - view()->set_load_listener(nullptr); - view()->set_view_listener(nullptr); - g_ui = nullptr; -} - -bool UI::OnKeyEvent(const ultralight::KeyEvent& evt) { - return true; -} - -bool UI::OnMouseEvent(const ultralight::MouseEvent& evt) { - if (active_tab() && active_tab()->IsInspectorShowing()) { - float x_px = std::round(evt.x * window()->scale()); - float y_px = std::round(evt.y * window()->scale()); - - if (is_resizing_inspector_) { - int resize_delta = inspector_resize_begin_mouse_y_ - y_px; - int new_inspector_height = inspector_resize_begin_height_ + resize_delta; - active_tab()->SetInspectorHeight(new_inspector_height); - - if (evt.type == MouseEvent::kType_MouseUp) { - is_resizing_inspector_ = false; - } - - return false; - } - - IntRect drag_handle = active_tab()->GetInspectorResizeDragHandle(); - - bool over_drag_handle = drag_handle.Contains(Point(x_px, y_px)); - - if (over_drag_handle && !is_over_inspector_resize_drag_handle_) { - // We entered the drag area - window()->SetCursor(Cursor::kCursor_NorthSouthResize); - is_over_inspector_resize_drag_handle_ = true; - } else if (!over_drag_handle && is_over_inspector_resize_drag_handle_) { - // We left the drag area, restore previous cursor - window()->SetCursor(cur_cursor_); - is_over_inspector_resize_drag_handle_ = false; - } - - if (over_drag_handle && evt.type == MouseEvent::kType_MouseDown && !is_resizing_inspector_) { - is_resizing_inspector_ = true; - inspector_resize_begin_mouse_y_ = y_px; - inspector_resize_begin_height_ = active_tab()->GetInspectorHeight(); - } - - return !over_drag_handle; - } - - return true; -} - -void UI::OnClose(ultralight::Window* window) { - App::instance()->Quit(); -} - -void UI::OnResize(ultralight::Window* window, uint32_t width, uint32_t height) { - int tab_height = window->height() - ui_height_; - - if (tab_height < 1) - tab_height = 1; - - overlay_->Resize(window->width(), ui_height_); - - for (auto& tab : tabs_) { - if (tab.second) - tab.second->Resize(window->width(), (uint32_t)tab_height); - } -} - -void UI::OnDOMReady(View* caller, uint64_t frame_id, bool is_main_frame, const String& url) { - // Set the context for all subsequent JS* calls - RefPtr locked_context = view()->LockJSContext(); - SetJSContext(locked_context->ctx()); - - JSObject global = JSGlobalObject(); - updateBack = global["updateBack"]; - updateForward = global["updateForward"]; - updateLoading = global["updateLoading"]; - updateURL = global["updateURL"]; - addTab = global["addTab"]; - updateTab = global["updateTab"]; - closeTab = global["closeTab"]; - - global["OnBack"] = BindJSCallback(&UI::OnBack); - global["OnForward"] = BindJSCallback(&UI::OnForward); - global["OnRefresh"] = BindJSCallback(&UI::OnRefresh); - global["OnStop"] = BindJSCallback(&UI::OnStop); - global["OnToggleTools"] = BindJSCallback(&UI::OnToggleTools); - global["OnRequestNewTab"] = BindJSCallback(&UI::OnRequestNewTab); - global["OnRequestTabClose"] = BindJSCallback(&UI::OnRequestTabClose); - global["OnActiveTabChange"] = BindJSCallback(&UI::OnActiveTabChange); - global["OnRequestChangeURL"] = BindJSCallback(&UI::OnRequestChangeURL); - - CreateNewTab(); -} - -void UI::OnBack(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->view()->GoBack(); -} - -void UI::OnForward(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->view()->GoForward(); -} - -void UI::OnRefresh(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->view()->Reload(); -} - -void UI::OnStop(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->view()->Stop(); -} - -void UI::OnToggleTools(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->ToggleInspector(); -} - -void UI::OnRequestNewTab(const JSObject& obj, const JSArgs& args) { - CreateNewTab(); -} - -void UI::OnRequestTabClose(const JSObject& obj, const JSArgs& args) { - if (args.size() == 1) { - uint64_t id = args[0]; - - auto& tab = tabs_[id]; - if (!tab) - return; - - if (tabs_.size() == 1 && App::instance()) - App::instance()->Quit(); - - if (id != active_tab_id_) { - tabs_[id].reset(); - tabs_.erase(id); - } - else { - tab->set_ready_to_close(true); - } - - RefPtr lock(view()->LockJSContext()); - closeTab({ id }); - } -} - -void UI::OnActiveTabChange(const JSObject& obj, const JSArgs& args) { - if (args.size() == 1) { - uint64_t id = args[0]; - - if (id == active_tab_id_) - return; - - auto& tab = tabs_[id]; - if (!tab) - return; - - tabs_[active_tab_id_]->Hide(); - - if (tabs_[active_tab_id_]->ready_to_close()) { - tabs_[active_tab_id_].reset(); - tabs_.erase(active_tab_id_); - } - - active_tab_id_ = id; - tabs_[active_tab_id_]->Show(); - - auto tab_view = tabs_[active_tab_id_]->view(); - SetLoading(tab_view->is_loading()); - SetCanGoBack(tab_view->CanGoBack()); - SetCanGoForward(tab_view->CanGoBack()); - SetURL(tab_view->url()); - } -} - -void UI::OnRequestChangeURL(const JSObject& obj, const JSArgs& args) { - if (args.size() == 1) { - ultralight::String url = args[0]; - - if (!tabs_.empty()) { - auto& tab = tabs_[active_tab_id_]; - tab->view()->LoadURL(url); - } - } -} - -void UI::CreateNewTab() { - uint64_t id = tab_id_counter_++; - RefPtr window = window_; - int tab_height = window->height() - ui_height_; - if (tab_height < 1) - tab_height = 1; - tabs_[id].reset(new Tab(this, id, window->width(), (uint32_t)tab_height, 0, ui_height_)); - tabs_[id]->view()->LoadURL("file:///electros/electros.html"); - - RefPtr lock(view()->LockJSContext()); - addTab({ id, "New Tab", "", tabs_[id]->view()->is_loading() }); -} - -RefPtr UI::CreateNewTabForChildView(const String& url) { - uint64_t id = tab_id_counter_++; - RefPtr window = window_; - int tab_height = window->height() - ui_height_; - if (tab_height < 1) - tab_height = 1; - tabs_[id].reset(new Tab(this, id, window->width(), (uint32_t)tab_height, 0, ui_height_)); - - RefPtr lock(view()->LockJSContext()); - addTab({ id, "", url, tabs_[id]->view()->is_loading() }); - - return tabs_[id]->view(); -} - -void UI::UpdateTabTitle(uint64_t id, const ultralight::String& title) { - RefPtr lock(view()->LockJSContext()); - updateTab({ id, title, "", tabs_[id]->view()->is_loading() }); -} - -void UI::UpdateTabURL(uint64_t id, const ultralight::String& url) { - if (id == active_tab_id_ && !tabs_.empty()) - SetURL(url); -} - -void UI::UpdateTabNavigation(uint64_t id, bool is_loading, bool can_go_back, bool can_go_forward) { - if (tabs_.empty()) - return; - - RefPtr lock(view()->LockJSContext()); - updateTab({ id, tabs_[id]->view()->title(), "", tabs_[id]->view()->is_loading() }); - - if (id == active_tab_id_) { - SetLoading(is_loading); - SetCanGoBack(can_go_back); - SetCanGoForward(can_go_forward); - } -} - -void UI::SetLoading(bool is_loading) { - RefPtr lock(view()->LockJSContext()); - updateLoading({ is_loading }); -} - -void UI::SetCanGoBack(bool can_go_back) { - RefPtr lock(view()->LockJSContext()); - updateBack({ can_go_back }); -} - -void UI::SetCanGoForward(bool can_go_forward) { - RefPtr lock(view()->LockJSContext()); - updateForward({ can_go_forward }); -} - -void UI::SetURL(const ultralight::String& url) { - RefPtr lock(view()->LockJSContext()); - updateURL({ url }); -} - -void UI::SetCursor(ultralight::Cursor cursor) { - if (App::instance()) - window_->SetCursor(cursor); -} diff --git a/electros-ultralight/archive/browser/src/UI.h b/electros-ultralight/archive/browser/src/UI.h deleted file mode 100644 index 3944903..0000000 --- a/electros-ultralight/archive/browser/src/UI.h +++ /dev/null @@ -1,91 +0,0 @@ -#pragma once -#include -#include "Tab.h" -#include -#include - -using ultralight::JSObject; -using ultralight::JSArgs; -using ultralight::JSFunction; -using namespace ultralight; - -class Console; - -/** -* Browser UI implementation. Renders the toolbar/addressbar/tabs in top pane. -*/ -class UI : public WindowListener, - public LoadListener, - public ViewListener { - public: - UI(RefPtr window); - ~UI(); - - // Inherited from WindowListener - virtual bool OnKeyEvent(const ultralight::KeyEvent& evt) override; - virtual bool OnMouseEvent(const ultralight::MouseEvent& evt) override; - virtual void OnClose(ultralight::Window* window) override; - virtual void OnResize(ultralight::Window* window, uint32_t width, uint32_t height) override; - - // Inherited from LoadListener - virtual void OnDOMReady(View* caller, uint64_t frame_id, - bool is_main_frame, const String& url) override; - - // Inherited from ViewListener - virtual void OnChangeCursor(ultralight::View* caller, Cursor cursor) override { SetCursor(cursor); } - - // Called by UI JavaScript - void OnBack(const JSObject& obj, const JSArgs& args); - void OnForward(const JSObject& obj, const JSArgs& args); - void OnRefresh(const JSObject& obj, const JSArgs& args); - void OnStop(const JSObject& obj, const JSArgs& args); - void OnToggleTools(const JSObject& obj, const JSArgs& args); - void OnRequestNewTab(const JSObject& obj, const JSArgs& args); - void OnRequestTabClose(const JSObject& obj, const JSArgs& args); - void OnActiveTabChange(const JSObject& obj, const JSArgs& args); - void OnRequestChangeURL(const JSObject& obj, const JSArgs& args); - - RefPtr window() { return window_; } - -protected: - void CreateNewTab(); - RefPtr CreateNewTabForChildView(const String& url); - void UpdateTabTitle(uint64_t id, const String& title); - void UpdateTabURL(uint64_t id, const String& url); - void UpdateTabNavigation(uint64_t id, bool is_loading, bool can_go_back, bool can_go_forward); - - void SetLoading(bool is_loading); - void SetCanGoBack(bool can_go_back); - void SetCanGoForward(bool can_go_forward); - void SetURL(const String& url); - void SetCursor(Cursor cursor); - - Tab* active_tab() { return tabs_.empty() ? nullptr : tabs_[active_tab_id_].get(); } - - RefPtr view() { return overlay_->view(); } - - RefPtr window_; - RefPtr overlay_; - int ui_height_; - int tab_height_; - float scale_; - - std::map> tabs_; - uint64_t active_tab_id_ = 0; - uint64_t tab_id_counter_ = 0; - Cursor cur_cursor_; - bool is_resizing_inspector_; - bool is_over_inspector_resize_drag_handle_; - int inspector_resize_begin_height_; - int inspector_resize_begin_mouse_y_; - - JSFunction updateBack; - JSFunction updateForward; - JSFunction updateLoading; - JSFunction updateURL; - JSFunction addTab; - JSFunction updateTab; - JSFunction closeTab; - - friend class Tab; -}; diff --git a/electros-ultralight/archive/browser/src/main.cpp b/electros-ultralight/archive/browser/src/main.cpp deleted file mode 100644 index c556b90..0000000 --- a/electros-ultralight/archive/browser/src/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "Browser.h" - -#define ENABLE_PAUSE_FOR_DEBUGGER 0 - -#if defined(_WIN32) && ENABLE_PAUSE_FOR_DEBUGGER -#include -void PauseForDebugger() { MessageBoxA(NULL, "Pause", "Caption", MB_OKCANCEL); } -#else -void PauseForDebugger() { } -#endif - -int main() { - PauseForDebugger(); - - Browser browser; - browser.Run(); - return 0; -} diff --git a/electros-ultralight/assets/README.md b/electros-ultralight/assets/README.md deleted file mode 100644 index 16a18a4..0000000 --- a/electros-ultralight/assets/README.md +++ /dev/null @@ -1 +0,0 @@ -# elemento-new-app-tests \ No newline at end of file diff --git a/electros-ultralight/assets/about.html b/electros-ultralight/assets/about.html deleted file mode 100644 index e69de29..0000000 diff --git a/electros-ultralight/assets/anchorme.js b/electros-ultralight/assets/anchorme.js deleted file mode 100644 index d78de1b..0000000 --- a/electros-ultralight/assets/anchorme.js +++ /dev/null @@ -1,468 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.anchorme = factory()); -}(this, (function () { 'use strict'; - - var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function unwrapExports (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; - } - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var tlds = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TLDs = "(AAA|AARP|ABARTH|ABB|ABBOTT|ABBVIE|ABC|ABLE|ABOGADO|ABUDHABI|AC|ACADEMY|ACCENTURE|ACCOUNTANT|ACCOUNTANTS|ACO|ACTOR|AD|ADAC|ADS|ADULT|AE|AEG|AERO|AETNA|AF|AFAMILYCOMPANY|AFL|AFRICA|AG|AGAKHAN|AGENCY|AI|AIG|AIGO|AIRBUS|AIRFORCE|AIRTEL|AKDN|AL|ALFAROMEO|ALIBABA|ALIPAY|ALLFINANZ|ALLSTATE|ALLY|ALSACE|ALSTOM|AM|AMERICANEXPRESS|AMERICANFAMILY|AMEX|AMFAM|AMICA|AMSTERDAM|ANALYTICS|ANDROID|ANQUAN|ANZ|AO|AOL|APARTMENTS|APP|APPLE|AQ|AQUARELLE|AR|ARAB|ARAMCO|ARCHI|ARMY|ARPA|ART|ARTE|AS|ASDA|ASIA|ASSOCIATES|AT|ATHLETA|ATTORNEY|AU|AUCTION|AUDI|AUDIBLE|AUDIO|AUSPOST|AUTHOR|AUTO|AUTOS|AVIANCA|AW|AWS|AX|AXA|AZ|AZURE|BA|BABY|BAIDU|BANAMEX|BANANAREPUBLIC|BAND|BANK|BAR|BARCELONA|BARCLAYCARD|BARCLAYS|BAREFOOT|BARGAINS|BASEBALL|BASKETBALL|BAUHAUS|BAYERN|BB|BBC|BBT|BBVA|BCG|BCN|BD|BE|BEATS|BEAUTY|BEER|BENTLEY|BERLIN|BEST|BESTBUY|BET|BF|BG|BH|BHARTI|BI|BIBLE|BID|BIKE|BING|BINGO|BIO|BIZ|BJ|BLACK|BLACKFRIDAY|BLOCKBUSTER|BLOG|BLOOMBERG|BLUE|BM|BMS|BMW|BN|BNPPARIBAS|BO|BOATS|BOEHRINGER|BOFA|BOM|BOND|BOO|BOOK|BOOKING|BOSCH|BOSTIK|BOSTON|BOT|BOUTIQUE|BOX|BR|BRADESCO|BRIDGESTONE|BROADWAY|BROKER|BROTHER|BRUSSELS|BS|BT|BUDAPEST|BUGATTI|BUILD|BUILDERS|BUSINESS|BUY|BUZZ|BV|BW|BY|BZ|BZH|CA|CAB|CAFE|CAL|CALL|CALVINKLEIN|CAM|CAMERA|CAMP|CANCERRESEARCH|CANON|CAPETOWN|CAPITAL|CAPITALONE|CAR|CARAVAN|CARDS|CARE|CAREER|CAREERS|CARS|CASA|CASE|CASEIH|CASH|CASINO|CAT|CATERING|CATHOLIC|CBA|CBN|CBRE|CBS|CC|CD|CEB|CENTER|CEO|CERN|CF|CFA|CFD|CG|CH|CHANEL|CHANNEL|CHARITY|CHASE|CHAT|CHEAP|CHINTAI|CHRISTMAS|CHROME|CHURCH|CI|CIPRIANI|CIRCLE|CISCO|CITADEL|CITI|CITIC|CITY|CITYEATS|CK|CL|CLAIMS|CLEANING|CLICK|CLINIC|CLINIQUE|CLOTHING|CLOUD|CLUB|CLUBMED|CM|CN|CO|COACH|CODES|COFFEE|COLLEGE|COLOGNE|COM|COMCAST|COMMBANK|COMMUNITY|COMPANY|COMPARE|COMPUTER|COMSEC|CONDOS|CONSTRUCTION|CONSULTING|CONTACT|CONTRACTORS|COOKING|COOKINGCHANNEL|COOL|COOP|CORSICA|COUNTRY|COUPON|COUPONS|COURSES|CPA|CR|CREDIT|CREDITCARD|CREDITUNION|CRICKET|CROWN|CRS|CRUISE|CRUISES|CSC|CU|CUISINELLA|CV|CW|CX|CY|CYMRU|CYOU|CZ|DABUR|DAD|DANCE|DATA|DATE|DATING|DATSUN|DAY|DCLK|DDS|DE|DEAL|DEALER|DEALS|DEGREE|DELIVERY|DELL|DELOITTE|DELTA|DEMOCRAT|DENTAL|DENTIST|DESI|DESIGN|DEV|DHL|DIAMONDS|DIET|DIGITAL|DIRECT|DIRECTORY|DISCOUNT|DISCOVER|DISH|DIY|DJ|DK|DM|DNP|DO|DOCS|DOCTOR|DOG|DOMAINS|DOT|DOWNLOAD|DRIVE|DTV|DUBAI|DUCK|DUNLOP|DUPONT|DURBAN|DVAG|DVR|DZ|EARTH|EAT|EC|ECO|EDEKA|EDU|EDUCATION|EE|EG|EMAIL|EMERCK|ENERGY|ENGINEER|ENGINEERING|ENTERPRISES|EPSON|EQUIPMENT|ER|ERICSSON|ERNI|ES|ESQ|ESTATE|ESURANCE|ET|ETISALAT|EU|EUROVISION|EUS|EVENTS|EXCHANGE|EXPERT|EXPOSED|EXPRESS|EXTRASPACE|FAGE|FAIL|FAIRWINDS|FAITH|FAMILY|FAN|FANS|FARM|FARMERS|FASHION|FAST|FEDEX|FEEDBACK|FERRARI|FERRERO|FI|FIAT|FIDELITY|FIDO|FILM|FINAL|FINANCE|FINANCIAL|FIRE|FIRESTONE|FIRMDALE|FISH|FISHING|FIT|FITNESS|FJ|FK|FLICKR|FLIGHTS|FLIR|FLORIST|FLOWERS|FLY|FM|FO|FOO|FOOD|FOODNETWORK|FOOTBALL|FORD|FOREX|FORSALE|FORUM|FOUNDATION|FOX|FR|FREE|FRESENIUS|FRL|FROGANS|FRONTDOOR|FRONTIER|FTR|FUJITSU|FUJIXEROX|FUN|FUND|FURNITURE|FUTBOL|FYI|GA|GAL|GALLERY|GALLO|GALLUP|GAME|GAMES|GAP|GARDEN|GAY|GB|GBIZ|GD|GDN|GE|GEA|GENT|GENTING|GEORGE|GF|GG|GGEE|GH|GI|GIFT|GIFTS|GIVES|GIVING|GL|GLADE|GLASS|GLE|GLOBAL|GLOBO|GM|GMAIL|GMBH|GMO|GMX|GN|GODADDY|GOLD|GOLDPOINT|GOLF|GOO|GOODYEAR|GOOG|GOOGLE|GOP|GOT|GOV|GP|GQ|GR|GRAINGER|GRAPHICS|GRATIS|GREEN|GRIPE|GROCERY|GROUP|GS|GT|GU|GUARDIAN|GUCCI|GUGE|GUIDE|GUITARS|GURU|GW|GY|HAIR|HAMBURG|HANGOUT|HAUS|HBO|HDFC|HDFCBANK|HEALTH|HEALTHCARE|HELP|HELSINKI|HERE|HERMES|HGTV|HIPHOP|HISAMITSU|HITACHI|HIV|HK|HKT|HM|HN|HOCKEY|HOLDINGS|HOLIDAY|HOMEDEPOT|HOMEGOODS|HOMES|HOMESENSE|HONDA|HORSE|HOSPITAL|HOST|HOSTING|HOT|HOTELES|HOTELS|HOTMAIL|HOUSE|HOW|HR|HSBC|HT|HU|HUGHES|HYATT|HYUNDAI|IBM|ICBC|ICE|ICU|ID|IE|IEEE|IFM|IKANO|IL|IM|IMAMAT|IMDB|IMMO|IMMOBILIEN|IN|INC|INDUSTRIES|INFINITI|INFO|ING|INK|INSTITUTE|INSURANCE|INSURE|INT|INTEL|INTERNATIONAL|INTUIT|INVESTMENTS|IO|IPIRANGA|IQ|IR|IRISH|IS|ISMAILI|IST|ISTANBUL|IT|ITAU|ITV|IVECO|JAGUAR|JAVA|JCB|JCP|JE|JEEP|JETZT|JEWELRY|JIO|JLL|JM|JMP|JNJ|JO|JOBS|JOBURG|JOT|JOY|JP|JPMORGAN|JPRS|JUEGOS|JUNIPER|KAUFEN|KDDI|KE|KERRYHOTELS|KERRYLOGISTICS|KERRYPROPERTIES|KFH|KG|KH|KI|KIA|KIM|KINDER|KINDLE|KITCHEN|KIWI|KM|KN|KOELN|KOMATSU|KOSHER|KP|KPMG|KPN|KR|KRD|KRED|KUOKGROUP|KW|KY|KYOTO|KZ|LA|LACAIXA|LAMBORGHINI|LAMER|LANCASTER|LANCIA|LAND|LANDROVER|LANXESS|LASALLE|LAT|LATINO|LATROBE|LAW|LAWYER|LB|LC|LDS|LEASE|LECLERC|LEFRAK|LEGAL|LEGO|LEXUS|LGBT|LI|LIDL|LIFE|LIFEINSURANCE|LIFESTYLE|LIGHTING|LIKE|LILLY|LIMITED|LIMO|LINCOLN|LINDE|LINK|LIPSY|LIVE|LIVING|LIXIL|LK|LLC|LLP|LOAN|LOANS|LOCKER|LOCUS|LOFT|LOL|LONDON|LOTTE|LOTTO|LOVE|LPL|LPLFINANCIAL|LR|LS|LT|LTD|LTDA|LU|LUNDBECK|LUPIN|LUXE|LUXURY|LV|LY|MA|MACYS|MADRID|MAIF|MAISON|MAKEUP|MAN|MANAGEMENT|MANGO|MAP|MARKET|MARKETING|MARKETS|MARRIOTT|MARSHALLS|MASERATI|MATTEL|MBA|MC|MCKINSEY|MD|ME|MED|MEDIA|MEET|MELBOURNE|MEME|MEMORIAL|MEN|MENU|MERCKMSD|METLIFE|MG|MH|MIAMI|MICROSOFT|MIL|MINI|MINT|MIT|MITSUBISHI|MK|ML|MLB|MLS|MM|MMA|MN|MO|MOBI|MOBILE|MODA|MOE|MOI|MOM|MONASH|MONEY|MONSTER|MORMON|MORTGAGE|MOSCOW|MOTO|MOTORCYCLES|MOV|MOVIE|MP|MQ|MR|MS|MSD|MT|MTN|MTR|MU|MUSEUM|MUTUAL|MV|MW|MX|MY|MZ|NA|NAB|NAGOYA|NAME|NATIONWIDE|NATURA|NAVY|NBA|NC|NE|NEC|NET|NETBANK|NETFLIX|NETWORK|NEUSTAR|NEW|NEWHOLLAND|NEWS|NEXT|NEXTDIRECT|NEXUS|NF|NFL|NG|NGO|NHK|NI|NICO|NIKE|NIKON|NINJA|NISSAN|NISSAY|NL|NO|NOKIA|NORTHWESTERNMUTUAL|NORTON|NOW|NOWRUZ|NOWTV|NP|NR|NRA|NRW|NTT|NU|NYC|NZ|OBI|OBSERVER|OFF|OFFICE|OKINAWA|OLAYAN|OLAYANGROUP|OLDNAVY|OLLO|OM|OMEGA|ONE|ONG|ONL|ONLINE|ONYOURSIDE|OOO|OPEN|ORACLE|ORANGE|ORG|ORGANIC|ORIGINS|OSAKA|OTSUKA|OTT|OVH|PA|PAGE|PANASONIC|PARIS|PARS|PARTNERS|PARTS|PARTY|PASSAGENS|PAY|PCCW|PE|PET|PF|PFIZER|PG|PH|PHARMACY|PHD|PHILIPS|PHONE|PHOTO|PHOTOGRAPHY|PHOTOS|PHYSIO|PICS|PICTET|PICTURES|PID|PIN|PING|PINK|PIONEER|PIZZA|PK|PL|PLACE|PLAY|PLAYSTATION|PLUMBING|PLUS|PM|PN|PNC|POHL|POKER|POLITIE|PORN|POST|PR|PRAMERICA|PRAXI|PRESS|PRIME|PRO|PROD|PRODUCTIONS|PROF|PROGRESSIVE|PROMO|PROPERTIES|PROPERTY|PROTECTION|PRU|PRUDENTIAL|PS|PT|PUB|PW|PWC|PY|QA|QPON|QUEBEC|QUEST|QVC|RACING|RADIO|RAID|RE|READ|REALESTATE|REALTOR|REALTY|RECIPES|RED|REDSTONE|REDUMBRELLA|REHAB|REISE|REISEN|REIT|RELIANCE|REN|RENT|RENTALS|REPAIR|REPORT|REPUBLICAN|REST|RESTAURANT|REVIEW|REVIEWS|REXROTH|RICH|RICHARDLI|RICOH|RIGHTATHOME|RIL|RIO|RIP|RMIT|RO|ROCHER|ROCKS|RODEO|ROGERS|ROOM|RS|RSVP|RU|RUGBY|RUHR|RUN|RW|RWE|RYUKYU|SA|SAARLAND|SAFE|SAFETY|SAKURA|SALE|SALON|SAMSCLUB|SAMSUNG|SANDVIK|SANDVIKCOROMANT|SANOFI|SAP|SARL|SAS|SAVE|SAXO|SB|SBI|SBS|SC|SCA|SCB|SCHAEFFLER|SCHMIDT|SCHOLARSHIPS|SCHOOL|SCHULE|SCHWARZ|SCIENCE|SCJOHNSON|SCOR|SCOT|SD|SE|SEARCH|SEAT|SECURE|SECURITY|SEEK|SELECT|SENER|SERVICES|SES|SEVEN|SEW|SEX|SEXY|SFR|SG|SH|SHANGRILA|SHARP|SHAW|SHELL|SHIA|SHIKSHA|SHOES|SHOP|SHOPPING|SHOUJI|SHOW|SHOWTIME|SHRIRAM|SI|SILK|SINA|SINGLES|SITE|SJ|SK|SKI|SKIN|SKY|SKYPE|SL|SLING|SM|SMART|SMILE|SN|SNCF|SO|SOCCER|SOCIAL|SOFTBANK|SOFTWARE|SOHU|SOLAR|SOLUTIONS|SONG|SONY|SOY|SPACE|SPORT|SPOT|SPREADBETTING|SR|SRL|SS|ST|STADA|STAPLES|STAR|STATEBANK|STATEFARM|STC|STCGROUP|STOCKHOLM|STORAGE|STORE|STREAM|STUDIO|STUDY|STYLE|SU|SUCKS|SUPPLIES|SUPPLY|SUPPORT|SURF|SURGERY|SUZUKI|SV|SWATCH|SWIFTCOVER|SWISS|SX|SY|SYDNEY|SYMANTEC|SYSTEMS|SZ|TAB|TAIPEI|TALK|TAOBAO|TARGET|TATAMOTORS|TATAR|TATTOO|TAX|TAXI|TC|TCI|TD|TDK|TEAM|TECH|TECHNOLOGY|TEL|TEMASEK|TENNIS|TEVA|TF|TG|TH|THD|THEATER|THEATRE|TIAA|TICKETS|TIENDA|TIFFANY|TIPS|TIRES|TIROL|TJ|TJMAXX|TJX|TK|TKMAXX|TL|TM|TMALL|TN|TO|TODAY|TOKYO|TOOLS|TOP|TORAY|TOSHIBA|TOTAL|TOURS|TOWN|TOYOTA|TOYS|TR|TRADE|TRADING|TRAINING|TRAVEL|TRAVELCHANNEL|TRAVELERS|TRAVELERSINSURANCE|TRUST|TRV|TT|TUBE|TUI|TUNES|TUSHU|TV|TVS|TW|TZ|UA|UBANK|UBS|UG|UK|UNICOM|UNIVERSITY|UNO|UOL|UPS|US|UY|UZ|VA|VACATIONS|VANA|VANGUARD|VC|VE|VEGAS|VENTURES|VERISIGN|VERSICHERUNG|VET|VG|VI|VIAJES|VIDEO|VIG|VIKING|VILLAS|VIN|VIP|VIRGIN|VISA|VISION|VIVA|VIVO|VLAANDEREN|VN|VODKA|VOLKSWAGEN|VOLVO|VOTE|VOTING|VOTO|VOYAGE|VU|VUELOS|WALES|WALMART|WALTER|WANG|WANGGOU|WATCH|WATCHES|WEATHER|WEATHERCHANNEL|WEBCAM|WEBER|WEBSITE|WED|WEDDING|WEIBO|WEIR|WF|WHOSWHO|WIEN|WIKI|WILLIAMHILL|WIN|WINDOWS|WINE|WINNERS|WME|WOLTERSKLUWER|WOODSIDE|WORK|WORKS|WORLD|WOW|WS|WTC|WTF|XBOX|XEROX|XFINITY|XIHUAN|XIN|XN--11B4C3D|XN--1CK2E1B|XN--1QQW23A|XN--2SCRJ9C|XN--30RR7Y|XN--3BST00M|XN--3DS443G|XN--3E0B707E|XN--3HCRJ9C|XN--3OQ18VL8PN36A|XN--3PXU8K|XN--42C2D9A|XN--45BR5CYL|XN--45BRJ9C|XN--45Q11C|XN--4GBRIM|XN--54B7FTA0CC|XN--55QW42G|XN--55QX5D|XN--5SU34J936BGSG|XN--5TZM5G|XN--6FRZ82G|XN--6QQ986B3XL|XN--80ADXHKS|XN--80AO21A|XN--80AQECDR1A|XN--80ASEHDB|XN--80ASWG|XN--8Y0A063A|XN--90A3AC|XN--90AE|XN--90AIS|XN--9DBQ2A|XN--9ET52U|XN--9KRT00A|XN--B4W605FERD|XN--BCK1B9A5DRE4C|XN--C1AVG|XN--C2BR7G|XN--CCK2B3B|XN--CG4BKI|XN--CLCHC0EA0B2G2A9GCD|XN--CZR694B|XN--CZRS0T|XN--CZRU2D|XN--D1ACJ3B|XN--D1ALF|XN--E1A4C|XN--ECKVDTC9D|XN--EFVY88H|XN--FCT429K|XN--FHBEI|XN--FIQ228C5HS|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--FJQ720A|XN--FLW351E|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--FZYS8D69UVGM|XN--G2XX48C|XN--GCKR3F0F|XN--GECRJ9C|XN--GK3AT1E|XN--H2BREG3EVE|XN--H2BRJ9C|XN--H2BRJ9C8C|XN--HXT814E|XN--I1B6B1A6A2E|XN--IMR513N|XN--IO0A7I|XN--J1AEF|XN--J1AMH|XN--J6W193G|XN--JLQ61U9W7B|XN--JVR189M|XN--KCRX77D1X4A|XN--KPRW13D|XN--KPRY57D|XN--KPU716F|XN--KPUT3I|XN--L1ACC|XN--LGBBAT1AD8J|XN--MGB9AWBF|XN--MGBA3A3EJT|XN--MGBA3A4F16A|XN--MGBA7C0BBN0A|XN--MGBAAKC7DVF|XN--MGBAAM7A8H|XN--MGBAB2BD|XN--MGBAH1A3HJKRD|XN--MGBAI9AZGQP6J|XN--MGBAYH7GPA|XN--MGBBH1A|XN--MGBBH1A71E|XN--MGBC0A9AZCG|XN--MGBCA7DZDO|XN--MGBCPQ6GPA1A|XN--MGBERP4A5D4AR|XN--MGBGU82A|XN--MGBI4ECEXP|XN--MGBPL2FH|XN--MGBT3DHD|XN--MGBTX2B|XN--MGBX4CD0AB|XN--MIX891F|XN--MK1BU44C|XN--MXTQ1M|XN--NGBC5AZD|XN--NGBE9E0A|XN--NGBRX|XN--NODE|XN--NQV7F|XN--NQV7FS00EMA|XN--NYQY26A|XN--O3CW4H|XN--OGBPF8FL|XN--OTU796D|XN--P1ACF|XN--P1AI|XN--PBT977C|XN--PGBS0DH|XN--PSSY2U|XN--Q7CE6A|XN--Q9JYB4C|XN--QCKA1PMC|XN--QXA6A|XN--QXAM|XN--RHQV96G|XN--ROVU88B|XN--RVC1E0AM3E|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--TCKWE|XN--TIQ49XQYJ|XN--UNUP4Y|XN--VERMGENSBERATER-CTB|XN--VERMGENSBERATUNG-PWB|XN--VHQUV|XN--VUQ861B|XN--W4R85EL8FHU5DNRA|XN--W4RS40L|XN--WGBH1C|XN--WGBL6A|XN--XHQ521B|XN--XKC2AL3HYE2A|XN--XKC2DL3A5EE0H|XN--Y9A3AQ|XN--YFRO4I67O|XN--YGBI2AMMX|XN--ZFR164B|XXX|XYZ|YACHTS|YAHOO|YAMAXUN|YANDEX|YE|YODOBASHI|YOGA|YOKOHAMA|YOU|YOUTUBE|YT|YUN|ZA|ZAPPOS|ZARA|ZERO|ZIP|ZM|ZONE|ZUERICH|ZW|TEST)"; - }); - - unwrapExports(tlds); - var tlds_1 = tlds.TLDs; - - var dictionary = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - - exports.openingParenthesis = "([\"'{"; - exports.closingParenthesis = ")]\"'}"; - exports.parenthesis = exports.openingParenthesis - .split("") - .map(function (x, i) { return "" + x + exports.closingParenthesis.charAt(i); }); - exports.htmlAttributes = [ - "src", - "data", - "href", - "cite", - "formaction", - "icon", - "manifest", - "poster", - "codebase", - "background", - "profile", - "usemap", - "itemtype", - "action", - "longdesc", - "classid", - "archive" - ]; - exports.nonLatinAlphabetRanges = "\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC"; - exports.TLDs = tlds.TLDs; - }); - - unwrapExports(dictionary); - var dictionary_1 = dictionary.openingParenthesis; - var dictionary_2 = dictionary.closingParenthesis; - var dictionary_3 = dictionary.parenthesis; - var dictionary_4 = dictionary.htmlAttributes; - var dictionary_5 = dictionary.nonLatinAlphabetRanges; - var dictionary_6 = dictionary.TLDs; - - var transform_1 = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - function applyOption(string, props, option) { - // conditional - if (typeof option === "function") { - return option(string, props); - } - // all - else { - return option; - } - } - function transform(input, options) { - var protocol = ""; - var truncation = Infinity; - var attributes = {}; - var truncateFromTheMiddle = false; - // special transformation - if (options && options.specialTransform) { - for (var index = 0; index < options.specialTransform.length; index++) { - var transformer = options.specialTransform[index]; - if (transformer.test.test(input.string)) { - return transformer.transform(input.string, input); - } - } - } - // exclude - if (options && options.exclude) { - if (applyOption(input.string, input, options.exclude)) - { return input.string; } - } - // protocol - if (options && options.protocol) { - protocol = applyOption(input.string, input, options.protocol); - } - if (input.protocol) { - protocol = ""; - } - else if (!protocol) { - protocol = input.isEmail - ? "mailto:" - : input.isFile - ? "file:///" - : "http://"; - } - // truncation - if (options && options.truncate) { - truncation = applyOption(input.string, input, options.truncate); - } - if (options && options.middleTruncation) { - truncateFromTheMiddle = applyOption(input.string, input, options.middleTruncation); - } - // attributes - if (options && options.attributes) { - attributes = applyOption(input.string, input, options.attributes); - } - return "" + (input.string.length > truncation - ? truncateFromTheMiddle - ? input.string.substring(0, Math.floor(truncation / 2)) + - "…" + - input.string.substring(input.string.length - Math.ceil(truncation / 2), input.string.length) - : input.string.substring(0, truncation) + "…" - : input.string) + ""; - } - exports.transform = transform; - }); - - unwrapExports(transform_1); - var transform_2 = transform_1.transform; - - var regex = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - - var email_address = "([a-z0-9!#$%&'*+=?^_`{|}~-]+(\\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*)"; - var domainWithTLD = "([a-z0-9]+(-+[a-z0-9]+)*\\.)+(" + dictionary.TLDs + ")"; - var domainWithAnyTLD = "([a-z0-9]+(-+[a-z0-9]+)*\\.)+([a-z0-9][a-z0-9-]{0," + (Math.max.apply(commonjsGlobal, dictionary.TLDs.split("|").map(function (x) { return x.length; })) - 2) + "}[a-z0-9])"; - var allowedInPath = "a-zA-Z\\d\\-._~\\!$&*+,;=:@%'\"\\[\\]()"; - var path = "(((\\/(([" + allowedInPath + "]+(\\/[" + allowedInPath + "]*)*))?)?)((\\?([" + allowedInPath + "\\/?]*))?)((\\#([" + allowedInPath + "\\/?]*))?))?"; - var ipv4 = "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; - var ipv6 = "\\[(([a-f0-9:]+:+)+[a-f0-9]+)\\]"; - var port = "(:(\\d{1,5}))?"; - var protocol = "(https?:|ftps?:)\\/\\/"; - var confirmedByProtocol = "(" + protocol + ")\\S+"; - var additionalSlashes = "(([\\/]?))+"; - var fqdn = "(((" + protocol + ")?(" + domainWithTLD + "|" + ipv4 + "|(" + protocol + ")(" + ipv6 + "|" + domainWithAnyTLD + "))(?!@\\w)" + port + ")|(" + confirmedByProtocol + "))"; - var nonLatinMatches = fqdn + "((((\\/(([" + allowedInPath + "]+(\\/[" + allowedInPath + dictionary.nonLatinAlphabetRanges + "]*)*))?)?)((\\?([" + allowedInPath + "\\/?]*))?)((\\#([" + allowedInPath + "\\/?]*))?))?\\b((([" + allowedInPath + "\\/" + dictionary.nonLatinAlphabetRanges + "][a-zA-Z\\d\\-_~+=\\/" + dictionary.nonLatinAlphabetRanges + "]+)?))+)"; - exports.email = "\\b(mailto:)?" + email_address + "@(" + domainWithTLD + "|" + ipv4 + ")\\b"; - exports.url = "(" + nonLatinMatches + ")|(\\b" + fqdn + path + "\\b" + additionalSlashes + ")"; - exports.file = "(file:\\/\\/\\/)([a-z]+:(\\/|\\\\)+)?([\\w.]+([\\/\\\\]?)+)+"; - exports.final = "(" + exports.url + ")|(" + exports.email + ")|(" + exports.file + ")"; - exports.finalRegex = new RegExp(exports.final, "gi"); - // for validation purposes - exports.ipRegex = new RegExp("^(" + ipv4 + "|" + ipv6 + ")$", "i"); - exports.emailRegex = new RegExp("^(" + exports.email + ")$", "i"); - exports.fileRegex = new RegExp("^(" + exports.file + ")$", "i"); - exports.urlRegex = new RegExp("^(" + exports.url + ")$", "i"); - // identifying parts of the link - var iidxes = { - isURL: 0, - isEmail: 0, - isFile: 0, - file: { - fileName: 0, - protocol: 0, - }, - email: { - protocol: 0, - local: 0, - host: 0, - }, - url: { - ipv4: 0, - ipv6: 0, - ipv4Confirmation: 0, - byProtocol: 0, - port: 0, - // three places where protocol can appear - protocol1: 0, - protocol2: 0, - protocol3: 0, - protocolWithDomain: 0, - path: 0, - // sometimes path might be split into two parts - secondPartOfPath: 0, - query: 0, - fragment: 0, - }, - }; - exports.iidxes = iidxes; - var testers = [ - "file:///some/file/path/filename.pdf", - "mailto:e+_mail.me@sub.domain.com", - "http://sub.domain.co.uk:3000/p/a/t/h_(asd)/h?q=abc123#dfdf", - "http://www.\u0639\u0631\u0628\u064A.com", - "http://127.0.0.1:3000/p/a/t_(asd)/h?q=abc123#dfdf", - "http://[2a00:1450:4025:401::67]/k/something", - "a.org/abc/\u10D8_\u10D2\u10D2" ].join(" "); - var result = null; - var i = 0; - while ((result = exports.finalRegex.exec(testers)) !== null) { - if (i === 0) { - iidxes.isFile = result.lastIndexOf(result[0]); - iidxes.file.fileName = result.indexOf("filename.pdf"); - iidxes.file.protocol = result.indexOf("file:///"); - } - if (i === 1) { - iidxes.isEmail = result.lastIndexOf(result[0]); - iidxes.email.protocol = result.indexOf("mailto:"); - iidxes.email.local = result.indexOf("e+_mail.me"); - iidxes.email.host = result.indexOf("sub.domain.com"); - } - if (i === 2) { - iidxes.isURL = result.lastIndexOf(result[0]); - iidxes.url.protocol1 = result.indexOf("http://"); - iidxes.url.protocolWithDomain = result.indexOf("http://sub.domain.co.uk:3000"); - iidxes.url.port = result.indexOf("3000"); - iidxes.url.path = result.indexOf("/p/a/t/h_(asd)/h"); - iidxes.url.query = result.indexOf("q=abc123"); - iidxes.url.fragment = result.indexOf("dfdf"); - } - if (i === 3) { - iidxes.url.byProtocol = result.lastIndexOf("http://www.عربي.com"); - iidxes.url.protocol2 = result.lastIndexOf("http://"); - } - if (i === 4) { - iidxes.url.ipv4 = result.indexOf("127.0.0.1"); - iidxes.url.ipv4Confirmation = result.indexOf("0."); - } - if (i === 5) { - iidxes.url.ipv6 = result.indexOf("2a00:1450:4025:401::67"); - iidxes.url.protocol3 = result.lastIndexOf("http://"); - } - if (i === 6) { - iidxes.url.secondPartOfPath = result.indexOf("გგ"); - } - i++; - } - }); - - unwrapExports(regex); - var regex_1 = regex.email; - var regex_2 = regex.url; - var regex_3 = regex.file; - var regex_4 = regex.finalRegex; - var regex_5 = regex.ipRegex; - var regex_6 = regex.emailRegex; - var regex_7 = regex.fileRegex; - var regex_8 = regex.urlRegex; - var regex_9 = regex.iidxes; - - var utils = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - - function checkParenthesis(opening, closing, target, nextChar) { - if (nextChar !== closing) { - return false; - } - if (target.split(opening).length - target.split(closing).length === 1 || - (opening === closing && target.split(opening).length % 2 === 0)) { - return true; - } - } - exports.checkParenthesis = checkParenthesis; - exports.maximumAttrLength = dictionary.htmlAttributes.sort(function (a, b) { return b.length - a.length; })[0].length; - function isInsideAttribute(prevFragment) { - return (/\s[a-z0-9-]+=('|")$/i.test(prevFragment) || - /: ?url\(('|")?$/i.test(prevFragment)); - } - exports.isInsideAttribute = isInsideAttribute; - function isInsideAnchorTag(target, fullInput, targetEnd) { - var escapedTarget = target.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); - var regex = new RegExp("(?=()(" + escapedTarget + "))[\\s\\S]*?(" + escapedTarget + ")(?!\"|')", "gi"); - var result = null; - while ((result = regex.exec(fullInput)) !== null) { - var end = result.index + result[0].length; - if (end === targetEnd) { - return true; - } - } - return false; - } - exports.isInsideAnchorTag = isInsideAnchorTag; - }); - - unwrapExports(utils); - var utils_1 = utils.checkParenthesis; - var utils_2 = utils.maximumAttrLength; - var utils_3 = utils.isInsideAttribute; - var utils_4 = utils.isInsideAnchorTag; - - var node = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - - - - - var list = function (input) { - var found = []; - var result = null; - var _loop_1 = function () { - var start = result.index; - var end = start + result[0].length; - var string = result[0]; - // ### trailing slashes problem - /** - * This is a quick and dirty fix for a problem that could be probably fixed with - * slight modification in the regex. - * The problem is that the library doesn't count the trailing slashes as part - * of the URL, unless there were multiple trailing slashes. - */ - if (input.charAt(end) === "/") { - string = string + input.charAt(end); - end++; - } - // ### Parenthesis problem - /** - As we're using the \b to tokenize the URL, sometimes the parenthesis are part of the URL - and sometimes they are actually the last part, this makes the tokenization stops just - before them. - To fix this, we calculate how many parenthesis are open and how many are closed inside - the URL and based on the number we should be able to know whether the aforementioned - parenthesis character is part of the URL or not - */ - if (dictionary.closingParenthesis.indexOf(input.charAt(end)) > -1) { - dictionary.parenthesis.forEach(function (str) { - var opening = str.charAt(0); - var closing = str.charAt(1); - if (utils.checkParenthesis(opening, closing, string, input.charAt(end))) { - string = string + input.charAt(end); - end++; - } - }); - } - // ### HTML problem 1 - /** - checking whether the token is already inside an HTML element by seeing if it's - preceded by an HTML attribute that would hold a url (e.g. scr, cite ...etc) - */ - if (['""', "''", "()"].indexOf(input.charAt(start - 1) + input.charAt(end)) !== -1) { - if (utils.isInsideAttribute(input.substring(start - utils.maximumAttrLength - 15, start))) { - return "continue"; - } - } - // ### HTML problem 2 - /** - Checking whether the token is the content of an actual anchor - e.g. click to go to something.com and have fun - */ - if (input.substring(end, input.length).indexOf("") > -1 && - input.substring(0, start).indexOf(" -1 && - utils.isInsideAnchorTag(string, input, end)) { - return "continue"; - } - if (result[regex.iidxes.isURL]) { - var path = (result[regex.iidxes.url.path] || "") + - (result[regex.iidxes.url.secondPartOfPath] || "") || undefined; - var protocol = result[regex.iidxes.url.protocol1] || - result[regex.iidxes.url.protocol2] || - result[regex.iidxes.url.protocol3]; - found.push({ - start: start, - end: end, - string: string, - isURL: true, - protocol: protocol, - port: result[regex.iidxes.url.port], - ipv4: result[regex.iidxes.url.ipv4Confirmation] - ? result[regex.iidxes.url.ipv4] - : undefined, - ipv6: result[regex.iidxes.url.ipv6], - host: result[regex.iidxes.url.byProtocol] - ? undefined - : (result[regex.iidxes.url.protocolWithDomain] || "").substr((protocol || "").length), - confirmedByProtocol: !!result[regex.iidxes.url.byProtocol], - path: result[regex.iidxes.url.byProtocol] ? undefined : path, - query: result[regex.iidxes.url.query] || undefined, - fragment: result[regex.iidxes.url.fragment] || undefined, - }); - } - else if (result[regex.iidxes.isFile]) { - var filePath = string.substr(8); - found.push({ - start: start, - end: end, - string: string, - isFile: true, - protocol: result[regex.iidxes.file.protocol], - filename: result[regex.iidxes.file.fileName], - filePath: filePath, - fileDirectory: filePath.substr(0, filePath.length - result[regex.iidxes.file.fileName].length), - }); - } - else if (result[regex.iidxes.isEmail]) { - found.push({ - start: start, - end: end, - string: string, - isEmail: true, - local: result[regex.iidxes.email.local], - protocol: result[regex.iidxes.email.protocol], - host: result[regex.iidxes.email.host], - }); - } - else { - found.push({ - start: start, - end: end, - string: string, - }); - } - }; - while ((result = regex.finalRegex.exec(input)) !== null) { - _loop_1(); - } - return found; - }; - var anchorme = function (arg) { - var _a = typeof arg === "string" - ? { input: arg, options: undefined, extensions: undefined } - : arg, input = _a.input, options = _a.options, extensions = _a.extensions; - if (extensions) { - for (var index = 0; index < extensions.length; index++) { - var extension = extensions[index]; - input = input.replace(extension.test, extension.transform); - } - } - var found = list(input); - var newStr = ""; - // the following code isn't very intuitive nor human readable - // but faster than others - for (var index = 0; index < found.length; index++) { - newStr = - (newStr - ? newStr - : index === 0 - ? input.substring(0, found[index].start) - : "") + - transform_1.transform(found[index], options) + - (found[index + 1] - ? input.substring(found[index].end, found[index + 1].start) - : input.substring(found[index].end)); - } - return newStr ? newStr : input; - }; - anchorme.list = function (input) { - return list(input); - }; - anchorme.validate = { - ip: function (input) { return regex.ipRegex.test(input); }, - email: function (input) { return regex.emailRegex.test(input); }, - file: function (input) { return regex.fileRegex.test(input); }, - url: function (input) { return regex.urlRegex.test(input) || regex.ipRegex.test(input); }, - }; - exports.default = anchorme; - }); - - var index = unwrapExports(node); - - return index; - -}))); diff --git a/electros-ultralight/assets/chrome-tabs.css b/electros-ultralight/assets/chrome-tabs.css deleted file mode 100644 index 6ea17b1..0000000 --- a/electros-ultralight/assets/chrome-tabs.css +++ /dev/null @@ -1,213 +0,0 @@ -.chrome-tabs { - box-sizing: border-box; - position: relative; - font-size: 10px; - height: 40px; - /* background: linear-gradient(#dad9da, #d9d8d9); */ - padding: 0.38em 1.2em 0.0em 1.2em; - border-radius: 0.5em 0.5em 0 0; - overflow: hidden; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; -} - -.chrome-tabs * { - box-sizing: inherit; - font-family: inherit; - cursor: default; -} - -#chrome-tabs-add-tab { - background: linear-gradient(0deg, #232330, #282836); - box-shadow: 0px 2px 0px 0px rgba(0, 0, 0, 0.4); - display: block; - position: absolute; - right: 0px; - padding: 5px 10px; - margin-top: 9px; - margin-right: 3px; - border: 0.8px solid #252532; - border-radius: 8px; - font-size: 12px; - z-index: 1000000; - height: 24px; - color: #c4c2d0 !important; -} - -#chrome-tabs-add-tab:active { - background: linear-gradient(0deg, #262633, #1e1e29); - box-shadow: none; - top: 2px; -} - -.chrome-tabs .chrome-tabs-bottom-bar { - position: absolute; - bottom: 0; - height: 0.40em; - left: 0; - width: 100%; - z-index: 20; - border-bottom: 0.8px solid #252532; -} - -.chrome-tabs .chrome-tabs-content { - position: relative; - width: calc(100% - 75px); - height: 100%; - overflow: hidden; -} - -.chrome-tabs .chrome-tab { - position: absolute; - left: 0; - height: 37px; - width: 24em; - border: 0; - margin: 0; - z-index: 1; - top: 2px; - color: #c4c2d0; -} - -.chrome-tabs .chrome-tab, -.chrome-tabs .chrome-tab * { - user-select: none; - cursor: default; -} - -.chrome-tabs .chrome-tab .chrome-tab-background { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - overflow: hidden; - pointer-events: none; - - width: calc(100% - 8px); - height: 100%; - background: linear-gradient(180deg, #212130, #1c1c24); - border-radius: 8px 8px 0 0; - margin: 2px 4px 4px 4px; -} - -.chrome-tabs .chrome-tab .chrome-tab-background>svg { - width: 100%; - height: 100%; -} - -.chrome-tabs .chrome-tab .chrome-tab-background>svg .chrome-tab-shadow { - fill: none; - stroke: rgba(180, 180, 180, 1.0); - stroke-width: 1.0px; -} - -.chrome-tabs .chrome-tab .chrome-tab-background>svg .chrome-tab-background { - fill: #c4c2d0; - transform: translateX(0.25px) translateY(0.25px); -} - -.chrome-tabs .chrome-tab.chrome-tab-current { - z-index: 999; - color: white; -} - -.chrome-tabs .chrome-tab.chrome-tab-current .chrome-tab-background { - background: linear-gradient(180deg, #313141, #282836); - /*box-shadow: 0px 1px 2px 1px rgba(0, 0, 0, 0.4); */ - border: 0.7px solid #292934; - border-bottom: none; -} - -.chrome-tabs .chrome-tab.chrome-tab-just-added { - top: 14px; - animation: chrome-tab-just-added 120ms forwards ease-in-out; - -} - -@keyframes chrome-tab-just-added { - to { - top: 2px; - } -} - -.chrome-tabs.chrome-tabs-sorting .chrome-tab:not(.chrome-tab-currently-dragged), -.chrome-tabs:not(.chrome-tabs-sorting) .chrome-tab.chrome-tab-just-dragged { - transition: transform 120ms ease-in-out; -} - -.chrome-tabs .chrome-tab-favicon, -.chrome-tabs .chrome-tab-spinner { - position: relative; - margin-left: 1.6em; - height: 14px; - width: 14px; - background-size: 14px; - margin-top: 10px; - z-index: 3; - display: inline-block; - vertical-align: top; - pointer-events: none; -} - -.chrome-tabs .chrome-tab-spinner { - content: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJsb2FkZXItMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCiAgICAgd2lkdGg9IjE0cHgiIGhlaWdodD0iMTRweCIgdmlld0JveD0iMCAwIDUwIDUwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MCA1MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgogIDxwYXRoIGZpbGw9IiM3YTc2OGYiIGQ9Ik00My45MzUsMjUuMTQ1YzAtMTAuMzE4LTguMzY0LTE4LjY4My0xOC42ODMtMTguNjgzYy0xMC4zMTgsMC0xOC42ODMsOC4zNjUtMTguNjgzLDE4LjY4M2g0LjA2OGMwLTguMDcxLDYuNTQzLTE0LjYxNSwxNC42MTUtMTQuNjE1YzguMDcyLDAsMTQuNjE1LDYuNTQzLDE0LjYxNSwxNC42MTVINDMuOTM1eiI+CiAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVUeXBlPSJ4bWwiCiAgICAgIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIKICAgICAgdHlwZT0icm90YXRlIgogICAgICBmcm9tPSIwIDI1IDI1IgogICAgICB0bz0iMzYwIDI1IDI1IgogICAgICBkdXI9IjAuNnMiCiAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIi8+CiAgICA8L3BhdGg+CiAgPC9zdmc+Cg=="); -} - -.chrome-tabs .chrome-tab-title { - position: relative; - display: inline-block; - vertical-align: top; - padding: 0 0.5em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - font-size: 12px; - margin-top: 9px; - max-width: calc(100% - 5em); - pointer-events: none; -} - -.chrome-tabs .chrome-tab-close { - position: absolute; - width: 1.4em; - height: 1.4em; - border-radius: 50%; - z-index: 2; - right: 1.4em; - top: 11px; -} - -.chrome-tabs .chrome-tab-close::before { - content: url("data:image/svg+xml;utf8,"); - position: absolute; - display: block; - top: 0; - right: 0; - bottom: 0; - left: 0; -} - -.chrome-tabs .chrome-tab-close:hover::before, -.chrome-tabs .chrome-tab-close:hover:active::before { - content: url("data:image/svg+xml;utf8,"); -} - -.chrome-tabs .chrome-tab-close:hover { - background: #e25c4b; -} - -.chrome-tabs .chrome-tab-close:hover:active { - background: #b74a3b; -} - -.chrome-tabs .chrome-tab { - width: 243px -} - -.chrome-tabs .chrome-tab:nth-child(1) { - transform: translate3d(0px, 0, 0) -} - -.chrome-tabs .chrome-tab:nth-child(2) { - transform: translate3d(229px, 0, 0) -} \ No newline at end of file diff --git a/electros-ultralight/assets/chrome-tabs.js b/electros-ultralight/assets/chrome-tabs.js deleted file mode 100644 index 42e5067..0000000 --- a/electros-ultralight/assets/chrome-tabs.js +++ /dev/null @@ -1,272 +0,0 @@ -(function(){ - const isNodeContext = typeof module !== 'undefined' && typeof module.exports !== 'undefined' - if (isNodeContext) { - Draggabilly = require('draggabilly') - } - - const tabTemplate = ` -
-
-
-
-
-
-
-
- ` - - const defaultTabProperties = { - title: '', - favicon: '' - } - - let instanceId = 0 - let tabId = 0 - - class ChromeTabs { - constructor() { - this.draggabillyInstances = [] - } - - init(el, options) { - this.el = el - this.options = options - - this.instanceId = instanceId - this.el.setAttribute('data-chrome-tabs-instance-id', this.instanceId) - instanceId += 1 - - this.tabId = tabId - - this.setupStyleEl() - this.setupEvents() - this.layoutTabs() - this.fixZIndexes() - this.setupDraggabilly() - } - - emit(eventName, data) { - this.el.dispatchEvent(new CustomEvent(eventName, { detail: data })) - } - - setupStyleEl() { - this.animationStyleEl = document.createElement('style') - this.el.appendChild(this.animationStyleEl) - } - - setupEvents() { - window.addEventListener('resize', event => this.layoutTabs()) - - document.body.querySelector('#chrome-tabs-add-tab').addEventListener('click', event => this.emit('requestNewTab')) - - this.el.addEventListener('click', ({target}) => { - if (target.classList.contains('chrome-tab')) { - this.setCurrentTab(target) - } else if (target.classList.contains('chrome-tab-close')) { - this.emit('requestTabClose', {tabEl: target.parentNode}) - } else if (target.classList.contains('chrome-tab-title') || target.classList.contains('chrome-tab-favicon')) { - this.setCurrentTab(target.parentNode) - } - }) - } - - get tabEls() { - return Array.prototype.slice.call(this.el.querySelectorAll('.chrome-tab')) - } - - get tabContentEl() { - return this.el.querySelector('.chrome-tabs-content') - } - - get tabWidth() { - const tabsContentWidth = this.tabContentEl.clientWidth - this.options.tabOverlapDistance - const width = (tabsContentWidth / this.tabEls.length) + this.options.tabOverlapDistance - return Math.max(this.options.minWidth, Math.min(this.options.maxWidth, width)) - } - - get tabEffectiveWidth() { - return this.tabWidth - this.options.tabOverlapDistance - } - - get tabPositions() { - const tabEffectiveWidth = this.tabEffectiveWidth - let left = 0 - let positions = [] - - this.tabEls.forEach((tabEl, i) => { - positions.push(left) - left += tabEffectiveWidth - }) - return positions - } - - layoutTabs() { - const tabWidth = this.tabWidth - - this.cleanUpPreviouslyDraggedTabs() - this.tabEls.forEach((tabEl) => tabEl.style.width = tabWidth + 'px') - requestAnimationFrame(() => { - let styleHTML = '' - this.tabPositions.forEach((left, i) => { - styleHTML += ` - .chrome-tabs[data-chrome-tabs-instance-id="${ this.instanceId }"] .chrome-tab:nth-child(${ i + 1}) { - transform: translate3d(${ left }px, 0, 0) - } - ` - }) - this.animationStyleEl.innerHTML = styleHTML - }) - } - - fixZIndexes() { - const bottomBarEl = this.el.querySelector('.chrome-tabs-bottom-bar') - const tabEls = this.tabEls - - tabEls.forEach((tabEl, i) => { - let zIndex = tabEls.length - i - - if (tabEl.classList.contains('chrome-tab-current')) { - bottomBarEl.style.zIndex = tabEls.length + 1 - zIndex = tabEls.length + 2 - } - tabEl.style.zIndex = zIndex - }) - } - - createNewTabEl() { - const div = document.createElement('div') - div.innerHTML = tabTemplate - - return div.firstElementChild - } - - addTab(tabProperties) { - const tabEl = this.createNewTabEl() - - tabEl.setAttribute('data-tab-id', tabProperties.id) - - tabEl.classList.add('chrome-tab-just-added') - setTimeout(() => tabEl.classList.remove('chrome-tab-just-added'), 500) - - tabProperties = Object.assign({}, defaultTabProperties, tabProperties) - this.tabContentEl.appendChild(tabEl) - this.updateTab(tabEl, tabProperties) - this.emit('tabAdd', { tabEl }) - this.setCurrentTab(tabEl) - this.layoutTabs() - this.fixZIndexes() - this.setupDraggabilly() - } - - setCurrentTab(tabEl) { - const currentTab = this.el.querySelector('.chrome-tab-current') - if (currentTab) currentTab.classList.remove('chrome-tab-current') - tabEl.classList.add('chrome-tab-current') - this.fixZIndexes() - this.emit('activeTabChange', { tabEl }) - } - - removeTab(tabEl) { - if (tabEl.classList.contains('chrome-tab-current')) { - if (tabEl.previousElementSibling) { - this.setCurrentTab(tabEl.previousElementSibling) - } else if (tabEl.nextElementSibling) { - this.setCurrentTab(tabEl.nextElementSibling) - } - } - tabEl.parentNode.removeChild(tabEl) - this.emit('tabRemove', { tabEl }) - this.layoutTabs() - this.fixZIndexes() - this.setupDraggabilly() - } - - updateTab(tabEl, tabProperties) { - tabEl.querySelector('.chrome-tab-title').textContent = tabProperties.title - tabEl.querySelector('.chrome-tab-favicon').style.backgroundImage = `url('${tabProperties.favicon}')` - tabEl.querySelector('.chrome-tab-favicon').style.display = tabProperties.loading ? 'none' : 'inline-block' - tabEl.querySelector('.chrome-tab-spinner').style.display = tabProperties.loading ? 'inline-block' : 'none' - } - - cleanUpPreviouslyDraggedTabs() { - this.tabEls.forEach((tabEl) => tabEl.classList.remove('chrome-tab-just-dragged')) - } - - setupDraggabilly() { - const tabEls = this.tabEls - const tabEffectiveWidth = this.tabEffectiveWidth - const tabPositions = this.tabPositions - - this.draggabillyInstances.forEach(draggabillyInstance => draggabillyInstance.destroy()) - - tabEls.forEach((tabEl, originalIndex) => { - const originalTabPositionX = tabPositions[originalIndex] - const draggabillyInstance = new Draggabilly(tabEl, { - axis: 'x', - containment: this.tabContentEl - }) - - this.draggabillyInstances.push(draggabillyInstance) - - draggabillyInstance.on('dragStart', () => { - this.cleanUpPreviouslyDraggedTabs() - tabEl.classList.add('chrome-tab-currently-dragged') - this.el.classList.add('chrome-tabs-sorting') - this.fixZIndexes() - }) - - draggabillyInstance.on('dragEnd', () => { - const finalTranslateX = parseFloat(tabEl.style.left, 10) - tabEl.style.transform = `translate3d(0, 0, 0)` - - // Animate dragged tab back into its place - requestAnimationFrame(() => { - tabEl.style.left = '0' - tabEl.style.transform = `translate3d(${ finalTranslateX }px, 0, 0)` - - requestAnimationFrame(() => { - tabEl.classList.remove('chrome-tab-currently-dragged') - this.el.classList.remove('chrome-tabs-sorting') - - this.setCurrentTab(tabEl) - tabEl.classList.add('chrome-tab-just-dragged') - - requestAnimationFrame(() => { - tabEl.style.transform = '' - - this.setupDraggabilly() - }) - }) - }) - }) - - draggabillyInstance.on('dragMove', (event, pointer, moveVector) => { - // Current index be computed within the event since it can change during the dragMove - const tabEls = this.tabEls - const currentIndex = tabEls.indexOf(tabEl) - - const currentTabPositionX = originalTabPositionX + moveVector.x - const destinationIndex = Math.max(0, Math.min(tabEls.length, Math.floor((currentTabPositionX + (tabEffectiveWidth / 2)) / tabEffectiveWidth))) - - if (currentIndex !== destinationIndex) { - this.animateTabMove(tabEl, currentIndex, destinationIndex) - } - }) - }) - } - - animateTabMove(tabEl, originIndex, destinationIndex) { - if (destinationIndex < originIndex) { - tabEl.parentNode.insertBefore(tabEl, this.tabEls[destinationIndex]) - } else { - tabEl.parentNode.insertBefore(tabEl, this.tabEls[destinationIndex + 1]) - } - } - } - - if (isNodeContext) { - module.exports = ChromeTabs - } else { - window.ChromeTabs = ChromeTabs - } -})() diff --git a/electros-ultralight/assets/draggabilly.pkgd.min.js b/electros-ultralight/assets/draggabilly.pkgd.min.js deleted file mode 100644 index 5a796b0..0000000 --- a/electros-ultralight/assets/draggabilly.pkgd.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * Draggabilly PACKAGED v2.1.1 - * Make that shiz draggable - * http://draggabilly.desandro.com - * MIT license - */ - -!function(t,i){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(e){i(t,e)}):"object"==typeof module&&module.exports?module.exports=i(t,require("jquery")):t.jQueryBridget=i(t,t.jQuery)}(window,function(t,i){function e(e,r,a){function d(t,i,n){var o,r="$()."+e+'("'+i+'")';return t.each(function(t,d){var h=a.data(d,e);if(!h)return void s(e+" not initialized. Cannot call methods, i.e. "+r);var u=h[i];if(!u||"_"==i.charAt(0))return void s(r+" is not a valid method");var c=u.apply(h,n);o=void 0===o?c:o}),void 0!==o?o:t}function h(t,i){t.each(function(t,n){var o=a.data(n,e);o?(o.option(i),o._init()):(o=new r(n,i),a.data(n,e,o))})}a=a||i||t.jQuery,a&&(r.prototype.option||(r.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[e]=function(t){if("string"==typeof t){var i=o.call(arguments,1);return d(this,t,i)}return h(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=e)}var o=Array.prototype.slice,r=t.console,s="undefined"==typeof r?function(){}:function(t){r.error(t)};return n(i||t.jQuery),e}),function(t,i){"function"==typeof define&&define.amd?define("get-size/get-size",[],function(){return i()}):"object"==typeof module&&module.exports?module.exports=i():t.getSize=i()}(window,function(){function t(t){var i=parseFloat(t),e=-1==t.indexOf("%")&&!isNaN(i);return e&&i}function i(){}function e(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},i=0;h>i;i++){var e=d[i];t[e]=0}return t}function n(t){var i=getComputedStyle(t);return i||a("Style returned "+i+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),i}function o(){if(!u){u=!0;var i=document.createElement("div");i.style.width="200px",i.style.padding="1px 2px 3px 4px",i.style.borderStyle="solid",i.style.borderWidth="1px 2px 3px 4px",i.style.boxSizing="border-box";var e=document.body||document.documentElement;e.appendChild(i);var o=n(i);r.isBoxSizeOuter=s=200==t(o.width),e.removeChild(i)}}function r(i){if(o(),"string"==typeof i&&(i=document.querySelector(i)),i&&"object"==typeof i&&i.nodeType){var r=n(i);if("none"==r.display)return e();var a={};a.width=i.offsetWidth,a.height=i.offsetHeight;for(var u=a.isBorderBox="border-box"==r.boxSizing,c=0;h>c;c++){var p=d[c],f=r[p],g=parseFloat(f);a[p]=isNaN(g)?0:g}var l=a.paddingLeft+a.paddingRight,v=a.paddingTop+a.paddingBottom,m=a.marginLeft+a.marginRight,y=a.marginTop+a.marginBottom,b=a.borderLeftWidth+a.borderRightWidth,P=a.borderTopWidth+a.borderBottomWidth,E=u&&s,_=t(r.width);_!==!1&&(a.width=_+(E?0:l+b));var x=t(r.height);return x!==!1&&(a.height=x+(E?0:v+P)),a.innerWidth=a.width-(l+b),a.innerHeight=a.height-(v+P),a.outerWidth=a.width+m,a.outerHeight=a.height+y,a}}var s,a="undefined"==typeof console?i:function(t){console.error(t)},d=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],h=d.length,u=!1;return r}),function(t,i){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",i):"object"==typeof module&&module.exports?module.exports=i():t.EvEmitter=i()}("undefined"!=typeof window?window:this,function(){function t(){}var i=t.prototype;return i.on=function(t,i){if(t&&i){var e=this._events=this._events||{},n=e[t]=e[t]||[];return-1==n.indexOf(i)&&n.push(i),this}},i.once=function(t,i){if(t&&i){this.on(t,i);var e=this._onceEvents=this._onceEvents||{},n=e[t]=e[t]||{};return n[i]=!0,this}},i.off=function(t,i){var e=this._events&&this._events[t];if(e&&e.length){var n=e.indexOf(i);return-1!=n&&e.splice(n,1),this}},i.emitEvent=function(t,i){var e=this._events&&this._events[t];if(e&&e.length){var n=0,o=e[n];i=i||[];for(var r=this._onceEvents&&this._onceEvents[t];o;){var s=r&&r[o];s&&(this.off(t,o),delete r[o]),o.apply(this,i),n+=s?0:1,o=e[n]}return this}},t}),function(t,i){"function"==typeof define&&define.amd?define("unipointer/unipointer",["ev-emitter/ev-emitter"],function(e){return i(t,e)}):"object"==typeof module&&module.exports?module.exports=i(t,require("ev-emitter")):t.Unipointer=i(t,t.EvEmitter)}(window,function(t,i){function e(){}function n(){}var o=n.prototype=Object.create(i.prototype);o.bindStartEvent=function(t){this._bindStartEvent(t,!0)},o.unbindStartEvent=function(t){this._bindStartEvent(t,!1)},o._bindStartEvent=function(i,e){e=void 0===e?!0:!!e;var n=e?"addEventListener":"removeEventListener";t.navigator.pointerEnabled?i[n]("pointerdown",this):t.navigator.msPointerEnabled?i[n]("MSPointerDown",this):(i[n]("mousedown",this),i[n]("touchstart",this))},o.handleEvent=function(t){var i="on"+t.type;this[i]&&this[i](t)},o.getTouch=function(t){for(var i=0;i3||Math.abs(t.y)>3},o.pointerUp=function(t,i){this.emitEvent("pointerUp",[t,i]),this._dragPointerUp(t,i)},o._dragPointerUp=function(t,i){this.isDragging?this._dragEnd(t,i):this._staticClick(t,i)},o._dragStart=function(t,e){this.isDragging=!0,this.dragStartPoint=i.getPointerPoint(e),this.isPreventingClicks=!0,this.dragStart(t,e)},o.dragStart=function(t,i){this.emitEvent("dragStart",[t,i])},o._dragMove=function(t,i,e){this.isDragging&&this.dragMove(t,i,e)},o.dragMove=function(t,i,e){t.preventDefault(),this.emitEvent("dragMove",[t,i,e])},o._dragEnd=function(t,i){this.isDragging=!1,setTimeout(function(){delete this.isPreventingClicks}.bind(this)),this.dragEnd(t,i)},o.dragEnd=function(t,i){this.emitEvent("dragEnd",[t,i])},o.onclick=function(t){this.isPreventingClicks&&t.preventDefault()},o._staticClick=function(t,i){if(!this.isIgnoringMouseUp||"mouseup"!=t.type){var e=t.target.nodeName;("INPUT"==e||"TEXTAREA"==e)&&t.target.focus(),this.staticClick(t,i),"mouseup"!=t.type&&(this.isIgnoringMouseUp=!0,setTimeout(function(){delete this.isIgnoringMouseUp}.bind(this),400))}},o.staticClick=function(t,i){this.emitEvent("staticClick",[t,i])},n.getPointerPoint=i.getPointerPoint,n}),function(t,i){"function"==typeof define&&define.amd?define(["get-size/get-size","unidragger/unidragger"],function(e,n){return i(t,e,n)}):"object"==typeof module&&module.exports?module.exports=i(t,require("get-size"),require("unidragger")):t.Draggabilly=i(t,t.getSize,t.Unidragger)}(window,function(t,i,e){function n(){}function o(t,i){for(var e in i)t[e]=i[e];return t}function r(t){return t instanceof HTMLElement}function s(t,i){this.element="string"==typeof t?d.querySelector(t):t,f&&(this.$element=f(this.element)),this.options=o({},this.constructor.defaults),this.option(i),this._create()}function a(t,i,e){return e=e||"round",i?Math[e](t/i)*i:t}var d=t.document,h=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame,u=0;h||(h=function(t){var i=(new Date).getTime(),e=Math.max(0,16-(i-u)),n=setTimeout(t,e);return u=i+e,n});var c=d.documentElement,p="string"==typeof c.style.transform?"transform":"WebkitTransform",f=t.jQuery,g=s.prototype=Object.create(e.prototype);s.defaults={},g.option=function(t){o(this.options,t)};var l={relative:!0,absolute:!0,fixed:!0};return g._create=function(){this.position={},this._getPosition(),this.startPoint={x:0,y:0},this.dragPoint={x:0,y:0},this.startPosition=o({},this.position);var t=getComputedStyle(this.element);l[t.position]||(this.element.style.position="relative"),this.enable(),this.setHandles()},g.setHandles=function(){this.handles=this.options.handle?this.element.querySelectorAll(this.options.handle):[this.element],this.bindHandles()},g.dispatchEvent=function(i,e,n){var o=[e].concat(n);this.emitEvent(i,o);var r=t.jQuery;if(r&&this.$element)if(e){var s=r.Event(e);s.type=i,this.$element.trigger(s,n)}else this.$element.trigger(i,n)},g._getPosition=function(){var t=getComputedStyle(this.element),i=this._getPositionCoord(t.left,"width"),e=this._getPositionCoord(t.top,"height");this.position.x=isNaN(i)?0:i,this.position.y=isNaN(e)?0:e,this._addTransformPosition(t)},g._getPositionCoord=function(t,e){if(-1!=t.indexOf("%")){var n=i(this.element.parentNode);return n?parseFloat(t)/100*n[e]:0}return parseInt(t,10)},g._addTransformPosition=function(t){var i=t[p];if(0===i.indexOf("matrix")){var e=i.split(","),n=0===i.indexOf("matrix3d")?12:4,o=parseInt(e[n],10),r=parseInt(e[n+1],10);this.position.x+=o,this.position.y+=r}},g.pointerDown=function(t,i){this._dragPointerDown(t,i);var e=d.activeElement;e&&e.blur&&e!=d.body&&e.blur(),this._bindPostStartEvents(t),this.element.classList.add("is-pointer-down"),this.dispatchEvent("pointerDown",t,[i])},g.pointerMove=function(t,i){var e=this._dragPointerMove(t,i);this.dispatchEvent("pointerMove",t,[i,e]),this._dragMove(t,i,e)},g.dragStart=function(t,i){this.isEnabled&&(this._getPosition(),this.measureContainment(),this.startPosition.x=this.position.x,this.startPosition.y=this.position.y,this.setLeftTop(),this.dragPoint.x=0,this.dragPoint.y=0,this.element.classList.add("is-dragging"),this.dispatchEvent("dragStart",t,[i]),this.animate())},g.measureContainment=function(){var t=this.options.containment;if(t){var e=r(t)?t:"string"==typeof t?d.querySelector(t):this.element.parentNode,n=i(this.element),o=i(e),s=this.element.getBoundingClientRect(),a=e.getBoundingClientRect(),h=o.borderLeftWidth+o.borderRightWidth,u=o.borderTopWidth+o.borderBottomWidth,c=this.relativeStartPosition={x:s.left-(a.left+o.borderLeftWidth),y:s.top-(a.top+o.borderTopWidth)};this.containSize={width:o.width-h-c.x-n.width,height:o.height-u-c.y-n.height}}},g.dragMove=function(t,i,e){if(this.isEnabled){var n=e.x,o=e.y,r=this.options.grid,s=r&&r[0],d=r&&r[1];n=a(n,s),o=a(o,d),n=this.containDrag("x",n,s),o=this.containDrag("y",o,d),n="y"==this.options.axis?0:n,o="x"==this.options.axis?0:o,this.position.x=this.startPosition.x+n,this.position.y=this.startPosition.y+o,this.dragPoint.x=n,this.dragPoint.y=o,this.dispatchEvent("dragMove",t,[i,e])}},g.containDrag=function(t,i,e){if(!this.options.containment)return i;var n="x"==t?"width":"height",o=this.relativeStartPosition[t],r=a(-o,e,"ceil"),s=this.containSize[n];return s=a(s,e,"floor"),Math.min(s,Math.max(r,i))},g.pointerUp=function(t,i){this.element.classList.remove("is-pointer-down"),this.dispatchEvent("pointerUp",t,[i]),this._dragPointerUp(t,i)},g.dragEnd=function(t,i){this.isEnabled&&(p&&(this.element.style[p]="",this.setLeftTop()),this.element.classList.remove("is-dragging"),this.dispatchEvent("dragEnd",t,[i]))},g.animate=function(){if(this.isDragging){this.positionDrag();var t=this;h(function(){t.animate()})}},g.setLeftTop=function(){this.element.style.left=this.position.x+"px",this.element.style.top=this.position.y+"px"},g.positionDrag=function(){this.element.style[p]="translate3d( "+this.dragPoint.x+"px, "+this.dragPoint.y+"px, 0)"},g.staticClick=function(t,i){this.dispatchEvent("staticClick",t,[i])},g.enable=function(){this.isEnabled=!0},g.disable=function(){this.isEnabled=!1,this.isDragging&&this.dragEnd()},g.destroy=function(){this.disable(),this.element.style[p]="",this.element.style.left="",this.element.style.top="",this.element.style.position="",this.unbindHandles(),this.$element&&this.$element.removeData("draggabilly")},g._init=n,f&&f.bridget&&f.bridget("draggabilly",s),s}); \ No newline at end of file diff --git a/electros-ultralight/assets/earth.svg b/electros-ultralight/assets/earth.svg deleted file mode 100644 index 540a029..0000000 --- a/electros-ultralight/assets/earth.svg +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/electros-ultralight/assets/electros.py b/electros-ultralight/assets/electros.py deleted file mode 100644 index c3b69d5..0000000 --- a/electros-ultralight/assets/electros.py +++ /dev/null @@ -1,116 +0,0 @@ -import eel -import requests -import os -import json - -# Set web files folder -eel.init('electros') - -@eel.expose -def python_function(x): - return f"Hello from Python! You sent: {x}" - -@eel.expose -def check_service_status(url): - try: - response = requests.get(url, timeout=5) - is_accessible = response.status_code == 200 - if is_accessible != check_service_status.last_status.get(url, None): - print(f"Service status changed for {url}: {'accessible' if is_accessible else 'inaccessible'}") - check_service_status.last_status[url] = is_accessible - return is_accessible - except requests.RequestException: - if check_service_status.last_status.get(url, None) is not False: - print(f"Service status changed for {url}: inaccessible") - check_service_status.last_status[url] = False - return False - -check_service_status.last_status = {} - -def read_configurations(): - config_path = os.path.join(os.path.expanduser('~'), '.elemento', 'settings') - hosts_path = os.path.join(os.path.expanduser('~'), '.elemento', 'hosts') - - config = {} - hosts = [] - - # Read settings - if os.path.exists(config_path): - try: - with open(config_path, 'r') as f: - config = json.load(f) - except json.JSONDecodeError: - print(f"Error: Invalid JSON in {config_path}") - except IOError: - print(f"Error: Unable to read {config_path}") - - # Read hosts - if os.path.exists(hosts_path): - try: - with open(hosts_path, 'r') as f: - hosts = f.read().splitlines() - except IOError: - print(f"Error: Unable to read {hosts_path}") - - return config, hosts - -@eel.expose -def get_configurations(): - config, hosts = read_configurations() - return {'config': config, 'hosts': hosts} - -@eel.expose -def modify_configurations(new_config, new_hosts): - - print('New Config:', new_config) - print('New Hosts:', new_hosts) - - config_path = os.path.join(os.path.expanduser('~'), '.elemento', 'settings') - hosts_path = os.path.join(os.path.expanduser('~'), '.elemento', 'hosts') - - # Update and save settings - try: - with open(config_path, 'w') as f: - json.dump(new_config, f, indent=4) - except IOError: - print(f"Error: Unable to write to {config_path}") - return False - - # Update and save hosts - try: - with open(hosts_path, 'w') as f: - f.write('\n'.join(new_hosts)) - except IOError: - print(f"Error: Unable to write to {hosts_path}") - return False - - return True - -@eel.expose -def update_configurations(config_updates, hosts_updates): - current_config, current_hosts = read_configurations() - - # Update config - current_config.update(config_updates) - - # Update hosts - current_hosts = list(set(current_hosts + hosts_updates)) - - print('Current Config:', current_config) - print('Current Hosts:', current_hosts) - - # Save the updated configurations - return modify_configurations(current_config, current_hosts) - -# Start the app with custom mode and flags -eel.start( - 'electros.html', - size=(800, 600), - mode='kiosk', # or 'chrome-app' if you prefer - port=8888, # Use any available port - cmdline_args=[ - '--disable-gpu', - '--disable-dev-shm-usage', - '--disable-frame-rate-limit' - ] -) \ No newline at end of file diff --git a/electros-ultralight/assets/logo.png b/electros-ultralight/assets/logo.png deleted file mode 100644 index a7a548fbaf3836cf2aa3e6066eb79668fabcf679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55885 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 - - - Release Notes - - - - -
- -

Ultralight v1.3.0 Release Notes

- -

Changelog

-

Major Improvements

-
    -
  • Rewrite CPU renderer to be faster and more accurate (parallel engine built on Skia internals).
  • -
  • Add support for Xbox, PS4, and PS5 platforms.
  • -
  • Improve text rendering accuracy with more intelligent snapping and hinting.
  • -
  • Improve font scaling accuracy at various device scales.
  • -
  • Improve box-shadow rendering accuracy and performance.
  • -
  • Improve performance of layout and JavaScript execution using mimalloc.
  • -
  • Improve performance of JavaScript garbage-collector, reduce per-frame stalls.
  • -
  • Improve consistency of CPU and GPU renderers (both now blend in sRGB).
  • -
  • Add memory profiler and memory statistics tracking.
  • -
  • Add support for gamepad input devices.
  • -
  • Add support for remote web inspector.
  • -
  • Add support for multiple windows to AppCore.
  • -
  • Add support for rendering only a subset of Views.
  • -
  • Add support for dashed strokes to CPU renderer.
  • -
  • Add support for SVG onclick and other events that require path picking.
  • -
  • Add support for HTML5 Video / Audio (experimental) via GStreamer/FFmpeg (disabled by default).
  • -
  • Update user-agent string to reflect proper Safari / WebKit version.
  • -
  • Update to latest CA certificate chain.
  • -
  • Unify build scripts and toolchain.
  • -
-

Major API Changes

-
    -
  • Unify API to use RefPtr<> everywhere (instead of Ref<> class)
  • -
  • Unify API to use String everywhere (instead of String16, String8, etc.).
  • -
  • Make String class use String8 natively (utf-8 is now native representation instead of utf-16).
  • -
  • Make all enums use 'enum class'
  • -
  • Resources now load via FileSystem API instead of fopen().
  • -
  • FileSystem now required to be defined in Platform API before creating Renderer.
  • -
  • Buffer class now accomodates memory-mapped files and destruction callbacks.
  • -
  • FileSystem interface has been reorganized to use new Buffer API.
  • -
  • Portions of Config have been moved to ViewConfig (now certain options can be set per-View).
  • -
  • App::Quit() must now be called manually when using AppCore API.
  • -
  • Add Bitmap::LockPixelsSafe() and LockedPixels<> utility class to manage lifetimes.
  • -
  • Add WebKitVersionString() to query corresponding WebKit version.
  • -
  • Extend AppCore API to enable multi-window support.
  • -
  • Re-organize C API into logical header files.
  • -
  • Add Renderer::StartRemoteInspectorServer
  • -
  • Add Renderer::SetGamepadDetails
  • -
  • Add Renderer::FireGamepadEvent
  • -
  • Add Renderer::FireGamepadAxisEvent
  • -
  • Add Renderer::FireGamepadButtonEvent
  • -
  • Add Renderer::RenderOnly
  • -
  • Modify Renderer::CreateView signature (options moved to ViewConfig param)
  • -
  • Add View::device_scale
  • -
  • Add View::set_device_scale
  • -
  • Add View::is_accelerated
  • -
  • Add View::is_transparent
  • -
  • Add View::JavaScriptVM
  • -
  • Rename View::inspector to View::CreateLocalInspectorView
  • -
  • Modify View::LockJSContext return value (now returns RefPtr<> to manage lifetime)
  • -
  • Add ViewListener::OnCreateInspectorView
  • -
  • Add ViewListener::OnRequestClose
  • -
  • Add WindowListener::OnKeyEvent
  • -
  • Add WindowListener::OnMouseEvent
  • -
  • Add WindowListener::OnScrollEvent
  • -
-

Major Bugfixes

-
    -
  • Fix issue managing clip in CPU and GPU renderers.
  • -
  • Fix issue blending alpha in CPU renderer.
  • -
  • Fix issue stroking paths in CPU renderer.
  • -
  • Fix issue drawing glyphs with complex transformations.
  • -
  • Fix issue drawing radial gradients with CPU renderer.
  • -
  • Fix issue drawing gradients with more than 12 stops.
  • -
  • Fix issue running library off the main thread on macOS.
  • -
  • Fix issue rendering paths that begin with an ArcTo command.
  • -
  • Fix issue where BGRA byte order was not used on all platforms.
  • -
  • Fix issue painting dropdown menus.
  • -
  • Fix issue calculating CSS button height.
  • -
  • Fix issue displaying box-shadows on native inputs.
  • -
  • Fix issue displaying context-menu in web inspector.
  • -
  • Fix issue writing LocalStorage database on Windows.
  • -
  • Fix issue with KeyboardEvent.key in JavaScript always returning null.
  • -
  • Fix issue with LoadListener::OnBeginLoading not passing correct URL.
  • -
  • Fix issue with LoadListener::OnFailLoading not being fired on non-200 HTTP status codes.
  • -
  • Fix issue resizing windows with GPU acceleration enabled (AppCore).
  • -
  • Fix issue calling Window::SetTitle with Unicode strings (AppCore).
  • -
  • Fix issue with anti-aliasing when GPU acceleration is enabled on Linux (AppCore).
  • -
  • Fix issue with automatic DPI switching on Windows (AppCore).
  • -
  • Fix security issue allocating very large render layers.
  • -
  • Fix major performance bug in cURL network code.
  • -
  • Fix memory leak loading certain File URLs.
  • -
  • Fix memory leak when constructing JSString from JSStringRef (AppCore).
  • -
  • Fix various crashes and buffer overruns in Bitmap class.
  • -
  • Fix crash loading certain Data URLs.
  • -
  • Fix crash when Config::bitmap_alignment is 0.
  • -
  • Fix crash when encountering certain text-encodings.
  • -
  • Fix crash when encountering certain JavaScript code.
  • -
  • Fix crash in SQLite database code.
  • -
  • Fix crash at process shutdown.
  • -
- - - - -

Useful Links

-
-
Website
-
ultralig.ht
-
Support Docs
-
docs.ultralig.ht
-
C++ API
-
github.com/ultralight-ux/Ultralight-API
-
- -
- -

- Ultralight Team

-
- - - \ No newline at end of file diff --git a/electros-ultralight/assets/requirements.txt b/electros-ultralight/assets/requirements.txt deleted file mode 100644 index 9a38173..0000000 --- a/electros-ultralight/assets/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -eel -requests diff --git a/electros-ultralight/assets/spinner.svg b/electros-ultralight/assets/spinner.svg deleted file mode 100644 index 466ff9c..0000000 --- a/electros-ultralight/assets/spinner.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/electros-ultralight/assets/ui.css b/electros-ultralight/assets/ui.css deleted file mode 100644 index cb85cff..0000000 --- a/electros-ultralight/assets/ui.css +++ /dev/null @@ -1,73 +0,0 @@ -* { - overflow: hidden; - user-select: none; - -webkit-user-select: none; -} - -body { - margin: 0; - padding: 0; - font-family: "Segoe UI", -apple-system, Ubuntu, Arial, sans-serif; - font-size: 14px; - background: #16151d; - color: #c4c2d0; -} - -#bar { - background: #232330; - background: linear-gradient(0deg, #232330, #282836); - height: 32px; - padding: 4px 9px; - border-bottom: 0.8px solid #252532; - cursor: default; - display: flex; -} - -#address { - border-radius: 24px; - border: none; - height: 32px; - flex: 1; - font-size: 14px; - color: #c4c2d0; - background-color: #16151d; - display: inline-block; - padding: 2px 16px 2px 16px; - margin-top: 0px; - margin-left: 9px; - margin-right: 9px; - user-select: auto !important; - -webkit-user-select: text !important; -} - -#address:focus { - background-color: #16151d; - color: #FFF; -} - -.icon { - cursor: default; - fill: rgba(200, 200, 200, 1.0); - vertical-align: top; - margin-top: -1px; - padding: 5px; - height: 22px; -} - -#back { - margin-left: 0px; -} - -.icon.disabled { - - fill: rgb(99 96 116); -} - -svg#icon_defs path { - fill: inherit; -} - -.icon:not(.disabled):hover { - background-color: #343446; - border-radius: 100%; -} \ No newline at end of file diff --git a/electros-ultralight/assets/ui.html b/electros-ultralight/assets/ui.html deleted file mode 100644 index 6cf0f60..0000000 --- a/electros-ultralight/assets/ui.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - \ No newline at end of file diff --git a/electros-ultralight/assets/ui.js b/electros-ultralight/assets/ui.js deleted file mode 100644 index fa77f8e..0000000 --- a/electros-ultralight/assets/ui.js +++ /dev/null @@ -1,27 +0,0 @@ -function updateBack(enable) { - if (enable) - document.getElementById("back").classList.remove("disabled"); - else - document.getElementById("back").classList.add("disabled"); -} - -function updateForward(enable) { - if (enable) - document.getElementById("forward").classList.remove("disabled"); - else - document.getElementById("forward").classList.add("disabled"); -} - -function updateLoading(is_loading) { - if (is_loading) { - document.getElementById("refresh").style.display = "none"; - document.getElementById("stop").style.display = "inline-block"; - } else { - document.getElementById("refresh").style.display = "inline-block"; - document.getElementById("stop").style.display = "none"; - } -} - -function updateURL(url) { - document.getElementById('address').value = url; -} \ No newline at end of file diff --git a/electros-ultralight/build.sh b/electros-ultralight/build.sh deleted file mode 100755 index 335684f..0000000 --- a/electros-ultralight/build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -echo "Building..." - -cmake -B build -cmake --build build --config Release --clean-first - -echo "Build complete!" \ No newline at end of file diff --git a/electros-ultralight/cmake/Electros.cmake b/electros-ultralight/cmake/Electros.cmake deleted file mode 100644 index 2bf6dbb..0000000 --- a/electros-ultralight/cmake/Electros.cmake +++ /dev/null @@ -1,122 +0,0 @@ -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -include(${CMAKE_ROOT}/Modules/ExternalProject.cmake) - -set(SDK_ROOT "${CMAKE_BINARY_DIR}/SDK/") -set(ULTRALIGHT_INCLUDE_DIR "${SDK_ROOT}/include") -set(ULTRALIGHT_BINARY_DIR "${SDK_ROOT}/bin") -set(ULTRALIGHT_RESOURCES_DIR "${SDK_ROOT}/resources") -set(ULTRALIGHT_INSPECTOR_DIR "${SDK_ROOT}/inspector") - -if (NOT PLATFORM) - if (UNIX) - if (APPLE) - set(PORT UltralightMac) - set(PLATFORM "mac") - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/bin") - else () - set(PORT UltralightLinux) - set(PLATFORM "linux") - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/bin") - endif () - elseif (CMAKE_SYSTEM_NAME MATCHES "Windows") - set(PORT UltralightWin) - set(PLATFORM "win") - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/lib") - else () - message(FATAL_ERROR "Unknown OS '${CMAKE_SYSTEM_NAME}'") - endif () -else () - if (PLATFORM MATCHES "mac") - set(PORT UltralightMac) - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/bin") - elseif (PLATFORM MATCHES "linux") - set(PORT UltralightLinux) - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/bin") - elseif (PLATFORM MATCHES "win") - set(PORT UltralightWin) - set(ULTRALIGHT_LIBRARY_DIR "${SDK_ROOT}/lib") - else () - message(FATAL_ERROR "Unknown platform '${PLATFORM}'") - endif () -endif () - -if (NOT ARCHITECTURE) - set(ARCHITECTURE "arm64") -endif() - -if(NOT VERSION) - set(VERSION "1.4.0b") -endif() - -if(NOT BASE_URL) - set(BASE_URL "ultralight-files.sfo3.cdn.digitaloceanspaces.com") -endif() - -ExternalProject_Add(UltralightSDK - URL https://${BASE_URL}/ultralight-sdk-${VERSION}-${PLATFORM}-${ARCHITECTURE}.7z - SOURCE_DIR "${SDK_ROOT}" - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" -) - -MACRO(ADD_APP source_list) - set(APP_NAME ${CMAKE_PROJECT_NAME}) - - include_directories("${ULTRALIGHT_INCLUDE_DIR}") - link_directories("${ULTRALIGHT_LIBRARY_DIR}") - link_libraries(UltralightCore AppCore Ultralight WebCore) - - if (PORT MATCHES "UltralightLinux") - SET(CMAKE_SKIP_BUILD_RPATH FALSE) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) - SET(CMAKE_INSTALL_RPATH "$\{ORIGIN\}") - endif () - - if (PORT MATCHES "UltralightMac") - SET(CMAKE_SKIP_BUILD_RPATH FALSE) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) - SET(CMAKE_INSTALL_RPATH "@executable_path/") - endif () - - add_executable(${APP_NAME} WIN32 MACOSX_BUNDLE ${source_list}) - - if (APPLE) - # Enable High-DPI on macOS through our custom Info.plist template - set_target_properties(${APP_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Info.plist.in) - endif() - - if (MSVC) - # Tell MSVC to use main instead of WinMain for Windows subsystem executables - set_target_properties(${APP_NAME} PROPERTIES LINK_FLAGS "/ENTRY:mainCRTStartup") - endif() - - # Copy all binaries to target directory - add_custom_command(TARGET ${APP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${ULTRALIGHT_BINARY_DIR}" $) - - # Set the assets path to "/assets" or "/../Resources/assets" on macOS - if (APPLE) - set(ASSETS_PATH "$/../Resources/assets") - else () - set(ASSETS_PATH "$/assets") - endif () - - # Copy assets to assets path - add_custom_command(TARGET ${APP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/assets/" "${ASSETS_PATH}") - - if(${ENABLE_INSPECTOR}) - # Copy inspector to assets directory - add_custom_command(TARGET ${APP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${ULTRALIGHT_INSPECTOR_DIR}" "${ASSETS_PATH}/inspector") - endif () - - # Copy resources to assets directory - add_custom_command(TARGET ${APP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${ULTRALIGHT_RESOURCES_DIR}" "${ASSETS_PATH}/resources") - - add_dependencies(${APP_NAME} UltralightSDK) -ENDMACRO() \ No newline at end of file diff --git a/electros-ultralight/cmake/Info.plist.in b/electros-ultralight/cmake/Info.plist.in deleted file mode 100644 index b782d3b..0000000 --- a/electros-ultralight/cmake/Info.plist.in +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${MACOSX_BUNDLE_EXECUTABLE_NAME} - CFBundleGetInfoString - ${MACOSX_BUNDLE_INFO_STRING} - CFBundleIconFile - ${MACOSX_BUNDLE_ICON_FILE} - CFBundleIdentifier - ${MACOSX_BUNDLE_GUI_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleLongVersionString - ${MACOSX_BUNDLE_LONG_VERSION_STRING} - CFBundleName - ${MACOSX_BUNDLE_BUNDLE_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - ${MACOSX_BUNDLE_SHORT_VERSION_STRING} - CFBundleSignature - ???? - CFBundleVersion - ${MACOSX_BUNDLE_BUNDLE_VERSION} - CSResourcesFileMapped - - NSHumanReadableCopyright - ${MACOSX_BUNDLE_COPYRIGHT} - NSHighResolutionCapable - true - - diff --git a/electros-ultralight/run_mac.sh b/electros-ultralight/run_mac.sh deleted file mode 100755 index 2d99510..0000000 --- a/electros-ultralight/run_mac.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/bash - -open build/Electros.app \ No newline at end of file diff --git a/electros-ultralight/src/Browser.cpp b/electros-ultralight/src/Browser.cpp deleted file mode 100644 index bc7069c..0000000 --- a/electros-ultralight/src/Browser.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "Browser.h" -#include -#include -#include - -Browser::Browser() { - Settings settings; - Config config; - config.scroll_timer_delay = 1.0 / 90.0; - app_ = App::Create(settings, config); - - window_ = Window::Create(app_->main_monitor(), 1800, 1200, false, - kWindowFlags_Resizable | kWindowFlags_Titled | kWindowFlags_Maximizable); - window_->SetTitle("Elemento Electros"); - - // Create the UI - ui_.reset(new UI(window_)); - window_->set_listener(ui_.get()); -} - -Browser::~Browser() { - window_->set_listener(nullptr); - - ui_.reset(); - - window_ = nullptr; - app_ = nullptr; -} - -void Browser::Run() { - app_->Run(); -} diff --git a/electros-ultralight/src/Browser.h b/electros-ultralight/src/Browser.h deleted file mode 100644 index 8b23e14..0000000 --- a/electros-ultralight/src/Browser.h +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "UI.h" - -using namespace ultralight; - -class Browser { -public: - Browser(); - virtual ~Browser(); - - virtual void Run(); - -protected: - RefPtr app_; - RefPtr window_; - std::unique_ptr ui_; -}; diff --git a/electros-ultralight/src/Tab.cpp b/electros-ultralight/src/Tab.cpp deleted file mode 100644 index 2a3c8f7..0000000 --- a/electros-ultralight/src/Tab.cpp +++ /dev/null @@ -1,181 +0,0 @@ -#include "Tab.h" -#include "UI.h" -#include -#include - -#define INSPECTOR_DRAG_HANDLE_HEIGHT 10 - -Tab::Tab(UI* ui, uint64_t id, uint32_t width, uint32_t height, int x, int y) - : ui_(ui), id_(id), container_width_(width), container_height_(height) { - overlay_ = Overlay::Create(ui->window_, width, height, x, y); - view()->set_view_listener(this); - view()->set_load_listener(this); -} - -Tab::~Tab() { - view()->set_view_listener(nullptr); - view()->set_load_listener(nullptr); -} - -void Tab::Show() { - overlay_->Show(); - overlay_->Focus(); - - if (inspector_overlay_) - inspector_overlay_->Show(); -} - -void Tab::Hide() { - overlay_->Hide(); - overlay_->Unfocus(); - - if (inspector_overlay_) - inspector_overlay_->Hide(); -} - -void Tab::ToggleInspector() { - if (!inspector_overlay_) { - view()->CreateLocalInspectorView(); - } else { - if (inspector_overlay_->is_hidden()) { - inspector_overlay_->Show(); - } else { - inspector_overlay_->Hide(); - } - } - - // Force resize to update layout -} - - -bool Tab::IsInspectorShowing() const { - if (!inspector_overlay_) - return false; - - return !inspector_overlay_->is_hidden(); -} - -IntRect Tab::GetInspectorResizeDragHandle() const { - if (!IsInspectorShowing()) - return IntRect::MakeEmpty(); - - int drag_handle_height_px = (uint32_t)std::round(INSPECTOR_DRAG_HANDLE_HEIGHT * ui_->window()->scale()); - - // This drag handle should span the width of the UI and be centered vertically at the boundary between - // the page overlay and inspector overlay. - - int drag_handle_x = (int)inspector_overlay_->x(); - int drag_handle_y = (int)inspector_overlay_->y() - drag_handle_height_px / 2; - - return { drag_handle_x, drag_handle_y, drag_handle_x + (int)inspector_overlay_->width(), - drag_handle_y + drag_handle_height_px }; -} - -int Tab::GetInspectorHeight() const { - if (inspector_overlay_) - return inspector_overlay_->height(); - - return 0; -} - -void Tab::SetInspectorHeight(int height) { - if (height > 2) { - inspector_overlay_->Resize(inspector_overlay_->width(), height); - - // Trigger a resize to perform re-layout / re-size of content overlay - Resize(container_width_, container_height_); - } -} - -void Tab::Resize(uint32_t width, uint32_t height) { - container_width_ = width; - container_height_ = height; - - uint32_t content_height = container_height_; - if (inspector_overlay_ && !inspector_overlay_->is_hidden()) { - content_height -= inspector_overlay_->height(); - } - - if (content_height < 1) - content_height = 1; - - overlay_->Resize(container_width_, content_height); - - if (inspector_overlay_ && !inspector_overlay_->is_hidden()) { - inspector_overlay_->MoveTo(0, overlay_->y() + overlay_->height()); - inspector_overlay_->Resize(container_width_, inspector_overlay_->height()); - } -} - -void Tab::OnChangeTitle(View* caller, const String& title) { - ui_->UpdateTabTitle(id_, title); -} - -void Tab::OnChangeURL(View* caller, const String& url) { - ui_->UpdateTabURL(id_, url); -} - -void Tab::OnChangeTooltip(View* caller, const String& tooltip) {} - -void Tab::OnChangeCursor(View* caller, Cursor cursor) { - if (id_ == ui_->active_tab_id_) - ui_->SetCursor(cursor); -} - -void Tab::OnAddConsoleMessage(View* caller, const ConsoleMessage& msg) { -} - -RefPtr Tab::OnCreateChildView(ultralight::View* caller, - const String& opener_url, const String& target_url, - bool is_popup, const IntRect& popup_rect) { - return ui_->CreateNewTabForChildView(target_url); -} - -RefPtr Tab::OnCreateInspectorView(ultralight::View* caller, bool is_local, - const String& inspected_url) { - if (inspector_overlay_) - return nullptr; - - inspector_overlay_ = Overlay::Create(ui_->window_, container_width_, container_height_ / 2, 0, 0); - - // Force resize to update layout - Resize(container_width_, container_height_); - inspector_overlay_->Show(); - - return inspector_overlay_->view(); -} - -void Tab::OnBeginLoading(View* caller, uint64_t frame_id, bool is_main_frame, const String& url) { - ui_->UpdateTabNavigation(id_, caller->is_loading(), caller->CanGoBack(), caller->CanGoForward()); -} - -void Tab::OnFinishLoading(View* caller, uint64_t frame_id, bool is_main_frame, const String& url) { - ui_->UpdateTabNavigation(id_, caller->is_loading(), caller->CanGoBack(), caller->CanGoForward()); -} - -void Tab::OnFailLoading(View* caller, uint64_t frame_id, bool is_main_frame, const String& url, - const String& description, const String& error_domain, int error_code) { - if (is_main_frame) { - char error_code_str[16]; - sprintf(error_code_str,"%d", error_code); - - String html_string = ""; - html_string += "

A Network Error was Encountered

"; - html_string += "
"; - html_string += "
URL
" + url + "
"; - html_string += "
Description
" + description + "
"; - html_string += "
Error Domain
" + error_domain + "
"; - html_string += "
Error Code
" + String(error_code_str) + "
"; - html_string += "
"; - - view()->LoadHTML(html_string); - } -} - -void Tab::OnUpdateHistory(View* caller) { - ui_->UpdateTabNavigation(id_, caller->is_loading(), caller->CanGoBack(), caller->CanGoForward()); -} diff --git a/electros-ultralight/src/Tab.h b/electros-ultralight/src/Tab.h deleted file mode 100644 index 9e4b66c..0000000 --- a/electros-ultralight/src/Tab.h +++ /dev/null @@ -1,67 +0,0 @@ -#pragma once -#include -#include - -class UI; -using namespace ultralight; - -/** -* Browser Tab UI implementation. Renders the actual page content in bottom pane. -*/ -class Tab : public ViewListener, - public LoadListener { -public: - Tab(UI* ui, uint64_t id, uint32_t width, uint32_t height, int x, int y); - ~Tab(); - - void set_ready_to_close(bool ready) { ready_to_close_ = ready; } - bool ready_to_close() { return ready_to_close_; } - - RefPtr view() { return overlay_->view(); } - - void Show(); - - void Hide(); - - void ToggleInspector(); - - bool IsInspectorShowing() const; - - IntRect GetInspectorResizeDragHandle() const; - - int GetInspectorHeight() const; - - void SetInspectorHeight(int height); - - void Resize(uint32_t width, uint32_t height); - - // Inherited from Listener::View - virtual void OnChangeTitle(View* caller, const String& title) override; - virtual void OnChangeURL(View* caller, const String& url) override; - virtual void OnChangeTooltip(View* caller, const String& tooltip) override; - virtual void OnChangeCursor(View* caller, Cursor cursor) override; - virtual void OnAddConsoleMessage(View* caller, const ConsoleMessage& msg) override; - virtual RefPtr OnCreateChildView(ultralight::View* caller, - const String& opener_url, const String& target_url, - bool is_popup, const IntRect& popup_rect) override; - virtual RefPtr OnCreateInspectorView(ultralight::View* caller, bool is_local, - const String& inspected_url) override; - - // Inherited from Listener::Load - virtual void OnBeginLoading(View* caller, uint64_t frame_id, - bool is_main_frame, const String& url) override; - virtual void OnFinishLoading(View* caller, uint64_t frame_id, - bool is_main_frame, const String& url) override; - virtual void OnFailLoading(View* caller, uint64_t frame_id, - bool is_main_frame, const String& url, const String& description, - const String& error_domain, int error_code) override; - virtual void OnUpdateHistory(View* caller) override; - -protected: - UI* ui_; - RefPtr overlay_; - RefPtr inspector_overlay_; - uint64_t id_; - bool ready_to_close_ = false; - uint32_t container_width_, container_height_; -}; diff --git a/electros-ultralight/src/UI.cpp b/electros-ultralight/src/UI.cpp deleted file mode 100644 index 5c1f868..0000000 --- a/electros-ultralight/src/UI.cpp +++ /dev/null @@ -1,284 +0,0 @@ -#include "UI.h" - -static UI* g_ui = 0; - -#define UI_HEIGHT 80 - -UI::UI(RefPtr window) : window_(window), cur_cursor_(Cursor::kCursor_Pointer), -is_resizing_inspector_(false), is_over_inspector_resize_drag_handle_(false) { - uint32_t window_width = window_->width(); - ui_height_ = (uint32_t)std::round(UI_HEIGHT * window_->scale()); - overlay_ = Overlay::Create(window_, window_width, ui_height_, 0, 0); - g_ui = this; - - view()->set_load_listener(this); - view()->set_view_listener(this); - view()->LoadURL("file:///ui.html"); -} - -UI::~UI() { - view()->set_load_listener(nullptr); - view()->set_view_listener(nullptr); - g_ui = nullptr; -} - -bool UI::OnKeyEvent(const ultralight::KeyEvent& evt) { - return true; -} - -bool UI::OnMouseEvent(const ultralight::MouseEvent& evt) { - if (active_tab() && active_tab()->IsInspectorShowing()) { - float x_px = std::round(evt.x * window()->scale()); - float y_px = std::round(evt.y * window()->scale()); - - if (is_resizing_inspector_) { - int resize_delta = inspector_resize_begin_mouse_y_ - y_px; - int new_inspector_height = inspector_resize_begin_height_ + resize_delta; - active_tab()->SetInspectorHeight(new_inspector_height); - - if (evt.type == MouseEvent::kType_MouseUp) { - is_resizing_inspector_ = false; - } - - return false; - } - - IntRect drag_handle = active_tab()->GetInspectorResizeDragHandle(); - - bool over_drag_handle = drag_handle.Contains(Point(x_px, y_px)); - - if (over_drag_handle && !is_over_inspector_resize_drag_handle_) { - // We entered the drag area - window()->SetCursor(Cursor::kCursor_NorthSouthResize); - is_over_inspector_resize_drag_handle_ = true; - } else if (!over_drag_handle && is_over_inspector_resize_drag_handle_) { - // We left the drag area, restore previous cursor - window()->SetCursor(cur_cursor_); - is_over_inspector_resize_drag_handle_ = false; - } - - if (over_drag_handle && evt.type == MouseEvent::kType_MouseDown && !is_resizing_inspector_) { - is_resizing_inspector_ = true; - inspector_resize_begin_mouse_y_ = y_px; - inspector_resize_begin_height_ = active_tab()->GetInspectorHeight(); - } - - return !over_drag_handle; - } - - return true; -} - -void UI::OnClose(ultralight::Window* window) { - App::instance()->Quit(); -} - -void UI::OnResize(ultralight::Window* window, uint32_t width, uint32_t height) { - int tab_height = window->height() - ui_height_; - - if (tab_height < 1) - tab_height = 1; - - overlay_->Resize(window->width(), ui_height_); - - for (auto& tab : tabs_) { - if (tab.second) - tab.second->Resize(window->width(), (uint32_t)tab_height); - } -} - -void UI::OnDOMReady(View* caller, uint64_t frame_id, bool is_main_frame, const String& url) { - // Set the context for all subsequent JS* calls - RefPtr locked_context = view()->LockJSContext(); - SetJSContext(locked_context->ctx()); - - JSObject global = JSGlobalObject(); - updateBack = global["updateBack"]; - updateForward = global["updateForward"]; - updateLoading = global["updateLoading"]; - updateURL = global["updateURL"]; - addTab = global["addTab"]; - updateTab = global["updateTab"]; - closeTab = global["closeTab"]; - - global["OnBack"] = BindJSCallback(&UI::OnBack); - global["OnForward"] = BindJSCallback(&UI::OnForward); - global["OnRefresh"] = BindJSCallback(&UI::OnRefresh); - global["OnStop"] = BindJSCallback(&UI::OnStop); - global["OnToggleTools"] = BindJSCallback(&UI::OnToggleTools); - global["OnRequestNewTab"] = BindJSCallback(&UI::OnRequestNewTab); - global["OnRequestTabClose"] = BindJSCallback(&UI::OnRequestTabClose); - global["OnActiveTabChange"] = BindJSCallback(&UI::OnActiveTabChange); - global["OnRequestChangeURL"] = BindJSCallback(&UI::OnRequestChangeURL); - - CreateNewTab(); -} - -void UI::OnBack(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->view()->GoBack(); -} - -void UI::OnForward(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->view()->GoForward(); -} - -void UI::OnRefresh(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->view()->Reload(); -} - -void UI::OnStop(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->view()->Stop(); -} - -void UI::OnToggleTools(const JSObject& obj, const JSArgs& args) { - if (active_tab()) - active_tab()->ToggleInspector(); -} - -void UI::OnRequestNewTab(const JSObject& obj, const JSArgs& args) { - CreateNewTab(); -} - -void UI::OnRequestTabClose(const JSObject& obj, const JSArgs& args) { - if (args.size() == 1) { - uint64_t id = args[0]; - - auto& tab = tabs_[id]; - if (!tab) - return; - - if (tabs_.size() == 1 && App::instance()) - App::instance()->Quit(); - - if (id != active_tab_id_) { - tabs_[id].reset(); - tabs_.erase(id); - } - else { - tab->set_ready_to_close(true); - } - - RefPtr lock(view()->LockJSContext()); - closeTab({ id }); - } -} - -void UI::OnActiveTabChange(const JSObject& obj, const JSArgs& args) { - if (args.size() == 1) { - uint64_t id = args[0]; - - if (id == active_tab_id_) - return; - - auto& tab = tabs_[id]; - if (!tab) - return; - - tabs_[active_tab_id_]->Hide(); - - if (tabs_[active_tab_id_]->ready_to_close()) { - tabs_[active_tab_id_].reset(); - tabs_.erase(active_tab_id_); - } - - active_tab_id_ = id; - tabs_[active_tab_id_]->Show(); - - auto tab_view = tabs_[active_tab_id_]->view(); - SetLoading(tab_view->is_loading()); - SetCanGoBack(tab_view->CanGoBack()); - SetCanGoForward(tab_view->CanGoBack()); - SetURL(tab_view->url()); - } -} - -void UI::OnRequestChangeURL(const JSObject& obj, const JSArgs& args) { - if (args.size() == 1) { - ultralight::String url = args[0]; - - if (!tabs_.empty()) { - auto& tab = tabs_[active_tab_id_]; - tab->view()->LoadURL(url); - } - } -} - -void UI::CreateNewTab() { - uint64_t id = tab_id_counter_++; - RefPtr window = window_; - int tab_height = window->height() - ui_height_; - if (tab_height < 1) - tab_height = 1; - tabs_[id].reset(new Tab(this, id, window->width(), (uint32_t)tab_height, 0, ui_height_)); - tabs_[id]->view()->LoadURL("file:///electros/electros/electros.html"); - - RefPtr lock(view()->LockJSContext()); - addTab({ id, "New Tab", "", tabs_[id]->view()->is_loading() }); -} - -RefPtr UI::CreateNewTabForChildView(const String& url) { - uint64_t id = tab_id_counter_++; - RefPtr window = window_; - int tab_height = window->height() - ui_height_; - if (tab_height < 1) - tab_height = 1; - tabs_[id].reset(new Tab(this, id, window->width(), (uint32_t)tab_height, 0, ui_height_)); - - RefPtr lock(view()->LockJSContext()); - addTab({ id, "", url, tabs_[id]->view()->is_loading() }); - - return tabs_[id]->view(); -} - -void UI::UpdateTabTitle(uint64_t id, const ultralight::String& title) { - RefPtr lock(view()->LockJSContext()); - updateTab({ id, title, "", tabs_[id]->view()->is_loading() }); -} - -void UI::UpdateTabURL(uint64_t id, const ultralight::String& url) { - if (id == active_tab_id_ && !tabs_.empty()) - SetURL(url); -} - -void UI::UpdateTabNavigation(uint64_t id, bool is_loading, bool can_go_back, bool can_go_forward) { - if (tabs_.empty()) - return; - - RefPtr lock(view()->LockJSContext()); - updateTab({ id, tabs_[id]->view()->title(), "", tabs_[id]->view()->is_loading() }); - - if (id == active_tab_id_) { - SetLoading(is_loading); - SetCanGoBack(can_go_back); - SetCanGoForward(can_go_forward); - } -} - -void UI::SetLoading(bool is_loading) { - RefPtr lock(view()->LockJSContext()); - updateLoading({ is_loading }); -} - -void UI::SetCanGoBack(bool can_go_back) { - RefPtr lock(view()->LockJSContext()); - updateBack({ can_go_back }); -} - -void UI::SetCanGoForward(bool can_go_forward) { - RefPtr lock(view()->LockJSContext()); - updateForward({ can_go_forward }); -} - -void UI::SetURL(const ultralight::String& url) { - RefPtr lock(view()->LockJSContext()); - updateURL({ url }); -} - -void UI::SetCursor(ultralight::Cursor cursor) { - if (App::instance()) - window_->SetCursor(cursor); -} diff --git a/electros-ultralight/src/UI.h b/electros-ultralight/src/UI.h deleted file mode 100644 index 3944903..0000000 --- a/electros-ultralight/src/UI.h +++ /dev/null @@ -1,91 +0,0 @@ -#pragma once -#include -#include "Tab.h" -#include -#include - -using ultralight::JSObject; -using ultralight::JSArgs; -using ultralight::JSFunction; -using namespace ultralight; - -class Console; - -/** -* Browser UI implementation. Renders the toolbar/addressbar/tabs in top pane. -*/ -class UI : public WindowListener, - public LoadListener, - public ViewListener { - public: - UI(RefPtr window); - ~UI(); - - // Inherited from WindowListener - virtual bool OnKeyEvent(const ultralight::KeyEvent& evt) override; - virtual bool OnMouseEvent(const ultralight::MouseEvent& evt) override; - virtual void OnClose(ultralight::Window* window) override; - virtual void OnResize(ultralight::Window* window, uint32_t width, uint32_t height) override; - - // Inherited from LoadListener - virtual void OnDOMReady(View* caller, uint64_t frame_id, - bool is_main_frame, const String& url) override; - - // Inherited from ViewListener - virtual void OnChangeCursor(ultralight::View* caller, Cursor cursor) override { SetCursor(cursor); } - - // Called by UI JavaScript - void OnBack(const JSObject& obj, const JSArgs& args); - void OnForward(const JSObject& obj, const JSArgs& args); - void OnRefresh(const JSObject& obj, const JSArgs& args); - void OnStop(const JSObject& obj, const JSArgs& args); - void OnToggleTools(const JSObject& obj, const JSArgs& args); - void OnRequestNewTab(const JSObject& obj, const JSArgs& args); - void OnRequestTabClose(const JSObject& obj, const JSArgs& args); - void OnActiveTabChange(const JSObject& obj, const JSArgs& args); - void OnRequestChangeURL(const JSObject& obj, const JSArgs& args); - - RefPtr window() { return window_; } - -protected: - void CreateNewTab(); - RefPtr CreateNewTabForChildView(const String& url); - void UpdateTabTitle(uint64_t id, const String& title); - void UpdateTabURL(uint64_t id, const String& url); - void UpdateTabNavigation(uint64_t id, bool is_loading, bool can_go_back, bool can_go_forward); - - void SetLoading(bool is_loading); - void SetCanGoBack(bool can_go_back); - void SetCanGoForward(bool can_go_forward); - void SetURL(const String& url); - void SetCursor(Cursor cursor); - - Tab* active_tab() { return tabs_.empty() ? nullptr : tabs_[active_tab_id_].get(); } - - RefPtr view() { return overlay_->view(); } - - RefPtr window_; - RefPtr overlay_; - int ui_height_; - int tab_height_; - float scale_; - - std::map> tabs_; - uint64_t active_tab_id_ = 0; - uint64_t tab_id_counter_ = 0; - Cursor cur_cursor_; - bool is_resizing_inspector_; - bool is_over_inspector_resize_drag_handle_; - int inspector_resize_begin_height_; - int inspector_resize_begin_mouse_y_; - - JSFunction updateBack; - JSFunction updateForward; - JSFunction updateLoading; - JSFunction updateURL; - JSFunction addTab; - JSFunction updateTab; - JSFunction closeTab; - - friend class Tab; -}; diff --git a/electros-ultralight/src/main.cpp b/electros-ultralight/src/main.cpp deleted file mode 100644 index c556b90..0000000 --- a/electros-ultralight/src/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "Browser.h" - -#define ENABLE_PAUSE_FOR_DEBUGGER 0 - -#if defined(_WIN32) && ENABLE_PAUSE_FOR_DEBUGGER -#include -void PauseForDebugger() { MessageBoxA(NULL, "Pause", "Caption", MB_OKCANCEL); } -#else -void PauseForDebugger() { } -#endif - -int main() { - PauseForDebugger(); - - Browser browser; - browser.Run(); - return 0; -} From 4a05f5d6e494f190035e0f23e8637219a37a5a40 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 6 Feb 2026 09:31:30 +0100 Subject: [PATCH 097/109] Updated GUI --- elemento-gui-new | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elemento-gui-new b/elemento-gui-new index 609ab26..5755bd2 160000 --- a/elemento-gui-new +++ b/elemento-gui-new @@ -1 +1 @@ -Subproject commit 609ab267addfa2da4764cf40cea5826a62efbcda +Subproject commit 5755bd2d115d68c748887a518f79cd84a5d9f7a7 From 0c9792d5937d59f6a2020a972cb9f87bdfcabaf9 Mon Sep 17 00:00:00 2001 From: srobaldo Date: Fri, 6 Feb 2026 11:53:31 +0100 Subject: [PATCH 098/109] Modified daemon terminal - Rendering of fonts has been fixed - Colours have been added --- electros-electron/common/Daemons.js | 6 +- electros-electron/main.js | 2 +- electros-electron/package.json | 3 +- electros-electron/terminal/terminal.html | 99 ++++++++++++++++++------ 4 files changed, 81 insertions(+), 29 deletions(-) diff --git a/electros-electron/common/Daemons.js b/electros-electron/common/Daemons.js index 75de9ae..92ec4b8 100644 --- a/electros-electron/common/Daemons.js +++ b/electros-electron/common/Daemons.js @@ -22,13 +22,13 @@ export class Daemons { static Launch(platform, __dirname) { if (app.commandLine.hasSwitch("no-daemons")) { console.log("Daemons have been disabled by `--no-daemons`"); - Terminal.Write("Elemento Client Daemons have been disabled by `--no-daemons`."); + Terminal.Write("[INFO] Elemento Client Daemons have been disabled by `--no-daemons`."); throw new DaemonsNotEnabledError(); } if (!app.isPackaged) { - Terminal.Write("Electros is not packaged. Daemons might have to be manually started.") - console.log("Electros is not packaged. Daemons might have to be manually started.") + Terminal.Write("[WARNING] Electros is not packaged. Daemons might have to be manually started.") + console.warn("Electros is not packaged. Daemons might have to be manually started.") } const execPath = Daemons._GetCommand(platform, __dirname); diff --git a/electros-electron/main.js b/electros-electron/main.js index bb0cdf3..2978b9f 100644 --- a/electros-electron/main.js +++ b/electros-electron/main.js @@ -1,6 +1,6 @@ const {app, BrowserWindow, ipcMain, Menu, nativeTheme, shell, safeStorage} = require('electron'); -app.commandLine.appendSwitch('disable-zoom-level-persistence'); +app.commandLine.appendSwitch('force-device-scale-factor', '1'); const path = require('path'); const {spawn} = require('child_process'); const net = require('net'); diff --git a/electros-electron/package.json b/electros-electron/package.json index c4c7a61..233017e 100644 --- a/electros-electron/package.json +++ b/electros-electron/package.json @@ -133,7 +133,8 @@ }, "dependencies": { "@xterm/addon-fit": "latest", - "@xterm/xterm": "^5.5.0", + "@xterm/addon-webgl": "^0.19.0", + "@xterm/xterm": "^6.0.0", "cors": "^2.8.5", "express": "^4.21.2", "socket.io": "^4.8.1", diff --git a/electros-electron/terminal/terminal.html b/electros-electron/terminal/terminal.html index cc6d71d..b9084ee 100644 --- a/electros-electron/terminal/terminal.html +++ b/electros-electron/terminal/terminal.html @@ -2,21 +2,36 @@ -