package org.atlasapi.persistence.audit;
import java.util.Set;
import org.atlasapi.media.entity.Described;
import org.atlasapi.persistence.lookup.entry.LookupEntry;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import com.metabroadcast.common.persistence.mongo.DatabasedMongo;
import com.metabroadcast.common.time.Clock;
import com.metabroadcast.common.time.SystemClock;
public class PerHourAndDayMongoPersistenceAuditLog implements PersistenceAuditLog {
private static final String PER_DAY_LOG_COLLECTION = "perDayWriteLog";
private static final String PER_HOUR_LOG_COLLECTION = "perHourWriteLog";
private final Set<MongoPersistenceAuditLog> auditLogs;
PerHourAndDayMongoPersistenceAuditLog(DatabasedMongo mongo, Clock clock) {
this.auditLogs = ImmutableSet.of(
new MongoPersistenceAuditLog(
mongo.collection(PER_DAY_LOG_COLLECTION),
PER_DAY_KEY_FUNCTION,
clock
),
new MongoPersistenceAuditLog(
mongo.collection(PER_HOUR_LOG_COLLECTION),
PER_HOUR_KEY_FUNCTION,
clock)
);
}
public PerHourAndDayMongoPersistenceAuditLog(DatabasedMongo mongo) {
this(mongo, new SystemClock());
}
@Override
public void logWrite(Described described) {
for (MongoPersistenceAuditLog log : auditLogs) {
log.logWrite(described);
}
}
@Override
public void logNoWrite(Described described) {
for (MongoPersistenceAuditLog log : auditLogs) {
log.logNoWrite(described);
}
}
@Override
public void logWrite(LookupEntry lookupEntry) {
for (MongoPersistenceAuditLog log : auditLogs) {
log.logWrite(lookupEntry);
}
}
@Override
public void logNoWrite(LookupEntry lookupEntry) {
for (MongoPersistenceAuditLog log : auditLogs) {
log.logNoWrite(lookupEntry);
}
}
private static final DateTimeFormatter perDayFormatter = DateTimeFormat.forPattern("YYYY-MM-dd");
private static Function<DateTime, String> PER_DAY_KEY_FUNCTION = new Function<DateTime, String>() {
@Override
public String apply(DateTime eventTime) {
return perDayFormatter.print(eventTime);
}
};
private static final DateTimeFormatter perHourFormatter = DateTimeFormat.forPattern("YYYY-MM-dd'T'HH");
private static Function<DateTime, String> PER_HOUR_KEY_FUNCTION = new Function<DateTime, String>() {
@Override
public String apply(DateTime eventTime) {
return perHourFormatter.print(eventTime);
}
};
}