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

org.jobrunr.storage.nosql.redis.RedisUtilities Maven / Gradle / Ivy

package org.jobrunr.storage.nosql.redis;

import org.jobrunr.jobs.Job;
import org.jobrunr.jobs.states.StateName;
import org.jobrunr.storage.BackgroundJobServerStatus;
import org.jobrunr.storage.JobRunrMetadata;
import org.jobrunr.utils.StringUtils;

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.UUID;
import java.util.stream.Stream;

import static java.util.stream.Collectors.joining;
import static org.jobrunr.storage.StorageProviderUtils.Metadata.NAME;

public class RedisUtilities {

    private RedisUtilities() {

    }

    /**
     * @deprecated: still in use for Migrations
     */
    @Deprecated
    public static String jobCounterKey(StateName stateName) {
        return "counter:jobs:" + stateName;
    }

    public static String backgroundJobServersCreatedKey(String keyPrefix) {
        return toRedisKey(keyPrefix, "backgroundjobservers", "created");
    }

    public static String backgroundJobServersUpdatedKey(String keyPrefix) {
        return toRedisKey(keyPrefix, "backgroundjobservers", "updated");
    }

    public static String backgroundJobServerKey(String keyPrefix, BackgroundJobServerStatus serverStatus) {
        return backgroundJobServerKey(keyPrefix, serverStatus.getId());
    }

    public static String backgroundJobServerKey(String keyPrefix, UUID serverId) {
        return backgroundJobServerKey(keyPrefix, serverId.toString());
    }

    public static String backgroundJobServerKey(String keyPrefix, String serverId) {
        return toRedisKey(keyPrefix, "backgroundjobserver", serverId);
    }

    public static String metadatasKey(String keyPrefix) {
        return toRedisKey(keyPrefix, "set", NAME);
    }

    public static String metadataKey(String keyPrefix, JobRunrMetadata metadata) {
        return toRedisKey(keyPrefix, NAME, metadata.getId());
    }

    public static String metadataKey(String keyPrefix, String metadataId) {
        return toRedisKey(keyPrefix, NAME, metadataId);
    }

    public static String jobQueueForStateKey(String keyPrefix, StateName stateName) {
        return toRedisKey(keyPrefix, "queue", "jobs", stateName.toString());
    }

    public static String recurringJobsKey(String keyPrefix) {
        return toRedisKey(keyPrefix, "recurringjobs");
    }

    public static String recurringJobKey(String keyPrefix, String id) {
        return toRedisKey(keyPrefix, "recurringjob", id);
    }

    public static String recurringJobCreatedAtKey(String keyPrefix) {
        return toRedisKey(keyPrefix, "recurringjob", "createdAt");
    }

    public static String scheduledJobsKey(String keyPrefix) {
        return toRedisKey(keyPrefix, "queue", "scheduledjobs");
    }

    public static String jobKey(String keyPrefix, Job job) {
        return jobKey(keyPrefix, job.getId());
    }

    public static String jobKey(String keyPrefix, UUID id) {
        return jobKey(keyPrefix, id.toString());
    }

    public static String jobKey(String keyPrefix, String id) {
        return toRedisKey(keyPrefix, "job", id);
    }

    public static String jobDetailsKey(String keyPrefix, StateName stateName) {
        return toRedisKey(keyPrefix, "job", "jobdetails", stateName.toString());
    }

    public static String recurringJobKey(String keyPrefix, StateName stateName) {
        return toRedisKey(keyPrefix, "job", "recurring-job-id", stateName.toString());
    }

    public static String jobVersionKey(String keyPrefix, Job job) {
        return jobVersionKey(keyPrefix, job.getId());
    }

    public static String jobVersionKey(String keyPrefix, UUID id) {
        return toRedisKey(jobKey(keyPrefix, id), "version");
    }

    private static String toRedisKey(String... keyParts) {
        return Stream.of(keyParts)
                .filter(StringUtils::isNotNullOrEmpty)
                .collect(joining(":"));
    }

    public static long toMicroSeconds(Instant instant) {
        return ChronoUnit.MICROS.between(Instant.EPOCH, instant);
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy