diff options
| author | mjkwiatkowski <mati.rewa@gmail.com> | 2026-02-15 18:26:59 +0100 |
|---|---|---|
| committer | mjkwiatkowski <mati.rewa@gmail.com> | 2026-02-15 18:26:59 +0100 |
| commit | 86d35fcec83057e346e4982b5a6908f25342a392 (patch) | |
| tree | 2a9cbd42582fc87b81e7414a78b43ead51c623aa /opendc-experiments/opendc-experiments-base/src | |
| parent | 213130fdca719d9dc7f29fe7c11acde40e4f964e (diff) | |
feat: opendc -> postgresql connection works
Diffstat (limited to 'opendc-experiments/opendc-experiments-base/src')
5 files changed, 23 insertions, 124 deletions
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ConfigParser.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ConfigParser.kt deleted file mode 100644 index 26244544..00000000 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ConfigParser.kt +++ /dev/null @@ -1,84 +0,0 @@ -package org.opendc.experiments.base.runner - -import kotlinx.serialization.ExperimentalSerializationApi -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.decodeFromStream - -import java.io.File -import java.io.IOException -import java.io.InputStream -import java.io.OutputStream -import java.net.Socket -import java.sql.Connection -import java.sql.DriverManager -import java.sql.SQLException - - -/** - * @property name - * @property backlog the amount of connections to accept - * @property databasePath - * @property address IPv4 address - * @property port - */ -@Serializable -public data class Config( - val name: String = "", - var backlog: Int = 0, - val database: Int = 5342, - val address: String = "", - val port: Int = 8080, - val username : String = "", - val password : String = "", - val schema: String = "" -){ - - public companion object{ - public var input: InputStream? = null - public var output: OutputStream? = null - public var connection : Connection? = null - - public var socket: Socket? = null - - public fun setConfigSocket(socket: Socket?){ - this.socket = socket - try { - input = socket?.getInputStream() - output = socket?.getOutputStream() - } catch (e: IOException){ - print("${e.message}") - } - } - - public fun getConfigReader() : InputStream? { - return input - } - - public fun getConfigWriter() : OutputStream? { - return output - } - - public fun setupDatabase(address : String, port : Int, dbUser : String, dbPassword : String, dbSchema : String){ - val dbUrl = "jdbc:postgresql://$address:$port/$dbSchema" - println(dbUrl) - try { - connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) - } catch (e: SQLException) { - print("${e.message}") - } - } - - } -} -/** - * Reads `config.json` into Config data class. - */ -public class ConfigReader { - private val jsonReader = Json - public fun read(file: File): Config = read(file.inputStream()) - @OptIn(ExperimentalSerializationApi::class) - public fun read(input: InputStream): Config { - return jsonReader.decodeFromStream<Config>(input) - } -} diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt index 96eb3b21..874f5654 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt @@ -28,6 +28,9 @@ import com.github.ajalt.clikt.core.CliktCommand import com.github.ajalt.clikt.parameters.options.defaultLazy import com.github.ajalt.clikt.parameters.options.option import com.github.ajalt.clikt.parameters.types.file +import org.opendc.common.utils.Config +import org.opendc.common.utils.ConfigReader +import org.opendc.common.utils.PostgresqlDB import org.opendc.experiments.base.experiment.getExperiment import java.io.File import java.io.IOException @@ -43,6 +46,8 @@ public fun main(args: Array<String>) { else ExperimentListener().main(args) } + + /** * Opens a client socket from `config`, but otherwise works as before. */ @@ -87,11 +92,14 @@ internal class ExperimentListener: CliktCommand(name = "listener") { val configReader = ConfigReader() var serverSocket: ServerSocket? = null val config = configReader.read(configPath) + val database = PostgresqlDB() val inetAddress = InetAddress.getByName(config.address) try { serverSocket = ServerSocket(config.port, config.backlog, inetAddress) - Config.setupDatabase(config.address, config.database, config.username, config.password, config.schema) + database.setupDatabase(config.address, config.postgresql, config.username, config.password, config.database) + database.clear() + database.create() runListener(serverSocket) } catch (e: IOException) { println("${e.message}") diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt index 312cb0ac..9d1f7374 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt @@ -24,17 +24,12 @@ package org.opendc.experiments.base.runner import me.tongfei.progressbar.ProgressBarBuilder import me.tongfei.progressbar.ProgressBarStyle +import org.opendc.common.utils.Config import org.opendc.experiments.base.experiment.Scenario -import java.io.BufferedReader -import java.io.BufferedWriter import java.io.IOException -import java.io.InputStream -import java.io.InputStreamReader -import java.io.OutputStream -import java.io.OutputStreamWriter import java.net.ServerSocket import java.net.Socket - +import org.opendc.demo.runRequest /** * Run scenario when no pool is available for parallel execution @@ -61,9 +56,6 @@ public fun runExperiment(experiment: List<Scenario>) { println("$ansiGreen================================================================================$ansiReset") for (seed in 0..<scenario.runs) { - - Config.getConfigWriter()?.write("123\n".toByteArray()) - println("$ansiBlue Starting seed: $seed $ansiReset") runScenario(scenario, seed.toLong()) pb.step() @@ -84,10 +76,10 @@ public fun runListener(socket: ServerSocket) { // communication, and to store the incoming results into Postgresql Config.setConfigSocket(client) - var request = ByteArray(1024) + val request = ByteArray(1024) while(true){ - var ret : Int? = Config.getConfigReader()?.read(request) + val ret : Int? = Config.getConfigReader()?.read(request) if(ret == -1) break if(ret != null && ret > 0) runRequest(String(request, 0, ret)) } diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/RequestRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/RequestRunner.kt deleted file mode 100644 index 0316119f..00000000 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/RequestRunner.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.opendc.experiments.base.runner - -/** - * Processes a single HTTP request. - * @param request The request to process. - */ - -public fun runRequest(request: String) { - // https://github.com/am-i-helpful/opendc/blob/master/opendc-oda/opendc-oda-experiments/src/main/kotlin/org/opendc/oda/experimentrunner/ODAComputeMonitor.kt - // Do this here - println("The request is $request\n") -}
\ No newline at end of file diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt index 6d094eb4..f33b6da8 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt @@ -34,6 +34,7 @@ import org.opendc.compute.simulator.telemetry.parquet.ComputeExportConfig import org.opendc.compute.simulator.telemetry.parquet.ParquetComputeMonitor import org.opendc.compute.simulator.telemetry.parquet.withGpuColumns import org.opendc.compute.topology.clusterTopology +import org.opendc.demo.DemoComputeMonitor import org.opendc.experiments.base.experiment.Scenario import org.opendc.experiments.base.experiment.specs.allocation.TimeShiftAllocationPolicySpec import org.opendc.experiments.base.experiment.specs.allocation.createComputeScheduler @@ -136,11 +137,7 @@ public fun runScenario( provisioner, serviceDomain, scenario, - seed, startTime, - scenario.id, - computeExportConfig = - scenario.exportModelSpec.computeExportConfig.withGpuColumns(gpuCount), ) val service = provisioner.registry.resolve(serviceDomain, ComputeService::class.java)!! @@ -181,7 +178,7 @@ public fun runScenario( } /** - * Saves the simulation results into a specific output folder received from the input.A + * Saves the simulation results into a specific output folder received from the input. * * @param provisioner The provisioner used to setup and run the simulation. * @param serviceDomain The domain of the compute service. @@ -193,21 +190,19 @@ public fun addExportModel( provisioner: Provisioner, serviceDomain: String, scenario: Scenario, - seed: Long, startTime: Duration, - index: Int, - computeExportConfig: ComputeExportConfig = scenario.exportModelSpec.computeExportConfig, ) { + + /* + * @Mateusz + * Here is the entry point to DemoComputeMonitor(). + * With this setting, the simulator no longer writes to parquet files. + * To get back the original code, refer to https://github.com/atlarge-research/opendc + * */ provisioner.runStep( registerComputeMonitor( serviceDomain, - ParquetComputeMonitor( - File("${scenario.outputFolder}/raw-output/$index"), - "seed=$seed", - bufferSize = 4096, - scenario.exportModelSpec.filesToExportDict, - computeExportConfig = computeExportConfig, - ), + DemoComputeMonitor(), Duration.ofSeconds(scenario.exportModelSpec.exportInterval), startTime, scenario.exportModelSpec.filesToExportDict, |
