SysmonHandlers.java

package com.guinetik.hexafun.examples.sysmon;

import com.guinetik.hexafun.HexaApp;
import com.guinetik.hexafun.hexa.UseCaseHandler;

/**
 * Use case handlers for system monitoring operations.
 *
 * <p>Each handler extends {@link UseCaseHandler} to get port access,
 * then delegates to the {@link MetricsProvider} port for actual data.</p>
 *
 * <h2>Architecture</h2>
 * <pre>
 * [Handler] --uses--> [MetricsProvider port] --impl--> [Mock/Real Provider]
 * </pre>
 */
public final class SysmonHandlers {

    private SysmonHandlers() {}

    /**
     * Handler for GET_CPU use case.
     */
    public static class GetCpuHandler extends UseCaseHandler<Void, Double> {

        public GetCpuHandler(HexaApp app) {
            super(app);
        }

        @Override
        public Double apply(Void input) {
            return port(MetricsProvider.class).getCpuUsage();
        }
    }

    /**
     * Handler for GET_MEMORY use case.
     */
    public static class GetMemoryHandler extends UseCaseHandler<Void, Double> {

        public GetMemoryHandler(HexaApp app) {
            super(app);
        }

        @Override
        public Double apply(Void input) {
            return port(MetricsProvider.class).getMemoryUsage();
        }
    }

    /**
     * Handler for GET_DISK use case.
     */
    public static class GetDiskHandler extends UseCaseHandler<Void, Double> {

        public GetDiskHandler(HexaApp app) {
            super(app);
        }

        @Override
        public Double apply(Void input) {
            return port(MetricsProvider.class).getDiskUsage();
        }
    }

    /**
     * Handler for GET_ALL use case.
     *
     * <p>Returns a complete SystemMetrics snapshot.</p>
     */
    public static class GetAllMetricsHandler extends UseCaseHandler<Void, SystemMetrics> {

        public GetAllMetricsHandler(HexaApp app) {
            super(app);
        }

        @Override
        public SystemMetrics apply(Void input) {
            return port(MetricsProvider.class).getAllMetrics();
        }
    }
}