From cc8bdb10541020361f6b023af2a1ed6eb86014c9 Mon Sep 17 00:00:00 2001 From: Daniel Seybold Date: Wed, 6 May 2020 14:04:20 +0200 Subject: [PATCH] implemented tsbs integration for inluxdb, still in progress --- .../dbms/evaluator/model/DBEndpoint.java | 2 +- .../dbms/evaluator/model/DBEndpoints.java | 2 +- .../dbms/evaluator/model/DatabaseConfig.java | 2 +- .../model/DatabaseConfigProperty.java | 2 +- .../dbms/evaluator/model/Error.java | 2 +- .../evaluator/model/MeasurementConfig.java | 2 +- .../dbms/evaluator/model/TPCCWorkload.java | 2 +- .../evaluator/model/TPCCWorkloadConfig.java | 2 +- .../dbms/evaluator/model/TSBSDataConfig.java | 269 ------------ .../dbms/evaluator/model/TSBSLoadConfig.java | 148 ------- .../evaluator/model/TSBSLoadWorkload.java | 191 --------- .../dbms/evaluator/model/TSBSQueryConfig.java | 293 ------------- .../evaluator/model/TSBSQueryExecution.java | 78 +++- .../evaluator/model/TSDBMSDBMSProperties.java | 2 +- .../dbms/evaluator/model/WorkloadConfig.java | 2 +- .../model/WorkloadProcessInstance.java | 2 +- .../model/WorkloadProcessSubmissionError.java | 2 +- .../dbms/evaluator/model/YCSBWorkload.java | 2 +- .../omi/dbms/workload/api/ApiException.java | 2 +- .../dbms/workload/api/ApiOriginFilter.java | 2 +- .../dbms/workload/api/ApiResponseMessage.java | 2 +- .../dbms/workload/api/NotFoundException.java | 2 +- .../omi/dbms/workload/api/StringUtil.java | 2 +- .../omi/dbms/workload/api/WorkloadApi.java | 12 +- .../dbms/workload/api/WorkloadApiService.java | 6 +- .../factories/WorkloadApiServiceFactory.java | 2 +- .../api/impl/WorkloadApiServiceImpl.java | 75 ++-- .../omi/workload/tsbs/TSBSCommandBuilder.java | 405 +++++++++++------- swagger/swagger.yaml | 129 +++--- 29 files changed, 466 insertions(+), 1178 deletions(-) delete mode 100644 src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataConfig.java delete mode 100644 src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadConfig.java delete mode 100644 src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadWorkload.java delete mode 100644 src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryConfig.java 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 19acf60..f0584bd 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-06T14:02:53.472+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 711a100..90f2ccc 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-06T14:02:53.472+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 a471ce4..c43a7af 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-06T14:02:53.472+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 635a766..4e8d922 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-06T14:02:53.472+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 7110fb3..87b8462 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-06T14:02:53.472+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 25d169d..9338781 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-06T14:02:53.472+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 5102255..bf05711 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-06T14:02:53.472+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 24a58fd..3f44872 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-06T14:02:53.472+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/TSBSDataConfig.java deleted file mode 100644 index 05095ad..0000000 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataConfig.java +++ /dev/null @@ -1,269 +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.*; - -/** - * TSBSDataConfig - */ -@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2019-11-25T12:06:59.598+01:00") -public class TSBSDataConfig { - @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("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) { - 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 TSBSDataConfig 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 TSBSDataConfig 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 TSBSDataConfig 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 TSBSDataConfig 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 TSBSDataConfig logInterval(String logInterval) { - this.logInterval = logInterval; - return this; - } - - /** - * TODO - * @return logInterval - **/ - @JsonProperty("logInterval") - @ApiModelProperty(example = "10s", value = "TODO") - public String getLogInterval() { - return logInterval; - } - - public void setLogInterval(String logInterval) { - 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) { - if (this == o) { - return true; - } - 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); - } - - @Override - public int hashCode() { - return Objects.hash(usecase, seed, scale, startTime, endTime, logInterval, format); - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class TSBSDataConfig {\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(" logInterval: ").append(toIndentedString(logInterval)).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/TSBSLoadConfig.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadConfig.java deleted file mode 100644 index 2750c4a..0000000 --- a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadConfig.java +++ /dev/null @@ -1,148 +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.TSDBMSDBMSProperties; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import java.math.BigDecimal; -import javax.validation.constraints.*; - -/** - * TSBSLoadConfig - */ -@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; - - @JsonProperty("batchSize") - private BigDecimal batchSize = null; - - @JsonProperty("dbmsPorperties") - private java.util.List dbmsPorperties = null; - - public TSBSLoadConfig numberOfWorkers(BigDecimal numberOfWorkers) { - this.numberOfWorkers = numberOfWorkers; - return this; - } - - /** - * The number of workers to load the ts data into the DBMS - * @return numberOfWorkers - **/ - @JsonProperty("numberOfWorkers") - @ApiModelProperty(example = "2.0", value = "The number of workers to load the ts data into the DBMS") - public BigDecimal getNumberOfWorkers() { - return numberOfWorkers; - } - - public void setNumberOfWorkers(BigDecimal numberOfWorkers) { - this.numberOfWorkers = numberOfWorkers; - } - - public TSBSLoadConfig batchSize(BigDecimal batchSize) { - this.batchSize = batchSize; - return this; - } - - /** - * The batch size to use for inserting the data - * @return batchSize - **/ - @JsonProperty("batchSize") - @ApiModelProperty(example = "1000.0", value = "The batch size to use for inserting the data") - public BigDecimal getBatchSize() { - return batchSize; - } - - public void setBatchSize(BigDecimal batchSize) { - this.batchSize = batchSize; - } - - public TSBSLoadConfig dbmsPorperties(java.util.List dbmsPorperties) { - this.dbmsPorperties = dbmsPorperties; - return this; - } - - public TSBSLoadConfig addDbmsPorpertiesItem(TSDBMSDBMSProperties dbmsPorpertiesItem) { - if (this.dbmsPorperties == null) { - this.dbmsPorperties = new java.util.ArrayList<>(); - } - this.dbmsPorperties.add(dbmsPorpertiesItem); - return this; - } - - /** - * Get dbmsPorperties - * @return dbmsPorperties - **/ - @JsonProperty("dbmsPorperties") - @ApiModelProperty(value = "") - public java.util.List getDbmsPorperties() { - return dbmsPorperties; - } - - public void setDbmsPorperties(java.util.List dbmsPorperties) { - this.dbmsPorperties = dbmsPorperties; - } - - - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; - } - 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); - } - - @Override - public int hashCode() { - return Objects.hash(numberOfWorkers, batchSize, dbmsPorperties); - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class TSBSLoadConfig {\n"); - - sb.append(" numberOfWorkers: ").append(toIndentedString(numberOfWorkers)).append("\n"); - sb.append(" batchSize: ").append(toIndentedString(batchSize)).append("\n"); - sb.append(" dbmsPorperties: ").append(toIndentedString(dbmsPorperties)).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/TSBSLoadWorkload.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadWorkload.java deleted file mode 100644 index 20cf5ca..0000000 --- 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 e71dd1b..0000000 --- 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 f58fb8f..50d2b6c 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,11 +25,20 @@ 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-06T14:02:53.472+02:00") public class TSBSQueryExecution { @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; @@ -43,7 +52,7 @@ public class TSBSQueryExecution { * @return workers **/ @JsonProperty("workers") - @ApiModelProperty(example = "4.0", value = "number of worker to execute the workload") + @ApiModelProperty(example = "4,", value = "number of worker to execute the workload") public BigDecimal getWorkers() { return workers; } @@ -52,6 +61,63 @@ public class TSBSQueryExecution { this.workers = workers; } + public TSBSQueryExecution batchSize(BigDecimal batchSize) { + this.batchSize = batchSize; + return this; + } + + /** + * The batch size to use for inserting the data + * @return batchSize + **/ + @JsonProperty("batchSize") + @ApiModelProperty(example = "1000.0", value = "The batch size to use for inserting the data") + public BigDecimal getBatchSize() { + return batchSize; + } + + public void setBatchSize(BigDecimal batchSize) { + this.batchSize = batchSize; + } + + public TSBSQueryExecution 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 TSBSQueryExecution 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 TSBSQueryExecution dbmsPorperties(java.util.List dbmsPorperties) { this.dbmsPorperties = dbmsPorperties; return this; @@ -90,12 +156,15 @@ public class TSBSQueryExecution { } TSBSQueryExecution tsBSQueryExecution = (TSBSQueryExecution) o; return Objects.equals(this.workers, tsBSQueryExecution.workers) && + Objects.equals(this.batchSize, tsBSQueryExecution.batchSize) && + Objects.equals(this.dbName, tsBSQueryExecution.dbName) && + Objects.equals(this.reportingPeriod, tsBSQueryExecution.reportingPeriod) && Objects.equals(this.dbmsPorperties, tsBSQueryExecution.dbmsPorperties); } @Override public int hashCode() { - return Objects.hash(workers, dbmsPorperties); + return Objects.hash(workers, batchSize, dbName, reportingPeriod, dbmsPorperties); } @@ -105,6 +174,9 @@ public class TSBSQueryExecution { sb.append("class TSBSQueryExecution {\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/TSDBMSDBMSProperties.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSDBMSDBMSProperties.java index 1f63778..4e47cb2 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-06T14:02:53.472+02:00") public class TSDBMSDBMSProperties { @JsonProperty("name") private String name = null; 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 bed1b12..d02235e 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-06T14:02:53.472+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 be134f3..e15a35d 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-06T14:02:53.472+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 37edaf5..2af7537 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-06T14:02:53.472+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 8fd5f66..98d3825 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-06T14:02:53.472+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 a6e187f..6485f9c 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-06T14:02:53.472+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 7c1e4fa..84ddf84 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-06T14:02:53.472+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 8cdd998..811b8ca 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-06T14:02:53.472+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 88f92e7..6444d61 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-06T14:02:53.472+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 4a38c76..52f4842 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-06T14:02:53.472+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 eda5e34..fd22bf8 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-06T14:02:53.472+02:00") public class WorkloadApi { private final WorkloadApiService delegate; @@ -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 8dda421..18a95c4 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-06T14:02:53.472+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 8ef9d29..9d2f62f 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-06T14:02:53.472+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 86740d5..6ec429f 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 @@ -45,6 +45,7 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { //TSBS constants + private final String TSBS_DATA_FOLDER = "/tmp/"; // TODO CHANGE private final String TSBS_RESULT_FOLDER = "/tmp/"; // TODO CHANGE private static final String TSBS_BINARY = "/opt/workloads/tsbs/bin/"; private static final String TSBS_SCRIPTS = "/opt/workloads/tsbs/src/github.com/timescale/tsbs/scripts/"; @@ -206,11 +207,13 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { } @Override - public Response workloadTsbsLoadPost(String taskId, TSBSLoadWorkload workload, + public Response workloadTsbsPost(String taskId, TSBSWorkload workload, SecurityContext securityContext) throws NotFoundException { + //TODO: check path to bin or script folders, do we need to set explicitly the go path ? - //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(); @@ -223,16 +226,13 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { Properties properties = WorkloadApiProperties.getInstance().getProperties(); Long workloadTimestamp = System.currentTimeMillis(); - //Generate Data + //Phase 1: generate data + LOGGER.debug("Satarting phase 1: data generations"); String generateDataCommand= ""; - generateDataCommand = TSBSCommandBuilder.generateDataCommand(workload.getTsbsDataConfig()); - String resultFileName = - //properties.getProperty(WorkloadApiProperties.WORKLOAD_RESULTS_FOLDER) + - TSBS_RESULT_FOLDER - //+ taskId + "-" - + workload.getTsbsDataConfig().getFormat() + "-data.gz"; + generateDataCommand = TSBSCommandBuilder.generateDataCommand(workload.getDbms(),workload.getTsbsDataGeneration()); + generateDataCommand += TSBS_DATA_FOLDER + workload.getDbms().toString() + "-data.gz"; + LOGGER.debug("Generate data command: " + generateDataCommand); - generateDataCommand += " | gzip > " + resultFileName; ProcessBuilder genDataProcess= new ProcessBuilder(); genDataProcess.command(UNIX_SHELL, UNIX_COMMAND_PARAM, generateDataCommand); Process processData = null; @@ -241,28 +241,25 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { } catch (IOException e) { e.printStackTrace(); } - System.out.println(generateDataCommand); + while (processData.isAlive()) { try { + LOGGER.debug("Data generation in process..."); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } - System.out.println("finished data generation"); - - String fileToLoad = TSBS_RESULT_FOLDER /*+ taskId + "-"*/ + workload.getTsbsDataConfig().getFormat() + "-data.gz"; - String queriesToExecute = TSBS_RESULT_FOLDER /*+ taskId + "-" + workload.getTsbsDataConfig().getFormat() + "-" + */ + workload.getTsbsQueryConfig().getQueryType() + ".gz"; - - //Generate Queries - String generateQueriesCommand = ""; - generateQueriesCommand = TSBSCommandBuilder.generateQueries(workload.getTsbsQueryConfig()); - String resultQueriesName = - TSBS_RESULT_FOLDER - //+ taskId + "-" - + workload.getTsbsQueryConfig().getQueryType() + ".gz"; - generateQueriesCommand += "| gzip > " + resultQueriesName; - System.out.println(generateQueriesCommand); + LOGGER.debug("Phase 1; data generation finished!"); + + //Phase 2: query generation + + String generateQueriesCommand = ""; + generateQueriesCommand = TSBSCommandBuilder.generateQueriesCommand(workload.getDbms(), workload.getTsbsDataGeneration(), workload.getTsbsQueryGeneration()); + generateQueriesCommand += TSBS_DATA_FOLDER + workload.getDbms().toString() + "-queries.gz" ; + LOGGER.debug(generateQueriesCommand); + + ProcessBuilder genQueryProcess = new ProcessBuilder(); genQueryProcess.command(UNIX_SHELL, UNIX_COMMAND_PARAM, generateQueriesCommand); Process processGenQueries = null; @@ -273,19 +270,21 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { } while (processGenQueries.isAlive()) { try { + LOGGER.debug("Query generation in process..."); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } - System.out.println("finished query generation"); + LOGGER.debug("Phase 2: query generation finished!"); - // Benchmarking insert/write performance + //Phase 3: executing insert/load phase String loadCommand = ""; - loadCommand = TSBSCommandBuilder.measurePerformance(workload.getTsbsDataConfig(), workload.getTsbsLoadConfig(), TSBS_RESULT_FOLDER, TSBS_SCRIPTS); - loadCommand += " > " + TSBS_RESULT_FOLDER //+ taskId + "_" - + "load_metrics.csv"; - System.out.println(loadCommand); + loadCommand = TSBSCommandBuilder.generateLoadCommand(workload.getDbms(), workload.getTsbsLoadExecution()); + loadCommand += " > " + TSBS_RESULT_FOLDER + taskId.trim() + ".txt"; + LOGGER.debug(loadCommand); + + ProcessBuilder loadProcess = new ProcessBuilder(); loadProcess.command(UNIX_SHELL, UNIX_COMMAND_PARAM, loadCommand); Process processLoad = null; @@ -296,18 +295,22 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { } while (processLoad.isAlive()) { try { + LOGGER.debug("Load phase in process..."); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } - System.out.println("finished loading"); + LOGGER.debug("Phase 3: load phase finished!"); + - // Execute Queries - String exeQueries = "cat " + queriesToExecute + " | gunzip | "; - exeQueries += TSBSCommandBuilder.executeQueries(workload.getTsbsDataConfig(), workload.getTsbsQueryExecution()/*, queriesToExecute*/); - exeQueries += " > " + TSBS_RESULT_FOLDER + "query_execution.csv"; + //Phase 4: executing query phase + //Execute Queries + String executeQueriesCommand = TSBSCommandBuilder.executeQueriesCommand(TSBS_DATA_FOLDER, workload.getDbms(), workload.getTsbsQueryExecution() ); System.out.println(exeQueries); + + + workloadProcess .startWorkload(TSBS_BINARY, UNIX_SHELL, UNIX_COMMAND_PARAM, exeQueries, 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 1c1e35b..0658111 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,285 @@ 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.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 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(TSBSWorkload.DbmsEnum dbms, TSBSDataGeneration tsbsDataGeneration) { + + checkNotNull(tsbsDataGeneration); String generateDataCommand = "tsbs_generate_data "; - if (dataConfig.getUsecase() != null){ - generateDataCommand += "-use-case=\"" + dataConfig.getUsecase().toLowerCase()+ "\" "; - } - else fail=true; - if (dataConfig.getSeed() != null) { - generateDataCommand += "-seed=" + dataConfig.getSeed().toString().toLowerCase() + " "; - } - else fail=true; - if (dataConfig.getScale() != null) { - generateDataCommand += "-scale=" + dataConfig.getScale().toString().toLowerCase() + " "; - } - else fail=true; - if (dataConfig.getStartTime() != null) { - generateDataCommand += "-timestamp-start=\"" + dataConfig.getStartTime() + "\" "; - } - else fail=true; - if (dataConfig.getEndTime() != null) { - generateDataCommand += "-timestamp-end=\"" + dataConfig.getEndTime() + "\" "; - } - else fail=true; - if (dataConfig.getLogInterval() != null) { - generateDataCommand += "-log-interval=\"" + dataConfig.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 return generateDataCommand; + if (tsbsDataGeneration.getUsecase() != null){ + generateDataCommand += "--use-case=\"" + tsbsDataGeneration.getUsecase().toLowerCase()+ "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --use-case parameter!"); + + if (tsbsDataGeneration.getSeed() != null) { + generateDataCommand += "--seed=" + tsbsDataGeneration.getSeed().toString().toLowerCase() + " "; + } + else throw new IllegalArgumentException("Missing or incorrect --seed parameter!"); + + + if (tsbsDataGeneration.getScale() != null) { + generateDataCommand += "--scale=" + tsbsDataGeneration.getScale().toString().toLowerCase() + " "; + } + else throw new IllegalArgumentException("Missing or incorrect --scale parameter!"); + + if (tsbsDataGeneration.getStartTime() != null) { + generateDataCommand += "--timestamp-start=\"" + tsbsDataGeneration.getStartTime() + "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --timestamp-start parameter!"); + + + if (tsbsDataGeneration.getEndTime() != null) { + generateDataCommand += "--timestamp-end=\"" + tsbsDataGeneration.getEndTime() + "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --timestamp-end parameter!"); + + + if (tsbsDataGeneration.getLogInterval() != null) { + generateDataCommand += "--log-interval=\"" + tsbsDataGeneration.getLogInterval() + "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --log-interval parameter!"); + + + if (dbms.toString() != null) { + generateDataCommand += "-format=\"" + dbms.toString()+ "\""; + } else throw new IllegalArgumentException("Missing or incorrect --log-interval parameter!"); + + + generateDataCommand += " | gzip > "; + + return generateDataCommand; } - public static String generateQueries(TSBSQueryConfig queryConfig) { - checkNotNull(queryConfig); - boolean fail = false; + public static String generateQueriesCommand(TSBSWorkload.DbmsEnum dbms, TSBSDataGeneration tsbsDataGeneration, TSBSQueryGeneration tsbsQueryGeneration) { + + checkNotNull(tsbsDataGeneration); + checkNotNull(tsbsQueryGeneration); + + + 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; - } - @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; + 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().toString().toLowerCase() + " "; + } + else throw new IllegalArgumentException("Missing or incorrect --seed parameter!"); + + + if (tsbsDataGeneration.getScale() != null) { + generateQueryCommand += "--scale=" + tsbsDataGeneration.getScale().toString().toLowerCase() + " "; + } + 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!"); + + + 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.toString() != null) { + generateQueryCommand += "-format=\"" + dbms.toString() + "\""; + } else throw new IllegalArgumentException("Missing or incorrect --log-interval parameter!"); + + + generateQueryCommand += " | gzip > "; + + return generateQueryCommand; } - 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; + + + public static String generateLoadCommand(DbmsEnum dbms, TSBSLoadExecution tsbsLoadExecution) { + + checkNotNull(dbms); + checkNotNull(tsbsLoadExecution); + + + + String generateLoadCommand = "tsbs_load_" + dbms.toString(); + + //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 + if(dbms.equals(DbmsEnum.INFLUX)){ + generateLoadCommand += influxCommand(tsbsLoadExecution.getDbmsPorperties()); + }else { + throw new IllegalArgumentException("Currently only influx is supported!"); + } + + + return generateLoadCommand; + } - 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 ""; + + + public static String executeQueriesCommand(String queryFolder, DbmsEnum dbms, TSBSQueryExecution tsbsQueryExecution) { + + //TODO: add bin path for dbms-specific script + String queriesCommand = "cat " + queryFolder + dbms.toString() + "-queries.gz " + " | gunzip | "; + + //common parameters + if (tsbsQueryExecution.getDbName() != null){ + queriesCommand += "--db-name=\"" + tsbsQueryExecution.getDbName().toLowerCase()+ "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --db-name parameter!"); + + if (tsbsQueryExecution.getWorkers() != null){ + queriesCommand += "--workers=\"" + tsbsQueryExecution.getWorkers()+ "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --workers parameter!"); + + if (tsbsQueryExecution.getReportingPeriod() != null){ + queriesCommand += "--reporting-period=\"" + tsbsQueryExecution.getReportingPeriod()+ "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --reporting-period parameter!"); + + if (tsbsQueryExecution.getBatchSize() != null){ + queriesCommand += "--batch-size=\"" + tsbsQueryExecution.getBatchSize()+ "\" "; + } + else throw new IllegalArgumentException("Missing or incorrect --batch-size parameter!"); + + //DBMS specific parameters + if(dbms.equals(DbmsEnum.INFLUX)){ + queriesCommand += influxCommand(tsbsQueryExecution.getDbmsPorperties()); }else { - //exeQueries += "-file=" + "\"" + queriesToExecute + "\""; - return exeQueries; + throw new IllegalArgumentException("Currently only influx is supported!"); } + return queriesCommand; + } + + + + private static String influxCommand( + List dbmsPorperties){ + + String influxCommand = " "; + + //urls + boolean urlsCheck = dbmsPorperties.stream().anyMatch(o -> o.getName().equals("urls")); + if(urlsCheck){ + Optional item = dbmsPorperties.stream() + .filter(c -> c.getName().equals("urls")).findAny(); + + influxCommand += "--urls " + item.get().getValue(); + + }else{ + influxCommand += "--urls " + DEFAULT_INFLUX_URLS; + + } + + //backoff + boolean backoffCheck = dbmsPorperties.stream().anyMatch(o -> o.getName().equals("backoff")); + if(backoffCheck){ + Optional item = dbmsPorperties.stream() + .filter(c -> c.getName().equals("backoff")).findAny(); + + influxCommand += "--backoff " + item.get().getValue(); + + }else{ + influxCommand += " --backoff " + DEFAULT_INFLUX_BACKOFF; + + } + + //consistency + boolean consistencyCheck = dbmsPorperties.stream().anyMatch(o -> o.getName().equals("consistency")); + if(consistencyCheck){ + Optional item = dbmsPorperties.stream() + .filter(c -> c.getName().equals("consistency")).findAny(); + + influxCommand += "--consistency " + item.get().getValue(); + + }else{ + influxCommand += " --consistency " + DEFAULT_INFLUX_CONSISTENCY; + + } + + //replication + boolean replicationCheck = dbmsPorperties.stream().anyMatch(o -> o.getName().equals("replication-factor")); + if(replicationCheck){ + Optional item = dbmsPorperties.stream() + .filter(c -> c.getName().equals("replication-factor")).findAny(); + + influxCommand += "--replication-factor " + item.get().getValue(); + + }else{ + influxCommand += " --replication-factor " + DEFAULT_INFLUX_REPLICATION_FACTOR; + + } + + return influxCommand; + + } } \ No newline at end of file diff --git a/swagger/swagger.yaml b/swagger/swagger.yaml index 7c81a66..ca8d8fa 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 @@ -514,26 +514,36 @@ 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' + example: 'influx' + 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 @@ -557,19 +567,32 @@ definitions: 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 +602,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 @@ -634,7 +623,20 @@ definitions: type: number format: int32 description: 'number of worker to execute the workload' - example: 4 + example: 4, + batchSize: + type: number + 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: @@ -642,6 +644,7 @@ definitions: + TSDBMSDBMSProperties: type: object properties: -- GitLab