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

org.jobrunr.dashboard.ui.model.problems.ProblemsManager Maven / Gradle / Ivy

package org.jobrunr.dashboard.ui.model.problems;

import org.jobrunr.jobs.states.StateName;
import org.jobrunr.storage.JobStats;
import org.jobrunr.storage.StorageProvider;
import org.jobrunr.storage.listeners.JobStatsChangeListener;

import java.util.Set;
import java.util.stream.Collectors;

import static org.jobrunr.utils.JobUtils.jobExists;

public class ProblemsManager implements JobStatsChangeListener {

    private final StorageProvider storageProvider;
    private Problems problems;
    private JobStats jobStats;

    public ProblemsManager(StorageProvider storageProvider) {
        this.storageProvider = storageProvider;
    }

    public Problems getProblems() {
        if (problems == null) {
            initProblems();
        }
        return problems;
    }

    private void initProblems() {
        this.problems = new Problems();
        initScheduledJobNotFoundProblems();
    }

    private void initScheduledJobNotFoundProblems() {
        problems.removeProblemsOfType(JobsNotFoundProblem.TYPE);
        Set jobsThatCannotBeFoundAnymore = storageProvider.getDistinctJobSignatures(StateName.SCHEDULED).stream().filter(jobSignature -> !jobExists(jobSignature)).collect(Collectors.toSet());
        if (!jobsThatCannotBeFoundAnymore.isEmpty()) {
            storageProvider.addJobStorageOnChangeListener(this);
            jobStats = storageProvider.getJobStats();
            problems.addProblem(new JobsNotFoundProblem(jobsThatCannotBeFoundAnymore));
        } else {
            storageProvider.removeJobStorageOnChangeListener(this);
        }
    }

    @Override
    public void onChange(JobStats jobStats) {
        if (jobStats.getScheduled() < this.jobStats.getScheduled()) {
            initScheduledJobNotFoundProblems();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy