diff --git a/init/entrypoint b/init/entrypoint index 77d2c11d65076618739ef200e5eecd8f4bd9c131..2cfaef2cdf1eff07120bb3bc4c405cbf3a4db0dd 100755 --- a/init/entrypoint +++ b/init/entrypoint @@ -84,10 +84,11 @@ function init(){ # configure Swagger UI configureSwaggerUI - # prepare result folder here and not in Dockerfile as host /tmp will be mounted for /opt/results + # prepare result and data folder here and not in Dockerfile as host /tmp will be mounted for /opt/results mkdir -p /opt/results/YCSB/ mkdir -p /opt/results/TPCC/ mkdir -p /opt/results/TSBS/ + mkdir -p /opt/workloads/data/ # start telegraf service startTelegraf diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DBEndpoint.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DBEndpoint.java index 19acf6082b3aa5e0dc0349a495382d6b288cf637..9ce64eb7c0d1b722e1bd5e36ac46cc54bc2667c7 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DBEndpoint.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DBEndpoint.java @@ -23,7 +23,7 @@ import javax.validation.constraints.*; /** * DBEndpoint */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class DBEndpoint { @JsonProperty("ipAddress") private String ipAddress = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DBEndpoints.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DBEndpoints.java index 711a100f52811d129c0b935e83388b81bcd62902..9fcfc697390d2dda338db4ac5e2e195a58e8cd3b 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DBEndpoints.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DBEndpoints.java @@ -22,7 +22,7 @@ import javax.validation.constraints.*; * a list of the database endpoints to issue the workload */ @ApiModel(description = "a list of the database endpoints to issue the workload") -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class DBEndpoints extends java.util.ArrayList { @Override diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DatabaseConfig.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DatabaseConfig.java index a471ce422b19c90ecd331612d24a0f1903489975..4a905734d4e378d03547ceb5d18f4b3a023d6b1d 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DatabaseConfig.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DatabaseConfig.java @@ -25,7 +25,7 @@ import javax.validation.constraints.*; /** * DatabaseConfig */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class DatabaseConfig { /** * Gets or Sets databaseBinding diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DatabaseConfigProperty.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DatabaseConfigProperty.java index 635a76650defdfc46cc30747e0061da9d69e5a4f..251a8f2e3aca85014a92a8fdef477d5bee075d31 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DatabaseConfigProperty.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/DatabaseConfigProperty.java @@ -23,7 +23,7 @@ import javax.validation.constraints.*; /** * DatabaseConfigProperty */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class DatabaseConfigProperty { @JsonProperty("name") private String name = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/Error.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/Error.java index 7110fb3f331ccf1d04dd4ee9f8af8ec2b0c5a4ba..9b31741c67ef74fc06f95d25dc2a9550e846398e 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/Error.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/Error.java @@ -23,7 +23,7 @@ import javax.validation.constraints.*; /** * Error */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class Error { @JsonProperty("code") private Integer code = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/MeasurementConfig.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/MeasurementConfig.java index 25d169d1bdf5a2a5d19267685c4e4f6640f14376..be726e84e6e4e273d278cacf44dc54617f7a3a26 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/MeasurementConfig.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/MeasurementConfig.java @@ -24,7 +24,7 @@ import javax.validation.constraints.*; /** * MeasurementConfig */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class MeasurementConfig { @JsonProperty("interval") private Integer interval = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TPCCWorkload.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TPCCWorkload.java index 510225527a397d5a9d05d54b796f01828c889e6e..d9f9f6ae977eef40d544e0b0859bac0bbf58520d 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TPCCWorkload.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TPCCWorkload.java @@ -25,7 +25,7 @@ import javax.validation.constraints.*; /** * TPCCWorkload */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class TPCCWorkload { @JsonProperty("dbEndpoints") private DBEndpoints dbEndpoints = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TPCCWorkloadConfig.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TPCCWorkloadConfig.java index 24a58fdf5a41c9cf6e0af88c9b4ff1452ff860b4..ae1aa4e62f3ec0946f51c84ed04a2de91878aa12 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TPCCWorkloadConfig.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TPCCWorkloadConfig.java @@ -23,7 +23,7 @@ import javax.validation.constraints.*; /** * TPCCWorkloadConfig */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class TPCCWorkloadConfig { @JsonProperty("activeWarehouses") private Integer activeWarehouses = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataConfig.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataGeneration.java similarity index 65% rename from src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataConfig.java rename to src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataGeneration.java index 05095ad1f5ff55dbbdeff0d976c2e3e65d3df2f3..c4075b8efe4fa35ad296d7a72e73e06a1c842b6d 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataConfig.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataGeneration.java @@ -16,17 +16,17 @@ package de.uulm.omi.cloudiator.dbms.evaluator.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.math.BigDecimal; import javax.validation.constraints.*; /** - * TSBSDataConfig + * parameters for the data generation phase */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") -public class TSBSDataConfig { +@ApiModel(description = "parameters for the data generation phase") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") +public class TSBSDataGeneration { @JsonProperty("usecase") private String usecase = null; @@ -45,53 +45,17 @@ public class TSBSDataConfig { @JsonProperty("logInterval") private String logInterval = null; - /** - * specifies the data format for the selected DBMS - */ - public enum FormatEnum { - INFLUX("influx"), - - TIMESCALEDB("timescaledb"), - - MONGODB("mongodb"); - - private String value; - - FormatEnum(String value) { - this.value = value; - } - - @Override - @JsonValue - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static FormatEnum fromValue(String text) { - for (FormatEnum b : FormatEnum.values()) { - if (String.valueOf(b.value).equals(text)) { - return b; - } - } - return null; - } - } - - @JsonProperty("format") - private FormatEnum format = null; - - public TSBSDataConfig usecase(String usecase) { + public TSBSDataGeneration usecase(String usecase) { this.usecase = usecase; return this; } /** - * TODO + * TSBBS supports currently: devops, iot * @return usecase **/ @JsonProperty("usecase") - @ApiModelProperty(example = "cpu-only", value = "TODO") + @ApiModelProperty(example = "cpu-only", value = "TSBBS supports currently: devops, iot ") public String getUsecase() { return usecase; } @@ -100,7 +64,7 @@ public class TSBSDataConfig { this.usecase = usecase; } - public TSBSDataConfig seed(BigDecimal seed) { + public TSBSDataGeneration seed(BigDecimal seed) { this.seed = seed; return this; } @@ -119,7 +83,7 @@ public class TSBSDataConfig { this.seed = seed; } - public TSBSDataConfig scale(BigDecimal scale) { + public TSBSDataGeneration scale(BigDecimal scale) { this.scale = scale; return this; } @@ -138,7 +102,7 @@ public class TSBSDataConfig { this.scale = scale; } - public TSBSDataConfig startTime(String startTime) { + public TSBSDataGeneration startTime(String startTime) { this.startTime = startTime; return this; } @@ -157,7 +121,7 @@ public class TSBSDataConfig { this.startTime = startTime; } - public TSBSDataConfig endTime(String endTime) { + public TSBSDataGeneration endTime(String endTime) { this.endTime = endTime; return this; } @@ -167,7 +131,7 @@ public class TSBSDataConfig { * @return endTime **/ @JsonProperty("endTime") - @ApiModelProperty(example = "2016-01-04T00:00:00Z", value = "ending timestamp for generating the data") + @ApiModelProperty(example = "2016-01-01T01:00:00Z", value = "ending timestamp for generating the data") public String getEndTime() { return endTime; } @@ -176,7 +140,7 @@ public class TSBSDataConfig { this.endTime = endTime; } - public TSBSDataConfig logInterval(String logInterval) { + public TSBSDataGeneration logInterval(String logInterval) { this.logInterval = logInterval; return this; } @@ -195,25 +159,6 @@ public class TSBSDataConfig { this.logInterval = logInterval; } - public TSBSDataConfig format(FormatEnum format) { - this.format = format; - return this; - } - - /** - * specifies the data format for the selected DBMS - * @return format - **/ - @JsonProperty("format") - @ApiModelProperty(example = "influx", value = "specifies the data format for the selected DBMS") - public FormatEnum getFormat() { - return format; - } - - public void setFormat(FormatEnum format) { - this.format = format; - } - @Override public boolean equals(java.lang.Object o) { @@ -223,26 +168,25 @@ public class TSBSDataConfig { if (o == null || getClass() != o.getClass()) { return false; } - TSBSDataConfig tsBSDataConfig = (TSBSDataConfig) o; - return Objects.equals(this.usecase, tsBSDataConfig.usecase) && - Objects.equals(this.seed, tsBSDataConfig.seed) && - Objects.equals(this.scale, tsBSDataConfig.scale) && - Objects.equals(this.startTime, tsBSDataConfig.startTime) && - Objects.equals(this.endTime, tsBSDataConfig.endTime) && - Objects.equals(this.logInterval, tsBSDataConfig.logInterval) && - Objects.equals(this.format, tsBSDataConfig.format); + TSBSDataGeneration tsBSDataGeneration = (TSBSDataGeneration) o; + return Objects.equals(this.usecase, tsBSDataGeneration.usecase) && + Objects.equals(this.seed, tsBSDataGeneration.seed) && + Objects.equals(this.scale, tsBSDataGeneration.scale) && + Objects.equals(this.startTime, tsBSDataGeneration.startTime) && + Objects.equals(this.endTime, tsBSDataGeneration.endTime) && + Objects.equals(this.logInterval, tsBSDataGeneration.logInterval); } @Override public int hashCode() { - return Objects.hash(usecase, seed, scale, startTime, endTime, logInterval, format); + return Objects.hash(usecase, seed, scale, startTime, endTime, logInterval); } @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class TSBSDataConfig {\n"); + sb.append("class TSBSDataGeneration {\n"); sb.append(" usecase: ").append(toIndentedString(usecase)).append("\n"); sb.append(" seed: ").append(toIndentedString(seed)).append("\n"); @@ -250,7 +194,6 @@ public class TSBSDataConfig { sb.append(" startTime: ").append(toIndentedString(startTime)).append("\n"); sb.append(" endTime: ").append(toIndentedString(endTime)).append("\n"); sb.append(" logInterval: ").append(toIndentedString(logInterval)).append("\n"); - sb.append(" format: ").append(toIndentedString(format)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadConfig.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadExecution.java similarity index 53% rename from src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadConfig.java rename to src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadExecution.java index 2750c4a1a526d53263cf3f454907030313dca1d3..c87bbedbed180b72e8a89990f5b6046dfd1c5222 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadConfig.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadExecution.java @@ -23,39 +23,45 @@ import java.math.BigDecimal; import javax.validation.constraints.*; /** - * TSBSLoadConfig + * TSBSLoadExecution */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") -public class TSBSLoadConfig { - @JsonProperty("numberOfWorkers") - private BigDecimal numberOfWorkers = null; +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") +public class TSBSLoadExecution { + @JsonProperty("workers") + private BigDecimal workers = null; @JsonProperty("batchSize") private BigDecimal batchSize = null; + @JsonProperty("dbName") + private String dbName = null; + + @JsonProperty("reportingPeriod") + private String reportingPeriod = null; + @JsonProperty("dbmsPorperties") private java.util.List dbmsPorperties = null; - public TSBSLoadConfig numberOfWorkers(BigDecimal numberOfWorkers) { - this.numberOfWorkers = numberOfWorkers; + public TSBSLoadExecution workers(BigDecimal workers) { + this.workers = workers; return this; } /** * The number of workers to load the ts data into the DBMS - * @return numberOfWorkers + * @return workers **/ - @JsonProperty("numberOfWorkers") + @JsonProperty("workers") @ApiModelProperty(example = "2.0", value = "The number of workers to load the ts data into the DBMS") - public BigDecimal getNumberOfWorkers() { - return numberOfWorkers; + public BigDecimal getWorkers() { + return workers; } - public void setNumberOfWorkers(BigDecimal numberOfWorkers) { - this.numberOfWorkers = numberOfWorkers; + public void setWorkers(BigDecimal workers) { + this.workers = workers; } - public TSBSLoadConfig batchSize(BigDecimal batchSize) { + public TSBSLoadExecution batchSize(BigDecimal batchSize) { this.batchSize = batchSize; return this; } @@ -74,12 +80,50 @@ public class TSBSLoadConfig { this.batchSize = batchSize; } - public TSBSLoadConfig dbmsPorperties(java.util.List dbmsPorperties) { + public TSBSLoadExecution dbName(String dbName) { + this.dbName = dbName; + return this; + } + + /** + * The DB to use for the benchmark, will be created automatically + * @return dbName + **/ + @JsonProperty("dbName") + @ApiModelProperty(example = "benchmark", value = "The DB to use for the benchmark, will be created automatically") + public String getDbName() { + return dbName; + } + + public void setDbName(String dbName) { + this.dbName = dbName; + } + + public TSBSLoadExecution reportingPeriod(String reportingPeriod) { + this.reportingPeriod = reportingPeriod; + return this; + } + + /** + * metric reporting interval + * @return reportingPeriod + **/ + @JsonProperty("reportingPeriod") + @ApiModelProperty(example = "10s", value = "metric reporting interval") + public String getReportingPeriod() { + return reportingPeriod; + } + + public void setReportingPeriod(String reportingPeriod) { + this.reportingPeriod = reportingPeriod; + } + + public TSBSLoadExecution dbmsPorperties(java.util.List dbmsPorperties) { this.dbmsPorperties = dbmsPorperties; return this; } - public TSBSLoadConfig addDbmsPorpertiesItem(TSDBMSDBMSProperties dbmsPorpertiesItem) { + public TSBSLoadExecution addDbmsPorpertiesItem(TSDBMSDBMSProperties dbmsPorpertiesItem) { if (this.dbmsPorperties == null) { this.dbmsPorperties = new java.util.ArrayList<>(); } @@ -110,25 +154,29 @@ public class TSBSLoadConfig { if (o == null || getClass() != o.getClass()) { return false; } - TSBSLoadConfig tsBSLoadConfig = (TSBSLoadConfig) o; - return Objects.equals(this.numberOfWorkers, tsBSLoadConfig.numberOfWorkers) && - Objects.equals(this.batchSize, tsBSLoadConfig.batchSize) && - Objects.equals(this.dbmsPorperties, tsBSLoadConfig.dbmsPorperties); + TSBSLoadExecution tsBSLoadExecution = (TSBSLoadExecution) o; + return Objects.equals(this.workers, tsBSLoadExecution.workers) && + Objects.equals(this.batchSize, tsBSLoadExecution.batchSize) && + Objects.equals(this.dbName, tsBSLoadExecution.dbName) && + Objects.equals(this.reportingPeriod, tsBSLoadExecution.reportingPeriod) && + Objects.equals(this.dbmsPorperties, tsBSLoadExecution.dbmsPorperties); } @Override public int hashCode() { - return Objects.hash(numberOfWorkers, batchSize, dbmsPorperties); + return Objects.hash(workers, batchSize, dbName, reportingPeriod, dbmsPorperties); } @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class TSBSLoadConfig {\n"); + sb.append("class TSBSLoadExecution {\n"); - sb.append(" numberOfWorkers: ").append(toIndentedString(numberOfWorkers)).append("\n"); + sb.append(" workers: ").append(toIndentedString(workers)).append("\n"); sb.append(" batchSize: ").append(toIndentedString(batchSize)).append("\n"); + sb.append(" dbName: ").append(toIndentedString(dbName)).append("\n"); + sb.append(" reportingPeriod: ").append(toIndentedString(reportingPeriod)).append("\n"); sb.append(" dbmsPorperties: ").append(toIndentedString(dbmsPorperties)).append("\n"); sb.append("}"); return sb.toString(); diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadWorkload.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadWorkload.java deleted file mode 100644 index 20cf5ca71ab72262310523c2148d081b14d0f0c2..0000000000000000000000000000000000000000 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadWorkload.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Workload API - * Benchmark your distributed DBMS with a specific workload - * - * OpenAPI spec version: 0.0.1 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - - -package de.uulm.omi.cloudiator.dbms.evaluator.model; - -import java.util.Objects; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import de.uulm.omi.cloudiator.dbms.evaluator.model.DBEndpoints; -import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSDataConfig; -import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSLoadConfig; -import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSQueryConfig; -import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSQueryExecution; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import javax.validation.constraints.*; - -/** - * TSBSLoadWorkload - */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") -public class TSBSLoadWorkload { - @JsonProperty("dbEndpoints") - private DBEndpoints dbEndpoints = null; - - @JsonProperty("tsbsDataConfig") - private TSBSDataConfig tsbsDataConfig = null; - - @JsonProperty("tsbsLoadConfig") - private TSBSLoadConfig tsbsLoadConfig = null; - - @JsonProperty("tsbsQueryConfig") - private TSBSQueryConfig tsbsQueryConfig = null; - - @JsonProperty("tsbsQueryExecution") - private TSBSQueryExecution tsbsQueryExecution = null; - - public TSBSLoadWorkload dbEndpoints(DBEndpoints dbEndpoints) { - this.dbEndpoints = dbEndpoints; - return this; - } - - /** - * Get dbEndpoints - * @return dbEndpoints - **/ - @JsonProperty("dbEndpoints") - @ApiModelProperty(value = "") - public DBEndpoints getDbEndpoints() { - return dbEndpoints; - } - - public void setDbEndpoints(DBEndpoints dbEndpoints) { - this.dbEndpoints = dbEndpoints; - } - - public TSBSLoadWorkload tsbsDataConfig(TSBSDataConfig tsbsDataConfig) { - this.tsbsDataConfig = tsbsDataConfig; - return this; - } - - /** - * Get tsbsDataConfig - * @return tsbsDataConfig - **/ - @JsonProperty("tsbsDataConfig") - @ApiModelProperty(value = "") - public TSBSDataConfig getTsbsDataConfig() { - return tsbsDataConfig; - } - - public void setTsbsDataConfig(TSBSDataConfig tsbsDataConfig) { - this.tsbsDataConfig = tsbsDataConfig; - } - - public TSBSLoadWorkload tsbsLoadConfig(TSBSLoadConfig tsbsLoadConfig) { - this.tsbsLoadConfig = tsbsLoadConfig; - return this; - } - - /** - * Get tsbsLoadConfig - * @return tsbsLoadConfig - **/ - @JsonProperty("tsbsLoadConfig") - @ApiModelProperty(value = "") - public TSBSLoadConfig getTsbsLoadConfig() { - return tsbsLoadConfig; - } - - public void setTsbsLoadConfig(TSBSLoadConfig tsbsLoadConfig) { - this.tsbsLoadConfig = tsbsLoadConfig; - } - - public TSBSLoadWorkload tsbsQueryConfig(TSBSQueryConfig tsbsQueryConfig) { - this.tsbsQueryConfig = tsbsQueryConfig; - return this; - } - - /** - * Get tsbsQueryConfig - * @return tsbsQueryConfig - **/ - @JsonProperty("tsbsQueryConfig") - @ApiModelProperty(value = "") - public TSBSQueryConfig getTsbsQueryConfig() { - return tsbsQueryConfig; - } - - public void setTsbsQueryConfig(TSBSQueryConfig tsbsQueryConfig) { - this.tsbsQueryConfig = tsbsQueryConfig; - } - - public TSBSLoadWorkload tsbsQueryExecution(TSBSQueryExecution tsbsQueryExecution) { - this.tsbsQueryExecution = tsbsQueryExecution; - return this; - } - - /** - * Get tsbsQueryExecution - * @return tsbsQueryExecution - **/ - @JsonProperty("tsbsQueryExecution") - @ApiModelProperty(value = "") - public TSBSQueryExecution getTsbsQueryExecution() { - return tsbsQueryExecution; - } - - public void setTsbsQueryExecution(TSBSQueryExecution tsbsQueryExecution) { - this.tsbsQueryExecution = tsbsQueryExecution; - } - - - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - TSBSLoadWorkload tsBSLoadWorkload = (TSBSLoadWorkload) o; - return Objects.equals(this.dbEndpoints, tsBSLoadWorkload.dbEndpoints) && - Objects.equals(this.tsbsDataConfig, tsBSLoadWorkload.tsbsDataConfig) && - Objects.equals(this.tsbsLoadConfig, tsBSLoadWorkload.tsbsLoadConfig) && - Objects.equals(this.tsbsQueryConfig, tsBSLoadWorkload.tsbsQueryConfig) && - Objects.equals(this.tsbsQueryExecution, tsBSLoadWorkload.tsbsQueryExecution); - } - - @Override - public int hashCode() { - return Objects.hash(dbEndpoints, tsbsDataConfig, tsbsLoadConfig, tsbsQueryConfig, tsbsQueryExecution); - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class TSBSLoadWorkload {\n"); - - sb.append(" dbEndpoints: ").append(toIndentedString(dbEndpoints)).append("\n"); - sb.append(" tsbsDataConfig: ").append(toIndentedString(tsbsDataConfig)).append("\n"); - sb.append(" tsbsLoadConfig: ").append(toIndentedString(tsbsLoadConfig)).append("\n"); - sb.append(" tsbsQueryConfig: ").append(toIndentedString(tsbsQueryConfig)).append("\n"); - sb.append(" tsbsQueryExecution: ").append(toIndentedString(tsbsQueryExecution)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } -} - diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryConfig.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryConfig.java deleted file mode 100644 index e71dd1b1c83676a51f98c1832c65fd7775f12c98..0000000000000000000000000000000000000000 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryConfig.java +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Workload API - * Benchmark your distributed DBMS with a specific workload - * - * OpenAPI spec version: 0.0.1 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - - -package de.uulm.omi.cloudiator.dbms.evaluator.model; - -import java.util.Objects; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonValue; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import java.math.BigDecimal; -import javax.validation.constraints.*; - -/** - * TSBSQueryConfig - */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") -public class TSBSQueryConfig { - @JsonProperty("usecase") - private String usecase = null; - - @JsonProperty("seed") - private BigDecimal seed = null; - - @JsonProperty("scale") - private BigDecimal scale = null; - - @JsonProperty("startTime") - private String startTime = null; - - @JsonProperty("endTime") - private String endTime = null; - - @JsonProperty("queries") - private BigDecimal queries = null; - - @JsonProperty("queryType") - private String queryType = null; - - /** - * specifies the data format for the selected DBMS - */ - public enum FormatEnum { - INFLUX("influx"), - - TIMESCALEDB("timescaledb"), - - MONGODB("mongodb"); - - private String value; - - FormatEnum(String value) { - this.value = value; - } - - @Override - @JsonValue - public String toString() { - return String.valueOf(value); - } - - @JsonCreator - public static FormatEnum fromValue(String text) { - for (FormatEnum b : FormatEnum.values()) { - if (String.valueOf(b.value).equals(text)) { - return b; - } - } - return null; - } - } - - @JsonProperty("format") - private FormatEnum format = null; - - public TSBSQueryConfig usecase(String usecase) { - this.usecase = usecase; - return this; - } - - /** - * TODO - * @return usecase - **/ - @JsonProperty("usecase") - @ApiModelProperty(example = "cpu-only", value = "TODO") - public String getUsecase() { - return usecase; - } - - public void setUsecase(String usecase) { - this.usecase = usecase; - } - - public TSBSQueryConfig seed(BigDecimal seed) { - this.seed = seed; - return this; - } - - /** - * By supplying the same seed to the generation programs, each database is loaded with identical data and queried using identical queries. - * @return seed - **/ - @JsonProperty("seed") - @ApiModelProperty(example = "123.0", value = "By supplying the same seed to the generation programs, each database is loaded with identical data and queried using identical queries.") - public BigDecimal getSeed() { - return seed; - } - - public void setSeed(BigDecimal seed) { - this.seed = seed; - } - - public TSBSQueryConfig scale(BigDecimal scale) { - this.scale = scale; - return this; - } - - /** - * TODO - * @return scale - **/ - @JsonProperty("scale") - @ApiModelProperty(example = "1000.0", value = "TODO") - public BigDecimal getScale() { - return scale; - } - - public void setScale(BigDecimal scale) { - this.scale = scale; - } - - public TSBSQueryConfig startTime(String startTime) { - this.startTime = startTime; - return this; - } - - /** - * starting timestamp for generating the data - * @return startTime - **/ - @JsonProperty("startTime") - @ApiModelProperty(example = "2016-01-01T00:00:00Z", value = "starting timestamp for generating the data") - public String getStartTime() { - return startTime; - } - - public void setStartTime(String startTime) { - this.startTime = startTime; - } - - public TSBSQueryConfig endTime(String endTime) { - this.endTime = endTime; - return this; - } - - /** - * ending timestamp for generating the data - * @return endTime - **/ - @JsonProperty("endTime") - @ApiModelProperty(example = "2016-01-04T00:00:00Z", value = "ending timestamp for generating the data") - public String getEndTime() { - return endTime; - } - - public void setEndTime(String endTime) { - this.endTime = endTime; - } - - public TSBSQueryConfig queries(BigDecimal queries) { - this.queries = queries; - return this; - } - - /** - * TODO - * @return queries - **/ - @JsonProperty("queries") - @ApiModelProperty(example = "20.0", value = "TODO") - public BigDecimal getQueries() { - return queries; - } - - public void setQueries(BigDecimal queries) { - this.queries = queries; - } - - public TSBSQueryConfig queryType(String queryType) { - this.queryType = queryType; - return this; - } - - /** - * specifies one of the supported query type - * @return queryType - **/ - @JsonProperty("queryType") - @ApiModelProperty(example = "single-groupby-1-1-1", value = "specifies one of the supported query type") - public String getQueryType() { - return queryType; - } - - public void setQueryType(String queryType) { - this.queryType = queryType; - } - - public TSBSQueryConfig format(FormatEnum format) { - this.format = format; - return this; - } - - /** - * specifies the data format for the selected DBMS - * @return format - **/ - @JsonProperty("format") - @ApiModelProperty(example = "influx", value = "specifies the data format for the selected DBMS") - public FormatEnum getFormat() { - return format; - } - - public void setFormat(FormatEnum format) { - this.format = format; - } - - - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - TSBSQueryConfig tsBSQueryConfig = (TSBSQueryConfig) o; - return Objects.equals(this.usecase, tsBSQueryConfig.usecase) && - Objects.equals(this.seed, tsBSQueryConfig.seed) && - Objects.equals(this.scale, tsBSQueryConfig.scale) && - Objects.equals(this.startTime, tsBSQueryConfig.startTime) && - Objects.equals(this.endTime, tsBSQueryConfig.endTime) && - Objects.equals(this.queries, tsBSQueryConfig.queries) && - Objects.equals(this.queryType, tsBSQueryConfig.queryType) && - Objects.equals(this.format, tsBSQueryConfig.format); - } - - @Override - public int hashCode() { - return Objects.hash(usecase, seed, scale, startTime, endTime, queries, queryType, format); - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class TSBSQueryConfig {\n"); - - sb.append(" usecase: ").append(toIndentedString(usecase)).append("\n"); - sb.append(" seed: ").append(toIndentedString(seed)).append("\n"); - sb.append(" scale: ").append(toIndentedString(scale)).append("\n"); - sb.append(" startTime: ").append(toIndentedString(startTime)).append("\n"); - sb.append(" endTime: ").append(toIndentedString(endTime)).append("\n"); - sb.append(" queries: ").append(toIndentedString(queries)).append("\n"); - sb.append(" queryType: ").append(toIndentedString(queryType)).append("\n"); - sb.append(" format: ").append(toIndentedString(format)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } -} - diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryExecution.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryExecution.java index f58fb8f6d83baae6fe1a20402228b220f54edc36..555809213860d6aa0eb5a9bab847a180890d6bee 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryExecution.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryExecution.java @@ -25,7 +25,7 @@ import javax.validation.constraints.*; /** * TSBSQueryExecution */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class TSBSQueryExecution { @JsonProperty("workers") private BigDecimal workers = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryGeneration.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryGeneration.java new file mode 100644 index 0000000000000000000000000000000000000000..f455253e84c720d8c13dd46b39671d96e4a2b67a --- /dev/null +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryGeneration.java @@ -0,0 +1,140 @@ +/* + * Workload API + * Benchmark your distributed DBMS with a specific workload + * + * OpenAPI spec version: 0.0.1 + * + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + + +package de.uulm.omi.cloudiator.dbms.evaluator.model; + +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.math.BigDecimal; +import javax.validation.constraints.*; + +/** + * parameters for the query generation phase + */ +@ApiModel(description = "parameters for the query generation phase") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") +public class TSBSQueryGeneration { + @JsonProperty("usecase") + private String usecase = null; + + @JsonProperty("queries") + private BigDecimal queries = null; + + @JsonProperty("queryType") + private String queryType = null; + + public TSBSQueryGeneration usecase(String usecase) { + this.usecase = usecase; + return this; + } + + /** + * Query types to be executed, check TSBS docs for more details + * @return usecase + **/ + @JsonProperty("usecase") + @ApiModelProperty(example = "cpu-only", value = "Query types to be executed, check TSBS docs for more details") + public String getUsecase() { + return usecase; + } + + public void setUsecase(String usecase) { + this.usecase = usecase; + } + + public TSBSQueryGeneration queries(BigDecimal queries) { + this.queries = queries; + return this; + } + + /** + * the number of queries to generate + * @return queries + **/ + @JsonProperty("queries") + @ApiModelProperty(example = "20.0", value = "the number of queries to generate") + public BigDecimal getQueries() { + return queries; + } + + public void setQueries(BigDecimal queries) { + this.queries = queries; + } + + public TSBSQueryGeneration queryType(String queryType) { + this.queryType = queryType; + return this; + } + + /** + * specifies one of the supported query type + * @return queryType + **/ + @JsonProperty("queryType") + @ApiModelProperty(example = "single-groupby-1-1-1", value = "specifies one of the supported query type") + public String getQueryType() { + return queryType; + } + + public void setQueryType(String queryType) { + this.queryType = queryType; + } + + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TSBSQueryGeneration tsBSQueryGeneration = (TSBSQueryGeneration) o; + return Objects.equals(this.usecase, tsBSQueryGeneration.usecase) && + Objects.equals(this.queries, tsBSQueryGeneration.queries) && + Objects.equals(this.queryType, tsBSQueryGeneration.queryType); + } + + @Override + public int hashCode() { + return Objects.hash(usecase, queries, queryType); + } + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TSBSQueryGeneration {\n"); + + sb.append(" usecase: ").append(toIndentedString(usecase)).append("\n"); + sb.append(" queries: ").append(toIndentedString(queries)).append("\n"); + sb.append(" queryType: ").append(toIndentedString(queryType)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSWorkload.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSWorkload.java new file mode 100644 index 0000000000000000000000000000000000000000..fc93c0ebf48d9cc919708b2a9ed7986ba1011a3e --- /dev/null +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSWorkload.java @@ -0,0 +1,251 @@ +/* + * Workload API + * Benchmark your distributed DBMS with a specific workload + * + * OpenAPI spec version: 0.0.1 + * + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + + +package de.uulm.omi.cloudiator.dbms.evaluator.model; + +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import de.uulm.omi.cloudiator.dbms.evaluator.model.DBEndpoints; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSDataGeneration; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSLoadExecution; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSQueryExecution; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSQueryGeneration; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.*; + +/** + * TSBSWorkload + */ +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") +public class TSBSWorkload { + @JsonProperty("dbEndpoints") + private DBEndpoints dbEndpoints = null; + + /** + * specifies the data format for the selected DBMS + */ + public enum DbmsEnum { + INFLUX("INFLUX"), + + TIMESCALEDB("TIMESCALEDB"), + + MONGODB("MONGODB"), + + CASSANDRA("CASSANDRA"); + + private String value; + + DbmsEnum(String value) { + this.value = value; + } + + @Override + @JsonValue + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static DbmsEnum fromValue(String text) { + for (DbmsEnum b : DbmsEnum.values()) { + if (String.valueOf(b.value).equals(text)) { + return b; + } + } + return null; + } + } + + @JsonProperty("dbms") + private DbmsEnum dbms = null; + + @JsonProperty("tsbsDataGeneration") + private TSBSDataGeneration tsbsDataGeneration = null; + + @JsonProperty("tsbsLoadExecution") + private TSBSLoadExecution tsbsLoadExecution = null; + + @JsonProperty("tsbsQueryGeneration") + private TSBSQueryGeneration tsbsQueryGeneration = null; + + @JsonProperty("tsbsQueryExecution") + private TSBSQueryExecution tsbsQueryExecution = null; + + public TSBSWorkload dbEndpoints(DBEndpoints dbEndpoints) { + this.dbEndpoints = dbEndpoints; + return this; + } + + /** + * Get dbEndpoints + * @return dbEndpoints + **/ + @JsonProperty("dbEndpoints") + @ApiModelProperty(value = "") + public DBEndpoints getDbEndpoints() { + return dbEndpoints; + } + + public void setDbEndpoints(DBEndpoints dbEndpoints) { + this.dbEndpoints = dbEndpoints; + } + + public TSBSWorkload dbms(DbmsEnum dbms) { + this.dbms = dbms; + return this; + } + + /** + * specifies the data format for the selected DBMS + * @return dbms + **/ + @JsonProperty("dbms") + @ApiModelProperty(value = "specifies the data format for the selected DBMS") + public DbmsEnum getDbms() { + return dbms; + } + + public void setDbms(DbmsEnum dbms) { + this.dbms = dbms; + } + + public TSBSWorkload tsbsDataGeneration(TSBSDataGeneration tsbsDataGeneration) { + this.tsbsDataGeneration = tsbsDataGeneration; + return this; + } + + /** + * Get tsbsDataGeneration + * @return tsbsDataGeneration + **/ + @JsonProperty("tsbsDataGeneration") + @ApiModelProperty(value = "") + public TSBSDataGeneration getTsbsDataGeneration() { + return tsbsDataGeneration; + } + + public void setTsbsDataGeneration(TSBSDataGeneration tsbsDataGeneration) { + this.tsbsDataGeneration = tsbsDataGeneration; + } + + public TSBSWorkload tsbsLoadExecution(TSBSLoadExecution tsbsLoadExecution) { + this.tsbsLoadExecution = tsbsLoadExecution; + return this; + } + + /** + * Get tsbsLoadExecution + * @return tsbsLoadExecution + **/ + @JsonProperty("tsbsLoadExecution") + @ApiModelProperty(value = "") + public TSBSLoadExecution getTsbsLoadExecution() { + return tsbsLoadExecution; + } + + public void setTsbsLoadExecution(TSBSLoadExecution tsbsLoadExecution) { + this.tsbsLoadExecution = tsbsLoadExecution; + } + + public TSBSWorkload tsbsQueryGeneration(TSBSQueryGeneration tsbsQueryGeneration) { + this.tsbsQueryGeneration = tsbsQueryGeneration; + return this; + } + + /** + * Get tsbsQueryGeneration + * @return tsbsQueryGeneration + **/ + @JsonProperty("tsbsQueryGeneration") + @ApiModelProperty(value = "") + public TSBSQueryGeneration getTsbsQueryGeneration() { + return tsbsQueryGeneration; + } + + public void setTsbsQueryGeneration(TSBSQueryGeneration tsbsQueryGeneration) { + this.tsbsQueryGeneration = tsbsQueryGeneration; + } + + public TSBSWorkload tsbsQueryExecution(TSBSQueryExecution tsbsQueryExecution) { + this.tsbsQueryExecution = tsbsQueryExecution; + return this; + } + + /** + * Get tsbsQueryExecution + * @return tsbsQueryExecution + **/ + @JsonProperty("tsbsQueryExecution") + @ApiModelProperty(value = "") + public TSBSQueryExecution getTsbsQueryExecution() { + return tsbsQueryExecution; + } + + public void setTsbsQueryExecution(TSBSQueryExecution tsbsQueryExecution) { + this.tsbsQueryExecution = tsbsQueryExecution; + } + + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TSBSWorkload tsBSWorkload = (TSBSWorkload) o; + return Objects.equals(this.dbEndpoints, tsBSWorkload.dbEndpoints) && + Objects.equals(this.dbms, tsBSWorkload.dbms) && + Objects.equals(this.tsbsDataGeneration, tsBSWorkload.tsbsDataGeneration) && + Objects.equals(this.tsbsLoadExecution, tsBSWorkload.tsbsLoadExecution) && + Objects.equals(this.tsbsQueryGeneration, tsBSWorkload.tsbsQueryGeneration) && + Objects.equals(this.tsbsQueryExecution, tsBSWorkload.tsbsQueryExecution); + } + + @Override + public int hashCode() { + return Objects.hash(dbEndpoints, dbms, tsbsDataGeneration, tsbsLoadExecution, tsbsQueryGeneration, tsbsQueryExecution); + } + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TSBSWorkload {\n"); + + sb.append(" dbEndpoints: ").append(toIndentedString(dbEndpoints)).append("\n"); + sb.append(" dbms: ").append(toIndentedString(dbms)).append("\n"); + sb.append(" tsbsDataGeneration: ").append(toIndentedString(tsbsDataGeneration)).append("\n"); + sb.append(" tsbsLoadExecution: ").append(toIndentedString(tsbsLoadExecution)).append("\n"); + sb.append(" tsbsQueryGeneration: ").append(toIndentedString(tsbsQueryGeneration)).append("\n"); + sb.append(" tsbsQueryExecution: ").append(toIndentedString(tsbsQueryExecution)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} + diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSDBMSDBMSProperties.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSDBMSDBMSProperties.java index 1f63778065df148c585b27d3ab277346b1b9a940..63cd9ddc92849250b4a84ea5f504348554a1ab9c 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSDBMSDBMSProperties.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSDBMSDBMSProperties.java @@ -23,7 +23,7 @@ import javax.validation.constraints.*; /** * TSDBMSDBMSProperties */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class TSDBMSDBMSProperties { @JsonProperty("name") private String name = null; @@ -41,7 +41,7 @@ public class TSDBMSDBMSProperties { * @return name **/ @JsonProperty("name") - @ApiModelProperty(example = "-urls", value = "") + @ApiModelProperty(example = "consistency", value = "") public String getName() { return name; } @@ -60,7 +60,7 @@ public class TSDBMSDBMSProperties { * @return value **/ @JsonProperty("value") - @ApiModelProperty(example = "http://localhost:8086", value = "") + @ApiModelProperty(example = "all", value = "") public String getValue() { return value; } diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadConfig.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadConfig.java index bed1b124c321e82783d5ddcfc1b77e40863be07c..8bb83d6d211673e8572464f5b89a6c9f6300cf20 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadConfig.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadConfig.java @@ -24,7 +24,7 @@ import javax.validation.constraints.*; /** * WorkloadConfig */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class WorkloadConfig { /** * Gets or Sets workloadType diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadProcessInstance.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadProcessInstance.java index be134f31bd7e38b5dcd87dfa6be57a40e6f71504..11a3ff91187e3d3217a65be98ea0da07760cd476 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadProcessInstance.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadProcessInstance.java @@ -25,7 +25,7 @@ import javax.validation.constraints.*; /** * WorkloadProcessInstance */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class WorkloadProcessInstance { @JsonProperty("processId") private String processId = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadProcessSubmissionError.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadProcessSubmissionError.java index 37edaf58fe6aaea5e6e2948ff639c708c71344f4..70eb8fadf982a32447c367b1bd9001185df9858b 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadProcessSubmissionError.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/WorkloadProcessSubmissionError.java @@ -23,7 +23,7 @@ import javax.validation.constraints.*; /** * WorkloadProcessSubmissionError */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class WorkloadProcessSubmissionError { @JsonProperty("message") private String message = null; diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/YCSBWorkload.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/YCSBWorkload.java index 8fd5f664ab88f157d925f71c3877966dd6e166ff..39569d4b573518ad97dbc3bf1c8d8cdd50e30195 100644 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/YCSBWorkload.java +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/YCSBWorkload.java @@ -27,7 +27,7 @@ import javax.validation.constraints.*; /** * YCSBWorkload */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class YCSBWorkload { @JsonProperty("dbEndpoints") private DBEndpoints dbEndpoints = null; diff --git a/src/gen/java/de/uulm/omi/dbms/workload/api/ApiException.java b/src/gen/java/de/uulm/omi/dbms/workload/api/ApiException.java index a6e187f6fd15689c2b4aa171d32dc6c8d8443332..384d048d5cc09bdedc65d7d9a321beb47135f320 100644 --- a/src/gen/java/de/uulm/omi/dbms/workload/api/ApiException.java +++ b/src/gen/java/de/uulm/omi/dbms/workload/api/ApiException.java @@ -1,6 +1,6 @@ package de.uulm.omi.dbms.workload.api; -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/src/gen/java/de/uulm/omi/dbms/workload/api/ApiOriginFilter.java b/src/gen/java/de/uulm/omi/dbms/workload/api/ApiOriginFilter.java index 7c1e4fac55f36fc7fb522da2cb4d395efd038070..e05e94bebed918135301abb83cf5baeaa70803ce 100644 --- a/src/gen/java/de/uulm/omi/dbms/workload/api/ApiOriginFilter.java +++ b/src/gen/java/de/uulm/omi/dbms/workload/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class ApiOriginFilter implements javax.servlet.Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/src/gen/java/de/uulm/omi/dbms/workload/api/ApiResponseMessage.java b/src/gen/java/de/uulm/omi/dbms/workload/api/ApiResponseMessage.java index 8cdd9984a031ee0bf83b3c7eb8398d3e90ae13ac..63692dbc2aed8119273234f3e2becf3585961463 100644 --- a/src/gen/java/de/uulm/omi/dbms/workload/api/ApiResponseMessage.java +++ b/src/gen/java/de/uulm/omi/dbms/workload/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package de.uulm.omi.dbms.workload.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/src/gen/java/de/uulm/omi/dbms/workload/api/NotFoundException.java b/src/gen/java/de/uulm/omi/dbms/workload/api/NotFoundException.java index 88f92e784e6ee3753ba1bb05843c2ff3399666a2..a1eb2a6c8ded390ce9b0445e77e4afacd6c227d2 100644 --- a/src/gen/java/de/uulm/omi/dbms/workload/api/NotFoundException.java +++ b/src/gen/java/de/uulm/omi/dbms/workload/api/NotFoundException.java @@ -1,6 +1,6 @@ package de.uulm.omi.dbms.workload.api; -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/src/gen/java/de/uulm/omi/dbms/workload/api/StringUtil.java b/src/gen/java/de/uulm/omi/dbms/workload/api/StringUtil.java index 4a38c7661a867b95922b2c32974529402831cddf..fdf973952e9aad97231673f1edfb2ca041bf684d 100644 --- a/src/gen/java/de/uulm/omi/dbms/workload/api/StringUtil.java +++ b/src/gen/java/de/uulm/omi/dbms/workload/api/StringUtil.java @@ -1,6 +1,6 @@ package de.uulm.omi.dbms.workload.api; -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/src/gen/java/de/uulm/omi/dbms/workload/api/WorkloadApi.java b/src/gen/java/de/uulm/omi/dbms/workload/api/WorkloadApi.java index eda5e343c45a2d413e6e593b463322ce49563494..d8a6bf2a8e63685df01e88d6d869c4ccefd71f2d 100644 --- a/src/gen/java/de/uulm/omi/dbms/workload/api/WorkloadApi.java +++ b/src/gen/java/de/uulm/omi/dbms/workload/api/WorkloadApi.java @@ -10,7 +10,7 @@ import io.swagger.jaxrs.*; import de.uulm.omi.cloudiator.dbms.evaluator.model.Error; import java.io.File; import de.uulm.omi.cloudiator.dbms.evaluator.model.TPCCWorkload; -import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSLoadWorkload; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSWorkload; import de.uulm.omi.cloudiator.dbms.evaluator.model.WorkloadProcessInstance; import de.uulm.omi.cloudiator.dbms.evaluator.model.WorkloadProcessSubmissionError; import de.uulm.omi.cloudiator.dbms.evaluator.model.YCSBWorkload; @@ -35,7 +35,7 @@ import javax.validation.constraints.*; @Produces({ "application/json" }) @io.swagger.annotations.Api(description = "the workload API") -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class WorkloadApi { private final WorkloadApiService delegate; @@ -70,7 +70,7 @@ public class WorkloadApi { @io.swagger.annotations.ApiResponse(code = 200, message = "Unexpected error", response = Error.class) }) public Response workloadResultGet(@ApiParam(value = "the id of the worklaod execution task, used as prefix for result files",required=true) @QueryParam("taskId") String taskId -,@ApiParam(value = "workload type of the result file",required=true, allowableValues="YCSB") @QueryParam("workloadType") String workloadType +,@ApiParam(value = "workload type of the result file",required=true, allowableValues="YCSB, TPCC, TSBS") @QueryParam("workloadType") String workloadType ,@Context SecurityContext securityContext) throws NotFoundException { return delegate.workloadResultGet(taskId,workloadType,securityContext); @@ -107,7 +107,7 @@ public class WorkloadApi { return delegate.workloadTpccPost(taskId,workload,securityContext); } @POST - @Path("/tsbs/load") + @Path("/tsbs") @Produces({ "application/json" }) @io.swagger.annotations.ApiOperation(value = "generates the data, queries, loads and executes the TSBS workload against a supported DBMS", notes = "Prepare and execute the TSBS workload ", response = WorkloadProcessInstance.class, tags={ }) @@ -117,11 +117,11 @@ public class WorkloadApi { @io.swagger.annotations.ApiResponse(code = 403, message = "already a workloadProcess running", response = WorkloadProcessSubmissionError.class), @io.swagger.annotations.ApiResponse(code = 200, message = "Unexpected error", response = Error.class) }) - public Response workloadTsbsLoadPost(@ApiParam(value = "the id of the workload execution task, used as prefix for result files",required=true) @QueryParam("taskId") String taskId -,@ApiParam(value = "the TSBS workload configuration" ,required=true) TSBSLoadWorkload workload + public Response workloadTsbsPost(@ApiParam(value = "the id of the workload execution task, used as prefix for result files",required=true) @QueryParam("taskId") String taskId +,@ApiParam(value = "the TSBS workload configuration" ,required=true) TSBSWorkload workload ,@Context SecurityContext securityContext) throws NotFoundException { - return delegate.workloadTsbsLoadPost(taskId,workload,securityContext); + return delegate.workloadTsbsPost(taskId,workload,securityContext); } @POST @Path("/ycsb") diff --git a/src/gen/java/de/uulm/omi/dbms/workload/api/WorkloadApiService.java b/src/gen/java/de/uulm/omi/dbms/workload/api/WorkloadApiService.java index 8dda4219bb4f01c67cf81c68238e386bb3c16b35..5e4a11cee1c8da82d9bcad4b2989f225acaef9cc 100644 --- a/src/gen/java/de/uulm/omi/dbms/workload/api/WorkloadApiService.java +++ b/src/gen/java/de/uulm/omi/dbms/workload/api/WorkloadApiService.java @@ -8,7 +8,7 @@ import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import de.uulm.omi.cloudiator.dbms.evaluator.model.Error; import java.io.File; import de.uulm.omi.cloudiator.dbms.evaluator.model.TPCCWorkload; -import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSLoadWorkload; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSWorkload; import de.uulm.omi.cloudiator.dbms.evaluator.model.WorkloadProcessInstance; import de.uulm.omi.cloudiator.dbms.evaluator.model.WorkloadProcessSubmissionError; import de.uulm.omi.cloudiator.dbms.evaluator.model.YCSBWorkload; @@ -21,11 +21,11 @@ import java.io.InputStream; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; import javax.validation.constraints.*; -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public abstract class WorkloadApiService { public abstract Response workloadResultGet( @NotNull String taskId, @NotNull String workloadType,SecurityContext securityContext) throws NotFoundException; public abstract Response workloadStatusGet( String applicationInstanceId,SecurityContext securityContext) throws NotFoundException; public abstract Response workloadTpccPost( @NotNull String taskId,TPCCWorkload workload,SecurityContext securityContext) throws NotFoundException; - public abstract Response workloadTsbsLoadPost( @NotNull String taskId,TSBSLoadWorkload workload,SecurityContext securityContext) throws NotFoundException; + public abstract Response workloadTsbsPost( @NotNull String taskId,TSBSWorkload workload,SecurityContext securityContext) throws NotFoundException; public abstract Response workloadYcsbPost( @NotNull String taskId,YCSBWorkload workload,SecurityContext securityContext) throws NotFoundException; } diff --git a/src/main/java/de/uulm/omi/dbms/workload/api/factories/WorkloadApiServiceFactory.java b/src/main/java/de/uulm/omi/dbms/workload/api/factories/WorkloadApiServiceFactory.java index 8ef9d29209516686aac0dd4f9f9b92a644740f9f..d1759f6337dda7bf164b41609cae449e7f97ef89 100644 --- a/src/main/java/de/uulm/omi/dbms/workload/api/factories/WorkloadApiServiceFactory.java +++ b/src/main/java/de/uulm/omi/dbms/workload/api/factories/WorkloadApiServiceFactory.java @@ -3,7 +3,7 @@ package de.uulm.omi.dbms.workload.api.factories; import de.uulm.omi.dbms.workload.api.WorkloadApiService; import de.uulm.omi.dbms.workload.api.impl.WorkloadApiServiceImpl; -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-08T15:27:14.409+02:00") public class WorkloadApiServiceFactory { private final static WorkloadApiService service = new WorkloadApiServiceImpl(); diff --git a/src/main/java/de/uulm/omi/dbms/workload/api/impl/WorkloadApiServiceImpl.java b/src/main/java/de/uulm/omi/dbms/workload/api/impl/WorkloadApiServiceImpl.java index 6b14052fab4dc12035ff5f8ec430d309d360f0ab..8dbb487b61069a85db7c7f9521e8433f810a5c94 100644 --- a/src/main/java/de/uulm/omi/dbms/workload/api/impl/WorkloadApiServiceImpl.java +++ b/src/main/java/de/uulm/omi/dbms/workload/api/impl/WorkloadApiServiceImpl.java @@ -1,6 +1,11 @@ package de.uulm.omi.dbms.workload.api.impl; -import de.uulm.omi.cloudiator.dbms.evaluator.model.*; +import de.uulm.omi.cloudiator.dbms.evaluator.model.ProcessStatus; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TPCCWorkload; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSWorkload; +import de.uulm.omi.cloudiator.dbms.evaluator.model.WorkloadProcessInstance; +import de.uulm.omi.cloudiator.dbms.evaluator.model.WorkloadProcessSubmissionError; +import de.uulm.omi.cloudiator.dbms.evaluator.model.YCSBWorkload; import de.uulm.omi.dbms.workload.api.ApiResponseMessage; import de.uulm.omi.dbms.workload.api.NotFoundException; import de.uulm.omi.dbms.workload.api.WorkloadApiService; @@ -8,20 +13,18 @@ import de.uulm.omi.utils.TextFileLoader; import de.uulm.omi.utils.WorkloadApiProperties; import de.uulm.omi.workload.WorkloadProcess; import de.uulm.omi.workload.tpcc.TPCCCommandBuilder; -import de.uulm.omi.workload.tsbs.TSBSCommandBuilder; +import de.uulm.omi.workload.tsbs.Runner; import de.uulm.omi.workload.ycsb.YCSBCommandBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.validation.constraints.NotNull; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.SecurityContext; import java.io.File; import java.io.FileNotFoundException; -import java.io.IOException; import java.math.BigDecimal; import java.util.Properties; +import javax.validation.constraints.NotNull; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.SecurityContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2018-01-16T09:59:22.348Z") public class WorkloadApiServiceImpl extends WorkloadApiService { @@ -44,12 +47,15 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { private static final String TPCC_BINARY = "./cockroach"; +<<<<<<< HEAD //TSBS constants private final String TSBS_RESULT_FOLDER = "TSBS/"; private static final String TSBS_BINARY = "/opt/workloads/tsbs/bin/"; private static final String TSBS_SCRIPTS = "/opt/workloads/tsbs/src/omi-gitlab.e-technik.uni-ulm.de/mowgli/benchmarks/mowgli-tsbs/scripts/"; +======= +>>>>>>> 1f37d36184567e516e0854bf1dd0cf0073592d05 @Override public Response workloadResultGet(@NotNull String taskId, @NotNull String workloadType, @@ -206,11 +212,10 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { } @Override - public Response workloadTsbsLoadPost(String taskId, TSBSLoadWorkload workload, + public Response workloadTsbsPost(String taskId, TSBSWorkload workload, SecurityContext securityContext) throws NotFoundException { - - //check if already a workloadProcess running + //Phase 0: check if already a workloadProcess running WorkloadProcess workloadProcess = WorkloadProcess.getInstance(); if (workloadProcess.isRunning()) { WorkloadProcessSubmissionError workloadProcessSubmissionError = new WorkloadProcessSubmissionError(); @@ -220,116 +225,16 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { return Response.status(Status.FORBIDDEN).entity(workloadProcessSubmissionError).build(); } - Properties properties = WorkloadApiProperties.getInstance().getProperties(); - Long workloadTimestamp = System.currentTimeMillis(); - - //Generate Data - String generateDataCommand= ""; - generateDataCommand = TSBSCommandBuilder.generateDataCommand(workload.getTsbsDataConfig()); - String resultFileName = - properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) - + TSBS_RESULT_FOLDER - + workload.getTsbsDataConfig().getFormat() + "-data.gz"; - - generateDataCommand += " | gzip > " + resultFileName; - ProcessBuilder genDataProcess= new ProcessBuilder(); - genDataProcess.command(UNIX_SHELL, UNIX_COMMAND_PARAM, generateDataCommand); - Process processData = null; - try { - processData = genDataProcess.start(); - } catch (IOException e) { - e.printStackTrace(); - } - System.out.println(generateDataCommand); - while (processData.isAlive()) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - System.out.println("finished data generation"); - - String fileToLoad = properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) + TSBS_RESULT_FOLDER + workload.getTsbsDataConfig().getFormat() + "-data.gz"; - String queriesToExecute = properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) + TSBS_RESULT_FOLDER + workload.getTsbsQueryConfig().getQueryType() + ".gz"; - - //Generate Queries - String generateQueriesCommand = ""; - generateQueriesCommand = TSBSCommandBuilder.generateQueries(workload.getTsbsQueryConfig()); - String resultQueriesName = - properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) - + TSBS_RESULT_FOLDER - + workload.getTsbsQueryConfig().getQueryType() + ".gz"; - generateQueriesCommand += "| gzip > " + resultQueriesName; - System.out.println(generateQueriesCommand); - ProcessBuilder genQueryProcess = new ProcessBuilder(); - genQueryProcess.command(UNIX_SHELL, UNIX_COMMAND_PARAM, generateQueriesCommand); - Process processGenQueries = null; - try { - processGenQueries = genQueryProcess.start(); - } catch (IOException e) { - e.printStackTrace(); - } - while (processGenQueries.isAlive()) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - System.out.println("finished query generation"); - - // Benchmarking insert/write performance - String loadCommand = ""; - loadCommand = TSBSCommandBuilder.measurePerformance(workload.getTsbsDataConfig(), workload.getTsbsLoadConfig(), TSBS_RESULT_FOLDER, TSBS_SCRIPTS); - loadCommand += " > " + properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) + TSBS_RESULT_FOLDER - + "load_metrics.csv"; - System.out.println(loadCommand); - ProcessBuilder loadProcess = new ProcessBuilder(); - loadProcess.command(UNIX_SHELL, UNIX_COMMAND_PARAM, loadCommand); - Process processLoad = null; - try { - processLoad = loadProcess.start(); - } catch (IOException e) { - e.printStackTrace(); - } - while (processLoad.isAlive()) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - System.out.println("finished loading"); - - // Execute Queries - String exeQueries = "cat " + queriesToExecute + " | gunzip | "; - exeQueries += TSBSCommandBuilder.executeQueries(workload.getTsbsDataConfig(), workload.getTsbsQueryExecution()/*, queriesToExecute*/); - exeQueries += " > " + properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) + TSBS_RESULT_FOLDER + "query_execution.csv"; - System.out.println(exeQueries); - workloadProcess - .startWorkload(TSBS_BINARY, UNIX_SHELL, UNIX_COMMAND_PARAM, exeQueries, taskId, - workloadTimestamp); WorkloadProcessInstance workloadProcessInstance = new WorkloadProcessInstance(); + workloadProcessInstance.setProcessStatus(ProcessStatus.RUNNING); workloadProcessInstance.setTimestamp(BigDecimal.valueOf(workloadProcess.getStartTimestamp())); workloadProcessInstance.setProcessId(workloadProcess.getProcessId()); - if (workloadProcess.isRunning()) { - LOGGER.debug("WorkloadPrcess started!"); - workloadProcessInstance.setProcessStatus(ProcessStatus.RUNNING); - return Response.ok().entity(workloadProcessInstance).build(); - } else { - if (workloadProcess.getExitCode() != 0) { - LOGGER.debug("workloadPrcess exited with " + workloadProcess.getExitCode() - + " Incorrect command provided? Command: " + "TODO"); - workloadProcessInstance.setProcessStatus(ProcessStatus.ERROR); - return Response.ok().entity(workloadProcessInstance).build(); - } else { - LOGGER.debug( - "workloadPrcess already finished, incorrect command provided? Command: " + "TODO"); - workloadProcessInstance.setProcessStatus(ProcessStatus.IDLE); - return Response.ok().entity(workloadProcessInstance).build(); - } - } + + Runner tsbsRunner = new Runner(workload, taskId); + new Thread(tsbsRunner).start(); + + return Response.ok().entity(workloadProcessInstance).build(); + } diff --git a/src/main/java/de/uulm/omi/utils/WorkloadApiProperties.java b/src/main/java/de/uulm/omi/utils/WorkloadApiProperties.java index 664f80004d14eea6a7faa0fa1dd6144068430ddc..70d99013a4c41d474c588da4078daa0de4f21bf7 100644 --- a/src/main/java/de/uulm/omi/utils/WorkloadApiProperties.java +++ b/src/main/java/de/uulm/omi/utils/WorkloadApiProperties.java @@ -64,6 +64,7 @@ public enum WorkloadApiProperties implements WorkloadApiPropertiesService { //property keys public static final String WORKLOAD_BINARIES_FOLDER = "workloadBinariesFolder"; public static final String WORKLOAD_RESULTS_FOLDER = "workloadResultsFolder"; + public static final String WORKLOAD_DATA_FOLDER = "workloadDataFolder"; private static final Logger LOGGER = LoggerFactory.getLogger(WorkloadProcess.class.getName()); diff --git a/src/main/java/de/uulm/omi/workload/tsbs/Phase.java b/src/main/java/de/uulm/omi/workload/tsbs/Phase.java new file mode 100644 index 0000000000000000000000000000000000000000..dff1510cbca0ab621e6655b4cadd7723097ab371 --- /dev/null +++ b/src/main/java/de/uulm/omi/workload/tsbs/Phase.java @@ -0,0 +1,10 @@ +package de.uulm.omi.workload.tsbs; + +/** + * Created by Daniel Seybold on 11.05.2020. + */ +public enum Phase { + + LOAD, + QUERY +} diff --git a/src/main/java/de/uulm/omi/workload/tsbs/Runner.java b/src/main/java/de/uulm/omi/workload/tsbs/Runner.java new file mode 100644 index 0000000000000000000000000000000000000000..7c407c5b89923acb3fc3a551d55ac0f08cfc172d --- /dev/null +++ b/src/main/java/de/uulm/omi/workload/tsbs/Runner.java @@ -0,0 +1,166 @@ +package de.uulm.omi.workload.tsbs; + +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSWorkload; +import de.uulm.omi.utils.WorkloadApiProperties; +import de.uulm.omi.workload.WorkloadProcess; +import java.util.Properties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Created by Daniel Seybold on 11.05.2020. + */ +public class Runner implements Runnable { + + private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); + + + private final String UNIX_SHELL = "bash"; + private final String UNIX_COMMAND_PARAM = "-c"; + + //TSBS constants + private final String TSBS_RESULT_FOLDER = "TSBS/"; + private static final String TSBS_BINARY = "/opt/workloads/tsbs/bin/"; + + //checking interval for TSBS commands + private final int CHECKING_INTERVAL = 5000; + + private TSBSWorkload workload; + private String taskId; + + public Runner(TSBSWorkload workload, String taskId) { + + this.workload = workload; + this.taskId = taskId; + } + + @Override + public void run() { + + WorkloadProcess workloadProcess = WorkloadProcess.getInstance(); + + Properties properties = WorkloadApiProperties.getInstance().getProperties(); + Long workloadTimestamp = System.currentTimeMillis(); + + LOGGER.debug(workload.toString()); + + //Phase 1: generate data + LOGGER.debug("Starting phase 1: data generations"); + String generateDataCommand= ""; + generateDataCommand = TSBSCommandBuilder.generateDataCommand( TSBS_BINARY, workload.getDbms(), workload.getTsbsDataGeneration()); + generateDataCommand += properties.getProperty(WorkloadApiProperties.WORKLOAD_DATA_FOLDER) + workload.getDbms().toString().toLowerCase() + "-data.gz"; + LOGGER.debug("Generate data command: " + generateDataCommand); + + + workloadProcess + .startWorkload(TSBS_BINARY, UNIX_SHELL, UNIX_COMMAND_PARAM, generateDataCommand, taskId, + workloadTimestamp); + + while (workloadProcess.isRunning()) { + try { + LOGGER.debug("Data generation in process..."); + Thread.sleep(CHECKING_INTERVAL); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + LOGGER.debug("Phase 1: data generation finished with exit code: " + workloadProcess.getExitCode()); + if(workloadProcess.getExitCode() != 0){ + Thread.currentThread().interrupt(); + return; + } + + //Phase 2: query generation + + String generateQueriesCommand = ""; + generateQueriesCommand = TSBSCommandBuilder.generateQueriesCommand(TSBS_BINARY, workload.getDbms(), workload.getTsbsDataGeneration(), workload.getTsbsQueryGeneration()); + generateQueriesCommand += properties.getProperty(WorkloadApiProperties.WORKLOAD_DATA_FOLDER) + workload.getDbms().toString().toLowerCase() + "-queries.gz" ; + LOGGER.debug(generateQueriesCommand); + + workloadProcess + .startWorkload(TSBS_BINARY, UNIX_SHELL, UNIX_COMMAND_PARAM, generateQueriesCommand, taskId, + workloadTimestamp); + + while (workloadProcess.isRunning()) { + try { + LOGGER.debug("Query generation in process..."); + Thread.sleep(CHECKING_INTERVAL); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + LOGGER.debug("Phase 2: query generation finished with exit code: " + workloadProcess.getExitCode()); + if(workloadProcess.getExitCode() != 0){ + Thread.currentThread().interrupt(); + return; + } + + //Phase 3: executing insert/load phase + + /* + //clear database + String clearDBCommand = TSBSCommandBuilder.clearDB(workload.getDbms(), workload.getTsbsLoadExecution().getDbName(),workload.getDbEndpoints()); + ProcessBuilder processClearDBBuilder = new ProcessBuilder(); + processClearDBBuilder.command(UNIX_SHELL, UNIX_COMMAND_PARAM, clearDBCommand); + LOGGER.debug(clearDBCommand); + + Process clearDBProcess = null; + try { + clearDBProcess = processClearDBBuilder.start(); + } catch (IOException e) { + e.printStackTrace(); + } + while (clearDBProcess.isAlive()) { + try { + LOGGER.debug("Clear DB in process..."); + Thread.sleep(CHECKING_INTERVAL); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + LOGGER.debug("Clear DB finished with exit code: " + clearDBProcess.exitValue()); + + */ + + + + String loadCommand = ""; + loadCommand = TSBSCommandBuilder.generateLoadCommand(TSBS_BINARY, properties.getProperty(WorkloadApiProperties.WORKLOAD_DATA_FOLDER), workload.getDbms(), workload.getTsbsLoadExecution(),workload.getDbEndpoints()); + loadCommand += " > " + properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) + TSBS_RESULT_FOLDER + taskId.trim() + "_load.txt"; + LOGGER.debug(loadCommand); + + workloadProcess + .startWorkload(TSBS_BINARY, UNIX_SHELL, UNIX_COMMAND_PARAM, loadCommand, taskId, + workloadTimestamp); + + while (workloadProcess.isRunning()) { + try { + LOGGER.debug("Load phase in process..."); + Thread.sleep(CHECKING_INTERVAL); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + LOGGER.debug("Phase 3: load phase finished with exit code: " + workloadProcess.getExitCode()); + if(workloadProcess.getExitCode() != 0){ + Thread.currentThread().interrupt(); + return; + } + + + + //Phase 4: executing query phase + //Execute Queries + String executeQueriesCommand = TSBSCommandBuilder.executeQueriesCommand(TSBS_BINARY, properties.getProperty(WorkloadApiProperties.WORKLOAD_DATA_FOLDER), workload.getDbms(), workload.getTsbsQueryExecution(), workload.getDbEndpoints() ); + executeQueriesCommand += " > " + properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) + TSBS_RESULT_FOLDER + taskId.trim() + ".txt"; + LOGGER.debug(loadCommand); + + workloadProcess = WorkloadProcess.getInstance(); + workloadProcess + .startWorkload(TSBS_BINARY, UNIX_SHELL, UNIX_COMMAND_PARAM, executeQueriesCommand, taskId, + workloadTimestamp); + + + } +} diff --git a/src/main/java/de/uulm/omi/workload/tsbs/TSBSCommandBuilder.java b/src/main/java/de/uulm/omi/workload/tsbs/TSBSCommandBuilder.java index 1c1e35b509cc7a1780517bddeb73dad59d270a07..9a6f0c64ea95aa944dc3c155060151ad8635ebcc 100644 --- a/src/main/java/de/uulm/omi/workload/tsbs/TSBSCommandBuilder.java +++ b/src/main/java/de/uulm/omi/workload/tsbs/TSBSCommandBuilder.java @@ -1,174 +1,438 @@ package de.uulm.omi.workload.tsbs; -import de.uulm.omi.cloudiator.dbms.evaluator.model.*; +import static com.google.common.base.Preconditions.checkNotNull; + +import de.uulm.omi.cloudiator.dbms.evaluator.model.DBEndpoint; +import de.uulm.omi.cloudiator.dbms.evaluator.model.DBEndpoints; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSDataGeneration; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSLoadExecution; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSQueryExecution; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSQueryGeneration; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSWorkload; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSBSWorkload.DbmsEnum; +import de.uulm.omi.cloudiator.dbms.evaluator.model.TSDBMSDBMSProperties; +import java.util.List; +import java.util.Optional; +import java.util.StringJoiner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.google.common.base.Preconditions.checkNotNull; - public class TSBSCommandBuilder { private static final Logger LOGGER = LoggerFactory.getLogger(TSBSCommandBuilder.class); - public static String generateDataCommand(TSBSDataConfig dataConfig) { + private static String DEFAULT_INFLUX_URLS="http://localhost:8086 "; + private static String DEFAULT_INFLUX_BACKOFF="1s"; + private static String DEFAULT_INFLUX_CONSISTENCY="all"; + private static String DEFAULT_INFLUX_REPLICATION_FACTOR="1"; + - checkNotNull(dataConfig); - boolean fail = false; + public static String generateDataCommand(String binaryPath, TSBSWorkload.DbmsEnum dbms, TSBSDataGeneration tsbsDataGeneration) { - String generateDataCommand = "tsbs_generate_data "; - if (dataConfig.getUsecase() != null){ - generateDataCommand += "-use-case=\"" + dataConfig.getUsecase().toLowerCase()+ "\" "; + checkNotNull(tsbsDataGeneration); + + String generateDataCommand = binaryPath + "tsbs_generate_data "; + if (tsbsDataGeneration.getUsecase() != null){ + generateDataCommand += "--use-case=\"" + tsbsDataGeneration.getUsecase().toLowerCase()+ "\" "; } - else fail=true; - if (dataConfig.getSeed() != null) { - generateDataCommand += "-seed=" + dataConfig.getSeed().toString().toLowerCase() + " "; + else throw new IllegalArgumentException("Missing or incorrect --use-case parameter!"); + + if (tsbsDataGeneration.getSeed() != null) { + generateDataCommand += "--seed=" + tsbsDataGeneration.getSeed().toString().toLowerCase() + " "; } - else fail=true; - if (dataConfig.getScale() != null) { - generateDataCommand += "-scale=" + dataConfig.getScale().toString().toLowerCase() + " "; + else throw new IllegalArgumentException("Missing or incorrect --seed parameter!"); + + + if (tsbsDataGeneration.getScale() != null) { + generateDataCommand += "--scale=" + tsbsDataGeneration.getScale() + " "; } - else fail=true; - if (dataConfig.getStartTime() != null) { - generateDataCommand += "-timestamp-start=\"" + dataConfig.getStartTime() + "\" "; + else throw new IllegalArgumentException("Missing or incorrect --scale parameter!"); + + if (tsbsDataGeneration.getStartTime() != null) { + generateDataCommand += "--timestamp-start=\"" + tsbsDataGeneration.getStartTime() + "\" "; } - else fail=true; - if (dataConfig.getEndTime() != null) { - generateDataCommand += "-timestamp-end=\"" + dataConfig.getEndTime() + "\" "; + else throw new IllegalArgumentException("Missing or incorrect --timestamp-start parameter!"); + + + if (tsbsDataGeneration.getEndTime() != null) { + generateDataCommand += "--timestamp-end=\"" + tsbsDataGeneration.getEndTime() + "\" "; } - else fail=true; - if (dataConfig.getLogInterval() != null) { - generateDataCommand += "-log-interval=\"" + dataConfig.getLogInterval() + "\" "; + else throw new IllegalArgumentException("Missing or incorrect --timestamp-end parameter!"); + + + if (tsbsDataGeneration.getLogInterval() != null) { + generateDataCommand += "--log-interval=\"" + tsbsDataGeneration.getLogInterval() + "\" "; } - else fail=true; - if (dataConfig.getFormat() != null) { - generateDataCommand += "-format=\"" + dataConfig.getFormat()+ "\""; - } else fail=true; - if (fail) { - LOGGER.error("Required arguments are missing\n" + "One of the following:"); - LOGGER.info("Arguments needed: \n" + - "-use-case\n" + - "-seed\n" + - "-scale\n" + - "-timestamp-start\n" + - "-timestamp-end\n" + - "-log-interval\n" + - "-format"); - return ""; + else throw new IllegalArgumentException("Missing or incorrect --log-interval parameter!"); + + + if (dbms != null) { + generateDataCommand += "--format=\"" + dbms.toString().toLowerCase()+ "\""; + } else throw new IllegalArgumentException("Missing or incorrect --log-interval parameter!"); + + + generateDataCommand += " | gzip > "; + + return generateDataCommand; + + } + + public static String generateQueriesCommand(String binaryPath, TSBSWorkload.DbmsEnum dbms, TSBSDataGeneration tsbsDataGeneration, TSBSQueryGeneration tsbsQueryGeneration) { + + checkNotNull(tsbsDataGeneration); + checkNotNull(tsbsQueryGeneration); + + + + String generateQueryCommand = binaryPath + "tsbs_generate_queries "; + + if (tsbsDataGeneration.getUsecase() != null){ + generateQueryCommand += "--use-case=\"" + tsbsDataGeneration.getUsecase().toLowerCase()+ "\" "; } + else throw new IllegalArgumentException("Missing or incorrect --use-case parameter!"); + + if (tsbsDataGeneration.getSeed() != null) { + generateQueryCommand += "--seed=" + tsbsDataGeneration.getSeed() + " "; + } + else throw new IllegalArgumentException("Missing or incorrect --seed parameter!"); + + + if (tsbsDataGeneration.getScale() != null) { + generateQueryCommand += "--scale=" + tsbsDataGeneration.getScale() + " "; + } + else throw new IllegalArgumentException("Missing or incorrect --scale parameter!"); + + if (tsbsDataGeneration.getStartTime() != null) { + generateQueryCommand += "--timestamp-start=\"" + tsbsDataGeneration.getStartTime() + "\" "; + } + + + //increase last second +1 + String firstPart = tsbsDataGeneration.getEndTime().substring(0, (tsbsDataGeneration.getEndTime().length() - 2)); + String lastPart = tsbsDataGeneration.getEndTime().substring(tsbsDataGeneration.getEndTime().length() - 2,tsbsDataGeneration.getEndTime().length() - 1); + String increasedEndTime = firstPart + (Integer.valueOf(lastPart) + 1) + "Z"; + LOGGER.debug("End time query generation: " + increasedEndTime); + + if (increasedEndTime != null) { + generateQueryCommand += "--timestamp-end=\"" + increasedEndTime + "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --timestamp-end parameter!"); + - else return generateDataCommand; + if(tsbsQueryGeneration.getQueries().intValue() > 0) { + generateQueryCommand += "--queries=" + tsbsQueryGeneration.getQueries() + " "; + } else throw new IllegalArgumentException("Missing or incorrect --queries parameter!"); + + + if(tsbsQueryGeneration.getQueryType() != null) { + generateQueryCommand += "--query-type=" + "\"" + tsbsQueryGeneration.getQueryType() + "\" "; + }else throw new IllegalArgumentException("Missing or incorrect --query-type parameter!"); + + + if (dbms != null) { + generateQueryCommand += "--format=\"" + dbms.toString().toLowerCase() + "\""; + } else throw new IllegalArgumentException("Missing or incorrect --log-interval parameter!"); + + + generateQueryCommand += " | gzip > "; + + return generateQueryCommand; + } + + + + public static String generateLoadCommand(String binaryPath, String dataFolder, DbmsEnum dbms, + TSBSLoadExecution tsbsLoadExecution, + DBEndpoints dbEndpoints) { + + checkNotNull(dbms); + checkNotNull(tsbsLoadExecution); + + + + String generateLoadCommand = "cat " + dataFolder + dbms.toString().toLowerCase() + "-data.gz | gunzip | " + binaryPath + "tsbs_load_" + dbms.toString().toLowerCase() + " "; + + //common parameters + if (tsbsLoadExecution.getDbName() != null){ + generateLoadCommand += "--db-name=\"" + tsbsLoadExecution.getDbName().toLowerCase()+ "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --db-name parameter!"); + + if (tsbsLoadExecution.getWorkers() != null){ + generateLoadCommand += "--workers=" + tsbsLoadExecution.getWorkers() + " "; + } + else throw new IllegalArgumentException("Missing or incorrect --workers parameter!"); + + if (tsbsLoadExecution.getReportingPeriod() != null){ + generateLoadCommand += "--reporting-period=\"" + tsbsLoadExecution.getReportingPeriod()+ "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --reporting-period parameter!"); + + if (tsbsLoadExecution.getBatchSize() != null){ + generateLoadCommand += "--batch-size=" + tsbsLoadExecution.getBatchSize()+ " "; + } + else throw new IllegalArgumentException("Missing or incorrect --batch-size parameter!"); + + //DBMS specific parameters + return getDBMSConnection(dbms, dbEndpoints, generateLoadCommand, + tsbsLoadExecution.getDbmsPorperties(),Phase.LOAD); } - public static String generateQueries(TSBSQueryConfig queryConfig) { - checkNotNull(queryConfig); - boolean fail = false; - String generateQueryCommand = "tsbs_generate_queries "; - if(queryConfig.getUsecase() != null) { - generateQueryCommand += "-use-case=" + "\"" + queryConfig.getUsecase() + "\" "; - } else fail = true; - if(queryConfig.getSeed() != null) { - generateQueryCommand += "-seed=" + queryConfig.getSeed() + " "; - } else fail = true; - if(queryConfig.getScale() != null) { - generateQueryCommand += "-scale=" + queryConfig.getScale() + " "; - } else fail = true; - if(queryConfig.getStartTime() != null) { - generateQueryCommand += "-timestamp-start=" + "\"" + queryConfig.getStartTime() + "\" "; - } else fail = true; - if(queryConfig.getEndTime() != null) { - generateQueryCommand += "-timestamp-end=" + "\"" + queryConfig.getEndTime() + "\" "; - } else fail = true; - if(queryConfig.getQueries().intValue() > 0) { - generateQueryCommand += "-queries=" + queryConfig.getQueries() + " "; - } else fail= true; - if(queryConfig.getQueryType() != null) { - generateQueryCommand += "-query-type=" + "\"" + queryConfig.getQueryType() + "\" "; - } else fail=true; - if(queryConfig.getFormat() != null) { - generateQueryCommand += "-format=" + "\"" + queryConfig.getFormat() + "\" "; - } else fail = true; - if (fail) { - LOGGER.error("Required arguments are missing\n" + "One of the following:"); - LOGGER.info("Arguments needed: \n" + - "-use-case\n" + - "-seed\n" + - "-scale\n" + - "-timestamp-start\n" + - "-timestamp-end\n" + - "-queries\n" + - "-query-type\n" + - "-format"); - return ""; - } - - else return generateQueryCommand; + + + public static String executeQueriesCommand(String binaryPath, String queryFolder, DbmsEnum dbms, TSBSQueryExecution tsbsQueryExecution, DBEndpoints dbEndpoints) { + + String queriesCommand = "cat " + queryFolder + dbms.toString().toLowerCase() + "-queries.gz " + " | gunzip | " + binaryPath + "tsbs_run_queries_" + dbms.toString().toLowerCase() + " "; + + //common parameters + if (tsbsQueryExecution.getWorkers() != null){ + queriesCommand += "--workers=\"" + tsbsQueryExecution.getWorkers()+ "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --workers parameter!"); + + + //DBMS specific parameters + return getDBMSConnection(dbms, dbEndpoints, queriesCommand, + tsbsQueryExecution.getDbmsPorperties(), Phase.QUERY); + } - @Deprecated - public static String loadCommand(TSBSDataConfig dataConfig, TSBSLoadConfig loadConfig, String fileToLoad) { - checkNotNull(dataConfig); - boolean fail = false; - String loadingCommand = "tsbs_load_"; - loadingCommand += dataConfig.getFormat().toString().toLowerCase() + " "; - if(loadConfig.getBatchSize().intValue() > 0) { - loadingCommand += "-batch-size=" + loadConfig.getBatchSize().toString() + " "; - } else fail = true; - if(loadConfig.getNumberOfWorkers().intValue() > 0) { - loadingCommand += "-workers=" + loadConfig.getNumberOfWorkers().toString() + " "; - } else fail=true; - if(loadConfig.getDbmsPorperties().size() > 0) { - for(TSDBMSDBMSProperties prop : loadConfig.getDbmsPorperties()) { - loadingCommand += prop.getName() + "=" + "\"" + prop.getValue() + "\" "; - } - } else fail = true; - loadingCommand += "-file=" + "\"" + fileToLoad + "\""; - if (fail) { - LOGGER.error("Loading command cannot be executed."); - return ""; - } - else return loadingCommand; + + + //TODO: we need to pass the current phase! load and query + private static String getDBMSConnection(DbmsEnum dbms, DBEndpoints dbEndpoints, + String queriesCommand, List dbmsProperties, + Phase query) { + if(dbms.equals(DbmsEnum.INFLUX)){ + queriesCommand += influxCommand(dbmsProperties, dbEndpoints); + }else if (dbms.equals(DbmsEnum.TIMESCALEDB)){ + queriesCommand += timescaledbCommand(dbmsProperties, dbEndpoints,query); + }else if(dbms.equals(DbmsEnum.CASSANDRA)){ + queriesCommand += cassandraCommand(dbmsProperties,dbEndpoints,query); + } + + else { + throw new IllegalArgumentException("Currently only Influx, TimescaleDb and Cassandra are supported!"); + } + + return queriesCommand; } - public static String measurePerformance(TSBSDataConfig dataConfig, TSBSLoadConfig loadConfig, String TSBSResultFolder, String ScriptFolder) { - checkNotNull(dataConfig); - checkNotNull(loadConfig); - String loadingCommand = ""; - boolean fail=false; - if(loadConfig.getNumberOfWorkers().intValue() > 0 ) { - loadingCommand += "NUM_WORKERS=" + loadConfig.getNumberOfWorkers() + " "; - } else fail=true; - if(loadConfig.getBatchSize().intValue() > 0) { - loadingCommand += "BATCH_SIZE=" + loadConfig.getBatchSize() + " "; - } else fail=true; - loadingCommand += "BULK_DATA_DIR=" + TSBSResultFolder + " "; - loadingCommand += ScriptFolder + "load_" + dataConfig.getFormat() + ".sh"; - if (fail) { - LOGGER.error("Loading command cannot be executed."); - return ""; - } - else return loadingCommand; + + private static String influxCommand( + List dbmsProperties, + DBEndpoints dbEndpoints){ + + String influxCommand = " "; + + //TODO: add support for multiple Influx endpoints + LOGGER.warn("Multiple Influx endpoints are currently not supported!"); + String influxEndpoints = "http://" + dbEndpoints.get(0).getIpAddress() + ":8086 "; + influxCommand += "--urls " + influxEndpoints; + + + //backoff + boolean backoffCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("backoff")); + if(backoffCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("backoff")).findAny(); + + influxCommand += "--backoff " + item.get().getValue() + " "; + + } + + //consistency + boolean consistencyCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("consistency")); + if(consistencyCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("consistency")).findAny(); + + influxCommand += "--consistency " + item.get().getValue(); + + } + + //replication + boolean replicationCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("replication-factor")); + if(replicationCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("replication-factor")).findAny(); + + influxCommand += "--replication-factor " + item.get().getValue() + " "; + + } + + return influxCommand; + } - public static String executeQueries(TSBSDataConfig dataConfig, TSBSQueryExecution quExe/*, String queriesToExecute*/) { - String exeQueries = "tsbs_run_queries_" + dataConfig.getFormat() + " "; - boolean fail=false; - if(quExe.getWorkers().intValue() > 0) { - exeQueries += "--workers=" + quExe.getWorkers() + " "; - } else fail = true; - if(quExe.getDbmsPorperties().size() > 0 ) { - for(TSDBMSDBMSProperties prop : quExe.getDbmsPorperties()) { - exeQueries += prop.getName() + "=\"" + prop.getValue() + "\" "; - } - } else fail = true; - if (fail) { - LOGGER.error("Query execution cannot be executed."); - return ""; + private static String timescaledbCommand(List dbmsProperties, + DBEndpoints dbEndpoints, Phase query){ + + + + String timescaledbCommand = ""; + + //TSBS Timescale script requires for load --host with multiple params, for query --hosts + if(dbEndpoints.size() > 1){ + LOGGER.warn("Multiple TimescaleDB endpoints are currently not supported, using only the first endpoint!"); + } + String timescaledbEndpoints = dbEndpoints.get(0).getIpAddress() + " "; + + switch (query) { + case LOAD: + timescaledbCommand += "--host " + timescaledbEndpoints; + break; + case QUERY: + timescaledbCommand += "--hosts " + timescaledbEndpoints; + break; + } + + + //port + boolean portCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("port")); + if(portCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("port")).findAny(); + + timescaledbCommand += "--port " + item.get().getValue() + " "; + + }else { + LOGGER.debug("No dedicated port provided, using default port 5432!"); + timescaledbCommand += "--port 5432 "; + } + + //user + boolean userCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("user")); + if(userCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("user")).findAny(); + + timescaledbCommand += "--user " + item.get().getValue() + " "; + + }else { + throw new IllegalArgumentException("No user parameter provided for TimescaleDB connection!"); + } + + //password + boolean passCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("pass")); + if(passCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("pass")).findAny(); + + timescaledbCommand += "--pass " + item.get().getValue() + " "; + }else { - //exeQueries += "-file=" + "\"" + queriesToExecute + "\""; - return exeQueries; + throw new IllegalArgumentException("No pass parameter provided for TimescaleDB connection!"); } + //postgres params + boolean postgresCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("postgres")); + if(postgresCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("postgres")).findAny(); + + timescaledbCommand += "--postgres " + item.get().getValue() + " "; + + }else { + //no SSL connections per default + LOGGER.warn("No postgres parameters provided, falling back to default and disabling sslmode!"); + timescaledbCommand += "--postgres sslmode=disable"; + } + + //TODO add all additional parameters supported by: + // https://github.com/timescale/tsbs/blob/master/cmd/tsbs_load_timescaledb/main.go + // https://github.com/timescale/tsbs/blob/master/cmd/tsbs_run_queries_timescaledb/main.go + + + + return timescaledbCommand; + + + } + + private static String cassandraCommand(List dbmsProperties, + DBEndpoints dbEndpoints, Phase query) { + + String cassandraCommand = ""; + + + + //TSBS Cassandra script requires for load --hosts with multiple params, for query --host and aggregation plan is mandatory + switch (query) { + case LOAD: + StringJoiner cassandraHosts = new StringJoiner(","); + + for (DBEndpoint dbEndpoint: dbEndpoints) { + cassandraHosts.add(dbEndpoint.getIpAddress()+ ":9042"); + } + cassandraCommand += "--hosts " + cassandraHosts + " "; + + //replication-factor + boolean replicationFactorCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("replication-factor")); + if(replicationFactorCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("replication-factor")).findAny(); + + cassandraCommand += "--replication-factor " + item.get().getValue() + " "; + + }else { + //falling back to default replication factor 1 + LOGGER.warn("No replication-factor parameter provided, falling back to default 1!"); + cassandraCommand += "--replication-factor 1 "; + } + + //write-consistency + boolean writeConsistencyFactorCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("consistency")); + if(writeConsistencyFactorCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("consistency")).findAny(); + + cassandraCommand += "--consistency " + item.get().getValue() + " "; + + }else { + //falling back to default replication factor 1 + LOGGER.warn("No consistency parameter provided, falling back to default ONE!"); + cassandraCommand += "--consistency ONE "; + } + break; + case QUERY: + cassandraCommand += "--host " + dbEndpoints.get(0).getIpAddress() + ":9042 "; + + //aggregation plan + boolean aggregationCheck = dbmsProperties.stream().anyMatch(o -> o.getName().equals("aggregation-plan")); + if(aggregationCheck){ + Optional item = dbmsProperties.stream() + .filter(c -> c.getName().equals("aggregation-plan")).findAny(); + + cassandraCommand += "--aggregation-plan " + item.get().getValue() + " "; + + }else { + //falling back to default aggregation-plan: server + LOGGER.warn("No aggregation-plan parameter provided, falling back to default server!"); + cassandraCommand += "--aggregation-plan server "; + } + + break; + } + + + //TODO: put here common parameters for load/query phase + + return cassandraCommand; + } + public static String clearDB(DbmsEnum dbms, String databaseName, DBEndpoints dbEndpoints){ + + String clearCommand = ""; + + if(dbms.equals(DbmsEnum.INFLUX)){ + clearCommand = " curl -X POST http://" + dbEndpoints.get(0).getIpAddress() + ":8086/query?q=drop%20database%20" + databaseName; + return clearCommand; + } + + + return clearCommand; + } } \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/workloadAPI.properties b/src/main/webapp/WEB-INF/workloadAPI.properties index 31125d761bafd348aa5ab8e1b481a940bd6013ca..1cda94025a52170e350ba2bcb8afde9e64914321 100644 --- a/src/main/webapp/WEB-INF/workloadAPI.properties +++ b/src/main/webapp/WEB-INF/workloadAPI.properties @@ -1,3 +1,4 @@ debugFlag=false workloadBinariesFolder=/opt/workloads/ -workloadResultsFolder=/opt/results/ \ No newline at end of file +workloadResultsFolder=/opt/results/ +workloadDataFolder=/opt/workloads/data/ \ No newline at end of file diff --git a/swagger/swagger.yaml b/swagger/swagger.yaml index 7c81a66ac6cc0db41c8d02f4b7ce165dcf9ee8f0..90330396192075fd60e9a0a574dc4b0e36cbebcb 100644 --- a/swagger/swagger.yaml +++ b/swagger/swagger.yaml @@ -74,7 +74,7 @@ paths: description: Unexpected error schema: $ref: '#/definitions/Error' - /workload/tsbs/load: + /workload/tsbs: post: summary: generates the data, queries, loads and executes the TSBS workload against a supported DBMS description: | @@ -92,7 +92,7 @@ paths: description: the TSBS workload configuration required: true schema: - $ref: '#/definitions/TSBSLoadWorkload' + $ref: '#/definitions/TSBSWorkload' responses: '200': description: returns the state of the started workloadProcess @@ -149,6 +149,8 @@ paths: type: string enum: - YCSB + - TPCC + - TSBS required: true responses: '200': @@ -514,26 +516,35 @@ definitions: #################### Timescale TSBS workload ########################## - TSBSLoadWorkload: + TSBSWorkload: type: object properties: dbEndpoints: $ref: '#/definitions/DBEndpoints' - tsbsDataConfig: - $ref: '#/definitions/TSBSDataConfig' - tsbsLoadConfig: - $ref: '#/definitions/TSBSLoadConfig' - tsbsQueryConfig: - $ref: '#/definitions/TSBSQueryConfig' + dbms: + type: string + enum: + - INFLUX + - TIMESCALEDB + - MONGODB + - CASSANDRA + description: 'specifies the data format for the selected DBMS' + tsbsDataGeneration: + $ref: '#/definitions/TSBSDataGeneration' + tsbsLoadExecution: + $ref: '#/definitions/TSBSLoadExecution' + tsbsQueryGeneration: + $ref: '#/definitions/TSBSQueryGeneration' tsbsQueryExecution: $ref: '#/definitions/TSBSQueryExecution' - TSBSDataConfig: + TSBSDataGeneration: type: object + description: "parameters for the data generation phase" properties: usecase: type: string - description: 'TODO' + description: 'TSBBS supports currently: devops, iot ' example: 'cpu-only' seed: type: number @@ -552,24 +563,37 @@ definitions: endTime: type: string description: 'ending timestamp for generating the data' - example: '2016-01-04T00:00:00Z' + example: '2016-01-01T01:00:00Z' logInterval: type: string description: 'TODO' example: '10s' - format: + + + TSBSQueryGeneration: + type: object + description: "parameters for the query generation phase" + properties: + usecase: type: string - enum: - - influx - - timescaledb - - mongodb - description: 'specifies the data format for the selected DBMS' - example: 'influx' + description: 'Query types to be executed, check TSBS docs for more details' + example: 'cpu-only' + queries: + type: number + format: int32 + description: 'the number of queries to generate' + example: '20' + queryType: + type: string + description: 'specifies one of the supported query type' + example: 'single-groupby-1-1-1' + - TSBSLoadConfig: + + TSBSLoadExecution: type: object properties: - numberOfWorkers: + workers: type: number format: int32 description: 'The number of workers to load the ts data into the DBMS' @@ -579,53 +603,19 @@ definitions: format: int32 description: 'The batch size to use for inserting the data' example: 1000 + dbName: + type: string + description: 'The DB to use for the benchmark, will be created automatically' + example: 'benchmark' + reportingPeriod: + type: string + description: 'metric reporting interval' + example: '10s' dbmsPorperties: type: array items: $ref: '#/definitions/TSDBMSDBMSProperties' - TSBSQueryConfig: - type: object - properties: - usecase: - type: string - description: 'TODO' - example: 'cpu-only' - seed: - type: number - format: int32 - description: 'By supplying the same seed to the generation programs, each database is loaded with identical data and queried using identical queries.' - example: 123 - scale: - type: number - format: int32 - description: 'TODO' - example: 1000 - startTime: - type: string - description: 'starting timestamp for generating the data' - example: '2016-01-01T00:00:00Z' - endTime: - type: string - description: 'ending timestamp for generating the data' - example: '2016-01-04T00:00:00Z' - queries: - type: number - format: int32 - description: 'TODO' - example: '20' - queryType: - type: string - description: 'specifies one of the supported query type' - example: 'single-groupby-1-1-1' - format: - type: string - enum: - - influx - - timescaledb - - mongodb - description: 'specifies the data format for the selected DBMS' - example: 'influx' TSBSQueryExecution: type: object @@ -642,15 +632,16 @@ definitions: + TSDBMSDBMSProperties: type: object properties: name: type: string - example: '-urls' + example: 'consistency' value: type: string - example: 'http://localhost:8086' + example: 'all' #################### API entities ##########################