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

org.nohope.test.stress.result.metrics.StressMetrics Maven / Gradle / Ivy

The newest version!
package org.nohope.test.stress.result.metrics;

import com.google.common.collect.Lists;
import com.sun.management.GarbageCollectorMXBean;
import com.sun.management.OperatingSystemMXBean;

import java.lang.management.MemoryManagerMXBean;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static java.lang.management.ManagementFactory.*;

/**
 */
public final class StressMetrics {
    private static final OperatingSystemMXBean OS_BEAN = (OperatingSystemMXBean) getOperatingSystemMXBean();
    private static final List GC_BEANS = Lists.transform(getGarbageCollectorMXBeans(),
            GarbageCollectorMXBean.class::cast);

    private final Map gcMetrics = new HashMap<>();
    private final ProcessMetrics processMetrics;
    private final SystemMetrics systemMetrics;
    private final long timestamp;

    private StressMetrics(final Map gcMetrics, final ProcessMetrics processMetrics, final SystemMetrics systemMetrics) {
        this.gcMetrics.putAll(gcMetrics);
        this.processMetrics = processMetrics;
        this.systemMetrics = systemMetrics;
        this.timestamp = System.nanoTime();
    }

    public static StressMetrics get() {
        final Map gcStats = GC_BEANS.stream().collect(Collectors.toMap(MemoryManagerMXBean::getName,
                gc -> new GcMetrics(gc.getLastGcInfo(), gc.getCollectionCount(), gc.getCollectionTime())));
        final ProcessMetrics processStat = new ProcessMetrics(OS_BEAN.getProcessCpuLoad(), OS_BEAN.getProcessCpuTime() );
        final SystemMetrics systemStat = new SystemMetrics(OS_BEAN.getSystemCpuLoad(), OS_BEAN.getSystemLoadAverage());
        return new StressMetrics(gcStats, processStat, systemStat);
    }

    public Map getGcMetrics() {
        return gcMetrics;
    }

    public ProcessMetrics getProcessMetrics() {
        return processMetrics;
    }

    public SystemMetrics getSystemMetrics() {
        return systemMetrics;
    }

    public long getTimestampNanos() {
        return timestamp;
    }

    @Override
    public boolean equals(final Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof StressMetrics)) {
            return false;
        }

        final StressMetrics that = (StressMetrics) o;

        return timestamp == that.timestamp
            && gcMetrics.equals(that.gcMetrics)
            && processMetrics.equals(that.processMetrics);
    }

    @Override
    public int hashCode() {
        int result = gcMetrics.hashCode();
        result = 31 * result + processMetrics.hashCode();
        result = 31 * result + (int) (timestamp ^ (timestamp >>> 32));
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy