MockMetricsProvider.java

package com.guinetik.hexafun.examples.sysmon;

import java.util.Random;

/**
 * Mock implementation of MetricsProvider for testing and demos.
 *
 * <p>Returns configurable or random values. Useful for:
 * <ul>
 *   <li>Unit testing handlers without OS dependencies</li>
 *   <li>Demos with controlled/interesting values</li>
 *   <li>Simulating warning conditions</li>
 * </ul>
 */
public class MockMetricsProvider implements MetricsProvider {

    private final double cpu;
    private final double memory;
    private final double disk;

    /**
     * Create with fixed values.
     */
    public MockMetricsProvider(double cpu, double memory, double disk) {
        this.cpu = cpu;
        this.memory = memory;
        this.disk = disk;
    }

    /**
     * Create with random values within realistic ranges.
     */
    public static MockMetricsProvider random() {
        Random r = new Random();
        return new MockMetricsProvider(
            20 + r.nextDouble() * 60,  // CPU: 20-80%
            30 + r.nextDouble() * 50,  // Memory: 30-80%
            40 + r.nextDouble() * 55   // Disk: 40-95%
        );
    }

    /**
     * Create with values designed to show warnings.
     */
    public static MockMetricsProvider withWarnings() {
        return new MockMetricsProvider(67.0, 52.0, 91.0);
    }

    /**
     * Create with all healthy values.
     */
    public static MockMetricsProvider healthy() {
        return new MockMetricsProvider(35.0, 48.0, 62.0);
    }

    @Override
    public double getCpuUsage() {
        return cpu;
    }

    @Override
    public double getMemoryUsage() {
        return memory;
    }

    @Override
    public double getDiskUsage() {
        return disk;
    }
}