Code Monkey home page Code Monkey logo

Comments (3)

knoobie avatar knoobie commented on July 22, 2024

Test Case; multiple methods annotated with @Timed, the same value to group them together and enable histogramonly on some.. This worked in previous versions.

@Service
public class TimedAnnotationService {

  private final AtomicInteger atomicInteger = new AtomicInteger();

  @Timed(value = "timed.increase")
  public int timedIncrease() {
    return atomicInteger.incrementAndGet();
  }

  @Timed(value = "timed.increase", histogram = true)
  public int timedHistogramIncrease() {
    return atomicInteger.incrementAndGet();
  }
}

Test:

@ExtendWith(SpringExtension.class) 
@SpringBootTest
@AutoConfigureObservability
class MicrometerTest {

  @Autowired
  private MeterRegistry meterRegistry;

  @Autowired
  private TimedAnnotationService timedService;
  
  @Test
  void testMicrometerTimedHistogramAnnotation() throws Exception {
    assertThat(timedService.timedIncrease()).isEqualTo(1);
    assertThat(timedService.timedHistogramIncrease()).isEqualTo(2);

    ((PrometheusMeterRegistry) meterRegistry).scrape("application/openmetrics-text; version=1.0.0; charset=utf-8");
  }
}

Results in:



java.lang.ClassCastException: class io.prometheus.metrics.model.snapshots.SummarySnapshot$SummaryDataPointSnapshot cannot be cast to class io.prometheus.metrics.model.snapshots.HistogramSnapshot$HistogramDataPointSnapshot (io.prometheus.metrics.model.snapshots.SummarySnapshot$SummaryDataPointSnapshot and io.prometheus.metrics.model.snapshots.HistogramSnapshot$HistogramDataPointSnapshot are in unnamed module of loader 'app')

	at io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter.writeClassicHistogramBuckets(OpenMetricsTextFormatWriter.java:125)
	at io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter.writeHistogram(OpenMetricsTextFormatWriter.java:120)
	at io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter.write(OpenMetricsTextFormatWriter.java:72)
	at io.micrometer.prometheusmetrics.PrometheusMeterRegistry.scrape(PrometheusMeterRegistry.java:167)
	at io.micrometer.prometheusmetrics.PrometheusMeterRegistry.scrape(PrometheusMeterRegistry.java:163)
	at io.micrometer.prometheusmetrics.PrometheusMeterRegistry.scrape(PrometheusMeterRegistry.java:136)

from spring-boot.

wilkinsona avatar wilkinsona commented on July 22, 2024

This can be reproduced without any involvement from Spring Boot:

package com.example;

import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.Timer.Sample;
import io.micrometer.prometheusmetrics.PrometheusConfig;
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry;

public class Reproducer {

	public static void main(String[] args) throws InterruptedException {
		PrometheusMeterRegistry registry = new PrometheusMeterRegistry(new PrometheusConfig() {
			
			@Override
			public String get(String key) {
				return null;
			}
			
		});
		
		timed(registry, false, "one");
		timed(registry, true, "two");
		
		System.out.println(registry.scrape("application/openmetrics-text; version=1.0.0; charset=utf-8"));
	}
	
	static void timed(PrometheusMeterRegistry registry, boolean histogram, String methodName) throws InterruptedException {
		Sample sample = Timer.start(registry);
		Thread.sleep(500);
		sample.stop(Timer.builder("example").publishPercentileHistogram(histogram).tag("method-name",  methodName).register(registry));
	}

}

Please report the problem to the Micrometer project.

from spring-boot.

knoobie avatar knoobie commented on July 22, 2024

Thanks Andy!

from spring-boot.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.