CtanAnnHealthCheck.java

/*
 * Copyright © 2024-2025 The CTAN Team and individual authors
 *
 * This file is distributed under the 3-clause BSD license.
 * See file LICENSE for details.
 */
package org.ctan.site.health;

import java.io.File;

import org.ctan.site.CtanConfiguration;

import com.codahale.metrics.health.HealthCheck;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

/**
 * The class <code>CtanAnnHealthCheck</code> contains the health check for the
 * ctan-ann section.
 *
 * @author <a href="mailto:gene@ctan.org">Gerd Neugebauer</a>
 */
@SuppressFBWarnings(value = "EI_EXPOSE_REP2")
public class CtanAnnHealthCheck extends HealthCheck {

    /**
     * The field <code>config</code> contains the configuration.
     */
    private CtanConfiguration config;

    /**
     * This is the constructor for the class <code>ContentHealthCheck</code>.
     *
     * @param config the configuration
     */
    public CtanAnnHealthCheck(CtanConfiguration config) {

        this.config = config;
    }

    /**
     * {@inheritDoc}
     *
     * @see com.codahale.metrics.health.HealthCheck#check()
     */
    @Override
    protected Result check() throws Exception {

        if (config == null) {
            return Result.unhealthy("Missing CTAN config");
        }
        var ann = config.getCtanAnnounce();
        if (ann == null) {
            return Result.unhealthy("Missing ctanAnnounce config section");
        }
        var ctanAnn = config.getCtanAnnounce().getDirectory();
        if (ctanAnn == null || "".equals(ctanAnn)) {
            return Result.unhealthy("Missing config ctanAnnounce.directory");
        }
        var dir = new File(ctanAnn);
        if (!dir.exists()) {
            return Result.unhealthy(
                String.format(
                    "Config ctanAnnounce.directory '%s' does not exist",
                    ctanAnn));
        }
        if (!dir.isDirectory()) {
            return Result.unhealthy(
                String.format(
                    "Config ctanAnnounce.directory '%s' isn't a directory",
                    ctanAnn));
        }
        return Result.healthy();
    }
}