From ff98a9857e1a4273e580a26e55a476627eca73ac Mon Sep 17 00:00:00 2001 From: Aleksandr Razdolski Date: Wed, 14 May 2025 13:41:30 +0300 Subject: [PATCH 1/4] Update regex to support tinyproxy v 1.11.x --- .github/workflows/docker-publish.yml | 27 +++++++-------------------- tinyproxy_exporter | 7 ++----- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 59ab970..e2d2de0 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,28 +1,21 @@ +--- name: Docker - -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - on: push: - branches: [ master ] - # Publish semver tags as releases. - tags: [ 'v*.*.*' ] + branches: + - main + tags: + - 'v*.*.*' pull_request: - branches: [ master ] + branches: + - main env: - # Use docker.io for Docker Hub if empty REGISTRY: ghcr.io - # github.repository as / IMAGE_NAME: ${{ github.repository }} - jobs: build: - runs-on: ubuntu-latest permissions: contents: read @@ -32,8 +25,6 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 - # Login against a Docker registry except on PR - # https://github.com/docker/login-action - name: Log into registry ${{ env.REGISTRY }} if: github.event_name != 'pull_request' uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c @@ -42,16 +33,12 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - # Extract metadata (tags, labels) for Docker - # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - # Build and push Docker image with Buildx (don't push on PR) - # https://github.com/docker/build-push-action - name: Build and push Docker image uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc with: diff --git a/tinyproxy_exporter b/tinyproxy_exporter index 5016553..0f28843 100755 --- a/tinyproxy_exporter +++ b/tinyproxy_exporter @@ -19,11 +19,8 @@ class TinyproxyCollector(object): handler = urllib.request.ProxyHandler({'http': self.tinyproxy}) opener = urllib.request.build_opener(handler) urllib.request.install_opener(opener) - response = urllib.request.urlopen('http://{0}'.format(self.stathost)) - values = [ - float(x) for x in re.findall( - b'(?:|: )(\d+)(?:|
|\n

)', response.read()) - ] + response = urllib.request.urlopen('http://tinyproxy.stats').read().decode('utf-8') + values = re.findall(r']*>\s*(\d+)\s*', response) yield GaugeMetricFamily('tinyproxy_connections_open', 'Number of open connections', values[0]) yield CounterMetricFamily('tinyproxy_requests_total', From 98a4a9b570db7e4d9430b2fa6e9a087b8c0a6126 Mon Sep 17 00:00:00 2001 From: Aleksandr Razdolski Date: Wed, 14 May 2025 13:43:48 +0300 Subject: [PATCH 2/4] Revert gh action --- .github/workflows/docker-publish.yml | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index e2d2de0..59ab970 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,21 +1,28 @@ ---- name: Docker + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + on: push: - branches: - - main - tags: - - 'v*.*.*' + branches: [ master ] + # Publish semver tags as releases. + tags: [ 'v*.*.*' ] pull_request: - branches: - - main + branches: [ master ] env: + # Use docker.io for Docker Hub if empty REGISTRY: ghcr.io + # github.repository as / IMAGE_NAME: ${{ github.repository }} + jobs: build: + runs-on: ubuntu-latest permissions: contents: read @@ -25,6 +32,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 + # Login against a Docker registry except on PR + # https://github.com/docker/login-action - name: Log into registry ${{ env.REGISTRY }} if: github.event_name != 'pull_request' uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c @@ -33,12 +42,16 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + # Extract metadata (tags, labels) for Docker + # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + # Build and push Docker image with Buildx (don't push on PR) + # https://github.com/docker/build-push-action - name: Build and push Docker image uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc with: From 9a7ede2680fd875b75c45746fcdbe7f2a9af1e49 Mon Sep 17 00:00:00 2001 From: Aleksandr Razdolski Date: Wed, 14 May 2025 15:18:26 +0300 Subject: [PATCH 3/4] Update start_http_server, remove addr --- tinyproxy_exporter | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tinyproxy_exporter b/tinyproxy_exporter index 0f28843..2466379 100755 --- a/tinyproxy_exporter +++ b/tinyproxy_exporter @@ -40,7 +40,7 @@ def parse_args(): parser.add_argument( '-l', metavar='LISTEN', - default=':9240', + default='9240', help='address on which to expose metrics (default ":9240")') parser.add_argument( '-s', @@ -57,9 +57,8 @@ def parse_args(): def main(): try: args = parse_args() - addr, port = args.l.split(':') REGISTRY.register(TinyproxyCollector(args.s, args.t)) - start_http_server(int(port), addr) + start_http_server(int(args.l)) while True: time.sleep(1) except KeyboardInterrupt: From 70b45a5e71ada210f24907692970554e382e05f3 Mon Sep 17 00:00:00 2001 From: Aleksandr Razdolski Date: Thu, 15 May 2025 10:16:50 +0300 Subject: [PATCH 4/4] Update order of stats --- tinyproxy_exporter | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tinyproxy_exporter b/tinyproxy_exporter index 2466379..68a8a80 100755 --- a/tinyproxy_exporter +++ b/tinyproxy_exporter @@ -23,15 +23,15 @@ class TinyproxyCollector(object): values = re.findall(r']*>\s*(\d+)\s*', response) yield GaugeMetricFamily('tinyproxy_connections_open', 'Number of open connections', values[0]) - yield CounterMetricFamily('tinyproxy_requests_total', - 'Number of requests', values[1]) yield CounterMetricFamily('tinyproxy_connections_bad_total', - 'Number of bad connections', values[2]) + 'Number of bad connections', values[1]) yield CounterMetricFamily('tinyproxy_connections_denied_total', - 'Number of denied connections', values[3]) + 'Number of denied connections', values[2]) yield CounterMetricFamily( 'tinyproxy_connections_refused_total', - 'Number of refused connections due to high load', values[4]) + 'Number of refused connections due to high load', values[3]) + yield CounterMetricFamily('tinyproxy_requests_total', + 'Number of requests', values[4]) def parse_args():