All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.datakernel.datastream.stats.StreamStatsBasic Maven / Gradle / Ivy

package io.datakernel.datastream.stats;

import io.datakernel.datastream.StreamDataAcceptor;
import io.datakernel.eventloop.jmx.EventStats;
import io.datakernel.eventloop.jmx.ExceptionStats;
import io.datakernel.jmx.api.JmxAttribute;
import io.datakernel.jmx.api.JmxReducers.JmxReducerSum;

import java.time.Duration;

public class StreamStatsBasic implements StreamStats {
	public static final Duration DEFAULT_BASIC_SMOOTHING_WINDOW = Duration.ofMinutes(5);

	private final EventStats started = EventStats.create(DEFAULT_BASIC_SMOOTHING_WINDOW);
	private final EventStats produce = EventStats.create(DEFAULT_BASIC_SMOOTHING_WINDOW);
	private final EventStats suspend = EventStats.create(DEFAULT_BASIC_SMOOTHING_WINDOW);
	private final EventStats endOfStream = EventStats.create(DEFAULT_BASIC_SMOOTHING_WINDOW);
	private final ExceptionStats error = ExceptionStats.create();

	public StreamStatsBasic withBasicSmoothingWindow(Duration smoothingWindow) {
		started.setSmoothingWindow(smoothingWindow);
		produce.setSmoothingWindow(smoothingWindow);
		suspend.setSmoothingWindow(smoothingWindow);
		endOfStream.setSmoothingWindow(smoothingWindow);
		return this;
	}

	@Override
	public StreamDataAcceptor createDataAcceptor(StreamDataAcceptor actualDataAcceptor) {
		return actualDataAcceptor;
	}

	@Override
	public void onStarted() {
		started.recordEvent();
	}

	@Override
	public void onProduce() {
		produce.recordEvent();
	}

	@Override
	public void onSuspend() {
		suspend.recordEvent();
	}

	@Override
	public void onEndOfStream() {
		endOfStream.recordEvent();
	}

	@Override
	public void onError(Throwable e) {
		error.recordException(e);
	}

	@JmxAttribute
	public EventStats getStarted() {
		return started;
	}

	@JmxAttribute
	public EventStats getProduce() {
		return produce;
	}

	@JmxAttribute
	public EventStats getSuspend() {
		return suspend;
	}

	@JmxAttribute
	public EventStats getEndOfStream() {
		return endOfStream;
	}

	@JmxAttribute
	public ExceptionStats getError() {
		return error;
	}

	@JmxAttribute(reducer = JmxReducerSum.class)
	public int getActive() {
		return (int) (started.getTotalCount() - (endOfStream.getTotalCount() + error.getTotal()));
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy