diff --git a/app.py b/app.py index ca083ee..1ceae35 100644 --- a/app.py +++ b/app.py @@ -3,12 +3,19 @@ from prometheus_client import Gauge, generate_latest, CONTENT_TYPE_LATEST import subprocess import time import os +import re import threading app = Flask(__name__) -pv_usage_bytes = Gauge('nfs_pv_usage_bytes', 'PV usage in bytes', ['pv_name']) -pv_last_check = Gauge('nfs_pv_last_check_timestamp', 'Last check timestamp', ['pv_name']) +pv_usage_bytes = Gauge('nfs_pv_usage_bytes', 'PV usage in bytes', ['pv_name', 'request_name']) +pv_last_check = Gauge('nfs_pv_last_check_timestamp', 'Last check timestamp', ['pv_name', 'request_name']) + +PVC_UUID_RE = re.compile(r'(pvc-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$') + +def extract_pv_name(dir_name): + m = PVC_UUID_RE.search(dir_name) + return m.group(1) if m else dir_name cache = {} CACHE_TTL = 300 @@ -40,9 +47,10 @@ def get_pv_usage(pv_name): return None usage = int(result.stdout.split()[0]) + real_pv = extract_pv_name(pv_name) cache[pv_name] = {'bytes': usage, 'time': time.time()} - pv_usage_bytes.labels(pv_name=pv_name).set(usage) - pv_last_check.labels(pv_name=pv_name).set(time.time()) + pv_usage_bytes.labels(pv_name=real_pv, request_name=pv_name).set(usage) + pv_last_check.labels(pv_name=real_pv, request_name=pv_name).set(time.time()) return usage @@ -51,7 +59,7 @@ def usage(pv_name): result = get_pv_usage(pv_name) if result is None: return {'error': 'PV not found or timeout'}, 404 - return {'pv_name': pv_name, 'bytes': result} + return {'pv_name': extract_pv_name(pv_name), 'request_name': pv_name, 'bytes': result} @app.route('/metrics') def metrics(): diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 097460a..71eb3fe 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: nfs-usage-exporter description: NFS PV usage metrics exporter for Prometheus type: application -version: 1.1.0 +version: 1.2.0 appVersion: "1.0.0" diff --git a/chart/values.yaml b/chart/values.yaml index 2ee19cd..7489b11 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -2,7 +2,7 @@ replicaCount: 1 image: repository: harbor.inje-private.com/infra/nfs-usage-exporter - tag: "v1.0.0" + tag: "v1.1.0" pullPolicy: IfNotPresent service: