package uk.bl.monitrix.database.cassandra.ingest;
import java.util.List;
import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.Session;
import uk.bl.monitrix.database.cassandra.CassandraProperties;
import uk.bl.monitrix.database.cassandra.model.CassandraAlertLog;
import uk.bl.monitrix.heritrix.LogFileEntry.DefaultAlert;
import uk.bl.monitrix.model.CrawlLog;
/**
* An extended version of {@link CassandraAlertLog} that adds insert capability.
*/
class CassandraAlertLogImporter extends CassandraAlertLog {
private static long HOUR_IN_MILLIS = 60 * 60 * 1000;
private PreparedStatement statement = null;
public CassandraAlertLogImporter(Session db, CrawlLog log) {
super(db, log);
this.statement = session.prepare(
"INSERT INTO " + CassandraProperties.KEYSPACE + "." + CassandraProperties.COLLECTION_ALERT_LOG + " (" +
CassandraProperties.FIELD_ALERT_LOG_TIMESTAMP + ", " +
CassandraProperties.FIELD_ALERT_LOG_TIMESTAMP_HR + ", " +
CassandraProperties.FIELD_ALERT_LOG_OFFENDING_HOST + ", " +
CassandraProperties.FIELD_ALERT_LOG_ALERT_TYPE + ", " +
CassandraProperties.FIELD_ALERT_LOG_DESCRIPTION + ") " +
"VALUES (?, ?, ?, ?, ?);");
}
public void insert(DefaultAlert alert) {
BoundStatement boundStatement = new BoundStatement(statement);
session.execute(boundStatement.bind(
alert.getTimestamp(),
getHour(alert.getTimestamp()),
alert.getOffendingHost(),
alert.getAlertType().name(),
alert.getAlertDescription()));
}
public void insert(List<DefaultAlert> alerts) {
for (DefaultAlert alert : alerts)
insert(alert);
}
public static long getHour(long timestamp) {
// Truncates the timestamp the nearest full hour (due to integer division)
return (timestamp / HOUR_IN_MILLIS) * HOUR_IN_MILLIS;
}
}