diff --git a/cli/flamingock-cli/src/test/java/io/flamingock/cli/test/TestUtils.java b/cli/flamingock-cli/src/test/java/io/flamingock/cli/test/TestUtils.java index 1576873ec..1656f61b5 100644 --- a/cli/flamingock-cli/src/test/java/io/flamingock/cli/test/TestUtils.java +++ b/cli/flamingock-cli/src/test/java/io/flamingock/cli/test/TestUtils.java @@ -97,6 +97,7 @@ public static List createSampleAuditEntries() { AuditEntry.ExecutionType.EXECUTION, "com.example.Change001", "migrate", + "sourceFile", 1500, "server1.example.com", null, @@ -114,6 +115,7 @@ public static List createSampleAuditEntries() { AuditEntry.ExecutionType.EXECUTION, "com.example.Change002", "rollback", + "sourceFile", 800, "server2.example.com", null, diff --git a/community/flamingock-auditstore-mongodb-sync/src/test/java/io/flamingock/store/mongodb/sync/MongoDBTestHelper.java b/community/flamingock-auditstore-mongodb-sync/src/test/java/io/flamingock/store/mongodb/sync/MongoDBTestHelper.java index 1acd4c827..9bbc25111 100644 --- a/community/flamingock-auditstore-mongodb-sync/src/test/java/io/flamingock/store/mongodb/sync/MongoDBTestHelper.java +++ b/community/flamingock-auditstore-mongodb-sync/src/test/java/io/flamingock/store/mongodb/sync/MongoDBTestHelper.java @@ -29,7 +29,7 @@ import java.util.stream.Collectors; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CHANGE_ID; -import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TIMESTAMP; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CREATED_AT; public class MongoDBTestHelper { public final MongoDatabase mongoDatabase; @@ -48,7 +48,7 @@ public List getAuditLogSorted(String auditLogCollection) { .find() .into(new LinkedList<>()) .stream() - .sorted(Comparator.comparing(d -> TimeUtil.toLocalDateTime(d.get(KEY_TIMESTAMP)))) + .sorted(Comparator.comparing(d -> TimeUtil.toLocalDateTime(d.get(KEY_CREATED_AT)))) .map(document -> document.getString(KEY_CHANGE_ID)) .collect(Collectors.toList()); } diff --git a/community/flamingock-auditstore-sql/src/main/java/io/flamingock/store/sql/internal/SqlAuditor.java b/community/flamingock-auditstore-sql/src/main/java/io/flamingock/store/sql/internal/SqlAuditor.java index 37fd80376..d97d84782 100644 --- a/community/flamingock-auditstore-sql/src/main/java/io/flamingock/store/sql/internal/SqlAuditor.java +++ b/community/flamingock-auditstore-sql/src/main/java/io/flamingock/store/sql/internal/SqlAuditor.java @@ -83,17 +83,18 @@ public Result writeEntry(AuditEntry auditEntry) { ps.setString(6, auditEntry.getState() != null ? auditEntry.getState().name() : null); ps.setString(7, auditEntry.getClassName()); ps.setString(8, auditEntry.getMethodName()); - ps.setString(9, auditEntry.getMetadata() != null ? auditEntry.getMetadata().toString() : null); - ps.setLong(10, auditEntry.getExecutionMillis()); - ps.setString(11, auditEntry.getExecutionHostname()); - ps.setString(12, auditEntry.getErrorTrace()); - ps.setString(13, auditEntry.getType() != null ? auditEntry.getType().name() : null); - ps.setString(14, auditEntry.getTxType() != null ? auditEntry.getTxType().name() : null); - ps.setString(15, auditEntry.getTargetSystemId()); - ps.setString(16, auditEntry.getOrder()); - ps.setString(17, auditEntry.getRecoveryStrategy() != null ? auditEntry.getRecoveryStrategy().name() : null); - ps.setObject(18, auditEntry.getTransactionFlag()); - ps.setObject(19, auditEntry.getSystemChange()); + ps.setString(9, auditEntry.getSourceFile()); + ps.setString(10, auditEntry.getMetadata() != null ? auditEntry.getMetadata().toString() : null); + ps.setLong(11, auditEntry.getExecutionMillis()); + ps.setString(12, auditEntry.getExecutionHostname()); + ps.setString(13, auditEntry.getErrorTrace()); + ps.setString(14, auditEntry.getType() != null ? auditEntry.getType().name() : null); + ps.setString(15, auditEntry.getTxType() != null ? auditEntry.getTxType().name() : null); + ps.setString(16, auditEntry.getTargetSystemId()); + ps.setString(17, auditEntry.getOrder()); + ps.setString(18, auditEntry.getRecoveryStrategy() != null ? auditEntry.getRecoveryStrategy().name() : null); + ps.setObject(19, auditEntry.getTransactionFlag()); + ps.setObject(20, auditEntry.getSystemChange()); ps.executeUpdate(); } return Result.OK(); @@ -121,21 +122,22 @@ public List getAuditHistory() { AuditEntry entry = new AuditEntry( rs.getString("execution_id"), rs.getString("stage_id"), - rs.getString("task_id"), + rs.getString("change_id"), rs.getString("author"), rs.getTimestamp("created_at").toLocalDateTime(), rs.getString("state") != null ? AuditEntry.Status.valueOf(rs.getString("state")) : null, rs.getString("type") != null ? AuditEntry.ExecutionType.valueOf(rs.getString("type")) : null, - rs.getString("class_name"), - rs.getString("method_name"), + rs.getString("invoked_class"), + rs.getString("invoked_method"), + rs.getString("source_file"), rs.getLong("execution_millis"), rs.getString("execution_hostname"), rs.getString("metadata"), rs.getBoolean("system_change"), rs.getString("error_trace"), - AuditTxType.fromString(rs.getString("tx_type")), + AuditTxType.fromString(rs.getString("tx_strategy")), rs.getString("target_system_id"), - rs.getString("order_col"), + rs.getString("change_order"), rs.getString("recovery_strategy") != null ? io.flamingock.api.RecoveryStrategy.valueOf(rs.getString("recovery_strategy")) : null, rs.getObject("transaction_flag") != null ? rs.getBoolean("transaction_flag") : null ); diff --git a/community/flamingock-auditstore-sql/src/main/java/io/flamingock/store/sql/internal/SqlAuditorDialectHelper.java b/community/flamingock-auditstore-sql/src/main/java/io/flamingock/store/sql/internal/SqlAuditorDialectHelper.java index 4034abfd9..2809640c0 100644 --- a/community/flamingock-auditstore-sql/src/main/java/io/flamingock/store/sql/internal/SqlAuditorDialectHelper.java +++ b/community/flamingock-auditstore-sql/src/main/java/io/flamingock/store/sql/internal/SqlAuditorDialectHelper.java @@ -40,20 +40,21 @@ public String getCreateTableSqlString(String tableName) { "id %s PRIMARY KEY, " + "execution_id VARCHAR(255), " + "stage_id VARCHAR(255), " + - "task_id VARCHAR(255), " + + "change_id VARCHAR(255), " + "author VARCHAR(255), " + "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " + "state VARCHAR(255), " + - "class_name VARCHAR(255), " + - "method_name VARCHAR(255), " + + "invoked_class VARCHAR(255), " + + "invoked_method VARCHAR(255), " + + "source_file VARCHAR(255), " + "metadata %s, " + "execution_millis %s, " + "execution_hostname VARCHAR(255), " + "error_trace %s, " + "type VARCHAR(50), " + - "tx_type VARCHAR(50), " + + "tx_strategy VARCHAR(50), " + "target_system_id VARCHAR(255), " + - "order_col VARCHAR(50), " + + "change_order VARCHAR(50), " + "recovery_strategy VARCHAR(50), " + "transaction_flag %s, " + "system_change %s" + @@ -64,20 +65,21 @@ public String getCreateTableSqlString(String tableName) { "id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, " + "execution_id VARCHAR(255), " + "stage_id VARCHAR(255), " + - "task_id VARCHAR(255), " + + "change_id VARCHAR(255), " + "author VARCHAR(255), " + "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " + "state VARCHAR(255), " + - "class_name VARCHAR(255), " + - "method_name VARCHAR(255), " + + "invoked_class VARCHAR(255), " + + "invoked_method VARCHAR(255), " + + "source_file VARCHAR(255), " + "metadata BLOB SUB_TYPE TEXT, " + "execution_millis BIGINT, " + "execution_hostname VARCHAR(255), " + "error_trace BLOB SUB_TYPE TEXT, " + "type VARCHAR(50), " + - "tx_type VARCHAR(50), " + + "tx_strategy VARCHAR(50), " + "target_system_id VARCHAR(255), " + - "order_col VARCHAR(50), " + + "change_order VARCHAR(50), " + "recovery_strategy VARCHAR(50), " + "transaction_flag SMALLINT, " + "system_change SMALLINT" + @@ -88,20 +90,21 @@ public String getCreateTableSqlString(String tableName) { "id SERIAL PRIMARY KEY," + "execution_id VARCHAR(255)," + "stage_id VARCHAR(255)," + - "task_id VARCHAR(255)," + + "change_id VARCHAR(255)," + "author VARCHAR(255)," + "created_at TIMESTAMP," + "state VARCHAR(32)," + - "class_name VARCHAR(255)," + - "method_name VARCHAR(255)," + + "invoked_class VARCHAR(255)," + + "invoked_method VARCHAR(255)," + + "source_file VARCHAR(255)," + "metadata TEXT," + "execution_millis BIGINT," + "execution_hostname VARCHAR(255)," + "error_trace TEXT," + "type VARCHAR(32)," + - "tx_type VARCHAR(32)," + + "tx_strategy VARCHAR(32)," + "target_system_id VARCHAR(255)," + - "order_col VARCHAR(255)," + + "change_order VARCHAR(255)," + "recovery_strategy VARCHAR(32)," + "transaction_flag BOOLEAN," + "system_change BOOLEAN" + @@ -114,20 +117,21 @@ public String getCreateTableSqlString(String tableName) { "id %s PRIMARY KEY, " + "execution_id VARCHAR(255), " + "stage_id VARCHAR(255), " + - "task_id VARCHAR(255), " + + "change_id VARCHAR(255), " + "author VARCHAR(255), " + "created_at DATETIME DEFAULT GETDATE(), " + "state VARCHAR(255), " + - "class_name VARCHAR(255), " + - "method_name VARCHAR(255), " + + "invoked_class VARCHAR(255), " + + "invoked_method VARCHAR(255), " + + "source_file VARCHAR(255), " + "metadata %s, " + "execution_millis %s, " + "execution_hostname VARCHAR(255), " + "error_trace %s, " + "type VARCHAR(50), " + - "tx_type VARCHAR(50), " + + "tx_strategy VARCHAR(50), " + "target_system_id VARCHAR(255), " + - "order_col VARCHAR(50), " + + "change_order VARCHAR(50), " + "recovery_strategy VARCHAR(50), " + "transaction_flag %s, " + "system_change %s" + @@ -140,20 +144,21 @@ public String getCreateTableSqlString(String tableName) { " id BIGINT IDENTITY PRIMARY KEY, " + " execution_id VARCHAR(255), " + " stage_id VARCHAR(255), " + - " task_id VARCHAR(255), " + + " change_id VARCHAR(255), " + " author VARCHAR(255), " + " created_at DATETIME, " + " state VARCHAR(32), " + - " class_name VARCHAR(255), " + - " method_name VARCHAR(255), " + + " invoked_class VARCHAR(255), " + + " invoked_method VARCHAR(255), " + + " source_file VARCHAR(255), " + " metadata TEXT, " + " execution_millis BIGINT, " + " execution_hostname VARCHAR(255), " + " error_trace TEXT, " + " type VARCHAR(64), " + - " tx_type VARCHAR(64), " + + " tx_strategy VARCHAR(64), " + " target_system_id VARCHAR(255), " + - " order_col VARCHAR(255), " + + " change_order VARCHAR(255), " + " recovery_strategy VARCHAR(64), " + " transaction_flag BIT NOT NULL, " + " system_change BIT NOT NULL" + @@ -167,20 +172,21 @@ public String getCreateTableSqlString(String tableName) { "id %s PRIMARY KEY, " + "execution_id VARCHAR2(255), " + "stage_id VARCHAR2(255), " + - "task_id VARCHAR2(255), " + + "change_id VARCHAR2(255), " + "author VARCHAR2(255), " + "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " + "state VARCHAR2(255), " + - "class_name VARCHAR2(255), " + - "method_name VARCHAR2(255), " + + "invoked_class VARCHAR2(255), " + + "invoked_method VARCHAR2(255), " + + "source_file VARCHAR2(255), " + "metadata %s, " + "execution_millis %s, " + "execution_hostname VARCHAR2(255), " + "error_trace %s, " + "type VARCHAR2(50), " + - "tx_type VARCHAR2(50), " + + "tx_strategy VARCHAR2(50), " + "target_system_id VARCHAR2(255), " + - "order_col VARCHAR2(50), " + + "change_order VARCHAR2(50), " + "recovery_strategy VARCHAR2(50), " + "transaction_flag %s, " + "system_change %s" + @@ -193,20 +199,21 @@ public String getCreateTableSqlString(String tableName) { "id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY," + "execution_id VARCHAR(255)," + "stage_id VARCHAR(255)," + - "task_id VARCHAR(255)," + + "change_id VARCHAR(255)," + "author VARCHAR(255)," + "created_at TIMESTAMP," + "state VARCHAR(32)," + - "class_name VARCHAR(255)," + - "method_name VARCHAR(255)," + + "invoked_class VARCHAR(255)," + + "invoked_method VARCHAR(255)," + + "source_file VARCHAR(255)," + "metadata CLOB," + "execution_millis BIGINT," + "execution_hostname VARCHAR(255)," + "error_trace CLOB," + "type VARCHAR(50)," + - "tx_type VARCHAR(50)," + + "tx_strategy VARCHAR(50)," + "target_system_id VARCHAR(255)," + - "order_col VARCHAR(50)," + + "change_order VARCHAR(50)," + "recovery_strategy VARCHAR(50)," + "transaction_flag SMALLINT," + "system_change SMALLINT" + @@ -220,20 +227,21 @@ public String getCreateTableSqlString(String tableName) { "id INTEGER PRIMARY KEY, " + "execution_id TEXT, " + "stage_id TEXT, " + - "task_id TEXT, " + + "change_id TEXT, " + "author TEXT, " + "created_at DATETIME, " + "state TEXT, " + - "class_name TEXT, " + - "method_name TEXT, " + + "invoked_class TEXT, " + + "invoked_method TEXT, " + + "source_file TEXT, " + "metadata TEXT, " + "execution_millis INTEGER, " + "execution_hostname TEXT, " + "error_trace TEXT, " + "type TEXT, " + - "tx_type TEXT, " + + "tx_strategy TEXT, " + "target_system_id TEXT, " + - "order_col TEXT, " + + "change_order TEXT, " + "recovery_strategy TEXT, " + "transaction_flag INTEGER, " + "system_change INTEGER" + @@ -244,20 +252,21 @@ public String getCreateTableSqlString(String tableName) { "id SERIAL8 PRIMARY KEY, " + "execution_id VARCHAR(100), " + "stage_id VARCHAR(100), " + - "task_id VARCHAR(100), " + + "change_id VARCHAR(100), " + "author VARCHAR(100), " + "created_at DATETIME YEAR TO FRACTION(3) DEFAULT CURRENT YEAR TO FRACTION(3), " + "state VARCHAR(50), " + - "class_name VARCHAR(200), " + - "method_name VARCHAR(100), " + + "invoked_class VARCHAR(200), " + + "invoked_method VARCHAR(100), " + + "source_file VARCHAR(200), " + "metadata LVARCHAR(8000), " + "execution_millis BIGINT, " + "execution_hostname VARCHAR(100), " + "error_trace LVARCHAR(8000), " + "type VARCHAR(50), " + - "tx_type VARCHAR(50), " + + "tx_strategy VARCHAR(50), " + "target_system_id VARCHAR(100), " + - "order_col VARCHAR(50), " + + "change_order VARCHAR(50), " + "recovery_strategy VARCHAR(50), " + "transaction_flag BOOLEAN, " + "system_change BOOLEAN" + @@ -272,17 +281,17 @@ public String getCreateTableSqlString(String tableName) { public String getInsertSqlString(String tableName) { return String.format( "INSERT INTO %s (" + - "execution_id, stage_id, task_id, author, created_at, state, class_name, method_name, metadata, " + - "execution_millis, execution_hostname, error_trace, type, tx_type, target_system_id, order_col, recovery_strategy, transaction_flag, system_change" + + "execution_id, stage_id, change_id, author, created_at, state, invoked_class, invoked_method, source_file, metadata, " + + "execution_millis, execution_hostname, error_trace, type, tx_strategy, target_system_id, change_order, recovery_strategy, transaction_flag, system_change" + ") VALUES (" + - "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?" + + "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?" + ")", tableName); } public String getSelectHistorySqlString(String tableName) { return String.format( - "SELECT execution_id, stage_id, task_id, author, created_at, state, type, class_name, method_name, " + - "execution_millis, execution_hostname, metadata, system_change, error_trace, tx_type, target_system_id, order_col, recovery_strategy, transaction_flag " + + "SELECT execution_id, stage_id, change_id, author, created_at, state, type, invoked_class, invoked_method, source_file, " + + "execution_millis, execution_hostname, metadata, system_change, error_trace, tx_strategy, target_system_id, change_order, recovery_strategy, transaction_flag " + "FROM %s ORDER BY id ASC", tableName); } diff --git a/community/flamingock-auditstore-sql/src/test/java/io/flamingock/store/sql/SqlAuditStoreTest.java b/community/flamingock-auditstore-sql/src/test/java/io/flamingock/store/sql/SqlAuditStoreTest.java index 7bb400d7f..095a93c91 100644 --- a/community/flamingock-auditstore-sql/src/test/java/io/flamingock/store/sql/SqlAuditStoreTest.java +++ b/community/flamingock-auditstore-sql/src/test/java/io/flamingock/store/sql/SqlAuditStoreTest.java @@ -305,7 +305,7 @@ void happyPathWithMockedPipeline(SqlDialect sqlDialect, String dialectName) thro // Verify audit logs try (Connection conn = context.dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement( - "SELECT task_id, state FROM " + CommunityPersistenceConstants.DEFAULT_AUDIT_STORE_NAME + " ORDER BY id ASC"); + "SELECT change_id, state FROM " + CommunityPersistenceConstants.DEFAULT_AUDIT_STORE_NAME + " ORDER BY id ASC"); ResultSet rs = ps.executeQuery()) { String[] expectedTaskIds = {"create-index", "insert-document", "insert-another-document"}; @@ -314,11 +314,11 @@ void happyPathWithMockedPipeline(SqlDialect sqlDialect, String dialectName) thro int appliedCount = 0; while (rs.next()) { - String taskId = rs.getString("task_id"); + String taskId = rs.getString("change_id"); String state = rs.getString("state"); assertTrue( java.util.Arrays.asList(expectedTaskIds).contains(taskId), - "Unexpected task_id: " + taskId + "Unexpected change_id: " + taskId ); assertTrue( state.equals("STARTED") || state.equals("APPLIED"), @@ -380,35 +380,35 @@ void failedWithRollback(SqlDialect sqlDialect, String dialectName) throws Except // Verify audit sequence try (Connection conn = context.dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement( - "SELECT task_id, state FROM " + CommunityPersistenceConstants.DEFAULT_AUDIT_STORE_NAME + " ORDER BY id ASC"); + "SELECT change_id, state FROM " + CommunityPersistenceConstants.DEFAULT_AUDIT_STORE_NAME + " ORDER BY id ASC"); ResultSet rs = ps.executeQuery()) { assertTrue(rs.next()); - assertEquals("create-index", rs.getString("task_id")); + assertEquals("create-index", rs.getString("change_id")); assertEquals("STARTED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("create-index", rs.getString("task_id")); + assertEquals("create-index", rs.getString("change_id")); assertEquals("APPLIED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("insert-document", rs.getString("task_id")); + assertEquals("insert-document", rs.getString("change_id")); assertEquals("STARTED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("insert-document", rs.getString("task_id")); + assertEquals("insert-document", rs.getString("change_id")); assertEquals("APPLIED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("execution-with-exception", rs.getString("task_id")); + assertEquals("execution-with-exception", rs.getString("change_id")); assertEquals("STARTED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("execution-with-exception", rs.getString("task_id")); + assertEquals("execution-with-exception", rs.getString("change_id")); assertEquals("FAILED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("execution-with-exception", rs.getString("task_id")); + assertEquals("execution-with-exception", rs.getString("change_id")); assertEquals("ROLLED_BACK", rs.getString("state")); assertFalse(rs.next()); @@ -467,35 +467,35 @@ void failedWithoutRollback(SqlDialect sqlDialect, String dialectName) throws Exc // Verify audit sequence try (Connection conn = context.dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement( - "SELECT task_id, state FROM " + CommunityPersistenceConstants.DEFAULT_AUDIT_STORE_NAME + " ORDER BY id ASC"); + "SELECT change_id, state FROM " + CommunityPersistenceConstants.DEFAULT_AUDIT_STORE_NAME + " ORDER BY id ASC"); ResultSet rs = ps.executeQuery()) { assertTrue(rs.next()); - assertEquals("create-index", rs.getString("task_id")); + assertEquals("create-index", rs.getString("change_id")); assertEquals("STARTED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("create-index", rs.getString("task_id")); + assertEquals("create-index", rs.getString("change_id")); assertEquals("APPLIED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("insert-document", rs.getString("task_id")); + assertEquals("insert-document", rs.getString("change_id")); assertEquals("STARTED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("insert-document", rs.getString("task_id")); + assertEquals("insert-document", rs.getString("change_id")); assertEquals("APPLIED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("execution-with-exception", rs.getString("task_id")); + assertEquals("execution-with-exception", rs.getString("change_id")); assertEquals("STARTED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("execution-with-exception", rs.getString("task_id")); + assertEquals("execution-with-exception", rs.getString("change_id")); assertEquals("FAILED", rs.getString("state")); assertTrue(rs.next()); - assertEquals("execution-with-exception", rs.getString("task_id")); + assertEquals("execution-with-exception", rs.getString("change_id")); assertEquals("ROLLED_BACK", rs.getString("state")); assertFalse(rs.next()); diff --git a/core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditEntry.java b/core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditEntry.java index e4aae5ec1..a5279e3fd 100644 --- a/core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditEntry.java +++ b/core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditEntry.java @@ -32,6 +32,7 @@ public class AuditEntry implements Comparable { private final Status state; private final String className; private final String methodName; + private final String sourceFile; private final Object metadata; private final long executionMillis; private final String executionHostname; @@ -52,6 +53,7 @@ public AuditEntry(String executionId, ExecutionType type, String className, String methodName, + String sourceFile, long executionMillis, String executionHostname, Object metadata, @@ -70,6 +72,7 @@ public AuditEntry(String executionId, this.state = state; this.className = className; this.methodName = methodName; + this.sourceFile = sourceFile; this.metadata = metadata; this.executionMillis = executionMillis; this.executionHostname = executionHostname; @@ -97,13 +100,14 @@ public AuditEntry(String executionId, ExecutionType type, String className, String methodName, + String sourceFile, long executionMillis, String executionHostname, Object metadata, boolean systemChange, String errorTrace, AuditTxType txStrategy) { - this(executionId, stageId, taskId, author, timestamp, state, type, className, methodName, + this(executionId, stageId, taskId, author, timestamp, state, type, className, methodName, sourceFile, executionMillis, executionHostname, metadata, systemChange, errorTrace, txStrategy, null, null, RecoveryStrategy.MANUAL_INTERVENTION, null); } @@ -121,12 +125,13 @@ public AuditEntry(String executionId, ExecutionType type, String className, String methodName, + String sourceFile, long executionMillis, String executionHostname, Object metadata, boolean systemChange, String errorTrace) { - this(executionId, stageId, taskId, author, timestamp, state, type, className, methodName, + this(executionId, stageId, taskId, author, timestamp, state, type, className, methodName, sourceFile, executionMillis, executionHostname, metadata, systemChange, errorTrace, null, null, null, RecoveryStrategy.MANUAL_INTERVENTION, null); } @@ -173,6 +178,8 @@ public String getMethodName() { return methodName; } + public String getSourceFile() { return sourceFile; } + public Object getMetadata() { return metadata; } @@ -241,6 +248,7 @@ public AuditEntry copyWithNewIdAndStageId(String id, String stageId) { getType(), getClassName(), getMethodName(), + getSourceFile(), getExecutionMillis(), getExecutionHostname(), getMetadata(), diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/OpsClient.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/OpsClient.java index 3944c4554..ddbbaa864 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/OpsClient.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/OpsClient.java @@ -96,6 +96,7 @@ public FixResult fixAuditIssue(String changeId, Resolution resolution) { currentEntry.getType(), currentEntry.getClassName(), currentEntry.getMethodName(), + null, //TODO: set sourceFile currentEntry.getExecutionMillis(), StringUtil.hostname(), currentEntry.getMetadata(),//?? diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/store/audit/domain/AuditContextBundle.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/store/audit/domain/AuditContextBundle.java index a37e2a9b8..91a30d429 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/store/audit/domain/AuditContextBundle.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/store/audit/domain/AuditContextBundle.java @@ -100,6 +100,7 @@ public AuditEntry toAuditEntry() { getExecutionType(), loadedTask.getSource(), runtimeContext.getMethodExecutor(), + null, //TODO: set sourceFile runtimeContext.getDuration(), stageExecutionContext.getHostname(), stageExecutionContext.getMetadata(), diff --git a/core/flamingock-core/src/test/java/io/flamingock/internal/core/store/audit/domain/AuditSnapshotMapBuilderTest.java b/core/flamingock-core/src/test/java/io/flamingock/internal/core/store/audit/domain/AuditSnapshotMapBuilderTest.java index 00f947829..812c8fa61 100644 --- a/core/flamingock-core/src/test/java/io/flamingock/internal/core/store/audit/domain/AuditSnapshotMapBuilderTest.java +++ b/core/flamingock-core/src/test/java/io/flamingock/internal/core/store/audit/domain/AuditSnapshotMapBuilderTest.java @@ -130,6 +130,7 @@ private AuditEntry createAuditEntry(String taskId, AuditEntry.Status status, Aud AuditEntry.ExecutionType.EXECUTION, "TestClass", "testMethod", + "TestSourceFile", 100L, "localhost", new HashMap<>(), diff --git a/core/flamingock-test-support/src/main/java/io/flamingock/support/domain/AuditEntryDefinition.java b/core/flamingock-test-support/src/main/java/io/flamingock/support/domain/AuditEntryDefinition.java index c473d25d1..6f7e32956 100644 --- a/core/flamingock-test-support/src/main/java/io/flamingock/support/domain/AuditEntryDefinition.java +++ b/core/flamingock-test-support/src/main/java/io/flamingock/support/domain/AuditEntryDefinition.java @@ -536,6 +536,7 @@ public AuditEntry toAuditEntry() { AuditEntry.ExecutionType.EXECUTION, className, methodName, + null, //TODO: set sourceFile executionMillis != null ? executionMillis : 0L, executionHostname != null ? executionHostname : "test-host", metadata, diff --git a/core/flamingock-test-support/src/test/java/io/flamingock/support/validation/impl/AuditEntryExpectationTest.java b/core/flamingock-test-support/src/test/java/io/flamingock/support/validation/impl/AuditEntryExpectationTest.java index c76158638..0302282f1 100644 --- a/core/flamingock-test-support/src/test/java/io/flamingock/support/validation/impl/AuditEntryExpectationTest.java +++ b/core/flamingock-test-support/src/test/java/io/flamingock/support/validation/impl/AuditEntryExpectationTest.java @@ -602,6 +602,7 @@ private static AuditEntry createAuditEntry( AuditEntry.ExecutionType.EXECUTION, className, methodName, + null, //TODO: set sourceFile executionMillis, hostname, metadata, diff --git a/core/flamingock-test-support/src/test/java/io/flamingock/support/validation/impl/AuditFinalStateSequenceValidatorTest.java b/core/flamingock-test-support/src/test/java/io/flamingock/support/validation/impl/AuditFinalStateSequenceValidatorTest.java index 4015cbc2d..5cef7b54b 100644 --- a/core/flamingock-test-support/src/test/java/io/flamingock/support/validation/impl/AuditFinalStateSequenceValidatorTest.java +++ b/core/flamingock-test-support/src/test/java/io/flamingock/support/validation/impl/AuditFinalStateSequenceValidatorTest.java @@ -195,6 +195,7 @@ void shouldPassValidation_whenOptionalFieldsMatch() { EXECUTION, "com.example.Change", "apply", + "sourceFile", 100L, "host", null, @@ -238,6 +239,7 @@ void shouldFailValidation_whenOptionalFieldMismatch() { EXECUTION, "com.example.Change", "apply", + "sourceFile", 100L, "host", null, @@ -279,6 +281,7 @@ private AuditEntry createAuditEntry(String changeId, AuditEntry.Status status) { EXECUTION, "com.example.TestChange", "apply", + "sourceFile", 100L, "localhost", null, diff --git a/core/target-systems/sql-target-system/src/main/java/io/flamingock/targetsystem/sql/SqlAuditMarkerDialectHelper.java b/core/target-systems/sql-target-system/src/main/java/io/flamingock/targetsystem/sql/SqlAuditMarkerDialectHelper.java index 05cf82880..a3cb5792e 100644 --- a/core/target-systems/sql-target-system/src/main/java/io/flamingock/targetsystem/sql/SqlAuditMarkerDialectHelper.java +++ b/core/target-systems/sql-target-system/src/main/java/io/flamingock/targetsystem/sql/SqlAuditMarkerDialectHelper.java @@ -31,11 +31,11 @@ public SqlAuditMarkerDialectHelper(SqlDialect dialect) { } public String getListAllSqlString(String tableName) { - return String.format("SELECT task_id, operation FROM %s", tableName); + return String.format("SELECT change_id, operation FROM %s", tableName); } public String getClearMarkSqlString(String tableName) { - return String.format("DELETE FROM %s WHERE task_id = ?", tableName); + return String.format("DELETE FROM %s WHERE change_id = ?", tableName); } public String getMarkSqlString(String tableName) { @@ -43,43 +43,43 @@ public String getMarkSqlString(String tableName) { case MYSQL: case MARIADB: return String.format( - "INSERT INTO %s (task_id, operation) VALUES (?, ?) ON DUPLICATE KEY UPDATE operation = VALUES(operation)", + "INSERT INTO %s (change_id, operation) VALUES (?, ?) ON DUPLICATE KEY UPDATE operation = VALUES(operation)", tableName); case POSTGRESQL: return String.format( - "INSERT INTO %s (task_id, operation) VALUES (?, ?) ON CONFLICT (task_id) DO UPDATE SET operation = EXCLUDED.operation", + "INSERT INTO %s (change_id, operation) VALUES (?, ?) ON CONFLICT (change_id) DO UPDATE SET operation = EXCLUDED.operation", tableName); case SQLITE: return String.format( - "INSERT OR REPLACE INTO %s (task_id, operation) VALUES (?, ?)", + "INSERT OR REPLACE INTO %s (change_id, operation) VALUES (?, ?)", tableName); case SQLSERVER: case SYBASE: return String.format( - "MERGE INTO %s AS target USING (SELECT ? AS task_id, ? AS operation) AS source ON (target.task_id = source.task_id) " + - "WHEN MATCHED THEN UPDATE SET operation = source.operation WHEN NOT MATCHED THEN INSERT (task_id, operation) VALUES (source.task_id, source.operation);", + "MERGE INTO %s AS target USING (SELECT ? AS change_id, ? AS operation) AS source ON (target.change_id = source.change_id) " + + "WHEN MATCHED THEN UPDATE SET operation = source.operation WHEN NOT MATCHED THEN INSERT (change_id, operation) VALUES (source.change_id, source.operation);", tableName); case ORACLE: return String.format( - "MERGE INTO %s t USING (SELECT ? AS task_id, ? AS operation FROM dual) s ON (t.task_id = s.task_id) " + - "WHEN MATCHED THEN UPDATE SET t.operation = s.operation WHEN NOT MATCHED THEN INSERT (task_id, operation) VALUES (s.task_id, s.operation)", + "MERGE INTO %s t USING (SELECT ? AS change_id, ? AS operation FROM dual) s ON (t.change_id = s.change_id) " + + "WHEN MATCHED THEN UPDATE SET t.operation = s.operation WHEN NOT MATCHED THEN INSERT (change_id, operation) VALUES (s.change_id, s.operation)", tableName); case DB2: return String.format( - "MERGE INTO %s AS t USING (SELECT ? AS task_id, ? AS operation FROM SYSIBM.SYSDUMMY1) AS s ON (t.task_id = s.task_id) " + - "WHEN MATCHED THEN UPDATE SET operation = s.operation WHEN NOT MATCHED THEN INSERT (task_id, operation) VALUES (s.task_id, s.operation)", + "MERGE INTO %s AS t USING (SELECT ? AS change_id, ? AS operation FROM SYSIBM.SYSDUMMY1) AS s ON (t.change_id = s.change_id) " + + "WHEN MATCHED THEN UPDATE SET operation = s.operation WHEN NOT MATCHED THEN INSERT (change_id, operation) VALUES (s.change_id, s.operation)", tableName, tableName); case FIREBIRD: return String.format( - "UPDATE OR INSERT INTO %s (task_id, operation) VALUES (?, ?) MATCHING (task_id)", + "UPDATE OR INSERT INTO %s (change_id, operation) VALUES (?, ?) MATCHING (change_id)", tableName); case H2: return String.format( - "MERGE INTO %s (task_id, operation) KEY (task_id) VALUES (?, ?)", + "MERGE INTO %s (change_id, operation) KEY (change_id) VALUES (?, ?)", tableName); case INFORMIX: return String.format( - "INSERT INTO %s (task_id, operation) VALUES (?, ?) ON DUPLICATE KEY UPDATE operation = ?", + "INSERT INTO %s (change_id, operation) VALUES (?, ?) ON DUPLICATE KEY UPDATE operation = ?", tableName); default: throw new UnsupportedOperationException("Dialect not supported for upsert: " + sqlDialect.name()); @@ -98,15 +98,15 @@ public String getCreateTableSqlString(String tableName) { case FIREBIRD: case INFORMIX: return String.format( - "CREATE TABLE %s (task_id VARCHAR(255) PRIMARY KEY, operation VARCHAR(50) NOT NULL)", + "CREATE TABLE %s (change_id VARCHAR(255) PRIMARY KEY, operation VARCHAR(50) NOT NULL)", tableName); case ORACLE: return String.format( - "CREATE TABLE %s (task_id VARCHAR2(255) PRIMARY KEY, operation VARCHAR2(50) NOT NULL)", + "CREATE TABLE %s (change_id VARCHAR2(255) PRIMARY KEY, operation VARCHAR2(50) NOT NULL)", tableName); case DB2: return String.format( - "CREATE TABLE %s (task_id VARCHAR(255) NOT NULL PRIMARY KEY, operation VARCHAR(50) NOT NULL)", + "CREATE TABLE %s (change_id VARCHAR(255) NOT NULL PRIMARY KEY, operation VARCHAR(50) NOT NULL)", tableName); default: throw new UnsupportedOperationException("Dialect not supported for CREATE TABLE: " + sqlDialect.name()); diff --git a/core/target-systems/sql-target-system/src/main/java/io/flamingock/targetsystem/sql/SqlTargetSystemAuditMarker.java b/core/target-systems/sql-target-system/src/main/java/io/flamingock/targetsystem/sql/SqlTargetSystemAuditMarker.java index e45085335..2497b9be9 100644 --- a/core/target-systems/sql-target-system/src/main/java/io/flamingock/targetsystem/sql/SqlTargetSystemAuditMarker.java +++ b/core/target-systems/sql-target-system/src/main/java/io/flamingock/targetsystem/sql/SqlTargetSystemAuditMarker.java @@ -65,7 +65,7 @@ public Set listAll() { Set ongoingStatuses = new HashSet<>(); while (resultSet.next()) { - String taskId = resultSet.getString("task_id"); + String taskId = resultSet.getString("change_id"); AuditContextBundle.Operation operation = AuditContextBundle.Operation.valueOf(resultSet.getString("operation")); ongoingStatuses.add(new TargetSystemAuditMark(taskId, operation.toOngoingStatusOperation())); } diff --git a/core/target-systems/sql-target-system/src/test/java/io/flamingock/targetsystem/sql/MySQLTestHelper.java b/core/target-systems/sql-target-system/src/test/java/io/flamingock/targetsystem/sql/MySQLTestHelper.java index 582619d8d..5f296b502 100644 --- a/core/target-systems/sql-target-system/src/test/java/io/flamingock/targetsystem/sql/MySQLTestHelper.java +++ b/core/target-systems/sql-target-system/src/test/java/io/flamingock/targetsystem/sql/MySQLTestHelper.java @@ -80,7 +80,7 @@ public void insertOngoingExecution(String taskId) { // Create table if it doesn't exist createOngoingTasksTableIfNotExists(connection); - String sql = String.format("INSERT INTO %s (task_id, operation) VALUES (?, ?)", ONGOING_TASKS_TABLE); + String sql = String.format("INSERT INTO %s (change_id, operation) VALUES (?, ?)", ONGOING_TASKS_TABLE); try (PreparedStatement stmt = connection.prepareStatement(sql)) { stmt.setString(1, taskId); stmt.setString(2, "EXECUTION"); @@ -109,7 +109,7 @@ public void createOngoingTasksTableIfNotExists(Connection connection) throws SQL if (!resultSet.next()) { String createTableSql = String.format( "CREATE TABLE %s (" + - "task_id VARCHAR(255) PRIMARY KEY, " + + "change_id VARCHAR(255) PRIMARY KEY, " + "operation VARCHAR(50) NOT NULL" + ")", ONGOING_TASKS_TABLE); try (Statement stmt = connection.createStatement()) { diff --git a/legacy/mongock-importer-couchbase/src/main/java/io/flamingock/importer/mongock/couchbase/CouchbaseChangeEntry.java b/legacy/mongock-importer-couchbase/src/main/java/io/flamingock/importer/mongock/couchbase/CouchbaseChangeEntry.java index 2bf291e84..cf71b0524 100644 --- a/legacy/mongock-importer-couchbase/src/main/java/io/flamingock/importer/mongock/couchbase/CouchbaseChangeEntry.java +++ b/legacy/mongock-importer-couchbase/src/main/java/io/flamingock/importer/mongock/couchbase/CouchbaseChangeEntry.java @@ -94,6 +94,7 @@ public AuditEntry toAuditEntry() { AuditEntry.ExecutionType.valueOf(type), changeLogClass, changeSetMethod, + null, //TODO: set sourceFile executionMillis, executionHostName, metadata, diff --git a/legacy/mongock-importer-dynamodb/src/main/java/io/flamingock/importer/mongock/dynamodb/MongockAuditEntry.java b/legacy/mongock-importer-dynamodb/src/main/java/io/flamingock/importer/mongock/dynamodb/MongockAuditEntry.java index f065121e4..68c3dab26 100644 --- a/legacy/mongock-importer-dynamodb/src/main/java/io/flamingock/importer/mongock/dynamodb/MongockAuditEntry.java +++ b/legacy/mongock-importer-dynamodb/src/main/java/io/flamingock/importer/mongock/dynamodb/MongockAuditEntry.java @@ -204,6 +204,7 @@ public AuditEntry toAuditEntry() { AuditEntry.ExecutionType.EXECUTION, changeLogClass, changeSetMethod, + null, //TODO: set sourceFile executionMillis, executionHostName, metadata, diff --git a/legacy/mongock-importer-dynamodb/src/test/java/io/flamingock/importer/mongock/dynamodb/MongockDynamoDBAuditEntry.java b/legacy/mongock-importer-dynamodb/src/test/java/io/flamingock/importer/mongock/dynamodb/MongockDynamoDBAuditEntry.java index dbc39dd1c..9d584dcba 100644 --- a/legacy/mongock-importer-dynamodb/src/test/java/io/flamingock/importer/mongock/dynamodb/MongockDynamoDBAuditEntry.java +++ b/legacy/mongock-importer-dynamodb/src/test/java/io/flamingock/importer/mongock/dynamodb/MongockDynamoDBAuditEntry.java @@ -203,6 +203,7 @@ public AuditEntry toAuditEntry() { AuditEntry.ExecutionType.valueOf(type), changeLogClass, changeSetMethod, + null, //TODO: set sourceFile executionMillis, executionHostName, metadata, diff --git a/legacy/mongock-importer-mongodb/src/main/java/io/flamingock/importer/mongock/mongodb/MongockImporterMongoDB.java b/legacy/mongock-importer-mongodb/src/main/java/io/flamingock/importer/mongock/mongodb/MongockImporterMongoDB.java index ee0aae869..d2afb0db8 100644 --- a/legacy/mongock-importer-mongodb/src/main/java/io/flamingock/importer/mongock/mongodb/MongockImporterMongoDB.java +++ b/legacy/mongock-importer-mongodb/src/main/java/io/flamingock/importer/mongock/mongodb/MongockImporterMongoDB.java @@ -66,6 +66,7 @@ private static AuditEntry toAuditEntry(Document document) { changeEntry.getType(), changeEntry.getChangeLogClass(), changeEntry.getChangeSetMethod(), + null, //TODO: set sourceFile changeEntry.getExecutionMillis(), changeEntry.getExecutionHostname(), changeEntry.getMetadata(), diff --git a/utils/couchbase-util/src/main/java/io/flamingock/internal/common/couchbase/CouchbaseAuditMapper.java b/utils/couchbase-util/src/main/java/io/flamingock/internal/common/couchbase/CouchbaseAuditMapper.java index 03a446d2e..b23d92d2b 100644 --- a/utils/couchbase-util/src/main/java/io/flamingock/internal/common/couchbase/CouchbaseAuditMapper.java +++ b/utils/couchbase-util/src/main/java/io/flamingock/internal/common/couchbase/CouchbaseAuditMapper.java @@ -23,22 +23,23 @@ import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_STAGE_ID; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_AUTHOR; -import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CHANGE_CLASS; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_INVOKED_CLASS; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_INVOKED_METHOD; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_SOURCE_FILE; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CHANGE_ID; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_ERROR_TRACE; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_EXECUTION_HOSTNAME; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_EXECUTION_ID; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_EXECUTION_MILLIS; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_METADATA; -import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_ORDER; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CHANGE_ORDER; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_RECOVERY_STRATEGY; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TRANSACTION_FLAG; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TX_STRATEGY; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_STATE; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_SYSTEM_CHANGE; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TARGET_SYSTEM_ID; -import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TIMESTAMP; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CREATED_AT; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TYPE; public class CouchbaseAuditMapper { @@ -49,11 +50,12 @@ public JsonObject toDocument(AuditEntry auditEntry) { CouchbaseUtils.addFieldToDocument(document, KEY_STAGE_ID, auditEntry.getStageId()); CouchbaseUtils.addFieldToDocument(document, KEY_CHANGE_ID, auditEntry.getTaskId()); CouchbaseUtils.addFieldToDocument(document, KEY_AUTHOR, auditEntry.getAuthor()); - CouchbaseUtils.addFieldToDocument(document, KEY_TIMESTAMP, TimeUtil.toDate(auditEntry.getCreatedAt())); + CouchbaseUtils.addFieldToDocument(document, KEY_CREATED_AT, TimeUtil.toDate(auditEntry.getCreatedAt())); CouchbaseUtils.addFieldToDocument(document, KEY_STATE, auditEntry.getState().name()); CouchbaseUtils.addFieldToDocument(document, KEY_TYPE, auditEntry.getType().name()); - CouchbaseUtils.addFieldToDocument(document, KEY_CHANGE_CLASS, auditEntry.getClassName()); + CouchbaseUtils.addFieldToDocument(document, KEY_INVOKED_CLASS, auditEntry.getClassName()); CouchbaseUtils.addFieldToDocument(document, KEY_INVOKED_METHOD, auditEntry.getMethodName()); + CouchbaseUtils.addFieldToDocument(document, KEY_SOURCE_FILE, auditEntry.getSourceFile()); CouchbaseUtils.addFieldToDocument(document, KEY_METADATA, auditEntry.getMetadata()); CouchbaseUtils.addFieldToDocument(document, KEY_EXECUTION_MILLIS, auditEntry.getExecutionMillis()); CouchbaseUtils.addFieldToDocument(document, KEY_EXECUTION_HOSTNAME, auditEntry.getExecutionHostname()); @@ -61,7 +63,7 @@ public JsonObject toDocument(AuditEntry auditEntry) { CouchbaseUtils.addFieldToDocument(document, KEY_SYSTEM_CHANGE, auditEntry.getSystemChange()); CouchbaseUtils.addFieldToDocument(document, KEY_TX_STRATEGY, AuditTxType.safeString(auditEntry.getTxType())); CouchbaseUtils.addFieldToDocument(document, KEY_TARGET_SYSTEM_ID, auditEntry.getTargetSystemId()); - CouchbaseUtils.addFieldToDocument(document, KEY_ORDER, auditEntry.getOrder()); + CouchbaseUtils.addFieldToDocument(document, KEY_CHANGE_ORDER, auditEntry.getOrder()); CouchbaseUtils.addFieldToDocument(document, KEY_RECOVERY_STRATEGY, auditEntry.getRecoveryStrategy().name()); CouchbaseUtils.addFieldToDocument(document, KEY_TRANSACTION_FLAG, auditEntry.getTransactionFlag()); return document; @@ -83,11 +85,12 @@ public AuditEntry fromDocument(JsonObject jsonObject) { jsonObject.getString(KEY_STAGE_ID), jsonObject.getString(KEY_CHANGE_ID), jsonObject.getString(KEY_AUTHOR), - jsonObject.get(KEY_TIMESTAMP) != null ? TimeUtil.toLocalDateTime(jsonObject.getLong(KEY_TIMESTAMP)) : null, + jsonObject.get(KEY_CREATED_AT) != null ? TimeUtil.toLocalDateTime(jsonObject.getLong(KEY_CREATED_AT)) : null, jsonObject.get(KEY_STATE) != null ? AuditEntry.Status.valueOf(jsonObject.getString(KEY_STATE)) : null, jsonObject.get(KEY_TYPE) != null ? AuditEntry.ExecutionType.valueOf(jsonObject.getString(KEY_TYPE)) : null, - jsonObject.getString(KEY_CHANGE_CLASS), + jsonObject.getString(KEY_INVOKED_CLASS), jsonObject.getString(KEY_INVOKED_METHOD), + jsonObject.getString(KEY_SOURCE_FILE), jsonObject.getLong(KEY_EXECUTION_MILLIS), jsonObject.getString(KEY_EXECUTION_HOSTNAME), jsonObject.get(KEY_METADATA) != null ? jsonObject.getObject(KEY_METADATA).toMap() : null, @@ -95,7 +98,7 @@ public AuditEntry fromDocument(JsonObject jsonObject) { jsonObject.getString(KEY_ERROR_TRACE), txStrategy, jsonObject.getString(KEY_TARGET_SYSTEM_ID), - jsonObject.getString(KEY_ORDER), + jsonObject.getString(KEY_CHANGE_ORDER), jsonObject.getString(KEY_RECOVERY_STRATEGY) != null ? RecoveryStrategy.valueOf(jsonObject.getString(KEY_RECOVERY_STRATEGY)) : RecoveryStrategy.MANUAL_INTERVENTION, diff --git a/utils/dynamodb-util/src/main/java/io/flamingock/internal/util/dynamodb/entities/AuditEntryEntity.java b/utils/dynamodb-util/src/main/java/io/flamingock/internal/util/dynamodb/entities/AuditEntryEntity.java index 8ece74068..6a10dc100 100644 --- a/utils/dynamodb-util/src/main/java/io/flamingock/internal/util/dynamodb/entities/AuditEntryEntity.java +++ b/utils/dynamodb-util/src/main/java/io/flamingock/internal/util/dynamodb/entities/AuditEntryEntity.java @@ -41,6 +41,7 @@ public class AuditEntryEntity implements Comparable { private AuditEntry.Status state; private String className; private String methodName; + private String sourceFile; private Object metadata; private Long executionMillis; private String executionHostname; @@ -66,6 +67,7 @@ public AuditEntryEntity(AuditEntry auditEntry) { this.state = auditEntry.getState(); this.className = auditEntry.getClassName(); this.methodName = auditEntry.getMethodName(); + this.sourceFile = auditEntry.getSourceFile(); this.metadata = auditEntry.getMetadata(); this.executionMillis = auditEntry.getExecutionMillis(); this.executionHostname = auditEntry.getExecutionHostname(); @@ -132,7 +134,7 @@ public void setAuthor(String author) { this.author = author; } - @DynamoDbAttribute(AuditEntryFieldConstants.KEY_TIMESTAMP) + @DynamoDbAttribute(AuditEntryFieldConstants.KEY_CREATED_AT) public LocalDateTime getCreatedAt() { return createdAt; } @@ -150,7 +152,7 @@ public void setState(String state) { this.state = AuditEntry.Status.valueOf(state); } - @DynamoDbAttribute(AuditEntryFieldConstants.KEY_CHANGE_CLASS) + @DynamoDbAttribute(AuditEntryFieldConstants.KEY_INVOKED_CLASS) public String getClassName() { return className; } @@ -168,6 +170,15 @@ public void setMethodName(String methodName) { this.methodName = methodName; } + @DynamoDbAttribute(AuditEntryFieldConstants.KEY_SOURCE_FILE) + public String getSourceFile() { + return sourceFile; + } + + public void setSourceFile(String sourceFile) { + this.sourceFile = sourceFile; + } + @DynamoDbAttribute(AuditEntryFieldConstants.KEY_METADATA) public String getMetadata() { return metadata.toString(); @@ -240,7 +251,7 @@ public void setTargetSystemId(String targetSystemId) { this.targetSystemId = targetSystemId; } - @DynamoDbAttribute(AuditEntryFieldConstants.KEY_ORDER) + @DynamoDbAttribute(AuditEntryFieldConstants.KEY_CHANGE_ORDER) public String getOrder() { return order; } @@ -302,6 +313,7 @@ public AuditEntry toAuditEntry() { type, className, methodName, + sourceFile, executionMillis, executionHostname, metadata, diff --git a/utils/general-util/src/main/java/io/flamingock/internal/util/constants/AuditEntryFieldConstants.java b/utils/general-util/src/main/java/io/flamingock/internal/util/constants/AuditEntryFieldConstants.java index f8c6879a8..14e8e31cd 100644 --- a/utils/general-util/src/main/java/io/flamingock/internal/util/constants/AuditEntryFieldConstants.java +++ b/utils/general-util/src/main/java/io/flamingock/internal/util/constants/AuditEntryFieldConstants.java @@ -20,11 +20,12 @@ public class AuditEntryFieldConstants { public static final String KEY_STAGE_ID = "stageId"; public static final String KEY_CHANGE_ID = "changeId"; public static final String KEY_AUTHOR = "author"; - public static final String KEY_TIMESTAMP = "timestamp"; + public static final String KEY_CREATED_AT = "createdAt"; public static final String KEY_STATE = "state"; public static final String KEY_TYPE = "type"; - public static final String KEY_CHANGE_CLASS = "changeClass"; + public static final String KEY_INVOKED_CLASS = "invokedClass"; public static final String KEY_INVOKED_METHOD = "invokedMethod"; + public static final String KEY_SOURCE_FILE = "sourceFile"; public static final String KEY_METADATA = "metadata"; public static final String KEY_EXECUTION_MILLIS = "executionMillis"; public static final String KEY_EXECUTION_HOSTNAME = "executionHostname"; @@ -32,7 +33,7 @@ public class AuditEntryFieldConstants { public static final String KEY_SYSTEM_CHANGE = "systemChange"; public static final String KEY_TX_STRATEGY = "txStrategy"; public static final String KEY_TARGET_SYSTEM_ID = "targetSystemId"; - public static final String KEY_ORDER = "order"; + public static final String KEY_CHANGE_ORDER = "changeOrder"; public static final String KEY_RECOVERY_STRATEGY = "recoveryStrategy"; public static final String KEY_TRANSACTION_FLAG = "transactionFlag"; } diff --git a/utils/mongodb-util/src/main/java/io/flamingock/internal/common/mongodb/MongoDBAuditMapper.java b/utils/mongodb-util/src/main/java/io/flamingock/internal/common/mongodb/MongoDBAuditMapper.java index 053040ecb..e5063fa10 100644 --- a/utils/mongodb-util/src/main/java/io/flamingock/internal/common/mongodb/MongoDBAuditMapper.java +++ b/utils/mongodb-util/src/main/java/io/flamingock/internal/common/mongodb/MongoDBAuditMapper.java @@ -23,7 +23,7 @@ import java.util.function.Supplier; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_AUTHOR; -import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CHANGE_CLASS; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_INVOKED_CLASS; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_INVOKED_METHOD; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CHANGE_ID; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_ERROR_TRACE; @@ -31,15 +31,16 @@ import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_EXECUTION_ID; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_EXECUTION_MILLIS; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_METADATA; -import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_ORDER; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CHANGE_ORDER; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_RECOVERY_STRATEGY; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_SOURCE_FILE; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TRANSACTION_FLAG; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TX_STRATEGY; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_STAGE_ID; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_STATE; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_SYSTEM_CHANGE; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TARGET_SYSTEM_ID; -import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TIMESTAMP; +import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_CREATED_AT; import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TYPE; public class MongoDBAuditMapper { @@ -56,11 +57,12 @@ public DOCUMENT_WRAPPER toDocument(AuditEntry auditEntry) { document.append(KEY_STAGE_ID, auditEntry.getStageId()); document.append(KEY_CHANGE_ID, auditEntry.getTaskId()); document.append(KEY_AUTHOR, auditEntry.getAuthor()); - document.append(KEY_TIMESTAMP, TimeUtil.toDate(auditEntry.getCreatedAt())); + document.append(KEY_CREATED_AT, TimeUtil.toDate(auditEntry.getCreatedAt())); document.append(KEY_STATE, auditEntry.getState().name()); document.append(KEY_TYPE, auditEntry.getType().name()); - document.append(KEY_CHANGE_CLASS, auditEntry.getClassName()); + document.append(KEY_INVOKED_CLASS, auditEntry.getClassName()); document.append(KEY_INVOKED_METHOD, auditEntry.getMethodName()); + document.append(KEY_SOURCE_FILE, auditEntry.getSourceFile()); document.append(KEY_METADATA, auditEntry.getMetadata()); document.append(KEY_EXECUTION_MILLIS, auditEntry.getExecutionMillis()); document.append(KEY_EXECUTION_HOSTNAME, auditEntry.getExecutionHostname()); @@ -68,7 +70,7 @@ public DOCUMENT_WRAPPER toDocument(AuditEntry auditEntry) { document.append(KEY_SYSTEM_CHANGE, auditEntry.getSystemChange()); document.append(KEY_TX_STRATEGY, AuditTxType.safeString(auditEntry.getTxType())); document.append(KEY_TARGET_SYSTEM_ID, auditEntry.getTargetSystemId()); - document.append(KEY_ORDER, auditEntry.getOrder()); + document.append(KEY_CHANGE_ORDER, auditEntry.getOrder()); document.append(KEY_RECOVERY_STRATEGY, auditEntry.getRecoveryStrategy().name()); document.append(KEY_TRANSACTION_FLAG, auditEntry.getTransactionFlag()); return document; @@ -91,11 +93,12 @@ public AuditEntry fromDocument(DocumentHelper entry) { entry.getString(KEY_STAGE_ID), entry.getString(KEY_CHANGE_ID), entry.getString(KEY_AUTHOR), - TimeUtil.toLocalDateTime(entry.get(KEY_TIMESTAMP)), + TimeUtil.toLocalDateTime(entry.get(KEY_CREATED_AT)), entry.containsKey(KEY_STATE) ? AuditEntry.Status.valueOf(entry.getString(KEY_STATE)) : null, entry.containsKey(KEY_TYPE) ? AuditEntry.ExecutionType.valueOf(entry.getString(KEY_TYPE)) : null, - entry.getString(KEY_CHANGE_CLASS), + entry.getString(KEY_INVOKED_CLASS), entry.getString(KEY_INVOKED_METHOD), + entry.getString(KEY_SOURCE_FILE), entry.containsKey(KEY_EXECUTION_MILLIS) && entry.get(KEY_EXECUTION_MILLIS) != null ? ((Number) entry.get(KEY_EXECUTION_MILLIS)).longValue() : -1L, entry.getString(KEY_EXECUTION_HOSTNAME), @@ -104,7 +107,7 @@ public AuditEntry fromDocument(DocumentHelper entry) { entry.getString(KEY_ERROR_TRACE), txStrategy, entry.getString(KEY_TARGET_SYSTEM_ID), - entry.getString(KEY_ORDER), + entry.getString(KEY_CHANGE_ORDER), entry.getString(KEY_RECOVERY_STRATEGY) != null ? RecoveryStrategy.valueOf(entry.getString(KEY_RECOVERY_STRATEGY)) : RecoveryStrategy.MANUAL_INTERVENTION, diff --git a/utils/test-util/src/main/java/io/flamingock/core/kit/audit/AuditEntryTestFactory.java b/utils/test-util/src/main/java/io/flamingock/core/kit/audit/AuditEntryTestFactory.java index c5ab9fcab..a6fb4a624 100644 --- a/utils/test-util/src/main/java/io/flamingock/core/kit/audit/AuditEntryTestFactory.java +++ b/utils/test-util/src/main/java/io/flamingock/core/kit/audit/AuditEntryTestFactory.java @@ -85,6 +85,7 @@ public static AuditEntry createTestAuditEntry(String changeId, AuditEntry.Status AuditEntry.ExecutionType.EXECUTION, // type "TestChangeClass", // className "testMethod", // methodName + "TestSourceFile", // sourceFile 0L, // executionMillis "localhost", // executionHostname null, // metadata @@ -114,6 +115,7 @@ public static AuditEntry createTestAuditEntry(String changeId, AuditEntry.Status AuditEntry.ExecutionType.EXECUTION, // type "TestChangeClass", // className "testMethod", // methodName + "TestSourceFile", // sourceFile 0L, // executionMillis "localhost", // executionHostname null, // metadata @@ -222,6 +224,7 @@ public static AuditEntry createTestAuditEntry(String changeId, AuditEntry.Status AuditEntry.ExecutionType.EXECUTION, // type "TestChangeClass", // className "testMethod", // methodName + "TestSourceFile", // sourceFile 0L, // executionMillis "localhost", // executionHostname null, // metadata @@ -250,6 +253,7 @@ public static AuditEntry createTestAuditEntry(String changeId, AuditEntry.Status AuditEntry.ExecutionType.EXECUTION, // type "TestChangeClass", // className "testMethod", // methodName + "TestSourceFile", // sourceFile 0L, // executionMillis "localhost", // executionHostname null, // metadata @@ -283,6 +287,7 @@ public static AuditEntry createTestAuditEntryWithRecoveryStrategy(String changeI AuditEntry.ExecutionType.EXECUTION, // type "TestChangeClass", // className "testMethod", // methodName + "TestSourceFile", // sourceFile 0L, // executionMillis "localhost", // executionHostname null, // metadata diff --git a/utils/test-util/src/main/java/io/flamingock/core/kit/audit/AuditTestHelper.java b/utils/test-util/src/main/java/io/flamingock/core/kit/audit/AuditTestHelper.java index d6e92def3..cdb06b674 100644 --- a/utils/test-util/src/main/java/io/flamingock/core/kit/audit/AuditTestHelper.java +++ b/utils/test-util/src/main/java/io/flamingock/core/kit/audit/AuditTestHelper.java @@ -98,6 +98,7 @@ public void addStartedAuditEntry(String changeId, String author) { AuditEntry.ExecutionType.EXECUTION, "TestClass", "testMethod", + "TestSourceFile", 0L, "test-hostname", null, @@ -123,6 +124,7 @@ public void addAppliedAuditEntry(String changeId, String author) { AuditEntry.ExecutionType.EXECUTION, "TestClass", "testMethod", + "TestSourceFile", 100L, "test-hostname", null,