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

com.crawljax.plugins.crawloverview.model.Statistics Maven / Gradle / Ivy

There is a newer version: 5.2.3
Show newest version
package com.crawljax.plugins.crawloverview.model;

import java.text.DecimalFormat;
import java.util.Date;

import javax.annotation.concurrent.Immutable;

import org.apache.commons.lang3.time.DurationFormatUtils;

import com.crawljax.core.CrawlSession;
import com.crawljax.core.state.StateFlowGraph;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Objects;

@Immutable
public class Statistics {

	private final String duration;
	private final int crawlPaths;
	private final String averageDomSize;
	private final int edges;
	private final Date startDate;
	private final StateStatistics stateStats;
	private final int failedEvents;

	public Statistics(CrawlSession session, StateStatistics stateStats, Date startDate,
	        int failedEvents) {
		this.stateStats = stateStats;
		this.failedEvents = failedEvents;
		this.startDate = new Date(startDate.getTime());
		StateFlowGraph stateFlowGraph = session.getStateFlowGraph();
		this.duration = calculateDuration(session);
		this.edges = stateFlowGraph.getAllEdges().size();
		this.crawlPaths = session.getCrawlPaths().size();
		double bytes = stateFlowGraph.getMeanStateStringSize();
		this.averageDomSize = new DecimalFormat().format(bytes / 1000) + " kB";
	}

	@JsonCreator
	public Statistics(@JsonProperty("duration") String duration,
	        @JsonProperty("crawlPaths") int crawlPaths,
	        @JsonProperty("averageDomSize") String averageDomSize,
	        @JsonProperty("edges") int edges, @JsonProperty("startDate") Date startDate,
	        @JsonProperty("stateStats") StateStatistics stateStats,
	        @JsonProperty("failedEvents") int failedEvents) {
		this.duration = duration;
		this.crawlPaths = crawlPaths;
		this.averageDomSize = averageDomSize;
		this.edges = edges;
		this.startDate = startDate;
		this.stateStats = stateStats;
		this.failedEvents = failedEvents;
	}

	private String calculateDuration(CrawlSession session) {
		long start = session.getStartTime();
		long stop = System.currentTimeMillis();
		return DurationFormatUtils.formatDurationWords(stop - start, true, true);
	}

	public String getAverageDomSize() {
		return averageDomSize;
	}

	public String getDuration() {
		return duration;
	}

	public int getCrawlPaths() {
		return crawlPaths;
	}

	public int getEdges() {
		return edges;
	}

	public StateStatistics getStateStats() {
		return stateStats;
	}

	public Date getStartDate() {
		return new Date(startDate.getTime());
	}

	public int getFailedEvents() {
		return failedEvents;
	}

	@Override
	public int hashCode() {
		return Objects.hashCode(duration, crawlPaths, averageDomSize, edges,
		        stateStats, failedEvents);
	}

	@Override
	public boolean equals(Object object) {
		if (object instanceof Statistics) {
			Statistics that = (Statistics) object;
			return Objects.equal(this.duration, that.duration)
			        && Objects.equal(this.crawlPaths, that.crawlPaths)
			        && Objects.equal(this.averageDomSize, that.averageDomSize)
			        && Objects.equal(this.edges, that.edges)
			        && Objects.equal(this.stateStats, that.stateStats)
			        && Objects.equal(this.failedEvents, that.failedEvents);
		}
		return false;
	}

	@Override
	public String toString() {
		return Objects.toStringHelper(this)
		        .add("duration", duration)
		        .add("failedEvents", failedEvents)
		        .add("crawlPaths", crawlPaths)
		        .add("averageDomSize", averageDomSize)
		        .add("edges", edges)
		        .add("startDate", startDate)
		        .add("stateStats", stateStats)
		        .toString();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy