feat: ASW-6 新增 JOB 相关接口
This commit is contained in:
@@ -19,6 +19,22 @@ public enum RCode {
|
||||
USER_NO_LOGIN(100007, "user not login"), // 用户未登录
|
||||
SYS_RECORD_NOT_FOUND(100008, "record not found"),// 未找到记录
|
||||
|
||||
|
||||
// Application
|
||||
APP_ID_CANNOT_EMPTY(201001, "application id cannot be empty"),
|
||||
|
||||
|
||||
// Package
|
||||
PACKAGE_ID_CANNOT_EMPTY(202001, "package id cannot be empty"),
|
||||
|
||||
|
||||
// Runner
|
||||
RUNNER_ID_CANNOT_EMPTY(301001, "runner id cannot be empty"),
|
||||
|
||||
|
||||
// Playbook
|
||||
PLAYBOOK_ID_CANNOT_EMPTY(302001, "playbook id cannot be empty"),
|
||||
|
||||
SUCCESS(200, "success"); // 成功
|
||||
|
||||
private RCode(Integer code, String msg) {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.geedge.asw.module.app.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import net.geedge.asw.module.app.entity.ApplicationEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface ApplicationDao extends BaseMapper<ApplicationEntity>{
|
||||
|
||||
}
|
||||
10
src/main/java/net/geedge/asw/module/app/dao/PackageDao.java
Normal file
10
src/main/java/net/geedge/asw/module/app/dao/PackageDao.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package net.geedge.asw.module.app.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import net.geedge.asw.module.app.entity.PackageEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface PackageDao extends BaseMapper<PackageEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package net.geedge.asw.module.app.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("application")
|
||||
public class ApplicationEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
private String name;
|
||||
private String longName;
|
||||
private String properties;
|
||||
private String description;
|
||||
private String surrogates;
|
||||
|
||||
private Long createTimestamp;
|
||||
private Long updateTimestamp;
|
||||
private String createUserId;
|
||||
private String updateUserId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package net.geedge.asw.module.app.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("package")
|
||||
public class PackageEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
private String logo;
|
||||
private String description;
|
||||
private String platform;
|
||||
private String version;
|
||||
private String identifier;
|
||||
|
||||
private Long createTimestamp;
|
||||
private Long updateTimestamp;
|
||||
private String createUserId;
|
||||
private String updateUserId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.geedge.asw.module.app.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.app.entity.ApplicationEntity;
|
||||
|
||||
public interface IApplicationService extends IService<ApplicationEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.geedge.asw.module.app.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.app.entity.PackageEntity;
|
||||
|
||||
public interface IPackageService extends IService<PackageEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.geedge.asw.module.app.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.module.app.dao.ApplicationDao;
|
||||
import net.geedge.asw.module.app.entity.ApplicationEntity;
|
||||
import net.geedge.asw.module.app.service.IApplicationService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class ApplicationServiceImpl extends ServiceImpl<ApplicationDao, ApplicationEntity> implements IApplicationService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.geedge.asw.module.app.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.module.app.dao.PackageDao;
|
||||
import net.geedge.asw.module.app.entity.PackageEntity;
|
||||
import net.geedge.asw.module.app.service.IPackageService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class PackageServiceImpl extends ServiceImpl<PackageDao, PackageEntity> implements IPackageService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package net.geedge.asw.module.runner.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import net.geedge.asw.common.util.R;
|
||||
import net.geedge.asw.common.util.RCode;
|
||||
import net.geedge.asw.common.util.T;
|
||||
import net.geedge.asw.module.runner.entity.JobEntity;
|
||||
import net.geedge.asw.module.runner.service.IJobService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/job")
|
||||
public class JobController {
|
||||
|
||||
@Autowired
|
||||
private IJobService jobService;
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public R detail(@PathVariable("id") String id) {
|
||||
JobEntity jobEntity = jobService.queryInfo(id);
|
||||
return R.ok().putData("record", jobEntity);
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
public R list(@RequestParam Map<String, Object> params) {
|
||||
Page page = jobService.queryList(params);
|
||||
return R.ok(page);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public R add(@RequestBody JobEntity entity) {
|
||||
T.VerifyUtil.is(entity).notNull()
|
||||
.and(entity.getRunnerId()).notNull(RCode.RUNNER_ID_CANNOT_EMPTY)
|
||||
.and(entity.getPackageId()).notNull(RCode.PACKAGE_ID_CANNOT_EMPTY)
|
||||
.and(entity.getPlaybookId()).notNull(RCode.PLAYBOOK_ID_CANNOT_EMPTY);
|
||||
|
||||
JobEntity jobEntity = jobService.saveJob(entity);
|
||||
return R.ok().putData("id", jobEntity.getId());
|
||||
}
|
||||
|
||||
@DeleteMapping
|
||||
public R delete(String[] ids) {
|
||||
T.VerifyUtil.is(ids).notEmpty();
|
||||
jobService.removeJob(T.ListUtil.of(ids));
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@PutMapping("/cancel")
|
||||
public R cancel(String[] ids) {
|
||||
// TODO 其他处理
|
||||
|
||||
// update state
|
||||
jobService.update(new LambdaUpdateWrapper<JobEntity>()
|
||||
.in(JobEntity::getId, ids)
|
||||
.set(JobEntity::getStatus, "cancel")
|
||||
);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
||||
16
src/main/java/net/geedge/asw/module/runner/dao/JobDao.java
Normal file
16
src/main/java/net/geedge/asw/module/runner/dao/JobDao.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package net.geedge.asw.module.runner.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import net.geedge.asw.module.runner.entity.JobEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Mapper
|
||||
public interface JobDao extends BaseMapper<JobEntity>{
|
||||
|
||||
List<JobEntity> queryList(IPage page, Map<String, Object> params);
|
||||
|
||||
}
|
||||
10
src/main/java/net/geedge/asw/module/runner/dao/PcapDao.java
Normal file
10
src/main/java/net/geedge/asw/module/runner/dao/PcapDao.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package net.geedge.asw.module.runner.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import net.geedge.asw.module.runner.entity.PcapEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface PcapDao extends BaseMapper<PcapEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.geedge.asw.module.runner.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import net.geedge.asw.module.runner.entity.PlaybookEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface PlaybookDao extends BaseMapper<PlaybookEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.geedge.asw.module.runner.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import net.geedge.asw.module.runner.entity.RunnerEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface RunnerDao extends BaseMapper<RunnerEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package net.geedge.asw.module.runner.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
import net.geedge.asw.module.app.entity.ApplicationEntity;
|
||||
import net.geedge.asw.module.app.entity.PackageEntity;
|
||||
|
||||
@Data
|
||||
@TableName("job")
|
||||
public class JobEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
private String playbookId;
|
||||
private String packageId;
|
||||
private String runnerId;
|
||||
private String scheduleId;
|
||||
private String signatureIds;
|
||||
private String tags;
|
||||
private Long startTimestamp;
|
||||
private Long endTimestamp;
|
||||
private String status;
|
||||
private String pcapId;
|
||||
private String logPath;
|
||||
|
||||
private Long createTimestamp;
|
||||
private Long updateTimestamp;
|
||||
private String createUserId;
|
||||
private String updateUserId;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String workbookId;
|
||||
|
||||
@TableField(exist = false)
|
||||
private ApplicationEntity application;
|
||||
|
||||
@TableField(exist = false)
|
||||
@JsonProperty(value = "package")
|
||||
private PackageEntity pkg;
|
||||
|
||||
@TableField(exist = false)
|
||||
private RunnerEntity runner;
|
||||
|
||||
@TableField(exist = false)
|
||||
private PlaybookEntity playbook;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package net.geedge.asw.module.runner.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("pcap")
|
||||
public class PcapEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
private String tags;
|
||||
private String description;
|
||||
private String path;
|
||||
|
||||
private Long createTimestamp;
|
||||
private String createUserId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package net.geedge.asw.module.runner.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("playbook")
|
||||
public class PlaybookEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
private String name;
|
||||
private String appId;
|
||||
private String tags;
|
||||
private String script;
|
||||
private String opVersion;
|
||||
|
||||
private Long createTimestamp;
|
||||
private Long updateTimestamp;
|
||||
private String createUserId;
|
||||
private String updateUserId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package net.geedge.asw.module.runner.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("runner")
|
||||
public class RunnerEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
private String name;
|
||||
private String tags;
|
||||
private String supportPlatforms;
|
||||
private Integer shareFlag;
|
||||
private String description;
|
||||
private String status;
|
||||
private Long lastHeartbeatTimestamp;
|
||||
|
||||
private Long createTimestamp;
|
||||
private Long updateTimestamp;
|
||||
private String createUserId;
|
||||
private String updateUserId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package net.geedge.asw.module.runner.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.runner.entity.JobEntity;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface IJobService extends IService<JobEntity>{
|
||||
|
||||
JobEntity queryInfo(String id);
|
||||
|
||||
Page queryList(Map<String, Object> params);
|
||||
|
||||
JobEntity saveJob(JobEntity entity);
|
||||
|
||||
void removeJob(List<String> ids);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.geedge.asw.module.runner.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.runner.entity.PcapEntity;
|
||||
|
||||
public interface IPcapService extends IService<PcapEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.geedge.asw.module.runner.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.runner.entity.PlaybookEntity;
|
||||
|
||||
public interface IPlaybookService extends IService<PlaybookEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.geedge.asw.module.runner.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.runner.entity.RunnerEntity;
|
||||
|
||||
public interface IRunnerService extends IService<RunnerEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
package net.geedge.asw.module.runner.service.impl;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.common.util.RCode;
|
||||
import net.geedge.asw.common.util.T;
|
||||
import net.geedge.asw.module.app.entity.ApplicationEntity;
|
||||
import net.geedge.asw.module.app.entity.PackageEntity;
|
||||
import net.geedge.asw.module.app.service.IApplicationService;
|
||||
import net.geedge.asw.module.app.service.IPackageService;
|
||||
import net.geedge.asw.module.runner.dao.JobDao;
|
||||
import net.geedge.asw.module.runner.entity.JobEntity;
|
||||
import net.geedge.asw.module.runner.entity.PlaybookEntity;
|
||||
import net.geedge.asw.module.runner.entity.RunnerEntity;
|
||||
import net.geedge.asw.module.runner.service.IJobService;
|
||||
import net.geedge.asw.module.runner.service.IPlaybookService;
|
||||
import net.geedge.asw.module.runner.service.IRunnerService;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookResourceEntity;
|
||||
import net.geedge.asw.module.workbook.service.IWorkbookResourceService;
|
||||
import net.geedge.asw.module.workbook.util.WorkbookConstant;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class JobServiceImpl extends ServiceImpl<JobDao, JobEntity> implements IJobService {
|
||||
|
||||
@Autowired
|
||||
private IRunnerService runnerService;
|
||||
|
||||
@Autowired
|
||||
private IPlaybookService playbookService;
|
||||
|
||||
@Autowired
|
||||
private IPackageService packageService;
|
||||
|
||||
@Autowired
|
||||
private IApplicationService applicationService;
|
||||
|
||||
@Autowired
|
||||
private IWorkbookResourceService workbookResourceService;
|
||||
|
||||
@Override
|
||||
public JobEntity queryInfo(String id) {
|
||||
JobEntity job = this.getById(id);
|
||||
T.VerifyUtil.is(job).notNull(RCode.SYS_RECORD_NOT_FOUND);
|
||||
|
||||
RunnerEntity runner = runnerService.getById(job.getRunnerId());
|
||||
job.setRunner(runner);
|
||||
|
||||
PlaybookEntity playbook = playbookService.getById(job.getPlaybookId());
|
||||
job.setPlaybook(playbook);
|
||||
|
||||
PackageEntity pkg = packageService.getById(job.getPackageId());
|
||||
job.setPkg(pkg);
|
||||
|
||||
if (T.ObjectUtil.isNotNull(playbook)) {
|
||||
ApplicationEntity application = applicationService.getById(playbook.getAppId());
|
||||
job.setApplication(application);
|
||||
}
|
||||
return job;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page queryList(Map<String, Object> params) {
|
||||
Integer current = T.MapUtil.getInt(params, "current", 1);
|
||||
Integer size = T.MapUtil.getInt(params, "size", 20);
|
||||
String orderBy = T.MapUtil.getStr(params, "orderBy", "id");
|
||||
Page<JobEntity> page = Page.of(current, size);
|
||||
page.addOrder(T.PageUtil.decodeOrderByStr(orderBy));
|
||||
|
||||
List<JobEntity> jobList = this.getBaseMapper().queryList(page, params);
|
||||
page.setRecords(jobList);
|
||||
return page;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JobEntity saveJob(JobEntity entity) {
|
||||
entity.setCreateTimestamp(System.currentTimeMillis());
|
||||
entity.setUpdateTimestamp(System.currentTimeMillis());
|
||||
entity.setCreateUserId(StpUtil.getLoginIdAsString());
|
||||
entity.setUpdateUserId(StpUtil.getLoginIdAsString());
|
||||
|
||||
// save
|
||||
this.save(entity);
|
||||
|
||||
// workbook resource
|
||||
if (T.ObjectUtil.isNotEmpty(entity.getWorkbookId())) {
|
||||
WorkbookResourceEntity res = new WorkbookResourceEntity();
|
||||
res.setWorkbookId(entity.getWorkbookId());
|
||||
res.setResourceType(WorkbookConstant.ResourceType.JOB.getValue());
|
||||
res.setResourceId(entity.getId());
|
||||
workbookResourceService.save(res);
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void removeJob(List<String> ids) {
|
||||
// remove
|
||||
this.removeBatchByIds(ids);
|
||||
// workbook resource
|
||||
workbookResourceService.remove(new LambdaQueryWrapper<WorkbookResourceEntity>()
|
||||
.eq(WorkbookResourceEntity::getResourceType, WorkbookConstant.ResourceType.JOB.getValue())
|
||||
.in(WorkbookResourceEntity::getResourceId, ids));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.geedge.asw.module.runner.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.module.runner.dao.PcapDao;
|
||||
import net.geedge.asw.module.runner.entity.PcapEntity;
|
||||
import net.geedge.asw.module.runner.service.IPcapService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class PcapServiceImpl extends ServiceImpl<PcapDao, PcapEntity> implements IPcapService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.geedge.asw.module.runner.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.module.runner.dao.PlaybookDao;
|
||||
import net.geedge.asw.module.runner.entity.PlaybookEntity;
|
||||
import net.geedge.asw.module.runner.service.IPlaybookService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class PlaybookServiceImpl extends ServiceImpl<PlaybookDao, PlaybookEntity> implements IPlaybookService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.geedge.asw.module.runner.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.module.runner.dao.RunnerDao;
|
||||
import net.geedge.asw.module.runner.entity.RunnerEntity;
|
||||
import net.geedge.asw.module.runner.service.IRunnerService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class RunnerServiceImpl extends ServiceImpl<RunnerDao, RunnerEntity> implements IRunnerService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.geedge.asw.module.workbook.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface WorkbookDao extends BaseMapper<WorkbookEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.geedge.asw.module.workbook.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookMemberEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface WorkbookMemberDao extends BaseMapper<WorkbookMemberEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.geedge.asw.module.workbook.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookResourceEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface WorkbookResourceDao extends BaseMapper<WorkbookResourceEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package net.geedge.asw.module.workbook.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("workbook")
|
||||
public class WorkbookEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
private String name;
|
||||
private String tags;
|
||||
private String visibility;
|
||||
private String description;
|
||||
|
||||
private Long createTimestamp;
|
||||
private Long updateTimestamp;
|
||||
private String createUserId;
|
||||
private String updateUserId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package net.geedge.asw.module.workbook.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("workbook_member")
|
||||
public class WorkbookMemberEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String workbookId;
|
||||
private String userId;
|
||||
|
||||
private Long createTimestamp;
|
||||
private String createUserId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package net.geedge.asw.module.workbook.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("workbook_resource")
|
||||
public class WorkbookResourceEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
private String workbookId;
|
||||
private String resourceType;
|
||||
private String resourceId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.geedge.asw.module.workbook.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookMemberEntity;
|
||||
|
||||
public interface IWorkbookMemberService extends IService<WorkbookMemberEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.geedge.asw.module.workbook.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookResourceEntity;
|
||||
|
||||
public interface IWorkbookResourceService extends IService<WorkbookResourceEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.geedge.asw.module.workbook.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookEntity;
|
||||
|
||||
public interface IWorkbookService extends IService<WorkbookEntity>{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.geedge.asw.module.workbook.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.module.workbook.dao.WorkbookMemberDao;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookMemberEntity;
|
||||
import net.geedge.asw.module.workbook.service.IWorkbookMemberService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class WorkbookMemberServiceImpl extends ServiceImpl<WorkbookMemberDao, WorkbookMemberEntity> implements IWorkbookMemberService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.geedge.asw.module.workbook.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.module.workbook.dao.WorkbookResourceDao;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookResourceEntity;
|
||||
import net.geedge.asw.module.workbook.service.IWorkbookResourceService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class WorkbookResourceServiceImpl extends ServiceImpl<WorkbookResourceDao, WorkbookResourceEntity> implements IWorkbookResourceService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.geedge.asw.module.workbook.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import net.geedge.asw.module.workbook.dao.WorkbookDao;
|
||||
import net.geedge.asw.module.workbook.entity.WorkbookEntity;
|
||||
import net.geedge.asw.module.workbook.service.IWorkbookService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class WorkbookServiceImpl extends ServiceImpl<WorkbookDao, WorkbookEntity> implements IWorkbookService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package net.geedge.asw.module.workbook.util;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
public class WorkbookConstant {
|
||||
|
||||
|
||||
/**
|
||||
* resource type
|
||||
*/
|
||||
public enum ResourceType {
|
||||
PACKAGE("package"),
|
||||
SIGNATURE("signature"),
|
||||
JOB("job"),
|
||||
PCAP("pcap"),
|
||||
DECODE_RECORD("decode_record");
|
||||
|
||||
private String value;
|
||||
|
||||
ResourceType(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static ResourceType getInstanceByType(String type) {
|
||||
for (ResourceType v : values()) {
|
||||
if (StrUtil.equalsIgnoreCase(v.getValue(), type)) {
|
||||
return v;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Failed to find resource type with parameter.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -51,7 +51,7 @@ server:
|
||||
mime-types: text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
|
||||
|
||||
mybatis-plus:
|
||||
mapper-locations: classpath:db/mapper/*Mapper.xml
|
||||
mapper-locations: classpath:db/mapper/**/*Mapper.xml
|
||||
configuration:
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
global-config:
|
||||
|
||||
110
src/main/resources/db/mapper/runner/JobMapper.xml
Normal file
110
src/main/resources/db/mapper/runner/JobMapper.xml
Normal file
@@ -0,0 +1,110 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="net.geedge.asw.module.runner.dao.JobDao">
|
||||
|
||||
<resultMap type="net.geedge.asw.module.runner.entity.JobEntity" id="jobResultMap">
|
||||
<id property="id" column="id"/>
|
||||
<result property="id" column="id"/>
|
||||
<result property="playbookId" column="playbook_id"/>
|
||||
<result property="packageId" column="package_id"/>
|
||||
<result property="runnerId" column="runner_id"/>
|
||||
<result property="scheduleId" column="schedule_id"/>
|
||||
<result property="signatureIds" column="signature_ids"/>
|
||||
<result property="tags" column="tags"/>
|
||||
<result property="startTimestamp" column="start_timestamp"/>
|
||||
<result property="endTimestamp" column="end_timestamp"/>
|
||||
<result property="status" column="status"/>
|
||||
<result property="pcapId" column="pcap_id"/>
|
||||
<result property="logPath" column="log_path"/>
|
||||
<result property="createTimestamp" column="create_timestamp"/>
|
||||
<result property="updateTimestamp" column="update_timestamp"/>
|
||||
<result property="createUserId" column="create_user_id"/>
|
||||
<result property="updateUserId" column="update_user_id"/>
|
||||
|
||||
<association property="pkg" columnPrefix="pkg_" javaType="net.geedge.asw.module.app.entity.PackageEntity">
|
||||
<id property="id" column="id"/>
|
||||
<result property="platform" column="platform"/>
|
||||
<result property="version" column="version"/>
|
||||
<result property="logo" column="logo"/>
|
||||
</association>
|
||||
|
||||
<association property="application" columnPrefix="app_"
|
||||
javaType="net.geedge.asw.module.app.entity.ApplicationEntity">
|
||||
<id property="id" column="id"/>
|
||||
<result property="name" column="name"/>
|
||||
</association>
|
||||
|
||||
<association property="runner" columnPrefix="run_" javaType="net.geedge.asw.module.runner.entity.RunnerEntity">
|
||||
<id property="id" column="id"/>
|
||||
<result property="name" column="name"/>
|
||||
</association>
|
||||
|
||||
<association property="playbook" columnPrefix="pb_" javaType="net.geedge.asw.module.runner.entity.PlaybookEntity">
|
||||
<id property="id" column="id"/>
|
||||
<result property="name" column="name"/>
|
||||
</association>
|
||||
|
||||
</resultMap>
|
||||
|
||||
|
||||
<select id="queryList" resultMap="jobResultMap">
|
||||
SELECT
|
||||
job.*,
|
||||
pkg.id AS pkg_id,
|
||||
pkg.platform AS pkg_platform,
|
||||
pkg.version AS pkg_version,
|
||||
pkg.logo AS pkg_logo,
|
||||
|
||||
app.id AS app_id,
|
||||
app.name AS app_name,
|
||||
|
||||
run.id AS run_id,
|
||||
run.name AS run_name,
|
||||
|
||||
pb.id AS pb_id,
|
||||
pb.name AS pb_name
|
||||
FROM
|
||||
job job
|
||||
LEFT JOIN runner run ON job.runner_id = run.id
|
||||
LEFT JOIN package pkg ON job.package_id = pkg.id
|
||||
LEFT JOIN playbook pb ON job.playbook_id = pb.id
|
||||
LEFT JOIN application app ON pb.app_id = app.id
|
||||
<where>
|
||||
<if test="params.ids != null and params.ids != ''">
|
||||
job.id in
|
||||
<foreach item="id" collection="params.ids.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
||||
</if>
|
||||
|
||||
<if test="params.appIds != null and params.appIds != ''">
|
||||
AND app.id in
|
||||
<foreach item="id" collection="params.appIds.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
||||
</if>
|
||||
|
||||
<if test="params.packageIds != null and params.packageIds != ''">
|
||||
AND pkg.id in
|
||||
<foreach item="id" collection="params.packageIds.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
||||
</if>
|
||||
|
||||
<if test="params.runnerIds != null and params.runnerIds != ''">
|
||||
AND run.id in
|
||||
<foreach item="id" collection="params.runnerIds.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
||||
</if>
|
||||
|
||||
<if test="params.playbooks != null and params.playbooks != ''">
|
||||
AND pb.id in
|
||||
<foreach item="id" collection="params.playbooks.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
||||
</if>
|
||||
|
||||
<if test="params.signatureIds != null and params.signatureIds != ''">
|
||||
AND <foreach item="item" collection="params.signatureIds.split(',')" separator="OR" index="" open="(" close=")">
|
||||
locate(#{item}, job.signature_ids)
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
|
||||
GROUP BY
|
||||
job.id
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -39,6 +39,14 @@ INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (35, '100008', 'SYS_RECORD_NOT_FOUND', '找不到记录', 'zh', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (37, '200', 'SUCCESS', 'success', 'en', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (39, '200', 'SUCCESS', '成功', 'zh', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (41, '201001', 'APP_ID_CANNOT_EMPTY', 'application id cannot be empty', 'en', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (43, '201001', 'APP_ID_CANNOT_EMPTY', '应用ID不能为空', 'zh', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (45, '202001', 'PACKAGE_ID_CANNOT_EMPTY', 'package id cannot be empty', 'en', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (47, '202001', 'PACKAGE_ID_CANNOT_EMPTY', '安装包ID不能为空', 'zh', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (49, '301001', 'RUNNER_ID_CANNOT_EMPTY', 'runner id cannot be empty', 'en', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (51, '301001', 'RUNNER_ID_CANNOT_EMPTY', 'Runner ID不能为空', 'zh', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (53, '302001', 'PLAYBOOK_ID_CANNOT_EMPTY', 'playbook id cannot be empty', 'en', '', 'admin', 1719280800000);
|
||||
INSERT INTO `sys_i18n`(`id`, `name`, `code`, `value`, `lang`, `remark`, `update_user_id`, `update_timestamp`) VALUES (55, '302001', 'PLAYBOOK_ID_CANNOT_EMPTY', '任务信息ID不能为空', 'zh', '', 'admin', 1719280800000);
|
||||
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -132,4 +132,165 @@ CREATE TABLE `sys_file_content` (
|
||||
`id` varchar(64) NOT NULL,
|
||||
`content` longblob NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
/**
|
||||
* 新增 job 表
|
||||
*/
|
||||
DROP TABLE IF EXISTS `job`;
|
||||
CREATE TABLE `job` (
|
||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`playbook_id` varchar(64) NOT NULL COMMENT 'Playbook ID',
|
||||
`package_id` varchar(64) NOT NULL COMMENT 'Package ID',
|
||||
`runner_id` varchar(64) NOT NULL COMMENT 'Runner ID',
|
||||
`schedule_id` varchar(64) NOT NULL COMMENT '定时器ID',
|
||||
`signature_ids` text NOT NULL COMMENT '特征ID,多个逗号分隔',
|
||||
`tags` varchar(256) NOT NULL DEFAULT '' COMMENT '标签; 默认:"";多个用逗号分隔;例:kz,vpn,android',
|
||||
`start_timestamp` bigint(20) NOT NULL COMMENT '开始时间戳',
|
||||
`end_timestamp` bigint(20) NOT NULL COMMENT '结束时间戳',
|
||||
`status` varchar(64) NOT NULL COMMENT '状态; 可选值: created,pending,running,passed,failed,cancel',
|
||||
`pcap_id` varchar(64) NOT NULL COMMENT 'PCAP ID',
|
||||
`log_path` varchar(256) NOT NULL COMMENT '日志文件路径',
|
||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||
`update_timestamp` bigint(20) NOT NULL COMMENT '更新时间戳',
|
||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||
`update_user_id` varchar(64) NOT NULL COMMENT '更新人',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_playbook_id` (`playbook_id`) USING BTREE,
|
||||
KEY `idx_package_id` (`package_id`) USING BTREE,
|
||||
KEY `idx_runner_id` (`runner_id`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
/**
|
||||
* 新增 playbook 表
|
||||
*/
|
||||
DROP TABLE IF EXISTS `playbook`;
|
||||
CREATE TABLE `playbook` (
|
||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`name` varchar(256) NOT NULL COMMENT '名称',
|
||||
`app_id` varchar(64) NOT NULL COMMENT '应用程序 ID',
|
||||
`tags` varchar(256) NOT NULL DEFAULT '' COMMENT '标签',
|
||||
`script` text NOT NULL COMMENT '脚本内容',
|
||||
`op_version` bigint(20) NOT NULL COMMENT '更新版本号, 默认:1;每次更新递增',
|
||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||
`update_timestamp` bigint(20) NOT NULL COMMENT '更新时间戳',
|
||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||
`update_user_id` varchar(64) NOT NULL COMMENT '更新人',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_name` (`name`) USING BTREE,
|
||||
KEY `idx_app_id` (`app_id`) USING BTREE,
|
||||
KEY `idx_op_version` (`op_version`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
/**
|
||||
* 新增 pcap 表
|
||||
*/
|
||||
DROP TABLE IF EXISTS `pcap`;
|
||||
CREATE TABLE `pcap` (
|
||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`tags` varchar(256) NOT NULL DEFAULT '' COMMENT '标签',
|
||||
`description` text NOT NULL COMMENT '描述信息',
|
||||
`path` varchar(64) NOT NULL COMMENT 'PCAP文件路径',
|
||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_tags` (`tags`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
|
||||
/**
|
||||
* 新增 application 表
|
||||
*/
|
||||
DROP TABLE IF EXISTS `application`;
|
||||
CREATE TABLE `application` (
|
||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`name` varchar(256) NOT NULL COMMENT '应用名称',
|
||||
`long_name` varchar(256) NOT NULL COMMENT '应用全称',
|
||||
`properties` text NOT NULL COMMENT '应用数据',
|
||||
`description` text NOT NULL COMMENT '描述信息',
|
||||
`surrogates` text NOT NULL COMMENT '',
|
||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||
`update_timestamp` bigint(20) NOT NULL COMMENT '更新时间戳',
|
||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||
`update_user_id` varchar(64) NOT NULL COMMENT '更新人',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_name` (`name`) USING BTREE,
|
||||
KEY `idx_long_name` (`long_name`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
/**
|
||||
* 新增 package 表
|
||||
*/
|
||||
DROP TABLE IF EXISTS `package`;
|
||||
CREATE TABLE `package` (
|
||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`logo` varchar(512) NOT NULL COMMENT '图标,图标文件 url 地址',
|
||||
`description` text NOT NULL COMMENT '描述信息',
|
||||
`platform` varchar(256) NOT NULL COMMENT '操作系统; 可选值:android,ios,windows,linux',
|
||||
`version` varchar(256) NOT NULL COMMENT '安装包版本',
|
||||
`identifier` varchar(256) NOT NULL COMMENT '唯一标识;android:package name,ios:bundle id',
|
||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||
`update_timestamp` bigint(20) NOT NULL COMMENT '更新时间戳',
|
||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||
`update_user_id` varchar(64) NOT NULL COMMENT '更新人',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_version` (`version`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
/**
|
||||
* 新增 runner 表
|
||||
*/
|
||||
DROP TABLE IF EXISTS `runner`;
|
||||
CREATE TABLE `runner` (
|
||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`name` varchar(256) NOT NULL COMMENT '名称',
|
||||
`tags` varchar(256) NOT NULL DEFAULT '' COMMENT '标签,多个逗号分隔',
|
||||
`support_platforms` varchar(256) NOT NULL COMMENT '支持的平台; 可选值:android,ios,windows; 多个逗号分隔; 例:android,ios',
|
||||
`share_flag` int(1) NOT NULL COMMENT '共享标识; 1:共享 0:不共享,仅创建人可用',
|
||||
`description` text NOT NULL COMMENT '描述信息',
|
||||
`status` varchar(64) NOT NULL COMMENT '状态;可选值:online,offline',
|
||||
`last_heartbeat_timestamp` bigint(20) NOT NULL COMMENT '最后心跳时间戳',
|
||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||
`update_timestamp` bigint(20) NOT NULL COMMENT '更新时间戳',
|
||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||
`update_user_id` varchar(64) NOT NULL COMMENT '更新人',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_name` (`name`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
|
||||
/**
|
||||
* 新增 workbook,workbook_member,workbook_resource 表
|
||||
*/
|
||||
DROP TABLE IF EXISTS `workbook`;
|
||||
CREATE TABLE `workbook` (
|
||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`name` varchar(256) NOT NULL COMMENT '名称',
|
||||
`tags` varchar(256) NOT NULL DEFAULT '' COMMENT '标签,多个逗号分隔',
|
||||
`visibility` varchar(16) NOT NULL DEFAULT 'private' COMMENT '可见程度,可选值:private,public 默认:private',
|
||||
`description` text NOT NULL COMMENT '描述信息',
|
||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||
`update_timestamp` bigint(20) NOT NULL COMMENT '更新时间戳',
|
||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||
`update_user_id` varchar(64) NOT NULL COMMENT '更新人',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_name` (`name`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
DROP TABLE IF EXISTS `workbook_member`;
|
||||
CREATE TABLE `workbook_member` (
|
||||
`workbook_id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`user_id` varchar(64) NOT NULL COMMENT 'user ID',
|
||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||
PRIMARY KEY (`workbook_id`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
DROP TABLE IF EXISTS `workbook_resource`;
|
||||
CREATE TABLE `workbook_resource` (
|
||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||
`workbook_id` varchar(64) NOT NULL COMMENT 'workbook ID',
|
||||
`resource_type` varchar(64) NOT NULL COMMENT '资源类型 可选值:package,signature,job,pcap,decode_record',
|
||||
`resource_id` varchar(64) NOT NULL COMMENT '资源id',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
Reference in New Issue
Block a user