package com.jsonde.profiler.telemetry;
import com.jsonde.api.telemetry.TelemetryDataDto;
import com.jsonde.api.telemetry.TelemetryDataMessage;
import com.jsonde.profiler.Profiler;
import java.lang.management.ClassLoadingMXBean;
import java.lang.management.CompilationMXBean;
import java.lang.management.ManagementFactory;
public class TelemetryDataProvider implements Runnable {
private Profiler profiler;
public TelemetryDataProvider(Profiler profiler) {
this.profiler = profiler;
}
public void run() {
TelemetryDataDto telemetryDataDto = new TelemetryDataDto();
telemetryDataDto.time = System.currentTimeMillis();
Runtime runtime = Runtime.getRuntime();
telemetryDataDto.freeMemory = runtime.freeMemory();
telemetryDataDto.maxMemory = runtime.maxMemory();
telemetryDataDto.totalMemory = runtime.totalMemory();
ClassLoadingMXBean classLoadingMXBean = ManagementFactory.getClassLoadingMXBean();
telemetryDataDto.loadedClassCount = classLoadingMXBean.getLoadedClassCount();
telemetryDataDto.classCount = classLoadingMXBean.getTotalLoadedClassCount();
telemetryDataDto.unloadedClassCount = classLoadingMXBean.getUnloadedClassCount();
CompilationMXBean compilationMXBean = ManagementFactory.getCompilationMXBean();
telemetryDataDto.totalCompilationTime = compilationMXBean.getTotalCompilationTime();
if (null != profiler)
profiler.sendMessage(new TelemetryDataMessage(telemetryDataDto));
}
}