Search in sources :

Example 16 with FlowRuleEntity

use of com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity in project Sentinel by alibaba.

the class FlowControllerV1 method apiAddFlowRule.

@PostMapping("/rule")
@AuthAction(PrivilegeType.WRITE_RULE)
public Result<FlowRuleEntity> apiAddFlowRule(@RequestBody FlowRuleEntity entity) {
    Result<FlowRuleEntity> checkResult = checkEntityInternal(entity);
    if (checkResult != null) {
        return checkResult;
    }
    entity.setId(null);
    Date date = new Date();
    entity.setGmtCreate(date);
    entity.setGmtModified(date);
    entity.setLimitApp(entity.getLimitApp().trim());
    entity.setResource(entity.getResource().trim());
    try {
        entity = repository.save(entity);
        publishRules(entity.getApp(), entity.getIp(), entity.getPort()).get(5000, TimeUnit.MILLISECONDS);
        return Result.ofSuccess(entity);
    } catch (Throwable t) {
        Throwable e = t instanceof ExecutionException ? t.getCause() : t;
        logger.error("Failed to add new flow rule, app={}, ip={}", entity.getApp(), entity.getIp(), e);
        return Result.ofFail(-1, e.getMessage());
    }
}
Also used : FlowRuleEntity(com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity) ExecutionException(java.util.concurrent.ExecutionException) Date(java.util.Date) PostMapping(org.springframework.web.bind.annotation.PostMapping) AuthAction(com.alibaba.csp.sentinel.dashboard.auth.AuthAction)

Example 17 with FlowRuleEntity

use of com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity in project Sentinel by alibaba.

the class FlowControllerV1 method apiUpdateFlowRule.

@PutMapping("/save.json")
@AuthAction(PrivilegeType.WRITE_RULE)
public Result<FlowRuleEntity> apiUpdateFlowRule(Long id, String app, String limitApp, String resource, Integer grade, Double count, Integer strategy, String refResource, Integer controlBehavior, Integer warmUpPeriodSec, Integer maxQueueingTimeMs) {
    if (id == null) {
        return Result.ofFail(-1, "id can't be null");
    }
    FlowRuleEntity entity = repository.findById(id);
    if (entity == null) {
        return Result.ofFail(-1, "id " + id + " dose not exist");
    }
    if (StringUtil.isNotBlank(app)) {
        entity.setApp(app.trim());
    }
    if (StringUtil.isNotBlank(limitApp)) {
        entity.setLimitApp(limitApp.trim());
    }
    if (StringUtil.isNotBlank(resource)) {
        entity.setResource(resource.trim());
    }
    if (grade != null) {
        if (grade != 0 && grade != 1) {
            return Result.ofFail(-1, "grade must be 0 or 1, but " + grade + " got");
        }
        entity.setGrade(grade);
    }
    if (count != null) {
        entity.setCount(count);
    }
    if (strategy != null) {
        if (strategy != 0 && strategy != 1 && strategy != 2) {
            return Result.ofFail(-1, "strategy must be in [0, 1, 2], but " + strategy + " got");
        }
        entity.setStrategy(strategy);
        if (strategy != 0) {
            if (StringUtil.isBlank(refResource)) {
                return Result.ofFail(-1, "refResource can't be null or empty when strategy!=0");
            }
            entity.setRefResource(refResource.trim());
        }
    }
    if (controlBehavior != null) {
        if (controlBehavior != 0 && controlBehavior != 1 && controlBehavior != 2) {
            return Result.ofFail(-1, "controlBehavior must be in [0, 1, 2], but " + controlBehavior + " got");
        }
        if (controlBehavior == 1 && warmUpPeriodSec == null) {
            return Result.ofFail(-1, "warmUpPeriodSec can't be null when controlBehavior==1");
        }
        if (controlBehavior == 2 && maxQueueingTimeMs == null) {
            return Result.ofFail(-1, "maxQueueingTimeMs can't be null when controlBehavior==2");
        }
        entity.setControlBehavior(controlBehavior);
        if (warmUpPeriodSec != null) {
            entity.setWarmUpPeriodSec(warmUpPeriodSec);
        }
        if (maxQueueingTimeMs != null) {
            entity.setMaxQueueingTimeMs(maxQueueingTimeMs);
        }
    }
    Date date = new Date();
    entity.setGmtModified(date);
    try {
        entity = repository.save(entity);
        if (entity == null) {
            return Result.ofFail(-1, "save entity fail: null");
        }
        publishRules(entity.getApp(), entity.getIp(), entity.getPort()).get(5000, TimeUnit.MILLISECONDS);
        return Result.ofSuccess(entity);
    } catch (Throwable t) {
        Throwable e = t instanceof ExecutionException ? t.getCause() : t;
        logger.error("Error when updating flow rules, app={}, ip={}, ruleId={}", entity.getApp(), entity.getIp(), id, e);
        return Result.ofFail(-1, e.getMessage());
    }
}
Also used : FlowRuleEntity(com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity) ExecutionException(java.util.concurrent.ExecutionException) Date(java.util.Date) PutMapping(org.springframework.web.bind.annotation.PutMapping) AuthAction(com.alibaba.csp.sentinel.dashboard.auth.AuthAction)

Example 18 with FlowRuleEntity

use of com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity in project Sentinel by alibaba.

the class FlowControllerV2 method apiUpdateFlowRule.

@PutMapping("/rule/{id}")
@AuthAction(AuthService.PrivilegeType.WRITE_RULE)
public Result<FlowRuleEntity> apiUpdateFlowRule(@PathVariable("id") Long id, @RequestBody FlowRuleEntity entity) {
    if (id == null || id <= 0) {
        return Result.ofFail(-1, "Invalid id");
    }
    FlowRuleEntity oldEntity = repository.findById(id);
    if (oldEntity == null) {
        return Result.ofFail(-1, "id " + id + " does not exist");
    }
    if (entity == null) {
        return Result.ofFail(-1, "invalid body");
    }
    entity.setApp(oldEntity.getApp());
    entity.setIp(oldEntity.getIp());
    entity.setPort(oldEntity.getPort());
    Result<FlowRuleEntity> checkResult = checkEntityInternal(entity);
    if (checkResult != null) {
        return checkResult;
    }
    entity.setId(id);
    Date date = new Date();
    entity.setGmtCreate(oldEntity.getGmtCreate());
    entity.setGmtModified(date);
    try {
        entity = repository.save(entity);
        if (entity == null) {
            return Result.ofFail(-1, "save entity fail");
        }
        publishRules(oldEntity.getApp());
    } catch (Throwable throwable) {
        logger.error("Failed to update flow rule", throwable);
        return Result.ofThrowable(-1, throwable);
    }
    return Result.ofSuccess(entity);
}
Also used : FlowRuleEntity(com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity) Date(java.util.Date) PutMapping(org.springframework.web.bind.annotation.PutMapping) AuthAction(com.alibaba.csp.sentinel.dashboard.auth.AuthAction)

Example 19 with FlowRuleEntity

use of com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity in project pig by pig-mesh.

the class FlowControllerV1 method apiAddFlowRule.

@PostMapping("/rule")
@AuthAction(PrivilegeType.WRITE_RULE)
public Result<FlowRuleEntity> apiAddFlowRule(@RequestBody FlowRuleEntity entity) {
    Result<FlowRuleEntity> checkResult = checkEntityInternal(entity);
    if (checkResult != null) {
        return checkResult;
    }
    entity.setId(null);
    Date date = new Date();
    entity.setGmtCreate(date);
    entity.setGmtModified(date);
    entity.setLimitApp(entity.getLimitApp().trim());
    entity.setResource(entity.getResource().trim());
    try {
        entity = repository.save(entity);
        publishRules(entity.getApp(), entity.getIp(), entity.getPort()).get(5000, TimeUnit.MILLISECONDS);
        return Result.ofSuccess(entity);
    } catch (Throwable t) {
        Throwable e = t instanceof ExecutionException ? t.getCause() : t;
        logger.error("Failed to add new flow rule, app={}, ip={}", entity.getApp(), entity.getIp(), e);
        return Result.ofFail(-1, e.getMessage());
    }
}
Also used : FlowRuleEntity(com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity) ExecutionException(java.util.concurrent.ExecutionException) Date(java.util.Date) PostMapping(org.springframework.web.bind.annotation.PostMapping) AuthAction(com.alibaba.csp.sentinel.dashboard.auth.AuthAction)

Example 20 with FlowRuleEntity

use of com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity in project pig by pig-mesh.

the class FlowControllerV2 method apiAddFlowRule.

@PostMapping("/rule")
@AuthAction(value = PrivilegeType.WRITE_RULE)
public Result<FlowRuleEntity> apiAddFlowRule(@RequestBody FlowRuleEntity entity) {
    Result<FlowRuleEntity> checkResult = checkEntityInternal(entity);
    if (checkResult != null) {
        return checkResult;
    }
    entity.setId(null);
    Date date = new Date();
    entity.setGmtCreate(date);
    entity.setGmtModified(date);
    entity.setLimitApp(entity.getLimitApp().trim());
    entity.setResource(entity.getResource().trim());
    try {
        entity = repository.save(entity);
        publishRules(entity.getApp());
    } catch (Throwable throwable) {
        logger.error("Failed to add flow rule", throwable);
        return Result.ofThrowable(-1, throwable);
    }
    return Result.ofSuccess(entity);
}
Also used : FlowRuleEntity(com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity) Date(java.util.Date) PostMapping(org.springframework.web.bind.annotation.PostMapping) AuthAction(com.alibaba.csp.sentinel.dashboard.auth.AuthAction)

Aggregations

FlowRuleEntity (com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity)33 AuthAction (com.alibaba.csp.sentinel.dashboard.auth.AuthAction)31 Date (java.util.Date)20 ExecutionException (java.util.concurrent.ExecutionException)10 PostMapping (org.springframework.web.bind.annotation.PostMapping)8 PutMapping (org.springframework.web.bind.annotation.PutMapping)8 DeleteMapping (org.springframework.web.bind.annotation.DeleteMapping)4 GetMapping (org.springframework.web.bind.annotation.GetMapping)4 DynamicRuleProvider (com.alibaba.csp.sentinel.dashboard.rule.DynamicRuleProvider)2 Converter (com.alibaba.csp.sentinel.datasource.Converter)2 StringUtil (com.alibaba.csp.sentinel.util.StringUtil)2 ApolloOpenApiClient (com.ctrip.framework.apollo.openapi.client.ApolloOpenApiClient)2 OpenItemDTO (com.ctrip.framework.apollo.openapi.dto.OpenItemDTO)2 OpenNamespaceDTO (com.ctrip.framework.apollo.openapi.dto.OpenNamespaceDTO)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 Autowired (org.springframework.beans.factory.annotation.Autowired)2 Component (org.springframework.stereotype.Component)2