working on journal module
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -3,4 +3,7 @@ package de.srsoftware.umbrella.journal;
|
||||
|
||||
public class Constants {
|
||||
public static final String CONFIG_DATABASE = "umbrella.modules.journal.database";
|
||||
|
||||
public static final String ERROR_WRITE_EVENT = "Failed to write {0} event of {1} to journal!";
|
||||
public static final String TABLE_JOURNAL = "journal";
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
package de.srsoftware.umbrella.journal;
|
||||
|
||||
import de.srsoftware.umbrella.messagebus.events.Event;
|
||||
|
||||
public interface JournalDb {
|
||||
void logEvent(Event event);
|
||||
}
|
||||
|
||||
@@ -13,17 +13,18 @@ import static de.srsoftware.umbrella.journal.Constants.CONFIG_DATABASE;
|
||||
|
||||
public class JournalModule extends BaseHandler implements EventListener {
|
||||
|
||||
private final SqliteDb journalDb;
|
||||
private final JournalDb journalDb;
|
||||
|
||||
public JournalModule(Configuration config){
|
||||
super();
|
||||
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE))
|
||||
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE));
|
||||
journalDb = new SqliteDb(connect(dbFile));
|
||||
ModuleRegistry.add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) {
|
||||
|
||||
LOG.log(System.Logger.Level.DEBUG,"{0} @ {1} ({2})",event.eventType(),event.module(),event.initiator());
|
||||
journalDb.logEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,19 @@
|
||||
package de.srsoftware.umbrella.journal;
|
||||
|
||||
import de.srsoftware.tools.jdbc.Query;
|
||||
import de.srsoftware.umbrella.core.BaseDb;
|
||||
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
||||
import de.srsoftware.umbrella.messagebus.events.Event;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import static de.srsoftware.tools.jdbc.Query.insertInto;
|
||||
import static de.srsoftware.umbrella.core.Constants.*;
|
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.databaseException;
|
||||
import static de.srsoftware.umbrella.journal.Constants.ERROR_WRITE_EVENT;
|
||||
import static de.srsoftware.umbrella.journal.Constants.TABLE_JOURNAL;
|
||||
import static java.text.MessageFormat.format;
|
||||
|
||||
public class SqliteDb extends BaseDb implements JournalDb{
|
||||
public SqliteDb(Connection connection) {
|
||||
@@ -18,4 +29,33 @@ public class SqliteDb extends BaseDb implements JournalDb{
|
||||
|
||||
return setCurrentVersion(1);
|
||||
}
|
||||
|
||||
private void createJournalTable() {
|
||||
var sql = """
|
||||
CREATE TABLE {0} (
|
||||
{1} INT PRIMARY KEY,
|
||||
{2} INT,
|
||||
{3} VARCHAR(255) NOT NULL,
|
||||
{4} VARCHAR(16) NUT NULL,
|
||||
{5} TEXT
|
||||
);
|
||||
""";
|
||||
sql = format(sql,TABLE_JOURNAL,ID,USER_ID,MODULE,ACTION,DESCRIPTION);
|
||||
try {
|
||||
db.prepareStatement(sql).execute();
|
||||
} catch (SQLException e) {
|
||||
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_JOURNAL);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logEvent(Event event) {
|
||||
try {
|
||||
insertInto(TABLE_JOURNAL,USER_ID,MODULE,ACTION,DESCRIPTION)
|
||||
.values(event.initiator().id(), event.module(), event.eventType(), event.describe())
|
||||
.execute(db).close();
|
||||
} catch (SQLException e) {
|
||||
throw databaseException(ERROR_WRITE_EVENT,event.eventType(),event.initiator().name());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user