mirror of
https://github.com/malarinv/iperf3-monitor.git
synced 2026-11-06 14:50:28 +00:00
feat(exporter): implement subprocess execution with active stall watchdog and TCP metrics (#26)
- Replace in-process iperf3 C binding with subprocess execution - Add active I/O stall detection and connect-timeout - Expose TCP retransmissions, mean RTT (ms), and exporter cycle timestamp - Upgrade Dockerfile to Python 3.12 running as non-root user (nobody) - Fix testTimeout/testDuration environment variable mapping in Helm chart - Remove dead TrueCharts prometheus-operator chart dependency - Add unit tests for exporter metric parsing and stall handling - Switch tooling from devbox to mise Co-authored-by: Malarbase <malarbase@gmail.com>
This commit is contained in:
@@ -1,12 +1,9 @@
|
||||
dependencies:
|
||||
- name: kube-prometheus-stack
|
||||
repository: https://prometheus-community.github.io/helm-charts
|
||||
version: 75.7.0
|
||||
- name: prometheus-operator
|
||||
repository: oci://tccr.io/truecharts
|
||||
version: 11.5.1
|
||||
version: 91.5.3
|
||||
- name: common
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.1.2
|
||||
digest: sha256:68485b4e158a6a405073e9c59966d251b62971846cdc9871e41fde46f19aabfe
|
||||
generated: "2025-07-01T20:32:00.061995907Z"
|
||||
digest: sha256:a3a063101484521564d3e8922c1c1fe7ae8040fe28c2ae246a40d0c00b860e65
|
||||
generated: "2026-09-26T09:52:53.951178644+05:30"
|
||||
|
||||
@@ -21,17 +21,20 @@ maintainers:
|
||||
icon: https://raw.githubusercontent.com/malarinv/iperf3-monitor/main/icon.png # Optional icon URL
|
||||
annotations:
|
||||
artifacthub.io/changes: |
|
||||
- Add initial Helm chart structure.
|
||||
- kind: changed
|
||||
description: Refactor exporter to subprocess with active stall watchdog and connect-timeout
|
||||
- kind: added
|
||||
description: Expose TCP retransmits, mean RTT (ms), and cycle timestamp metrics
|
||||
- kind: changed
|
||||
description: Run exporter container as non-root on Python 3.12
|
||||
- kind: fixed
|
||||
description: Support testDuration, connectTimeoutMs, and stallThresholdSeconds in Helm values
|
||||
artifacthub.io/category: networking
|
||||
dependencies:
|
||||
- name: kube-prometheus-stack # Example dependency if you package the whole stack
|
||||
version: ">=30.0.0" # Specify a compatible version range
|
||||
repository: https://prometheus-community.github.io/helm-charts
|
||||
condition: "dependencies.install, serviceMonitor.enabled, !dependencies.useTrueChartsPrometheusOperator"
|
||||
- name: prometheus-operator
|
||||
version: ">=8.11.1"
|
||||
repository: "oci://tccr.io/truecharts"
|
||||
condition: "dependencies.install, serviceMonitor.enabled, dependencies.useTrueChartsPrometheusOperator"
|
||||
condition: "dependencies.install, serviceMonitor.enabled"
|
||||
- name: common
|
||||
version: "4.1.2"
|
||||
repository: "https://bjw-s-labs.github.io/helm-charts/"
|
||||
|
||||
@@ -43,7 +43,11 @@ Proceed with modifications only if the exporter controller is defined.
|
||||
{{- $_ := set $baseExporterEnv "LOG_LEVEL" ($exporterControllerConfig.appConfig.logLevel | default "INFO") -}}
|
||||
{{- $_ := set $baseExporterEnv "IPERF_SERVER_PORT" ($exporterControllerConfig.appConfig.serverPort | default "5201" | toString) -}}
|
||||
{{- $_ := set $baseExporterEnv "IPERF_SERVER_NAMESPACE" (dict "valueFrom" (dict "fieldRef" (dict "fieldPath" "metadata.namespace"))) -}}
|
||||
{{- $_ := set $baseExporterEnv "IPERF_TEST_TIMEOUT" ($exporterControllerConfig.appConfig.testTimeout | default "10" | toString) -}}
|
||||
{{- $testDuration := $exporterControllerConfig.appConfig.testDuration | default $exporterControllerConfig.appConfig.testTimeout | default "5" | toString -}}
|
||||
{{- $_ := set $baseExporterEnv "IPERF_TEST_DURATION" $testDuration -}}
|
||||
{{- $_ := set $baseExporterEnv "IPERF_TEST_TIMEOUT" $testDuration -}}
|
||||
{{- $_ := set $baseExporterEnv "IPERF_CONNECT_TIMEOUT_MS" ($exporterControllerConfig.appConfig.connectTimeoutMs | default "3000" | toString) -}}
|
||||
{{- $_ := set $baseExporterEnv "IPERF_STALL_THRESHOLD_SECONDS" ($exporterControllerConfig.appConfig.stallThresholdSeconds | default "5" | toString) -}}
|
||||
{{- $serverLabelSelectorDefault := printf "app.kubernetes.io/name=%s,app.kubernetes.io/instance=%s,app.kubernetes.io/component=server" $appName $release.Name -}}
|
||||
{{- $serverLabelSelector := tpl ($exporterControllerConfig.appConfig.serverLabelSelector | default $serverLabelSelectorDefault) . -}}
|
||||
{{- $_ := set $baseExporterEnv "IPERF_SERVER_LABEL_SELECTOR" $serverLabelSelector -}}
|
||||
|
||||
@@ -27,8 +27,14 @@ controllers:
|
||||
testInterval: 300
|
||||
# -- Log level for the iperf3 exporter (e.g., DEBUG, INFO, WARNING, ERROR, CRITICAL).
|
||||
logLevel: INFO
|
||||
# -- Timeout in seconds for a single iperf3 test run.
|
||||
testTimeout: 10
|
||||
# -- Timeout in seconds for a single iperf3 test run (kept for backward compatibility).
|
||||
testTimeout: 5
|
||||
# -- Duration in seconds for a single iperf3 test run.
|
||||
testDuration: 5
|
||||
# -- Connect timeout in milliseconds for control connection setup.
|
||||
connectTimeoutMs: 3000
|
||||
# -- Stall threshold in seconds (abort test if data transfer halts during test).
|
||||
stallThresholdSeconds: 5
|
||||
# -- Protocol to use for testing (tcp or udp).
|
||||
testProtocol: tcp
|
||||
# -- iperf3 server port to connect to. Should match the server's listening port.
|
||||
@@ -204,5 +210,3 @@ dependencies:
|
||||
# -- Set to false by default. Set to true to install a Prometheus operator dependency (used if serviceMonitor.enabled=true).
|
||||
# -- If false (default), and serviceMonitor.enabled is true, you must have a compatible Prometheus Operator already running in your cluster.
|
||||
install: false
|
||||
# -- If true, use TrueCharts Prometheus Operator instead of kube-prometheus-stack (used if dependencies.install is true).
|
||||
useTrueChartsPrometheusOperator: false
|
||||
|
||||
Reference in New Issue
Block a user