Skip to content

Commit

Permalink
Merge pull request #141 from stelin/1.x
Browse files Browse the repository at this point in the history
Add alarm
  • Loading branch information
stelin committed Jul 29, 2023
2 parents c345926 + 363c55a commit 5c1aac1
Show file tree
Hide file tree
Showing 120 changed files with 2,549 additions and 169 deletions.
@@ -0,0 +1,55 @@
package io.openjob.common.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
* @author stelin swoft@qq.com
* @since 1.0.6
*/
@Getter
@AllArgsConstructor
public enum FailStatusEnum {

/**
* Job or delay
*/
NONE(0, "None"),

/**
* Job or delay
*/
EXECUTE_FAIL(1, "Execute fail"),

/**
* Job or delay
*/
EXECUTE_TIMEOUT(5, "Execute timeout"),

/**
* Job
*/
EXECUTE_DISCARD(10, "Execute discard"),

/**
* Job
*/
EXECUTE_RETRY_TIMES(15, "Execute retry times"),

/**
* Delay
*/
EXECUTE_IGNORE(20, "Execute ignore"),
;

private final Integer status;
private final String message;

public static Boolean isExecuteFail(Integer status) {
return EXECUTE_FAIL.getStatus().equals(status);
}

public static Boolean isExecuteTimeout(Integer status) {
return EXECUTE_TIMEOUT.getStatus().equals(status);
}
}
Expand Up @@ -67,4 +67,14 @@ public enum InstanceStatusEnum {
public static Boolean isRunning(Integer status) {
return RUNNING.getStatus().equals(status);
}

/**
* Is failed
*
* @param status status
* @return Boolean
*/
public static Boolean isFailed(Integer status) {
return FAIL.getStatus().equals(status);
}
}
@@ -0,0 +1,27 @@
package io.openjob.common.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
* @author stelin swoft@qq.com
* @since 1.0.6
*/
@AllArgsConstructor
@Getter
public enum JobInstanceStopEnum {
NORMAL(1, "Normal stop"),
TIMEOUT(2, "Timeout stop"),
;

private final Integer type;
private final String message;

public static Boolean isNormal(Integer type) {
return NORMAL.getType().equals(type);
}

public static Boolean isTimeout(Integer type) {
return TIMEOUT.getType().equals(type);
}
}
Expand Up @@ -104,6 +104,10 @@ public static TaskStatusEnum parse(Integer status) {
.orElseThrow(() -> new IllegalArgumentException(String.format("TaskStatusEnum parseValue(%s) failed!", status)));
}

public static Boolean isNotFinishStatus(Integer status) {
return NON_FINISH_LIST.contains(status);
}

public static Boolean isRunning(Integer status) {
return RUNNING.getStatus().equals(status);
}
Expand All @@ -112,6 +116,10 @@ public static Boolean isSuccess(Integer status) {
return SUCCESS.getStatus().equals(status);
}

public static Boolean isFailed(Integer status) {
return FAILED.getStatus().equals(status);
}

public static Boolean isDelayComplete(Integer status) {
return DELAY_COMPLETE.contains(status);
}
Expand Down
Expand Up @@ -23,6 +23,7 @@ public class ServerSubmitJobInstanceRequest implements Serializable {
private String executeType;
private Integer failRetryTimes;
private Integer failRetryInterval;
private Integer executeTimeout;
private Integer concurrency;
private String timeExpressionType;
private String timeExpression;
Expand Down
@@ -1,5 +1,6 @@
package io.openjob.common.request;

import io.openjob.common.constant.FailStatusEnum;
import lombok.Data;

import java.io.Serializable;
Expand Down Expand Up @@ -36,6 +37,13 @@ public class WorkerDelayTaskRequest implements Serializable {
*/
private Integer status;

/**
* Fail status
*
* @see FailStatusEnum#getStatus()
*/
private Integer failStatus;

/**
* Task result.
*/
Expand Down
@@ -1,5 +1,6 @@
package io.openjob.common.request;

import io.openjob.common.constant.FailStatusEnum;
import lombok.Data;

import java.io.Serializable;
Expand Down Expand Up @@ -37,6 +38,12 @@ public class WorkerJobInstanceStatusRequest implements Serializable {
*/
private Integer status;

/**
* Fail status
* @see FailStatusEnum#getStatus()
*/
private Integer failStatus;

/**
* Delivery id.
*/
Expand Down
5 changes: 5 additions & 0 deletions openjob-server/openjob-server-admin/pom.xml
Expand Up @@ -25,5 +25,10 @@
<groupId>io.openjob</groupId>
<artifactId>openjob-server-log</artifactId>
</dependency>

<dependency>
<groupId>io.openjob</groupId>
<artifactId>openjob-server-cluster</artifactId>
</dependency>
</dependencies>
</project>
Expand Up @@ -10,6 +10,7 @@
* Application: 300+
* Job: 400+
* Delay: 500+
* Alert: 1000+
*
* @author stelin swoft@qq.com
* @since 1.0.0
Expand Down Expand Up @@ -44,6 +45,9 @@ public enum CodeEnum implements CodeExceptionAssert {
// Delay
DELAY_TOPIC_EXIST(500, "Topic is exist!"),
DELAY_DELETE_INVALID(501, "Delay can not be deleted!"),

// Alert
ALERT_SECRET_EMPTY(1001, "Secret can not be empty!"),
;


Expand Down
Expand Up @@ -31,6 +31,10 @@ public class AddAlertRuleRequest {
@ApiModelProperty(value = "metrics")
private List<AlertRuleMetricsRequest> metrics;

@NotBlank
@ApiModelProperty(value = "locale")
private String locale;

@NotBlank
@ApiModelProperty(value = "Method", required = true)
private String method;
Expand All @@ -39,6 +43,9 @@ public class AddAlertRuleRequest {
@ApiModelProperty(value = "Url", required = true)
private String url;

@ApiModelProperty(value = "Secret")
private String secret;

@NotNull
@ApiModelProperty(value = "Status", required = true)
private Integer status;
Expand Down
Expand Up @@ -76,6 +76,10 @@ public class AddJobRequest {
@ApiModelProperty(value = "Job execute fail retry interval", required = true)
private Integer failRetryInterval;

@NotNull
@ApiModelProperty(value = "Job execute timeout", required = true)
private Integer executeTimeout;

@NotNull
@ApiModelProperty(value = "Job execute concurrency, default(1)", required = true)
private Integer concurrency;
Expand Down
Expand Up @@ -2,6 +2,7 @@

import com.fasterxml.jackson.core.type.TypeReference;
import io.openjob.common.util.JsonUtil;
import io.openjob.server.admin.constant.CodeEnum;
import io.openjob.server.admin.request.alert.AddAlertRuleRequest;
import io.openjob.server.admin.request.alert.DeleteAlertRuleRequest;
import io.openjob.server.admin.request.alert.ListAlertRuleRequest;
Expand All @@ -13,14 +14,18 @@
import io.openjob.server.admin.vo.alert.ListAlertRuleVO;
import io.openjob.server.admin.vo.alert.UpdateAlertRuleStatusVO;
import io.openjob.server.admin.vo.alert.UpdateAlertRuleVO;
import io.openjob.server.cluster.data.RefreshData;
import io.openjob.server.common.dto.PageDTO;
import io.openjob.server.common.util.BeanMapperUtil;
import io.openjob.server.common.util.PageUtil;
import io.openjob.server.common.vo.PageVO;
import io.openjob.server.repository.constant.AlertMethodEnum;
import io.openjob.server.repository.dao.AlertRuleDAO;
import io.openjob.server.repository.entity.AlertRule;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.List;
Expand All @@ -32,43 +37,71 @@
@Service
public class AlertRuleServiceImpl implements AlertRuleService {
private final AlertRuleDAO alertRuleDAO;
private final RefreshData refreshData;

@Autowired
public AlertRuleServiceImpl(AlertRuleDAO alertRuleDAO) {
public AlertRuleServiceImpl(AlertRuleDAO alertRuleDAO, RefreshData refreshData) {
this.alertRuleDAO = alertRuleDAO;
this.refreshData = refreshData;
}

@Override
@Transactional(rollbackFor = Exception.class)
public AddAlertRuleVO add(AddAlertRuleRequest request) {
// Check rule
this.checkRule(request);

AlertRule alertRule = BeanMapperUtil.map(request, AlertRule.class);
alertRule.setNamespaceAppIds(JsonUtil.encode(request.getNamespaceAppIds()));
alertRule.setEvents(JsonUtil.encode(request.getEvents()));
alertRule.setMetrics(JsonUtil.encode(request.getMetrics()));

// Save
this.alertRuleDAO.save(alertRule);

// Refresh cluster version.
this.refreshData.refreshSystemClusterVersion();
return new AddAlertRuleVO();
}

@Override
@Transactional(rollbackFor = Exception.class)
public DeleteAlertRuleVO delete(DeleteAlertRuleRequest request) {
// Delete
this.alertRuleDAO.deleteById(request.getId());

// Refresh cluster version.
this.refreshData.refreshSystemClusterVersion();
return new DeleteAlertRuleVO();
}

@Override
@Transactional(rollbackFor = Exception.class)
public UpdateAlertRuleVO update(UpdateAlertRuleRequest request) {
// Check rule
this.checkRule(request);

AlertRule alertRule = BeanMapperUtil.map(request, AlertRule.class);
alertRule.setNamespaceAppIds(JsonUtil.encode(request.getNamespaceAppIds()));
alertRule.setEvents(JsonUtil.encode(request.getEvents()));
alertRule.setMetrics(JsonUtil.encode(request.getMetrics()));

// Update
this.alertRuleDAO.update(alertRule);

// Refresh cluster version.
this.refreshData.refreshSystemClusterVersion();
return new UpdateAlertRuleVO();
}

@Override
@Transactional(rollbackFor = Exception.class)
public UpdateAlertRuleStatusVO updateStatus(UpdateAlertRuleStatusRequest request) {
// Update status
this.alertRuleDAO.updateStatus(request.getId(), request.getStatus());

// Refresh cluster version.
this.refreshData.refreshSystemClusterVersion();
return new UpdateAlertRuleStatusVO();
}

Expand All @@ -83,24 +116,32 @@ public PageVO<ListAlertRuleVO> list(ListAlertRuleRequest request) {
ListAlertRuleVO listAlertRuleVO = new ListAlertRuleVO();
listAlertRuleVO.setId(r.getId());
listAlertRuleVO.setName(r.getName());
listAlertRuleVO.setLocale(r.getLocale());
listAlertRuleVO.setMethod(r.getMethod());
listAlertRuleVO.setUrl(r.getUrl());
listAlertRuleVO.setSecret(r.getSecret());
listAlertRuleVO.setStatus(r.getStatus());
listAlertRuleVO.setCreateTime(r.getCreateTime());
listAlertRuleVO.setUpdateTime(r.getUpdateTime());

// App ids
listAlertRuleVO.setNamespaceAppIds(JsonUtil.decode(r.getNamespaceAppIds(), new TypeReference<List<Integer>>() {
}));
listAlertRuleVO.setNamespaceAppIds(r.getNamespaceAppIdsByJson());

// Events
listAlertRuleVO.setEvents(JsonUtil.decode(r.getEvents(), new TypeReference<List<String>>() {
}));
listAlertRuleVO.setEvents(r.getEventsByJson());

// Metrics
listAlertRuleVO.setMetrics(JsonUtil.decode(r.getMetrics(), new TypeReference<List<ListAlertRuleVO.AlertRuleMetricsVO>>() {
}));
return listAlertRuleVO;
});
}

private void checkRule(AddAlertRuleRequest request) {
if (AlertMethodEnum.isWecom(request.getMethod())) {
return;
}

CodeEnum.ALERT_SECRET_EMPTY.assertIsTrue(StringUtils.isNotBlank(request.getSecret()));
}
}

0 comments on commit 5c1aac1

Please sign in to comment.