diff --git a/griffin-metric/src/main/java/org/apache/griffin/metric/dao/MetricDDao.java b/griffin-metric/src/main/java/org/apache/griffin/metric/dao/MetricDDao.java index d4db6c9f9..258dcd32a 100644 --- a/griffin-metric/src/main/java/org/apache/griffin/metric/dao/MetricDDao.java +++ b/griffin-metric/src/main/java/org/apache/griffin/metric/dao/MetricDDao.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.griffin.metric.dao.mapper.MetricDMapper; import org.apache.griffin.metric.entity.MetricD; +import org.apache.griffin.metric.exception.GriffinErr; import org.apache.griffin.metric.exception.GriffinException; import org.springframework.stereotype.Repository; @@ -27,7 +28,7 @@ @Slf4j public class MetricDDao extends BaseDao { - public static final String NOT_BE_NULL = "The metricD argument is illegal.\n" + + public static final String NOT_BE_NULL = "The metricD argument is illegal." + "Either metricD entity or metric name attribute must not be null."; public MetricDDao(MetricDMapper metricDMapper) { @@ -49,7 +50,7 @@ public int addMetricD(MetricD metricD) { private void validateEntity(MetricD metricD) { if (null == metricD || null == metricD.getMetricName()) { log.error(NOT_BE_NULL); - throw new GriffinException(NOT_BE_NULL); + throw new GriffinException(NOT_BE_NULL, GriffinErr.validationError); } } } diff --git a/griffin-metric/src/main/java/org/apache/griffin/metric/entity/BaseEntity.java b/griffin-metric/src/main/java/org/apache/griffin/metric/entity/BaseEntity.java index 67fb658b1..7712e2dae 100644 --- a/griffin-metric/src/main/java/org/apache/griffin/metric/entity/BaseEntity.java +++ b/griffin-metric/src/main/java/org/apache/griffin/metric/entity/BaseEntity.java @@ -20,6 +20,8 @@ Licensed to the Apache Software Foundation (ASF) under one package org.apache.griffin.metric.entity; import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.Date; @@ -28,6 +30,7 @@ Licensed to the Apache Software Foundation (ASF) under one * A base class in metric function in griffin, which contains timestamp properties of entity creation/update. */ @Data +@JsonInclude(JsonInclude.Include.NON_NULL) public abstract class BaseEntity implements java.io.Serializable { private static final long serialVersionUID = 2110740953277261851L; @@ -35,12 +38,14 @@ public abstract class BaseEntity implements java.io.Serializable { /** * creation time */ + @JsonProperty(value = "creation_time") @TableField(value = "ctime") protected Date ctime; /** * update time */ + @JsonProperty(value = "update_time") @TableField(value = "mtime") protected Date mtime; diff --git a/griffin-metric/src/main/java/org/apache/griffin/metric/entity/MetricD.java b/griffin-metric/src/main/java/org/apache/griffin/metric/entity/MetricD.java index 1480d5138..d17facf36 100644 --- a/griffin-metric/src/main/java/org/apache/griffin/metric/entity/MetricD.java +++ b/griffin-metric/src/main/java/org/apache/griffin/metric/entity/MetricD.java @@ -23,6 +23,7 @@ Licensed to the Apache Software Foundation (ASF) under one import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -37,6 +38,7 @@ Licensed to the Apache Software Foundation (ASF) under one @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) @TableName("t_metric_d") public class MetricD extends BaseEntity { diff --git a/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinErr.java b/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinErr.java new file mode 100644 index 000000000..8b0f6bc59 --- /dev/null +++ b/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinErr.java @@ -0,0 +1,33 @@ +package org.apache.griffin.metric.exception; + +import lombok.Getter; + +public enum GriffinErr { + commonError(101, "Hit an error without details."), + validationError(102, "Data validation fails due to [%s]"), + // db operation errors + dbInsertionError(301, "Fail to insert a record."), + dbUpdateError(302, "Fail to update a record."), + dbDeletionError(303, "Fail to delete a record."), + ; + + @Getter + private int code; + + @Getter + private String message; + + GriffinErr(int code, String message) { + this.code = code; + this.message = message; + } + + public GriffinErrorEntity buildErrorEntity() { + return new GriffinErrorEntity(this); + } + + public GriffinErrorEntity buildErrorEntity(String message) { + return new GriffinErrorEntity(this, message); + } + +} diff --git a/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinErrorEntity.java b/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinErrorEntity.java new file mode 100644 index 000000000..ad084e7eb --- /dev/null +++ b/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinErrorEntity.java @@ -0,0 +1,22 @@ +package org.apache.griffin.metric.exception; + +import lombok.Data; +import org.apache.griffin.metric.entity.BaseEntity; + +@Data +public class GriffinErrorEntity extends BaseEntity { + + private Integer code; + + private String message; + + public GriffinErrorEntity(GriffinErr err) { + this.code = err.getCode(); + this.message = err.getMessage(); + } + + public GriffinErrorEntity(GriffinErr err, String details) { + this.code = err.getCode(); + this.message = String.format(err.getMessage(), details); + } +} diff --git a/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinException.java b/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinException.java index 000491235..1712ddb02 100644 --- a/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinException.java +++ b/griffin-metric/src/main/java/org/apache/griffin/metric/exception/GriffinException.java @@ -1,15 +1,28 @@ package org.apache.griffin.metric.exception; +import lombok.Getter; + public class GriffinException extends RuntimeException { + @Getter + private final GriffinErr error; + public GriffinException(String message) { super(message); + this.error = GriffinErr.commonError; } public GriffinException(Throwable cause) { super(cause); + this.error = GriffinErr.commonError; } public GriffinException(String message, Throwable cause) { super(message, cause); + this.error = GriffinErr.commonError; + } + + public GriffinException(String message, GriffinErr error) { + super(message); + this.error = error; } } diff --git a/griffin-metric/src/main/java/org/apache/griffin/metric/service/MetricDService.java b/griffin-metric/src/main/java/org/apache/griffin/metric/service/MetricDService.java index f1e45a2a2..cd87be98f 100644 --- a/griffin-metric/src/main/java/org/apache/griffin/metric/service/MetricDService.java +++ b/griffin-metric/src/main/java/org/apache/griffin/metric/service/MetricDService.java @@ -2,9 +2,13 @@ import lombok.extern.slf4j.Slf4j; import org.apache.griffin.metric.dao.MetricDDao; +import org.apache.griffin.metric.entity.BaseEntity; import org.apache.griffin.metric.entity.MetricD; +import org.apache.griffin.metric.exception.GriffinErr; +import org.apache.griffin.metric.exception.GriffinException; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.lang.NonNull; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -33,6 +37,7 @@ public String ping(){ } @GetMapping(value = "/allMetricD", produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseStatus(HttpStatus.OK) public List allMetricDs(){ return metricDDao.queryAll(); } @@ -40,20 +45,34 @@ public List allMetricDs(){ @PutMapping(value = "/metricD", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) - public MetricD createMetricD(@RequestBody MetricD metricD){ - int id = metricDDao.addMetricD(metricD); - return metricD; + public ResponseEntity createMetricD(@RequestBody MetricD metricD) { + try { + int id = metricDDao.addMetricD(metricD); + if (id != 1) { + return new ResponseEntity<>(GriffinErr.dbInsertionError.buildErrorEntity(), + HttpStatus.INTERNAL_SERVER_ERROR); + } + return new ResponseEntity<>(metricD, HttpStatus.CREATED); + } catch (GriffinException e) { + return new ResponseEntity<>(e.getError().buildErrorEntity(e.getMessage()), + HttpStatus.INTERNAL_SERVER_ERROR); + } } @PostMapping(value = "/metricD", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public MetricD updateMetricD(MetricD metricD){ + public ResponseEntity updateMetricD(MetricD metricD){ boolean ret = metricDDao.updateById(metricD); - return ret ? metricD : null; + return ret ? new ResponseEntity<>(metricD, HttpStatus.OK) : new ResponseEntity<>( + GriffinErr.dbUpdateError.buildErrorEntity(), + HttpStatus.INTERNAL_SERVER_ERROR); } @DeleteMapping(value = "/metricD/{id}") - public boolean deleteMetricD(@PathVariable @NonNull String id){ - return metricDDao.deleteById(id); + public ResponseEntity deleteMetricD(@PathVariable @NonNull String id){ + boolean ret = metricDDao.deleteById(id); + return ret ? new ResponseEntity<>(HttpStatus.OK) : new ResponseEntity<>( + GriffinErr.dbDeletionError.buildErrorEntity(), + HttpStatus.INTERNAL_SERVER_ERROR); } }