Skip to content

Commit

Permalink
♻️ Extract report domain to module
Browse files Browse the repository at this point in the history
This extraction will be useful for creation of monitoring module, which will only depend on this domain module
  • Loading branch information
Lysoun committed Jul 26, 2022
1 parent 212fb18 commit c6a162c
Show file tree
Hide file tree
Showing 64 changed files with 262 additions and 217 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import datamaintain.cli.app.DatamaintainCliCommand
import datamaintain.core.Datamaintain
import datamaintain.core.config.DatamaintainConfig
import datamaintain.core.exception.DatamaintainException
import datamaintain.core.report.print
import kotlin.system.exitProcess

fun defaultUpdateDbRunner(config: DatamaintainConfig) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.github.ajalt.clikt.parameters.options.option
import datamaintain.cli.app.utils.detailedOption
import datamaintain.core.config.CoreConfigKey
import datamaintain.core.config.DatamaintainConfig
import datamaintain.core.script.ScriptAction
import datamaintain.domain.script.ScriptAction
import java.util.*

class MarkOneScriptAsExecuted(runner: (DatamaintainConfig) -> Unit = ::defaultUpdateDbRunner) :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ import datamaintain.cli.app.utils.detailedOption
import datamaintain.core.config.CoreConfigKey
import datamaintain.core.config.DatamaintainConfig
import datamaintain.core.db.driver.DriverConfigKey
import datamaintain.core.script.ScriptAction
import datamaintain.core.step.check.allCheckRuleNames
import datamaintain.core.step.executor.ExecutionMode
import datamaintain.db.driver.mongo.MongoConfigKey
import datamaintain.db.driver.mongo.MongoShell
import datamaintain.domain.script.ScriptAction
import java.util.*

class UpdateDb(runner: (DatamaintainConfig) -> Unit = ::defaultUpdateDbRunner) : DatamaintainCliUpdateDbCommand(
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package datamaintain.cli.app.update.db

import datamaintain.cli.app.BaseCliTest
import datamaintain.core.script.ScriptAction
import datamaintain.domain.script.ScriptAction
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import strikt.api.expectThat
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ package datamaintain.cli.app.update.db

import datamaintain.cli.app.BaseCliTest
import datamaintain.core.config.DatamaintainConfig
import datamaintain.core.script.ScriptAction
import datamaintain.core.script.Tag
import datamaintain.core.script.TagMatcher
import datamaintain.core.step.check.rules.implementations.SameScriptsAsExecutedCheck
import datamaintain.db.driver.mongo.MongoDriverConfig
import datamaintain.db.driver.mongo.MongoShell
import datamaintain.domain.script.ScriptAction
import datamaintain.domain.script.Tag
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
Expand Down
2 changes: 2 additions & 0 deletions modules/core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ publishing {
}

dependencies {
api(project(":modules:domain-report"))

"testImplementation"("ch.qos.logback:logback-classic:${Versions.logbackClassic}")
}

3 changes: 1 addition & 2 deletions modules/core/src/main/kotlin/datamaintain/core/Context.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ package datamaintain.core

import datamaintain.core.config.DatamaintainConfig
import datamaintain.core.db.driver.DatamaintainDriver
import datamaintain.core.report.Report
import datamaintain.core.report.ReportBuilder
import datamaintain.domain.report.ReportBuilder

data class Context(
val config: DatamaintainConfig,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package datamaintain.core

import datamaintain.core.config.DatamaintainConfig
import datamaintain.core.report.Report
import datamaintain.core.step.Filter
import datamaintain.core.step.Pruner
import datamaintain.core.step.Scanner
import datamaintain.core.step.check.Checker
import datamaintain.core.step.check.CheckerData
import datamaintain.core.step.executor.Executor
import datamaintain.core.step.sort.Sorter
import datamaintain.domain.report.Report
import mu.KotlinLogging

private val logger = KotlinLogging.logger {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import datamaintain.core.config.ConfigKey.Companion.overrideBySystemProperties
import datamaintain.core.config.CoreConfigKey.*
import datamaintain.core.db.driver.DatamaintainDriverConfig
import datamaintain.core.exception.DatamaintainBuilderMandatoryException
import datamaintain.core.script.ScriptAction
import datamaintain.core.script.Tag
import datamaintain.core.script.TagMatcher
import datamaintain.core.step.executor.ExecutionMode
import datamaintain.domain.script.ScriptAction
import datamaintain.domain.script.Tag
import mu.KotlinLogging
import java.io.File
import java.io.InputStream
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package datamaintain.core.db.driver

import datamaintain.core.script.ExecutedScript
import datamaintain.core.script.LightExecutedScript
import datamaintain.core.script.ScriptWithContent
import datamaintain.core.step.executor.Execution
import datamaintain.domain.script.ExecutedScript
import datamaintain.domain.script.LightExecutedScript
import datamaintain.domain.script.ScriptWithContent

abstract class DatamaintainDriver(protected val uri: String) {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package datamaintain.core.exception

import datamaintain.core.report.Report
import datamaintain.core.report.ReportBuilder
import datamaintain.core.step.Step
import datamaintain.domain.report.Report
import datamaintain.domain.report.ReportBuilder

class DatamaintainException(
override val message: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datamaintain.core.exception

import datamaintain.core.script.ExecutedScript
import datamaintain.domain.script.ExecutedScript

class DatamaintainScriptExecutionException (
executedScript: ExecutedScript
Expand Down
120 changes: 39 additions & 81 deletions modules/core/src/main/kotlin/datamaintain/core/report/Report.kt
Original file line number Diff line number Diff line change
@@ -1,102 +1,60 @@
package datamaintain.core.report

import datamaintain.core.script.ReportExecutedScript
import datamaintain.core.script.ScriptWithContent
import datamaintain.core.step.Step
import datamaintain.core.step.check.rules.CheckRule
import datamaintain.domain.report.Report
import mu.KotlinLogging

private val logger = KotlinLogging.logger {}

class Report @JvmOverloads constructor(
val scannedScripts: List<ScriptWithContent> = listOf(),
val filteredScripts: List<ScriptWithContent> = listOf(),
val prunedScripts: List<ScriptWithContent> = listOf(),
val executedScripts: List<ReportExecutedScript> = listOf(),
val validatedCheckRules: List<CheckRule> = listOf()
) {
fun print(verbose: Boolean, porcelain: Boolean = false) {
val stepWithMaxExecutionOrder: Step = Step.values().asSequence().maxByOrNull { step -> step.executionOrder }!!
print(verbose, porcelain, stepWithMaxExecutionOrder)
}
fun Report.print(verbose: Boolean, porcelain: Boolean = false) {
val stepWithMaxExecutionOrder: Step = Step.values().asSequence().maxByOrNull { step -> step.executionOrder }!!
print(verbose, porcelain, stepWithMaxExecutionOrder)
}

fun print(verbose: Boolean, porcelain: Boolean, maxStepToShow: Step) {
if (!porcelain) {
logger.info { "Summary => " }
fun Report.print(verbose: Boolean, porcelain: Boolean, maxStepToShow: Step) {
if (!porcelain) {
logger.info { "Summary => " }

// Scanner
logger.info { "- ${scannedScripts.size} files scanned" }
if (verbose) {
scannedScripts.forEach {logger.info { " -> ${it.name}" }}
}
// Scanner
logger.info { "- ${scannedScripts.size} files scanned" }
if (verbose) {
scannedScripts.forEach { logger.info { " -> ${it.name}" } }
}

if (Step.FILTER.isSameStepOrExecutedBefore(maxStepToShow)) {
logger.info { "- ${filteredScripts.size} files filtered" }
if (verbose) {
filteredScripts.forEach { logger.info { " -> ${it.name}" } }
}
if (Step.FILTER.isSameStepOrExecutedBefore(maxStepToShow)) {
logger.info { "- ${filteredScripts.size} files filtered" }
if (verbose) {
filteredScripts.forEach { logger.info { " -> ${it.name}" } }
}
}

if (Step.PRUNE.isSameStepOrExecutedBefore(maxStepToShow)) {
logger.info { "- ${prunedScripts.size} files pruned" }
if (verbose) {
prunedScripts.forEach { logger.info { " -> ${it.name}" } }
}
if (Step.PRUNE.isSameStepOrExecutedBefore(maxStepToShow)) {
logger.info { "- ${prunedScripts.size} files pruned" }
if (verbose) {
prunedScripts.forEach { logger.info { " -> ${it.name}" } }
}
}

if (Step.CHECK.isSameStepOrExecutedBefore(maxStepToShow)) {
logger.info { "- ${validatedCheckRules.size} check rules validated" }
if (verbose) {
validatedCheckRules.forEach { logger.info { " -> ${it.getName()}" } }
}
if (Step.CHECK.isSameStepOrExecutedBefore(maxStepToShow)) {
logger.info { "- ${validatedCheckRules.size} check rules validated" }
if (verbose) {
validatedCheckRules.forEach { logger.info { " -> ${it.getName()}" } }
}
}
}

if (Step.EXECUTE.isSameStepOrExecutedBefore(maxStepToShow)) {
if (!porcelain) { logger.info { "- ${executedScripts.size} files executed" } }
executedScripts.forEach {
logger.info {
if (!porcelain) { " -> ${it.name}" } else { "${it.porcelainName}" }
if (Step.EXECUTE.isSameStepOrExecutedBefore(maxStepToShow)) {
if (!porcelain) {
logger.info { "- ${executedScripts.size} files executed" }
}
executedScripts.forEach {
logger.info {
if (!porcelain) {
" -> ${it.name}"
} else {
"${it.porcelainName}"
}
}
}
}
}


class ReportBuilder @JvmOverloads constructor(
private val scannedScripts: MutableList<ScriptWithContent> = mutableListOf(),
private val filteredScripts: MutableList<ScriptWithContent> = mutableListOf(),
private val prunedScripts: MutableList<ScriptWithContent> = mutableListOf(),
private val executedScripts: MutableList<ReportExecutedScript> = mutableListOf(),
private val validatedCheckRules: MutableList<CheckRule> = mutableListOf()
) {

fun addScannedScript(script: ScriptWithContent) {
scannedScripts.add(script)
}

fun addFilteredScript(script: ScriptWithContent) {
filteredScripts.add(script)
}

fun addPrunedScript(script: ScriptWithContent) {
prunedScripts.add(script)
}

fun addReportExecutedScript(script: ReportExecutedScript) {
executedScripts.add(script)
}

fun addValidatedCheckRules(checkRule: CheckRule) {
validatedCheckRules.add(checkRule)
}

fun toReport() = Report(
scannedScripts,
filteredScripts,
prunedScripts,
executedScripts,
validatedCheckRules
)
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package datamaintain.core.script

import java.math.BigInteger
import datamaintain.core.config.DatamaintainConfig
import datamaintain.core.exception.DatamaintainFileIdentifierPatternException
import datamaintain.core.util.extractRelativePath
import datamaintain.domain.script.ScriptAction
import datamaintain.domain.script.ScriptWithContent
import datamaintain.domain.script.Tag
import java.io.File
import java.math.BigInteger
import java.nio.file.Path
import java.security.MessageDigest

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package datamaintain.core.script

import datamaintain.core.exception.DatamaintainBaseException
import datamaintain.domain.script.Tag
import java.nio.file.FileSystems
import java.nio.file.Path
import java.nio.file.PathMatcher
Expand Down
6 changes: 4 additions & 2 deletions modules/core/src/main/kotlin/datamaintain/core/step/Filter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@ package datamaintain.core.step
import datamaintain.core.Context
import datamaintain.core.exception.DatamaintainBaseException
import datamaintain.core.exception.DatamaintainException
import datamaintain.core.script.ScriptWithContent
import datamaintain.domain.script.ScriptWithContent
import mu.KotlinLogging

private val logger = KotlinLogging.logger {}

class Filter(private val context: Context) {
fun filter(scripts: List<ScriptWithContent>): List<ScriptWithContent> {
try {
if (!context.config.porcelain) { logger.info { "Filter scripts..." } }
if (!context.config.porcelain) {
logger.info { "Filter scripts..." }
}
var filteredScripts = scripts

if (context.config.whitelistedTags.isNotEmpty()) {
Expand Down
4 changes: 2 additions & 2 deletions modules/core/src/main/kotlin/datamaintain/core/step/Pruner.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package datamaintain.core.step
import datamaintain.core.Context
import datamaintain.core.exception.DatamaintainBaseException
import datamaintain.core.exception.DatamaintainException
import datamaintain.core.script.ScriptAction
import datamaintain.core.script.ScriptWithContent
import datamaintain.domain.script.ScriptAction
import datamaintain.domain.script.ScriptWithContent
import mu.KotlinLogging

private val logger = KotlinLogging.logger {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import datamaintain.core.config.DatamaintainConfig
import datamaintain.core.exception.DatamaintainBaseException
import datamaintain.core.exception.DatamaintainException
import datamaintain.core.script.FileScript
import datamaintain.core.script.ScriptWithContent
import datamaintain.core.script.Tag
import datamaintain.domain.script.ScriptWithContent
import datamaintain.domain.script.Tag
import mu.KotlinLogging
import java.io.File
import java.nio.file.Path
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ import datamaintain.core.Context
import datamaintain.core.exception.DatamaintainBaseException
import datamaintain.core.exception.DatamaintainCheckRuleNotFoundException
import datamaintain.core.exception.DatamaintainException
import datamaintain.core.script.ScriptWithContent
import datamaintain.core.step.Step
import datamaintain.core.step.check.rules.CheckRule
import datamaintain.core.step.check.rules.ScriptType
import datamaintain.core.step.check.rules.contracts.FullContextCheckRule
import datamaintain.core.step.check.rules.contracts.ScriptCheckRule
import datamaintain.core.step.check.rules.contracts.ScriptWithContextCheckRule
import datamaintain.core.step.check.rules.implementations.AlwaysFailedCheck
import datamaintain.core.step.check.rules.implementations.AlwaysSucceedCheck
import datamaintain.core.step.check.rules.implementations.SameScriptsAsExecutedCheck
import datamaintain.domain.CheckRule
import datamaintain.domain.ScriptType
import datamaintain.domain.script.ScriptWithContent
import mu.KotlinLogging

private val logger = KotlinLogging.logger {}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package datamaintain.core.step.check.rules.contracts

import datamaintain.core.exception.DatamaintainCheckException
import datamaintain.core.script.LightExecutedScript
import datamaintain.core.script.ScriptWithContent
import datamaintain.core.step.check.rules.CheckRule
import datamaintain.domain.CheckRule
import datamaintain.domain.script.LightExecutedScript
import datamaintain.domain.script.ScriptWithContent

abstract class FullContextCheckRule(
val executedScripts: Sequence<LightExecutedScript>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package datamaintain.core.step.check.rules.contracts

import datamaintain.core.exception.DatamaintainCheckException
import datamaintain.core.script.ScriptWithContent
import datamaintain.core.step.check.rules.CheckRule
import datamaintain.domain.CheckRule
import datamaintain.domain.script.ScriptWithContent

abstract class ScriptCheckRule: CheckRule {
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package datamaintain.core.step.check.rules.contracts

import datamaintain.core.exception.DatamaintainCheckException
import datamaintain.core.script.ExecutedScript
import datamaintain.core.script.ScriptWithContent
import datamaintain.core.step.check.rules.CheckRule
import datamaintain.domain.CheckRule
import datamaintain.domain.script.ExecutedScript
import datamaintain.domain.script.ScriptWithContent

abstract class ScriptWithContextCheckRule(
executedScripts: Sequence<ExecutedScript>
Expand Down
Loading

0 comments on commit c6a162c

Please sign in to comment.