feat: 调整 pcap 增删改查接口
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package net.geedge.asw.module.runner.controller;
|
package net.geedge.asw.module.runner.controller;
|
||||||
|
|
||||||
import cn.hutool.log.Log;
|
import cn.hutool.log.Log;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import net.geedge.asw.common.util.R;
|
import net.geedge.asw.common.util.R;
|
||||||
import net.geedge.asw.common.util.RCode;
|
import net.geedge.asw.common.util.RCode;
|
||||||
@@ -8,10 +9,12 @@ import net.geedge.asw.common.util.T;
|
|||||||
import net.geedge.asw.module.runner.entity.PcapEntity;
|
import net.geedge.asw.module.runner.entity.PcapEntity;
|
||||||
import net.geedge.asw.module.runner.service.IPcapService;
|
import net.geedge.asw.module.runner.service.IPcapService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -39,20 +42,63 @@ public class PcapController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public R add(@RequestParam(value = "file", required = true) MultipartFile file,
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@RequestParam(required = false) String tags,
|
public R add(@RequestParam(value = "files", required = true) List<MultipartFile> fileList,
|
||||||
|
@RequestParam(value = "descriptions", required = false) List<String> descriptionList,
|
||||||
@RequestParam(required = false) String workbookId,
|
@RequestParam(required = false) String workbookId,
|
||||||
@RequestParam(required = false) String workspaceId) throws IOException {
|
@RequestParam(required = false) String workspaceId) throws IOException {
|
||||||
T.VerifyUtil.is(workspaceId).notEmpty(RCode.WORKSPACE_ID_CANNOT_EMPTY);
|
T.VerifyUtil.is(workspaceId).notEmpty(RCode.WORKSPACE_ID_CANNOT_EMPTY);
|
||||||
|
|
||||||
PcapEntity pcapEntity = pcapService.savePcap(file.getResource(), tags, workbookId, workspaceId);
|
List<Object> recordList = T.ListUtil.list(true);
|
||||||
return R.ok().putData("id", pcapEntity.getId());
|
for (int i = 0; i < fileList.size(); i++) {
|
||||||
|
MultipartFile file = fileList.get(i);
|
||||||
|
String description = T.StrUtil.emptyToDefault(T.CollUtil.get(descriptionList, i), "");
|
||||||
|
PcapEntity pcapEntity = pcapService.savePcap(file.getResource(), description, workbookId, workspaceId);
|
||||||
|
recordList.add(
|
||||||
|
T.MapUtil.builder()
|
||||||
|
.put("id", pcapEntity.getId())
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return R.ok().putData("records", recordList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
@PutMapping
|
||||||
public R delete(@PathVariable("id") String id) {
|
@Transactional(rollbackFor = Exception.class)
|
||||||
pcapService.deletePcap(id);
|
public R update(@RequestBody List<Map<String, String>> body) {
|
||||||
|
List<Object> recordList = T.ListUtil.list(true);
|
||||||
|
for (Map<String, String> map : body) {
|
||||||
|
String id = T.MapUtil.getStr(map, "id", "");
|
||||||
|
if (T.StrUtil.isEmpty(id)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String description = T.MapUtil.getStr(map, "description", "");
|
||||||
|
pcapService.update(new LambdaUpdateWrapper<PcapEntity>()
|
||||||
|
.eq(PcapEntity::getId, id)
|
||||||
|
.set(PcapEntity::getDescription, description)
|
||||||
|
);
|
||||||
|
recordList.add(
|
||||||
|
T.MapUtil.builder()
|
||||||
|
.put("id", id)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return R.ok().putData("records", recordList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping
|
||||||
|
public R delete(String[] ids) {
|
||||||
|
T.VerifyUtil.is(ids).notEmpty();
|
||||||
|
|
||||||
|
pcapService.deletePcap(ids);
|
||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PutMapping("/parse2session")
|
||||||
|
public R parse2session(String[] ids) {
|
||||||
|
T.VerifyUtil.is(ids).notEmpty();
|
||||||
|
|
||||||
|
// pcapService.parse2session(ids);
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
package net.geedge.asw.module.runner.dao;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import net.geedge.asw.module.runner.entity.DecodeRecordEntity;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
@Mapper
|
|
||||||
public interface DecodeRecordDao extends BaseMapper<DecodeRecordEntity>{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
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("decode_record")
|
|
||||||
public class DecodeRecordEntity {
|
|
||||||
|
|
||||||
@TableId(type = IdType.ASSIGN_UUID)
|
|
||||||
private String id;
|
|
||||||
private String pcapId;
|
|
||||||
private Long streamId;
|
|
||||||
private String streamAttributes;
|
|
||||||
private String workspaceId;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -16,16 +16,10 @@ public class PcapEntity {
|
|||||||
@TableId(type = IdType.ASSIGN_UUID)
|
@TableId(type = IdType.ASSIGN_UUID)
|
||||||
private String id;
|
private String id;
|
||||||
private String name;
|
private String name;
|
||||||
private String tags;
|
|
||||||
private String description;
|
private String description;
|
||||||
private String path;
|
private String path;
|
||||||
private Long size;
|
private Long size;
|
||||||
private Long connections;
|
|
||||||
private Long hosts;
|
|
||||||
private String md5;
|
private String md5;
|
||||||
private Long connectionTimeFirst;
|
|
||||||
private Long connectionTimeLast;
|
|
||||||
private String protocols;
|
|
||||||
private String status;
|
private String status;
|
||||||
private Long createTimestamp;
|
private Long createTimestamp;
|
||||||
private String createUserId;
|
private String createUserId;
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
package net.geedge.asw.module.runner.service;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
|
||||||
import net.geedge.asw.module.runner.entity.DecodeRecordEntity;
|
|
||||||
|
|
||||||
public interface IDecodeRecordService extends IService<DecodeRecordEntity>{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -17,6 +17,8 @@ public interface IPcapService extends IService<PcapEntity>{
|
|||||||
|
|
||||||
PcapEntity savePcap(Resource fileResource,String... params);
|
PcapEntity savePcap(Resource fileResource,String... params);
|
||||||
|
|
||||||
void deletePcap(String id);
|
void deletePcap(String... ids);
|
||||||
|
|
||||||
|
void parse2session(String... ids);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
package net.geedge.asw.module.runner.service.impl;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
||||||
import net.geedge.asw.module.runner.dao.DecodeRecordDao;
|
|
||||||
import net.geedge.asw.module.runner.entity.DecodeRecordEntity;
|
|
||||||
import net.geedge.asw.module.runner.service.IDecodeRecordService;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class DecodeRecordServiceImpl extends ServiceImpl<DecodeRecordDao, DecodeRecordEntity> implements IDecodeRecordService {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import net.geedge.asw.common.util.ASWException;
|
||||||
import net.geedge.asw.common.util.RCode;
|
import net.geedge.asw.common.util.RCode;
|
||||||
import net.geedge.asw.common.util.T;
|
import net.geedge.asw.common.util.T;
|
||||||
import net.geedge.asw.module.app.entity.ApplicationEntity;
|
import net.geedge.asw.module.app.entity.ApplicationEntity;
|
||||||
@@ -21,7 +22,6 @@ import net.geedge.asw.module.runner.service.IJobService;
|
|||||||
import net.geedge.asw.module.runner.service.IPcapService;
|
import net.geedge.asw.module.runner.service.IPcapService;
|
||||||
import net.geedge.asw.module.runner.service.IPlaybookService;
|
import net.geedge.asw.module.runner.service.IPlaybookService;
|
||||||
import net.geedge.asw.module.runner.service.IRunnerService;
|
import net.geedge.asw.module.runner.service.IRunnerService;
|
||||||
import net.geedge.asw.module.runner.util.PcapParserThread;
|
|
||||||
import net.geedge.asw.module.runner.util.RunnerConstant;
|
import net.geedge.asw.module.runner.util.RunnerConstant;
|
||||||
import net.geedge.asw.module.workbook.service.IWorkbookResourceService;
|
import net.geedge.asw.module.workbook.service.IWorkbookResourceService;
|
||||||
import net.geedge.asw.module.workbook.util.WorkbookConstant;
|
import net.geedge.asw.module.workbook.util.WorkbookConstant;
|
||||||
@@ -101,7 +101,7 @@ public class PcapServiceImpl extends ServiceImpl<PcapDao, PcapEntity> implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PcapEntity savePcap(Resource fileResource, String... params) {
|
public PcapEntity savePcap(Resource fileResource, String... params) {
|
||||||
String tags = T.ArrayUtil.get(params, 0);
|
String description = T.ArrayUtil.get(params, 0);
|
||||||
String workbookId = T.ArrayUtil.get(params, 1);
|
String workbookId = T.ArrayUtil.get(params, 1);
|
||||||
String workspaceId = T.ArrayUtil.get(params, 2);
|
String workspaceId = T.ArrayUtil.get(params, 2);
|
||||||
String createUserId = T.StrUtil.emptyToDefault(T.ArrayUtil.get(params, 3), StpUtil.getLoginIdAsString());
|
String createUserId = T.StrUtil.emptyToDefault(T.ArrayUtil.get(params, 3), StpUtil.getLoginIdAsString());
|
||||||
@@ -109,7 +109,7 @@ public class PcapServiceImpl extends ServiceImpl<PcapDao, PcapEntity> implements
|
|||||||
PcapEntity entity = new PcapEntity();
|
PcapEntity entity = new PcapEntity();
|
||||||
try {
|
try {
|
||||||
entity.setName(fileResource.getFilename());
|
entity.setName(fileResource.getFilename());
|
||||||
entity.setTags(T.StrUtil.emptyToDefault(tags, ""));
|
entity.setDescription(description);
|
||||||
|
|
||||||
byte[] bytes = fileResource.getInputStream().readAllBytes();
|
byte[] bytes = fileResource.getInputStream().readAllBytes();
|
||||||
entity.setSize((long) bytes.length);
|
entity.setSize((long) bytes.length);
|
||||||
@@ -141,32 +141,35 @@ public class PcapServiceImpl extends ServiceImpl<PcapDao, PcapEntity> implements
|
|||||||
|
|
||||||
// workbook resource
|
// workbook resource
|
||||||
workbookResourceService.saveResource(workbookId, entity.getId(), WorkbookConstant.ResourceType.PCAP.getValue());
|
workbookResourceService.saveResource(workbookId, entity.getId(), WorkbookConstant.ResourceType.PCAP.getValue());
|
||||||
|
|
||||||
// parser
|
|
||||||
PcapParserThread pcapParserThread = new PcapParserThread();
|
|
||||||
pcapParserThread.setPcapEntity(entity);
|
|
||||||
T.ThreadUtil.execAsync(pcapParserThread);
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error(e, "[savePcap] [error] [workspaceId: {}]", workspaceId);
|
log.error(e, "[savePcap] [error] [workspaceId: {}]", workspaceId);
|
||||||
|
throw new ASWException(RCode.ERROR);
|
||||||
}
|
}
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deletePcap(String pcapId) {
|
public void deletePcap(String... ids) {
|
||||||
PcapEntity pcap = this.getById(pcapId);
|
for (String id : ids) {
|
||||||
// remove file
|
PcapEntity pcap = this.getById(id);
|
||||||
T.FileUtil.del(pcap.getPath());
|
// remove file
|
||||||
|
T.FileUtil.del(pcap.getPath());
|
||||||
|
|
||||||
// remove
|
// remove
|
||||||
this.removeById(pcapId);
|
this.removeById(id);
|
||||||
|
|
||||||
|
// update job pcap_id
|
||||||
|
jobService.update(new LambdaUpdateWrapper<JobEntity>()
|
||||||
|
.set(JobEntity::getPcapId, "")
|
||||||
|
.eq(JobEntity::getPcapId, id)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void parse2session(String... ids) {
|
||||||
|
|
||||||
// update job pcap_id
|
|
||||||
jobService.update(new LambdaUpdateWrapper<JobEntity>()
|
|
||||||
.set(JobEntity::getPcapId, "")
|
|
||||||
.eq(JobEntity::getPcapId, pcapId)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -36,9 +36,11 @@ public class RunnerConstant {
|
|||||||
public enum PcapStatus {
|
public enum PcapStatus {
|
||||||
UPLOADED("Uploaded"),
|
UPLOADED("Uploaded"),
|
||||||
|
|
||||||
ANALYZING("Analyzing"),
|
PARSING("Parsing"),
|
||||||
|
|
||||||
COMPLETED("Completed");
|
INDEXED("Indexed"),
|
||||||
|
|
||||||
|
ERROR("Error");
|
||||||
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@Deprecated
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public class SignatureExtract {
|
public class SignatureExtract {
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import java.util.stream.Collectors;
|
|||||||
* tshark 解析 pcap 文件
|
* tshark 解析 pcap 文件
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@Deprecated
|
||||||
public class SignatureUtil {
|
public class SignatureUtil {
|
||||||
|
|
||||||
private static final Log log = Log.get();
|
private static final Log log = Log.get();
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ public class WorkbookConstant {
|
|||||||
PACKAGE("package"),
|
PACKAGE("package"),
|
||||||
SIGNATURE("signature"),
|
SIGNATURE("signature"),
|
||||||
JOB("job"),
|
JOB("job"),
|
||||||
PCAP("pcap"),
|
PCAP("pcap");
|
||||||
DECODE_RECORD("decode_record");
|
|
||||||
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
|
|||||||
@@ -6,16 +6,10 @@
|
|||||||
<resultMap type="net.geedge.asw.module.runner.entity.PcapEntity" id="pcapResultMap">
|
<resultMap type="net.geedge.asw.module.runner.entity.PcapEntity" id="pcapResultMap">
|
||||||
<id property="id" column="id"/>
|
<id property="id" column="id"/>
|
||||||
<result property="name" column="name"/>
|
<result property="name" column="name"/>
|
||||||
<result property="tags" column="tags"/>
|
|
||||||
<result property="description" column="description"/>
|
<result property="description" column="description"/>
|
||||||
<result property="path" column="path"/>
|
<result property="path" column="path"/>
|
||||||
<result property="size" column="size"/>
|
<result property="size" column="size"/>
|
||||||
<result property="connections" column="connections"/>
|
|
||||||
<result property="hosts" column="hosts"/>
|
|
||||||
<result property="md5" column="md5"/>
|
<result property="md5" column="md5"/>
|
||||||
<result property="connectionTimeFirst" column="connection_time_first"/>
|
|
||||||
<result property="connectionTimeLast" column="connection_time_last"/>
|
|
||||||
<result property="protocols" column="protocols"/>
|
|
||||||
<result property="status" column="status"/>
|
<result property="status" column="status"/>
|
||||||
<result property="createTimestamp" column="create_timestamp"/>
|
<result property="createTimestamp" column="create_timestamp"/>
|
||||||
<result property="createUserId" column="create_user_id"/>
|
<result property="createUserId" column="create_user_id"/>
|
||||||
@@ -81,6 +75,10 @@
|
|||||||
<foreach item="id" collection="params.ids.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
<foreach item="id" collection="params.ids.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
|
<if test="params.q != null and params.q != ''">
|
||||||
|
AND ( locate(#{params.q}, pcap.name) OR locate(#{params.q}, pcap.description) )
|
||||||
|
</if>
|
||||||
|
|
||||||
<if test="params.jobIds != null and params.jobIds != ''">
|
<if test="params.jobIds != null and params.jobIds != ''">
|
||||||
AND job.id in
|
AND job.id in
|
||||||
<foreach item="id" collection="params.jobIds.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
<foreach item="id" collection="params.jobIds.split(',')" separator="," open="(" close=")">#{id}</foreach>
|
||||||
|
|||||||
@@ -217,16 +217,10 @@ DROP TABLE IF EXISTS `pcap`;
|
|||||||
CREATE TABLE `pcap` (
|
CREATE TABLE `pcap` (
|
||||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||||
`name` varchar(256) NOT NULL DEFAULT '' COMMENT '文件名称',
|
`name` varchar(256) NOT NULL DEFAULT '' COMMENT '文件名称',
|
||||||
`tags` varchar(256) NOT NULL DEFAULT '' COMMENT '标签',
|
|
||||||
`description` text NOT NULL DEFAULT '' COMMENT '描述信息',
|
`description` text NOT NULL DEFAULT '' COMMENT '描述信息',
|
||||||
`path` varchar(64) NOT NULL DEFAULT '' COMMENT 'PCAP文件路径',
|
`path` varchar(64) NOT NULL DEFAULT '' COMMENT 'PCAP文件路径',
|
||||||
`size` bigint(20) NOT NULL DEFAULT 0 COMMENT '文件大小',
|
`size` bigint(20) NOT NULL DEFAULT 0 COMMENT '文件大小',
|
||||||
`connections` bigint(20) NOT NULL DEFAULT 0 COMMENT '连接数量',
|
|
||||||
`hosts` bigint(20) NOT NULL DEFAULT 0 COMMENT 'IP数量',
|
|
||||||
`md5` varchar(64) NOT NULL DEFAULT '' COMMENT '摘要值,根据文件md5值判断是否已上存在,存在则响应当前id',
|
`md5` varchar(64) NOT NULL DEFAULT '' COMMENT '摘要值,根据文件md5值判断是否已上存在,存在则响应当前id',
|
||||||
`connection_time_first` bigint(20) NOT NULL DEFAULT -1 COMMENT '连接开始时间',
|
|
||||||
`connection_time_last` bigint(20) NOT NULL DEFAULT -1 COMMENT '连接结束时间',
|
|
||||||
`protocols` varchar(64) NOT NULL DEFAULT '' COMMENT '包含的协议,多个逗号分隔',
|
|
||||||
`status` varchar(64) NOT NULL DEFAULT '' COMMENT '状态,可选值 Uploaded,Analyzing,Completed',
|
`status` varchar(64) NOT NULL DEFAULT '' COMMENT '状态,可选值 Uploaded,Analyzing,Completed',
|
||||||
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
`create_timestamp` bigint(20) NOT NULL COMMENT '创建时间戳',
|
||||||
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
`create_user_id` varchar(64) NOT NULL COMMENT '创建人',
|
||||||
@@ -234,23 +228,6 @@ CREATE TABLE `pcap` (
|
|||||||
PRIMARY KEY (`id`) USING BTREE,
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
KEY `idx_name` (`name`) USING BTREE,
|
KEY `idx_name` (`name`) USING BTREE,
|
||||||
KEY `idx_md5` (`md5`) USING BTREE,
|
KEY `idx_md5` (`md5`) USING BTREE,
|
||||||
KEY `idx_tags` (`tags`) USING BTREE,
|
|
||||||
KEY `idx_workspace_id` (`workspace_id`) USING BTREE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增 decode_record 表
|
|
||||||
*/
|
|
||||||
DROP TABLE IF EXISTS `decode_record`;
|
|
||||||
CREATE TABLE `decode_record` (
|
|
||||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
|
||||||
`pcap_id` varchar(64) NOT NULL DEFAULT '' COMMENT 'PCAP文件ID',
|
|
||||||
`stream_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '流ID',
|
|
||||||
`stream_attributes` text NOT NULL DEFAULT '' COMMENT '流属性',
|
|
||||||
`workspace_id` varchar(64) NOT NULL DEFAULT '' COMMENT '工作空间ID',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE,
|
|
||||||
KEY `idx_pcap_id` (`pcap_id`) USING BTREE,
|
|
||||||
KEY `idx_stream_id` (`stream_id`) USING BTREE,
|
|
||||||
KEY `idx_workspace_id` (`workspace_id`) USING BTREE
|
KEY `idx_workspace_id` (`workspace_id`) USING BTREE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
@@ -359,7 +336,7 @@ DROP TABLE IF EXISTS `workbook_resource`;
|
|||||||
CREATE TABLE `workbook_resource` (
|
CREATE TABLE `workbook_resource` (
|
||||||
`id` varchar(64) NOT NULL COMMENT '主键',
|
`id` varchar(64) NOT NULL COMMENT '主键',
|
||||||
`workbook_id` varchar(64) NOT NULL COMMENT 'workbook ID',
|
`workbook_id` varchar(64) NOT NULL COMMENT 'workbook ID',
|
||||||
`resource_type` varchar(64) NOT NULL COMMENT '资源类型 可选值:package,signature,job,pcap,decode_record',
|
`resource_type` varchar(64) NOT NULL COMMENT '资源类型 可选值:package,signature,job,pcap',
|
||||||
`resource_id` varchar(64) NOT NULL COMMENT '资源id',
|
`resource_id` varchar(64) NOT NULL COMMENT '资源id',
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|||||||
Reference in New Issue
Block a user