From 233189e4f79de42bad53547217c61d68c1ee3a9d Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Sun, 12 Oct 2025 19:20:28 +0200 Subject: [PATCH 1/2] Build - Splitting memory report (#3493) --- .../test-stack-reusable-workflow.yml | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test-stack-reusable-workflow.yml b/.github/workflows/test-stack-reusable-workflow.yml index 64603ff4c..0627c1e5e 100644 --- a/.github/workflows/test-stack-reusable-workflow.yml +++ b/.github/workflows/test-stack-reusable-workflow.yml @@ -246,20 +246,36 @@ jobs: # @todo - scan the container log to see the right "graceful shutdown" text exists docker rm sig-test - - name: Dump container log and memory report + - name: Dump container log if: always() run: | mkdir output-logs docker logs test-cdio-basic-tests > output-logs/test-cdio-basic-tests-stdout-${{ env.PYTHON_VERSION }}.txt docker logs test-cdio-basic-tests 2> output-logs/test-cdio-basic-tests-stderr-${{ env.PYTHON_VERSION }}.txt + - name: Extract and display memory test report + if: always() + run: | # Extract test-memory.log from the container echo "Extracting test-memory.log from container..." docker cp test-cdio-basic-tests:/app/changedetectionio/test-memory.log output-logs/test-memory-${{ env.PYTHON_VERSION }}.log || echo "test-memory.log not found in container" # Display the memory log contents for immediate visibility in workflow output - echo "=== Memory Test Report ===" - cat output-logs/test-memory-${{ env.PYTHON_VERSION }}.log 2>/dev/null || echo "No memory log available" + echo "=== Top 10 Highest Peak Memory Tests ===" + if [ -f output-logs/test-memory-${{ env.PYTHON_VERSION }}.log ]; then + # Sort by peak memory value (extract number before MB and sort numerically, reverse order) + grep "Peak memory:" output-logs/test-memory-${{ env.PYTHON_VERSION }}.log | \ + sed 's/.*Peak memory: //' | \ + paste -d'|' - <(grep "Peak memory:" output-logs/test-memory-${{ env.PYTHON_VERSION }}.log) | \ + sort -t'|' -k1 -nr | \ + cut -d'|' -f2 | \ + head -10 + echo "" + echo "=== Full Memory Test Report ===" + cat output-logs/test-memory-${{ env.PYTHON_VERSION }}.log + else + echo "No memory log available" + fi - name: Store everything including test-datastore if: always() From 66ddd87ee4371714d9c7669af0ba29010a447c56 Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Sun, 12 Oct 2025 19:26:04 +0200 Subject: [PATCH 2/2] Move proxy default selection to proxy tab --- .../settings/templates/settings.html | 19 ++++++++++--------- changedetectionio/forms.py | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/changedetectionio/blueprint/settings/templates/settings.html b/changedetectionio/blueprint/settings/templates/settings.html index 29f3b78e7..c271df9ab 100644 --- a/changedetectionio/blueprint/settings/templates/settings.html +++ b/changedetectionio/blueprint/settings/templates/settings.html @@ -89,15 +89,6 @@ Transforms RSS/RDF feed watches into beautiful text only - - {% if form.requests.proxy %} -
- {{ render_field(form.requests.form.proxy, class="fetch-backend-proxy") }} - - Choose a default proxy for all watches - -
- {% endif %} @@ -324,6 +315,15 @@ nav {{ render_field(form.requests.form.extra_proxies) }} "Name" will be used for selecting the proxy in the Watch Edit settings
SOCKS5 proxies with authentication are only supported with 'plain requests' fetcher, for other fetchers you should whitelist the IP access instead + {% if form.requests.proxy %} +
+
+
+ {{ render_field(form.requests.form.proxy, class="fetch-backend-proxy") }} + Choose a default proxy for all watches +
+
+ {% endif %}

@@ -332,6 +332,7 @@ nav

{{ render_field(form.requests.form.extra_browsers) }}
+
diff --git a/changedetectionio/forms.py b/changedetectionio/forms.py index 08be7d28c..fc222b0ca 100644 --- a/changedetectionio/forms.py +++ b/changedetectionio/forms.py @@ -885,7 +885,7 @@ class DefaultUAInputForm(Form): class globalSettingsRequestForm(Form): time_between_check = RequiredFormField(TimeBetweenCheckForm) time_schedule_limit = FormField(ScheduleLimitForm) - proxy = RadioField('Proxy') + proxy = RadioField('Default proxy') jitter_seconds = IntegerField('Random jitter seconds ± check', render_kw={"style": "width: 5em;"}, validators=[validators.NumberRange(min=0, message="Should contain zero or more seconds")])