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

com.spikeify.cron.service.CronExecutorImpl Maven / Gradle / Ivy

package com.spikeify.cron.service;

import com.spikeify.cron.data.CronExecutorResult;
import com.spikeify.cron.entities.CronJob;
import com.spikeify.cron.entities.enums.CronJobResult;
import com.spikeify.cron.utils.Assert;
import com.spikeify.cron.utils.StringUtils;

import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CronExecutorImpl implements CronExecutor {

	private static final Logger log = LoggerFactory.getLogger(CronExecutorImpl.class);

	public CronExecutorImpl() {

	}

	@Override
	public CronExecutorResult run(CronJob job, CronSettings settings) {

		Assert.notNull(job, "Missing job to run!");

		if (!job.canRun()) {
			log.warn("Unable to run: " + job + ",  - no schedule defined (job will not run)!");
			return CronExecutorResult.fail(HttpURLConnection.HTTP_BAD_REQUEST, "Unable to run: " + job);
		}

		// if job can run, then target is set ... no need to check twice
		String target = job.getTarget(settings.getRootUrl());
		log.info("Running: " + job);

		return execute(target, settings);
	}

	@Override
	public CronExecutorResult execute(String target, CronSettings settings) {

		try {
			if (StringUtils.isNullOrEmptyTrimmed(target)) {
				return CronExecutorResult.fail(HttpURLConnection.HTTP_INTERNAL_ERROR, "No URL given, can't run!");
			}

			URL obj = new URL(target);
			HttpURLConnection connection = (HttpURLConnection) obj.openConnection();

			// adding headers so target knows it's a cron job calling
			connection.setRequestProperty("Content-Type", "application/json");

			// simple basic auth if needed
			if (!StringUtils.isNullOrEmptyTrimmed(settings.getCronUser())) {

				String userCredentials = settings.getCronUser() + ":" + settings.getCronPassword();
				String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes(Charset.forName("UTF-8"))));
				connection.setRequestProperty("Authorization", basicAuth);
			}

			int status = connection.getResponseCode();

			if (status == HttpURLConnection.HTTP_OK ||
				status == HttpURLConnection.HTTP_NO_CONTENT) {
				log.info("Successfully triggered: " + target);
				return CronExecutorResult.ok(status);
			}

			log.error("Http GET: " + target + ", returned: " + status);
			return new CronExecutorResult(CronJobResult.fail, status, "");
		}
		catch (Exception e) {
			log.error("Failed to execute HTTP request to: " + target, e);
			return CronExecutorResult.fail(HttpURLConnection.HTTP_INTERNAL_ERROR, e.getMessage());
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy