From 244519abbf79826539aea3387864189612b07cbc Mon Sep 17 00:00:00 2001 From: Daniel Seybold Date: Thu, 7 May 2020 09:50:06 +0200 Subject: [PATCH] finished first version of tsbs integration --- .../evaluator/model/TSBSDataGeneration.java | 212 +++++++++++++++ .../evaluator/model/TSBSLoadExecution.java | 196 ++++++++++++++ .../evaluator/model/TSBSQueryGeneration.java | 140 ++++++++++ .../dbms/evaluator/model/TSBSWorkload.java | 251 ++++++++++++++++++ .../api/impl/WorkloadApiServiceImpl.java | 15 +- .../omi/workload/tsbs/TSBSCommandBuilder.java | 17 +- 6 files changed, 815 insertions(+), 16 deletions(-) create mode 100644 src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataGeneration.java create mode 100644 src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadExecution.java create mode 100644 src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryGeneration.java create mode 100644 src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSWorkload.java diff --git a/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataGeneration.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataGeneration.java new file mode 100644 index 0000000..d6e819a --- /dev/null +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSDataGeneration.java @@ -0,0 +1,212 @@ +/* + * 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 data generation phase + */ +@ApiModel(description = "parameters for the data generation phase") +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-06T14:02:53.472+02:00") +public class TSBSDataGeneration { + @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; + + public TSBSDataGeneration usecase(String usecase) { + this.usecase = usecase; + return this; + } + + /** + * TSBBS supports currently: devops, iot + * @return usecase + **/ + @JsonProperty("usecase") + @ApiModelProperty(example = "cpu-only", value = "TSBBS supports currently: devops, iot ") + public String getUsecase() { + return usecase; + } + + public void setUsecase(String usecase) { + this.usecase = usecase; + } + + public TSBSDataGeneration 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 TSBSDataGeneration 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 TSBSDataGeneration 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 TSBSDataGeneration 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 TSBSDataGeneration 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; + } + + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + 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); + } + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TSBSDataGeneration {\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("}"); + 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/TSBSLoadExecution.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadExecution.java new file mode 100644 index 0000000..8eb648b --- /dev/null +++ b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSLoadExecution.java @@ -0,0 +1,196 @@ +/* + * 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.*; + +/** + * TSBSLoadExecution + */ +@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2020-05-06T14:02:53.472+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 TSBSLoadExecution workers(BigDecimal workers) { + this.workers = workers; + return this; + } + + /** + * The number of workers to load the ts data into the DBMS + * @return workers + **/ + @JsonProperty("workers") + @ApiModelProperty(example = "2.0", value = "The number of workers to load the ts data into the DBMS") + public BigDecimal getWorkers() { + return workers; + } + + public void setWorkers(BigDecimal workers) { + this.workers = workers; + } + + public TSBSLoadExecution 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 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 TSBSLoadExecution 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; + } + 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(workers, batchSize, dbName, reportingPeriod, dbmsPorperties); + } + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TSBSLoadExecution {\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(); + } + + /** + * 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/TSBSQueryGeneration.java b/src/gen/java/de/uulm/omi/cloudiator/dbms/evaluator/model/TSBSQueryGeneration.java new file mode 100644 index 0000000..1464d60 --- /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-06T14:02:53.472+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 0000000..5b57014 --- /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-06T14:02:53.472+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(example = "influx", 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/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 6ec429f..d905883 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 @@ -229,7 +229,7 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { //Phase 1: generate data LOGGER.debug("Satarting phase 1: data generations"); String generateDataCommand= ""; - generateDataCommand = TSBSCommandBuilder.generateDataCommand(workload.getDbms(),workload.getTsbsDataGeneration()); + generateDataCommand = TSBSCommandBuilder.generateDataCommand( TSBS_BINARY, workload.getDbms(), workload.getTsbsDataGeneration()); generateDataCommand += TSBS_DATA_FOLDER + workload.getDbms().toString() + "-data.gz"; LOGGER.debug("Generate data command: " + generateDataCommand); @@ -255,7 +255,7 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { //Phase 2: query generation String generateQueriesCommand = ""; - generateQueriesCommand = TSBSCommandBuilder.generateQueriesCommand(workload.getDbms(), workload.getTsbsDataGeneration(), workload.getTsbsQueryGeneration()); + generateQueriesCommand = TSBSCommandBuilder.generateQueriesCommand(TSBS_BINARY, workload.getDbms(), workload.getTsbsDataGeneration(), workload.getTsbsQueryGeneration()); generateQueriesCommand += TSBS_DATA_FOLDER + workload.getDbms().toString() + "-queries.gz" ; LOGGER.debug(generateQueriesCommand); @@ -280,8 +280,8 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { //Phase 3: executing insert/load phase String loadCommand = ""; - loadCommand = TSBSCommandBuilder.generateLoadCommand(workload.getDbms(), workload.getTsbsLoadExecution()); - loadCommand += " > " + TSBS_RESULT_FOLDER + taskId.trim() + ".txt"; + loadCommand = TSBSCommandBuilder.generateLoadCommand(TSBS_BINARY, workload.getDbms(), workload.getTsbsLoadExecution()); + loadCommand += " > " + TSBS_RESULT_FOLDER + taskId.trim() + "_load.txt"; LOGGER.debug(loadCommand); @@ -306,13 +306,14 @@ public class WorkloadApiServiceImpl extends WorkloadApiService { //Phase 4: executing query phase //Execute Queries - String executeQueriesCommand = TSBSCommandBuilder.executeQueriesCommand(TSBS_DATA_FOLDER, workload.getDbms(), workload.getTsbsQueryExecution() ); - System.out.println(exeQueries); + String executeQueriesCommand = TSBSCommandBuilder.executeQueriesCommand(TSBS_BINARY, TSBS_DATA_FOLDER, workload.getDbms(), workload.getTsbsQueryExecution() ); + executeQueriesCommand += " > " + TSBS_RESULT_FOLDER + taskId.trim() + ".txt"; + LOGGER.debug(loadCommand); workloadProcess - .startWorkload(TSBS_BINARY, UNIX_SHELL, UNIX_COMMAND_PARAM, exeQueries, taskId, + .startWorkload(TSBS_BINARY, UNIX_SHELL, UNIX_COMMAND_PARAM, executeQueriesCommand, taskId, workloadTimestamp); WorkloadProcessInstance workloadProcessInstance = new WorkloadProcessInstance(); workloadProcessInstance.setTimestamp(BigDecimal.valueOf(workloadProcess.getStartTimestamp())); 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 0658111..9167eb0 100644 --- a/src/main/java/de/uulm/omi/workload/tsbs/TSBSCommandBuilder.java +++ b/src/main/java/de/uulm/omi/workload/tsbs/TSBSCommandBuilder.java @@ -24,11 +24,11 @@ public class TSBSCommandBuilder { private static String DEFAULT_INFLUX_REPLICATION_FACTOR="1"; - public static String generateDataCommand(TSBSWorkload.DbmsEnum dbms, TSBSDataGeneration tsbsDataGeneration) { + public static String generateDataCommand(String binaryPath, TSBSWorkload.DbmsEnum dbms, TSBSDataGeneration tsbsDataGeneration) { checkNotNull(tsbsDataGeneration); - String generateDataCommand = "tsbs_generate_data "; + String generateDataCommand = binaryPath + "tsbs_generate_data "; if (tsbsDataGeneration.getUsecase() != null){ generateDataCommand += "--use-case=\"" + tsbsDataGeneration.getUsecase().toLowerCase()+ "\" "; } @@ -74,14 +74,14 @@ public class TSBSCommandBuilder { } - public static String generateQueriesCommand(TSBSWorkload.DbmsEnum dbms, TSBSDataGeneration tsbsDataGeneration, TSBSQueryGeneration tsbsQueryGeneration) { + public static String generateQueriesCommand(String binaryPath, TSBSWorkload.DbmsEnum dbms, TSBSDataGeneration tsbsDataGeneration, TSBSQueryGeneration tsbsQueryGeneration) { checkNotNull(tsbsDataGeneration); checkNotNull(tsbsQueryGeneration); - String generateQueryCommand = "tsbs_generate_queries "; + String generateQueryCommand = binaryPath + "tsbs_generate_queries "; if (tsbsDataGeneration.getUsecase() != null){ generateQueryCommand += "--use-case=\"" + tsbsDataGeneration.getUsecase().toLowerCase()+ "\" "; @@ -138,14 +138,14 @@ public class TSBSCommandBuilder { - public static String generateLoadCommand(DbmsEnum dbms, TSBSLoadExecution tsbsLoadExecution) { + public static String generateLoadCommand(String binaryPath, DbmsEnum dbms, TSBSLoadExecution tsbsLoadExecution) { checkNotNull(dbms); checkNotNull(tsbsLoadExecution); - String generateLoadCommand = "tsbs_load_" + dbms.toString(); + String generateLoadCommand = binaryPath + "tsbs_load_" + dbms.toString(); //common parameters if (tsbsLoadExecution.getDbName() != null){ @@ -182,10 +182,9 @@ public class TSBSCommandBuilder { - public static String executeQueriesCommand(String queryFolder, DbmsEnum dbms, TSBSQueryExecution tsbsQueryExecution) { + public static String executeQueriesCommand(String binaryPath, String queryFolder, DbmsEnum dbms, TSBSQueryExecution tsbsQueryExecution) { - //TODO: add bin path for dbms-specific script - String queriesCommand = "cat " + queryFolder + dbms.toString() + "-queries.gz " + " | gunzip | "; + String queriesCommand = "cat " + queryFolder + dbms.toString() + "-queries.gz " + " | gunzip | " + binaryPath + "tsbs_run_queries_" + dbms.toString() + " "; //common parameters if (tsbsQueryExecution.getDbName() != null){ -- GitLab