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 java.util.logging.Level;
import java.util.logging.Logger;

public class CronExecutorImpl implements CronExecutor {

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

	public CronExecutorImpl() {

	}

	@Override
	public CronExecutorResult run(CronJob job, String rootUrl) {

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

		if (!job.run()) {
			log.warning("Unable to run: " + job);
			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(rootUrl);
		log.info("Running: " + job);

		return execute(target);
	}

	@Override
	public CronExecutorResult execute(String target) {

		return execute(target, null, null);
	}

	@Override
	public CronExecutorResult execute(String target, String cronUser, String cronPassword) {

		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(cronUser)) {
				String userCredentials = cronUser + ":" + cronPassword;
				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.severe("Http GET: " + target + ", returned: " + status);
			return new CronExecutorResult(CronJobResult.fail, status, "");
		}
		catch (Exception e) {
			log.log(Level.SEVERE, "Failed to execute HTTP request to: " + target, e);
			return CronExecutorResult.fail(HttpURLConnection.HTTP_INTERNAL_ERROR, e.getMessage());
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy