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() diff --git a/changedetectionio/blueprint/settings/templates/settings.html b/changedetectionio/blueprint/settings/templates/settings.html index 5ae8fc661..b04826c8b 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_fieldlist_with_inline_errors(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_fieldlist_with_inline_errors(form.requests.form.extra_browsers) }}
+
diff --git a/changedetectionio/forms.py b/changedetectionio/forms.py index ab52eee6f..1a91b6a40 100644 --- a/changedetectionio/forms.py +++ b/changedetectionio/forms.py @@ -943,7 +943,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")])