Skip to content

Commit

Permalink
Support metric names customization
Browse files Browse the repository at this point in the history
  • Loading branch information
Kuvaldis authored and Nikolay Fadin committed Nov 14, 2020
1 parent 336f2ce commit 71be494
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,28 +25,32 @@
import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.Tags;

public final class FeignMetricName {
public final class FeignMetricName implements MetricName {

private final Class<?> meteredComponent;

public FeignMetricName(Class<?> meteredComponent) {
this.meteredComponent = meteredComponent;
}

@Override
public String name(String suffix) {
return name()
// any separator, so naming convention can change it
+ "." + suffix;
}

@Override
public String name() {
return meteredComponent.getName();
}

@Override
public Tags tag(MethodMetadata methodMetadata, Target<?> target, Tag... tags) {
return tag(methodMetadata.targetType(), methodMetadata.method(), target.url(), tags);
}

@Override
public Tags tag(Class<?> targetType, Method method, String url, Tag... extraTags) {
List<Tag> tags = new ArrayList<>();
tags.add(Tag.of("client", targetType.getName()));
Expand Down
8 changes: 6 additions & 2 deletions micrometer/src/main/java/feign/micrometer/MeteredClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,16 @@ public class MeteredClient implements Client {

private final Client client;
private final MeterRegistry meterRegistry;
private final FeignMetricName metricName;
private final MetricName metricName;

public MeteredClient(Client client, MeterRegistry meterRegistry) {
this(client, meterRegistry, new FeignMetricName(Client.class));
}

public MeteredClient(Client client, MeterRegistry meterRegistry, MetricName metricName) {
this.client = client;
this.meterRegistry = meterRegistry;
this.metricName = new FeignMetricName(Client.class);
this.metricName = metricName;
}

@Override
Expand Down
8 changes: 6 additions & 2 deletions micrometer/src/main/java/feign/micrometer/MeteredDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,16 @@ public class MeteredDecoder implements Decoder {

private final Decoder decoder;
private final MeterRegistry meterRegistry;
private final FeignMetricName metricName;
private final MetricName metricName;

public MeteredDecoder(Decoder decoder, MeterRegistry meterRegistry) {
this(decoder, meterRegistry, new FeignMetricName(Decoder.class));
}

public MeteredDecoder(Decoder decoder, MeterRegistry meterRegistry, MetricName metricName) {
this.decoder = decoder;
this.meterRegistry = meterRegistry;
this.metricName = new FeignMetricName(Decoder.class);
this.metricName = metricName;
}

@Override
Expand Down
10 changes: 7 additions & 3 deletions micrometer/src/main/java/feign/micrometer/MeteredEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
package feign.micrometer;


import java.lang.reflect.Type;
import feign.RequestTemplate;
import feign.codec.EncodeException;
import feign.codec.Encoder;
import io.micrometer.core.instrument.MeterRegistry;
import java.lang.reflect.Type;

/**
* Warp feign {@link Encoder} with metrics.
Expand All @@ -27,12 +27,16 @@ public class MeteredEncoder implements Encoder {

private final Encoder encoder;
private final MeterRegistry meterRegistry;
private final FeignMetricName metricName;
private final MetricName metricName;

public MeteredEncoder(Encoder encoder, MeterRegistry meterRegistry) {
this(encoder, meterRegistry, new FeignMetricName(Encoder.class));
}

public MeteredEncoder(Encoder encoder, MeterRegistry meterRegistry, MetricName metricName) {
this.encoder = encoder;
this.meterRegistry = meterRegistry;
this.metricName = new FeignMetricName(Encoder.class);
this.metricName = metricName;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,18 @@ public class MeteredInvocationHandleFactory implements InvocationHandlerFactory

private final MeterRegistry meterRegistry;

private final FeignMetricName metricName;
private final MetricName metricName;

public MeteredInvocationHandleFactory(InvocationHandlerFactory invocationHandler,
MeterRegistry meterRegistry) {
this(invocationHandler, meterRegistry, new FeignMetricName(Feign.class));
}

public MeteredInvocationHandleFactory(InvocationHandlerFactory invocationHandler,
MeterRegistry meterRegistry, MetricName metricName) {
this.invocationHandler = invocationHandler;
this.meterRegistry = meterRegistry;
this.metricName = new FeignMetricName(Feign.class);
this.metricName = metricName;
}

@Override
Expand Down
31 changes: 31 additions & 0 deletions micrometer/src/main/java/feign/micrometer/MetricName.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* Copyright 2012-2020 The Feign Authors
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package feign.micrometer;

import feign.MethodMetadata;
import feign.Target;
import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.Tags;
import java.lang.reflect.Method;

public interface MetricName {

String name();

String name(String suffix);

Tags tag(MethodMetadata methodMetadata, Target<?> target, Tag... tags);

Tags tag(Class<?> targetType, Method method, String url, Tag... extraTags);
}

0 comments on commit 71be494

Please sign in to comment.