package uk.bl.monitrix.database.mongodb.model; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import uk.bl.monitrix.database.mongodb.MongoProperties; import uk.bl.monitrix.model.KnownHost; /** * A MongoDB-backed implementation of {@link KnownHost}. * @author Rainer Simon <rainer.simon@ait.ac.at> * */ public class MongoKnownHost extends KnownHost { private DBObject dbo; public MongoKnownHost(DBObject dbo) { this.dbo = dbo; } /** * Returns the MongoDB entity that's backing this object. * @return the DBObject */ public DBObject getBackingDBO() { return dbo; } @Override public String getHostname() { return (String) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_HOSTNAME); } public void setHostname(String hostname) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_HOSTNAME, hostname); dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_HOSTNAME_TOKENIZED, Arrays.asList(KnownHost.tokenizeName(hostname))); } @Override public String getTopLevelDomain() { return (String) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_TLD); } public void setTopLevelDomain(String tld) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_TLD, tld); } @Override public String getDomain() { return (String) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_DOMAIN); } public void setDomain(String domain) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_DOMAIN, domain); } @Override public String getSubdomain() { return (String) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_SUBDOMAIN); } public void setSubdomain(String tld) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_SUBDOMAIN, tld); } @Override public long getFirstAccess() { return (Long) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_FIRST_ACCESS); } public void setFirstAccess(long firstAccess) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_FIRST_ACCESS, firstAccess); } @Override public long getLastAccess() { return (Long) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_LAST_ACCESS); } public void setLastAccess(long lastAccess) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_LAST_ACCESS, lastAccess); } @Override @SuppressWarnings("unchecked") public List<String> getCrawlerIDs() { List<String> crawlers = (List<String>) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_CRAWLERS); if (crawlers == null) return new ArrayList<String>(); return crawlers; } public void addCrawlerID(String id) { List<String> crawlers = getCrawlerIDs(); if (!crawlers.contains(id)) crawlers.add(id); dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_CRAWLERS, crawlers); } @Override public long getCrawledURLs() { Long crawledURLs = (Long) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_CRAWLED_URLS); if (crawledURLs == null) return 0; else return crawledURLs; } public void setCrawledURLs(long urls) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_CRAWLED_URLS, urls); } @Override public long getSuccessfullyFetchedURLs() { Long fetchedURLs = (Long) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_SUCCESSFULLY_FETCHED_URLS); if (fetchedURLs == null) return 0; else return fetchedURLs; } public void setSuccessfullyFetchedURLs(long urls) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_SUCCESSFULLY_FETCHED_URLS, urls); } @Override public double getAverageFetchDuration() { Double duration = (Double) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_AVG_FETCH_DURATION); if (duration == null) return 0; else return duration; } public void setAverageFetchDuration(double avg) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_AVG_FETCH_DURATION, avg); } @Override public double getAverageRetryRate() { Double retryRate = (Double) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_AVG_RETRY_RATE); if (retryRate == null) return 0; else return retryRate; } public void setAverageRetryRate(double rate) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_AVG_RETRY_RATE, rate); } @Override @SuppressWarnings("unchecked") public Map<String, Integer> getFetchStatusDistribution() { DBObject fetchStatusCodes = (DBObject) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_FETCH_STATUS_CODES); if (fetchStatusCodes == null) return new HashMap<String, Integer>(); return fetchStatusCodes.toMap(); } public void setFetchStatusDistribution(Map<String, Integer> fetchStatusDistribution) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_FETCH_STATUS_CODES, new BasicDBObject(fetchStatusDistribution)); } @Override @SuppressWarnings("unchecked") public Map<String, Integer> getContentTypeDistribution() { DBObject contentTypeDistribution = (DBObject) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_CONTENT_TYPES); if (contentTypeDistribution == null) return new HashMap<String, Integer>(); return contentTypeDistribution.toMap(); } public void setContentTypeDistribution(Map<String, Integer> contentTypeDistribution) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_CONTENT_TYPES, new BasicDBObject(contentTypeDistribution)); } @Override @SuppressWarnings("unchecked") public Map<String, Integer> getVirusStats() { DBObject virusStats = (DBObject) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_VIRUS_STATS); if (virusStats == null) return new HashMap<String, Integer>(); return virusStats.toMap(); } public void setVirusStats(Map<String, Integer> virusStats) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_VIRUS_STATS, new BasicDBObject(virusStats)); } @Override public double getRobotsBlockPercentage() { return (Double) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_ROBOTS_BLOCK_PERCENTAGE); } public void setRobotsBlockPercentage(double percentage) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_ROBOTS_BLOCK_PERCENTAGE, percentage); } @Override public double getRedirectPercentage() { return (Double) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_REDIRECT_PERCENTAGE); } public void setRedirectPercentage(double percentage) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_REDIRECT_PERCENTAGE, percentage); } @Override public double getTextToNoneTextRatio() { return (Double) dbo.get(MongoProperties.FIELD_KNOWN_HOSTS_TEXT_TO_NONTEXT_RATIO); } public void setTextToNoneTextRatio(double ratio) { dbo.put(MongoProperties.FIELD_KNOWN_HOSTS_TEXT_TO_NONTEXT_RATIO, ratio); } }