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

com.spikeify.taskqueue.entities.TaskStatistics Maven / Gradle / Ivy

package com.spikeify.taskqueue.entities;

public class TaskStatistics {

	protected long count;

	protected long minJobRunTime;
	protected long maxJobRunTime;
	protected long totalJobRunTime;

	protected long minExecutionTime;
	protected long maxExecutionTime;
	protected long totalExecutionTime;

	protected long averageJobRunTime;
	protected long averageExecutionTime;

	public long getCount() {

		return count;
	}

	public long getMinJobRunTime() {

		return minJobRunTime;
	}

	public long getMaxJobRunTime() {

		return maxJobRunTime;
	}

	public long getTotalJobRunTime() {

		return totalJobRunTime;
	}

	public long getMinExecutionTime() {

		return minExecutionTime;
	}

	public long getMaxExecutionTime() {

		return maxExecutionTime;
	}

	public long getTotalExecutionTime() {

		return totalExecutionTime;
	}

	public long getAverageJobRunTime() {

		return averageJobRunTime;
	}

	public long getAverageExecutionTime() {

		return averageExecutionTime;
	}

	public static class Builder {

		long count;

		Long minJobRunTime = null;
		Long maxJobRunTime = null;
		Long minExecutionTime = null;
		Long maxExecutionTime = null;

		long totalJobRunTime;
		long totalExecutionTime;

		long averageJobRunTime;
		long averageExecutionTime;

		private void calculateAverage() {

			if (count > 0) {

				averageJobRunTime = totalJobRunTime / count;
				averageExecutionTime = totalExecutionTime / count;
			}
		}

		/**
		 * @param item task queue item to include in calculation
		 * @return builder
		 */
		public Builder include(QueueTask item) {

			if (item != null) {

				setMinMaxExecutionTime(item.getExecutionTime());
				setMinMaxJobRunTime(item.getJobRunTime());

				if (item.getExecutionTime() != null) {
					totalExecutionTime = totalExecutionTime + item.getExecutionTime();
				}

				if (item.getJobRunTime() != null) {
					totalJobRunTime = totalJobRunTime + item.getJobRunTime();
				}

				count++;
			}

			return this;
		}

		/**
		 * Joins with old statistics
		 * @param old statistics
		 * @return builder with joined statistics
		 */
		public Builder include(TaskStatistics old) {

			if (old == null)
				return this;

			if (old.count > 0) {

				totalJobRunTime = totalJobRunTime + old.getTotalJobRunTime();
				totalExecutionTime = totalExecutionTime + old.getTotalExecutionTime();
				count = count + old.count;

				setMinMaxExecutionTime(old.getMinExecutionTime());
				setMinMaxExecutionTime(old.getMaxExecutionTime());

				setMinMaxJobRunTime(old.getMinJobRunTime());
				setMinMaxJobRunTime(old.getMaxJobRunTime());
			}

			return this;
		}

		/**
		 * calculates average according to included items
		 * @return statistics or null if no items were included
		 */
		public TaskStatistics build() {

			if (count == 0) {
				return null;
			}

			calculateAverage();
			return getTaskStatistics();
		}

		/**
		 * Joins previous statistics with current
		 *
		 * @param previous calculated statistics
		 * @return calculated task statistics
		 */
		public TaskStatistics buildWith(TaskStatistics previous) {

			if (count > 0 && previous.count > 0) {

				include(previous);
				calculateAverage();
			}

			return getTaskStatistics();
		}

		private void setMinMaxExecutionTime(Long jobExecutionTime) {

			if (jobExecutionTime != null) {
				if (minExecutionTime == null || jobExecutionTime < minExecutionTime) {
					minExecutionTime = jobExecutionTime;
				}

				if (maxExecutionTime == null || jobExecutionTime > maxExecutionTime) {
					maxExecutionTime = jobExecutionTime;
				}
			}
		}

		private void setMinMaxJobRunTime(Long jobRunTime) {

			if (jobRunTime != null) {
				if (minJobRunTime == null || jobRunTime < minJobRunTime) {
					minJobRunTime = jobRunTime;
				}

				if (maxJobRunTime == null || jobRunTime > maxJobRunTime) {
					maxJobRunTime = jobRunTime;
				}
			}
		}

		private TaskStatistics getTaskStatistics() {

			TaskStatistics statistics = new TaskStatistics();
			statistics.count = count;

			statistics.maxExecutionTime = maxExecutionTime != null ? maxExecutionTime : 0;
			statistics.minExecutionTime = minExecutionTime != null ? minExecutionTime : 0;
			statistics.averageExecutionTime = averageExecutionTime;
			statistics.totalExecutionTime = totalExecutionTime;

			statistics.minJobRunTime = minJobRunTime != null ? minJobRunTime : 0;
			statistics.maxJobRunTime = maxJobRunTime != null ? maxJobRunTime : 0;
			statistics.averageJobRunTime = averageJobRunTime;
			statistics.totalJobRunTime = totalJobRunTime;
			return statistics;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy