diff --git a/build.gradle.kts b/build.gradle.kts index 4525418..66a59d9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "org.cloud_assess" -version = "2.0.0" +version = "2.0.1" java { sourceCompatibility = JavaVersion.VERSION_17 @@ -30,7 +30,7 @@ repositories { } dependencies { - val lcaacVersion = "1.8.0" + val lcaacVersion = "2.0.0" implementation("ch.kleis.lcaac:core:$lcaacVersion") implementation("ch.kleis.lcaac:grammar:$lcaacVersion") diff --git a/docker-compose.yaml b/docker-compose.yaml index 4f6f9bb..bbcd9b3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,6 +1,6 @@ services: app: - image: "ghcr.io/kleis-technology/cloud-assess/cloud-assess-app:v2.0.0" + image: "ghcr.io/kleis-technology/cloud-assess/cloud-assess-app:v2.0.1" container_name: cloud-assess-app ports: - "8080:8080" diff --git a/flake.nix b/flake.nix index ad13af6..5b86959 100644 --- a/flake.nix +++ b/flake.nix @@ -1,7 +1,7 @@ { description = "Cloud Assess flake"; inputs.lcaac-flake = { - url = "github:kleis-technology/homebrew-lcaac/v1.8.0"; + url = "github:kleis-technology/homebrew-lcaac/v2.0.0"; }; outputs = inputs@{ nixpkgs, lcaac-flake, ...}: { diff --git a/src/main/kotlin/org/cloud_assess/config/LcaConfig.kt b/src/main/kotlin/org/cloud_assess/config/LcaConfig.kt index a7777ae..753cec8 100644 --- a/src/main/kotlin/org/cloud_assess/config/LcaConfig.kt +++ b/src/main/kotlin/org/cloud_assess/config/LcaConfig.kt @@ -51,9 +51,7 @@ class LcaConfig { @Bean fun lcaacConfig( @Value("\${lca.config}") modelDirectory: Path, - @Value("\${lca.manifest}") manifest: String, - @Value("\${resilio-db.url}") rdbUrl: String, - @Value("\${resilio-db.access-token}") rdbAccessToken: String, + @Value("\${lca.manifest}") manifest: String ): LcaacConfig { val configFile = Files.walk(modelDirectory, 1) .filter { diff --git a/src/main/kotlin/org/cloud_assess/service/ComputeResourceService.kt b/src/main/kotlin/org/cloud_assess/service/ComputeResourceService.kt index 18a6805..6f43eab 100644 --- a/src/main/kotlin/org/cloud_assess/service/ComputeResourceService.kt +++ b/src/main/kotlin/org/cloud_assess/service/ComputeResourceService.kt @@ -4,11 +4,13 @@ import ch.kleis.lcaac.core.assessment.ContributionAnalysisProgram import ch.kleis.lcaac.core.datasource.DefaultDataSourceOperations import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnector import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnectorKeys +import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnectorKeys.IN_MEMORY_CONNECTOR_NAME import ch.kleis.lcaac.core.datasource.in_memory.InMemoryDatasource import ch.kleis.lcaac.core.lang.SymbolTable import ch.kleis.lcaac.core.lang.evaluator.Evaluator import ch.kleis.lcaac.core.lang.expression.EProcessTemplateApplication import ch.kleis.lcaac.core.lang.register.DataKey +import ch.kleis.lcaac.core.lang.register.DataSourceKey import ch.kleis.lcaac.core.lang.value.RecordValue import ch.kleis.lcaac.core.math.basic.BasicNumber import ch.kleis.lcaac.core.math.basic.BasicOperations @@ -37,18 +39,16 @@ class ComputeResourceService( computeResources.period.toDataExpression() } val cases = cases(computeResources) + val computeResourcesConnector = inMemoryConnector(computeResources) val sourceOps = defaultDataSourceOperations.overrideWith(computeResourcesConnector) - val evaluator = Evaluator( - symbolTable.copy( - data = symbolTable.data.override( - DataKey(overrideTimeWindowParam), - period, - ) - ), - BasicOperations, - sourceOps, - ) + + val newSymbolTable = symbolTable + .overrideDatasourceConnector(DataSourceKey(overriddenDataSourceName), IN_MEMORY_CONNECTOR_NAME) + .copy(data = symbolTable.data.override(DataKey(overrideTimeWindowParam), period)) + + val evaluator = Evaluator(newSymbolTable, BasicOperations, sourceOps) + val productMatcher: (String) -> ProductMatcher = { id -> ProductMatcher( name = "compute", diff --git a/src/main/kotlin/org/cloud_assess/service/StorageResourceService.kt b/src/main/kotlin/org/cloud_assess/service/StorageResourceService.kt index 36e0d3f..92e4422 100644 --- a/src/main/kotlin/org/cloud_assess/service/StorageResourceService.kt +++ b/src/main/kotlin/org/cloud_assess/service/StorageResourceService.kt @@ -4,11 +4,13 @@ import ch.kleis.lcaac.core.assessment.ContributionAnalysisProgram import ch.kleis.lcaac.core.datasource.DefaultDataSourceOperations import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnector import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnectorKeys +import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnectorKeys.IN_MEMORY_CONNECTOR_NAME import ch.kleis.lcaac.core.datasource.in_memory.InMemoryDatasource import ch.kleis.lcaac.core.lang.SymbolTable import ch.kleis.lcaac.core.lang.evaluator.Evaluator import ch.kleis.lcaac.core.lang.expression.EProcessTemplateApplication import ch.kleis.lcaac.core.lang.register.DataKey +import ch.kleis.lcaac.core.lang.register.DataSourceKey import ch.kleis.lcaac.core.lang.value.RecordValue import ch.kleis.lcaac.core.math.basic.BasicNumber import ch.kleis.lcaac.core.math.basic.BasicOperations @@ -36,18 +38,16 @@ class StorageResourceService( storageResources.period.toDataExpression() } val cases = cases(storageResources) + val storageResourcesConnector = inMemoryConnector(storageResources) val sourceOps = defaultDataSourceOperations.overrideWith(storageResourcesConnector) - val evaluator = Evaluator( - symbolTable.copy( - data = symbolTable.data.override( - DataKey(overrideTimeWindowParam), - period, - ) - ), - BasicOperations, - sourceOps, - ) + + val newSymbolTable = symbolTable + .overrideDatasourceConnector(DataSourceKey(overriddenDataSourceName), IN_MEMORY_CONNECTOR_NAME) + .copy(data = symbolTable.data.override(DataKey(overrideTimeWindowParam), period)) + + val evaluator = Evaluator(newSymbolTable, BasicOperations, sourceOps) + val productMatcher: (String) -> ProductMatcher = { id -> ProductMatcher( name = "storage", diff --git a/src/main/kotlin/org/cloud_assess/service/VirtualMachineService.kt b/src/main/kotlin/org/cloud_assess/service/VirtualMachineService.kt index f7f9132..f22fd12 100644 --- a/src/main/kotlin/org/cloud_assess/service/VirtualMachineService.kt +++ b/src/main/kotlin/org/cloud_assess/service/VirtualMachineService.kt @@ -4,11 +4,13 @@ import ch.kleis.lcaac.core.assessment.ContributionAnalysisProgram import ch.kleis.lcaac.core.datasource.DefaultDataSourceOperations import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnector import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnectorKeys +import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnectorKeys.IN_MEMORY_CONNECTOR_NAME import ch.kleis.lcaac.core.datasource.in_memory.InMemoryDatasource import ch.kleis.lcaac.core.lang.SymbolTable import ch.kleis.lcaac.core.lang.evaluator.Evaluator import ch.kleis.lcaac.core.lang.expression.EProcessTemplateApplication import ch.kleis.lcaac.core.lang.register.DataKey +import ch.kleis.lcaac.core.lang.register.DataSourceKey import ch.kleis.lcaac.core.lang.value.RecordValue import ch.kleis.lcaac.core.math.basic.BasicNumber import ch.kleis.lcaac.core.math.basic.BasicOperations @@ -36,18 +38,16 @@ class VirtualMachineService( vms.period.toDataExpression() } val cases = cases(vms) + val vmsConnector = inMemoryConnector(vms) val sourceOps = defaultDataSourceOperations.overrideWith(vmsConnector) - val evaluator = Evaluator( - symbolTable.copy( - data = symbolTable.data.override( - DataKey(overrideTimeWindowParam), - period, - ) - ), - BasicOperations, - sourceOps, - ) + + val newSymbolTable = symbolTable + .overrideDatasourceConnector(DataSourceKey(overriddenDataSourceName), IN_MEMORY_CONNECTOR_NAME) + .copy(data = symbolTable.data.override(DataKey(overrideTimeWindowParam), period)) + + val evaluator = Evaluator(newSymbolTable, BasicOperations, sourceOps) + val productMatcher: (String) -> ProductMatcher = { id -> ProductMatcher( name = "vm", diff --git a/src/main/kotlin/org/cloud_assess/service/debug/TraceService.kt b/src/main/kotlin/org/cloud_assess/service/debug/TraceService.kt index 0a97e54..0d635c5 100644 --- a/src/main/kotlin/org/cloud_assess/service/debug/TraceService.kt +++ b/src/main/kotlin/org/cloud_assess/service/debug/TraceService.kt @@ -4,6 +4,7 @@ import ch.kleis.lcaac.core.assessment.ContributionAnalysisProgram import ch.kleis.lcaac.core.datasource.DefaultDataSourceOperations import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnector import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnectorKeys +import ch.kleis.lcaac.core.datasource.in_memory.InMemoryConnectorKeys.IN_MEMORY_CONNECTOR_NAME import ch.kleis.lcaac.core.datasource.in_memory.InMemoryDatasource import ch.kleis.lcaac.core.lang.SymbolTable import ch.kleis.lcaac.core.lang.evaluator.Evaluator @@ -12,6 +13,7 @@ import ch.kleis.lcaac.core.lang.evaluator.reducer.DataExpressionReducer import ch.kleis.lcaac.core.lang.expression.* import ch.kleis.lcaac.core.lang.register.DataKey import ch.kleis.lcaac.core.lang.register.DataRegister +import ch.kleis.lcaac.core.lang.register.DataSourceKey import ch.kleis.lcaac.core.lang.register.DataSourceRegister import ch.kleis.lcaac.core.lang.value.DataValue import ch.kleis.lcaac.core.lang.value.RecordValue @@ -67,18 +69,23 @@ class TraceService( } fun analyze(request: TraceRequestDto): ResourceTrace { - val processApplication = prepare(request) - val symbolTablesWithGlobals = symbolTable.copy( - data = globals(symbolTable.data, request), - ) val content = overriddenDatasources(request) + val inMemoryConnector = InMemoryConnector( config = InMemoryConnectorKeys.defaultConfig(cacheEnabled = true, cacheSize = 1024), content = content, ) - val sourceOps = defaultDataSourceOperations - .overrideWith(inMemoryConnector) - val evaluator = Evaluator(symbolTablesWithGlobals, BasicOperations, sourceOps) + val sourceOps = defaultDataSourceOperations.overrideWith(inMemoryConnector) + + val symbolTableWithGlobalData = symbolTable.copy(data = globals(symbolTable.data, request)) + val newSymbolTable = request.datasources + ?.fold(symbolTableWithGlobalData) + {acc, next -> symbolTable.overrideDatasourceConnector(DataSourceKey(next.name), IN_MEMORY_CONNECTOR_NAME)} + ?: symbolTableWithGlobalData + + val evaluator = Evaluator(newSymbolTable, BasicOperations, sourceOps) + + val processApplication = prepare(request) val trace = evaluator .with(processApplication.template) .trace(processApplication.template, processApplication.arguments) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 3387722..f08f400 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -4,6 +4,3 @@ lca: cors: enabled: false allowed-origin: -resilio-db: - url: https://db.resilio.tech - access-token: dummy-token diff --git a/src/test/kotlin/org/cloud_assess/service/debug/TraceServiceTest.kt b/src/test/kotlin/org/cloud_assess/service/debug/TraceServiceTest.kt index 523f5c7..a5b0faf 100644 --- a/src/test/kotlin/org/cloud_assess/service/debug/TraceServiceTest.kt +++ b/src/test/kotlin/org/cloud_assess/service/debug/TraceServiceTest.kt @@ -716,8 +716,10 @@ class TraceServiceTest { } @Test - fun analyze_singleRequest_withOnlineDataSources_isNotEmpty() { + fun analyze_singleRequest_withInMemoryDataSources_isNotEmpty() { // given + + val symbolTable = prepare( """ datasource inventory { @@ -743,7 +745,7 @@ class TraceServiceTest { val sourceOps = DefaultDataSourceOperations( ops = BasicOperations, config = LcaacConfig(), - connectors = emptyMap(), + connectors = mapOf(), ) val service = TraceService( parsingService, diff --git a/src/test/resources/application.yaml b/src/test/resources/application.yaml index b596f00..7d571a2 100644 --- a/src/test/resources/application.yaml +++ b/src/test/resources/application.yaml @@ -6,6 +6,3 @@ cors: allowed-origin: compute: job-size: 100 -resilio-db: - url: https://db.resilio.tech - accessToken: my-access-token