From 88c651e239ac8f4a4f590d6a72f950a21c3483ba Mon Sep 17 00:00:00 2001 From: Desislava Marinova Date: Thu, 5 Feb 2026 14:30:18 +0200 Subject: [PATCH] MECS-21328: Tenant metric label case unification --- .../hawkbit/tenancy/DefaultTenantConfiguration.java | 9 +++++++-- .../repository/jpa/scheduler/JpaAutoAssignHandler.java | 9 +++++---- .../repository/jpa/scheduler/JpaRolloutHandler.java | 5 +++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/DefaultTenantConfiguration.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/DefaultTenantConfiguration.java index aa0296887c..bed5c008dd 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/DefaultTenantConfiguration.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/DefaultTenantConfiguration.java @@ -12,6 +12,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Optional; +import java.util.function.Supplier; import io.micrometer.common.KeyValue; import io.micrometer.common.KeyValues; @@ -45,6 +46,10 @@ public class DefaultTenantConfiguration { public static final String TENANT_TAG = "tenant"; + public static final Supplier TENANT_TAG_VALUE_PROVIDER = () -> Optional.ofNullable(AccessContext.tenant()) + .map(String::toUpperCase) + .orElse("N/A"); + @Bean @ConditionalOnMissingBean TenantAwareCacheManager cacheManager() { @@ -73,7 +78,7 @@ public KeyValues getLowCardinalityKeyValues(@NonNull final ServerRequestObservat } private KeyValue tenant() { - return KeyValue.of(TENANT_TAG, Optional.ofNullable(AccessContext.tenant()).orElse("n/a")); + return KeyValue.of(TENANT_TAG, TENANT_TAG_VALUE_PROVIDER.get()); } }; } @@ -108,7 +113,7 @@ public RepositoryTagsProvider repositoryTagsProvider() { @Override public Iterable repositoryTags(final RepositoryMethodInvocationListener.RepositoryMethodInvocation invocation) { final Iterable defaultTags = super.repositoryTags(invocation); - final String tenant = Optional.ofNullable(AccessContext.tenant()).orElse("n/a"); + final String tenant = TENANT_TAG_VALUE_PROVIDER.get(); return () -> { final Iterator defaultTagsIterator = defaultTags.iterator(); return new Iterator<>() { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/scheduler/JpaAutoAssignHandler.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/scheduler/JpaAutoAssignHandler.java index 679528fc38..4c65ee500d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/scheduler/JpaAutoAssignHandler.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/scheduler/JpaAutoAssignHandler.java @@ -12,6 +12,7 @@ import static org.eclipse.hawkbit.context.AccessContext.asActor; import static org.eclipse.hawkbit.context.AccessContext.withSecurityContext; import static org.eclipse.hawkbit.tenancy.DefaultTenantConfiguration.TENANT_TAG; +import static org.eclipse.hawkbit.tenancy.DefaultTenantConfiguration.TENANT_TAG_VALUE_PROVIDER; import java.util.Collections; import java.util.List; @@ -119,7 +120,7 @@ public void handleAll() { } finally { meterRegistry // handle single targetFilterQuery .map(mReg -> mReg.timer( - "hawkbit.autoassign.handle", TENANT_TAG, AccessContext.tenant(), "targetFilterQuery", + "hawkbit.autoassign.handle", TENANT_TAG, TENANT_TAG_VALUE_PROVIDER.get(), "targetFilterQuery", String.valueOf(targetFilterQuery.getId()))) .ifPresent(timer -> timer.record(System.nanoTime() - startNanoPartial, TimeUnit.NANOSECONDS)); } @@ -132,7 +133,7 @@ public void handleAll() { // only if there is at least one targetFilterQuery and lock has been obtained then will be measured (as in rollouts) meterRegistry // handle single targetFilterQuery for single target .map(mReg -> mReg.timer( - "hawkbit.autoassign.handle.all", TENANT_TAG, AccessContext.tenant())) + "hawkbit.autoassign.handle.all", TENANT_TAG, TENANT_TAG_VALUE_PROVIDER.get())) .ifPresent(timer -> timer.record(System.nanoTime() - startNano, TimeUnit.NANOSECONDS)); log.debug("Auto assign check all targets finished"); } @@ -151,7 +152,7 @@ public void handleSingleTarget(final String controllerId) { } finally { meterRegistry // handle single targetFilterQuery for single target .map(mReg -> mReg.timer( - "hawkbit.autoassign.handle.single", TENANT_TAG, AccessContext.tenant(), "targetFilterQuery", + "hawkbit.autoassign.handle.single", TENANT_TAG, TENANT_TAG_VALUE_PROVIDER.get(), "targetFilterQuery", String.valueOf(targetFilterQuery.getId()))) .ifPresent(timer -> timer.record(System.nanoTime() - startNanoPartial, TimeUnit.NANOSECONDS)); } @@ -159,7 +160,7 @@ public void handleSingleTarget(final String controllerId) { meterRegistry // handle single targetFilterQuery for single target .map(mReg -> mReg.timer( - "hawkbit.autoassign.handle.single.all", TENANT_TAG, AccessContext.tenant())) + "hawkbit.autoassign.handle.single.all", TENANT_TAG, TENANT_TAG_VALUE_PROVIDER.get())) .ifPresent(timer -> timer.record(System.nanoTime() - startNano, TimeUnit.NANOSECONDS)); log.debug("Auto assign check call for device {} finished", controllerId); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/scheduler/JpaRolloutHandler.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/scheduler/JpaRolloutHandler.java index 2c9ef2585d..a1122f9c2f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/scheduler/JpaRolloutHandler.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/scheduler/JpaRolloutHandler.java @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa.scheduler; import static org.eclipse.hawkbit.tenancy.DefaultTenantConfiguration.TENANT_TAG; +import static org.eclipse.hawkbit.tenancy.DefaultTenantConfiguration.TENANT_TAG_VALUE_PROVIDER; import java.util.List; import java.util.Optional; @@ -91,7 +92,7 @@ public void handleAll() { log.trace("Unlock lock {}", lock); } meterRegistry // handle all rollouts of a tenant - .map(mReg -> mReg.timer("hawkbit.rollout.handle.all", TENANT_TAG, AccessContext.tenant())) + .map(mReg -> mReg.timer("hawkbit.rollout.handle.all", TENANT_TAG, TENANT_TAG_VALUE_PROVIDER.get())) .ifPresent(timer -> timer.record(System.nanoTime() - startNano, TimeUnit.NANOSECONDS)); } } @@ -113,7 +114,7 @@ private void handleRolloutInNewTransaction(final long rolloutId, final String ha meterRegistry // handle single rollout .map(mReg -> mReg.timer( - "hawkbit.rollout.handle", TENANT_TAG, AccessContext.tenant(), "rollout", String.valueOf(rolloutId))) + "hawkbit.rollout.handle", TENANT_TAG, TENANT_TAG_VALUE_PROVIDER.get(), "rollout", String.valueOf(rolloutId))) .ifPresent(timer -> timer.record(System.nanoTime() - startNano, TimeUnit.NANOSECONDS)); } } \ No newline at end of file