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

host.anzo.commons.emergency.metric.MetricService Maven / Gradle / Ivy

package host.anzo.commons.emergency.metric;

import host.anzo.classindex.ClassIndex;
import host.anzo.commons.utils.ClassUtils;
import host.anzo.core.startup.StartupComponent;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.text.TextStringBuilder;

import java.lang.reflect.Modifier;
import java.util.*;

/**
 * @author ANZO
 */
@Slf4j
@StartupComponent("Diagnostic")
public class MetricService {
	@Getter(lazy=true)
	private final static MetricService instance = new MetricService();

	private MetricService() {
	}

	public String getMetrics() {
		final TextStringBuilder allBuilder = new TextStringBuilder("{").appendln("\"version\": \"1.0.0\",");
		final Map> metricsResult = new HashMap<>();
		final Set> parentMetrics = new HashSet<>();
		ClassIndex.getAnnotated(Metric.class).forEach(clazz -> {
			if (IMetric.class.isAssignableFrom(clazz)
					&& !Modifier.isAbstract(clazz.getModifiers())) {
				boolean canBeAdded = true;
				final Metric metricAnnotation = clazz.getAnnotation(Metric.class);
				if (metricAnnotation.fromParent() && parentMetrics.contains(clazz.getSuperclass())) {
					canBeAdded = false;
				}

				if (canBeAdded) {
					if (metricAnnotation.fromParent()) {
						parentMetrics.add(clazz.getSuperclass());
					}
					final Object singletonObject = ClassUtils.singletonInstance(clazz);
					if (singletonObject != null) {
						final List metrics = ((IMetric) singletonObject).getMetric();
						for (MetricResult metric : metrics) {
							metricsResult.computeIfAbsent(metric.getMetricGroupType(), k -> new ArrayList<>()).add("\"" + metric.getName() + "\" : " + metric.getData());
						}
					}
				}
			}
		});

		final List metricGroupResults = new ArrayList<>();
		for (Map.Entry> entry : metricsResult.entrySet()) {
			metricGroupResults.add("\"" + entry.getKey() + "\" : {" + String.join(",", entry.getValue()) +"}");
		}
		allBuilder.appendln(String.join(",", metricGroupResults));
		allBuilder.appendln("}");
		return allBuilder.get();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy