Commit 77007f74 by 朽木不可雕也

记录测试信息的主数据库改为mysql

parent bb50db18
...@@ -5,3 +5,6 @@ target ...@@ -5,3 +5,6 @@ target
*.iml *.iml
*.classpath *.classpath
*.log *.log
*.xlsx
cache
venv
\ No newline at end of file
# 弹幕采集测试任务
CREATE TABLE barrage_collection_test_task
(
name VARCHAR(255) NOT NULL PRIMARY KEY COMMENT '任务名称,32位UUID',
url VARCHAR(255) NOT NULL COMMENT '直播间地址',
start_time INT NOT NULL COMMENT '任务开始时间',
end_time INT NOT NULL COMMENT '任务结束时间',
create_time TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3) COMMENT '任务创建时间'
) CHARSET utf8mb4 COMMENT '弹幕采集服务自动测试任务';
# 服务器响应信息
CREATE TABLE server_response_message
(
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
barrage_collection_test_task_name VARCHAR(255) NOT NULL COMMENT '任务名称,32位UUD',
code INT NOT NULL COMMENT '响应代码',
message VARCHAR(255) NOT NULL COMMENT '响应信息',
create_time TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3),
FOREIGN KEY (barrage_collection_test_task_name)
REFERENCES barrage_collection_test_task (name)
ON DELETE CASCADE ON UPDATE CASCADE
) CHARSET utf8mb4 COMMENT '服务器响应信息';
\ No newline at end of file
package com.zhiweidata.automatictest.barragecrawlerserver.config; package com.zhiweidata.automatictest.barragecrawlerserver.config;
import com.mongodb.client.MongoCollection;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask;
import java.io.File; import java.io.File;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import static com.zhiweidata.automatictest.publics.BeanContainer.MONGO_DATABASE;
/** /**
* 基本配置 * 基本配置
* *
...@@ -38,14 +34,6 @@ public class BaseConfig { ...@@ -38,14 +34,6 @@ public class BaseConfig {
*/ */
public static final int EXPORT_START_MAX_DELAY = 7; public static final int EXPORT_START_MAX_DELAY = 7;
/** /**
* 模块名称
*/
public static final String MODULE_NAME = "barrage_crawler_server";
/**
* 测试采集任务的信息集合
*/
public static final MongoCollection<BarrageCollectionTask> MONGO_TASK_REQUEST_COLLECTION = MONGO_DATABASE.getCollection(MODULE_NAME + "_task_requests", BarrageCollectionTask.class);
/**
* 文件缓存文件夹 * 文件缓存文件夹
*/ */
public static final File CACHE_DIR = new File("cache"); public static final File CACHE_DIR = new File("cache");
......
package com.zhiweidata.automatictest.barragecrawlerserver.createtasks; package com.zhiweidata.automatictest.barragecrawlerserver.createtasks;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import com.zhiweidata.automatictest.barragecrawlerserver.exporttasks.BiliBiliExportTaskJob; import com.zhiweidata.automatictest.barragecrawlerserver.exporttasks.BiliBiliExportTaskJob;
import java.net.URL; import java.net.URL;
import java.util.List; import java.util.List;
...@@ -38,7 +38,7 @@ public class BiliBiliCreateTaskJob extends CreateTaskJob { ...@@ -38,7 +38,7 @@ public class BiliBiliCreateTaskJob extends CreateTaskJob {
roomList.forEach(room -> { roomList.forEach(room -> {
try { try {
Map<?, ?> roomMap = (Map<?, ?>) room; Map<?, ?> roomMap = (Map<?, ?>) room;
BarrageCollectionTask collectionTask = BiliBiliCreateTaskJob.super.createCollectionTask(baseUrl + roomMap.get("link"), currentTime); BarrageCollectionTestTask collectionTask = BiliBiliCreateTaskJob.super.createCollectionTask(baseUrl + roomMap.get("link"), currentTime);
BiliBiliCreateTaskJob.super.createExportTask(collectionTask, BiliBiliExportTaskJob.class); BiliBiliCreateTaskJob.super.createExportTask(collectionTask, BiliBiliExportTaskJob.class);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
......
package com.zhiweidata.automatictest.barragecrawlerserver.createtasks; package com.zhiweidata.automatictest.barragecrawlerserver.createtasks;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.ServerResponseMessage;
import com.zhiweidata.automatictest.barragecrawlerserver.exporttasks.BarrageExportTaskJob; import com.zhiweidata.automatictest.barragecrawlerserver.exporttasks.BarrageExportTaskJob;
import com.zhiweidata.automatictest.barragecrawlerserver.mapper.BarrageCollectionTestTaskMapper;
import com.zhiweidata.automatictest.barragecrawlerserver.mapper.ServerResponseMessageMapper;
import com.zhiweidata.automatictest.barragecrawlerserver.util.TimeUtil; import com.zhiweidata.automatictest.barragecrawlerserver.util.TimeUtil;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity; import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType; import org.apache.http.entity.ContentType;
import org.apache.ibatis.session.SqlSession;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.quartz.Job; import org.quartz.Job;
import org.quartz.JobBuilder; import org.quartz.JobBuilder;
...@@ -24,10 +25,10 @@ import org.quartz.TriggerBuilder; ...@@ -24,10 +25,10 @@ import org.quartz.TriggerBuilder;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.BARRAGE_COLLECTION_TASK_JOB_KEY; import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.BARRAGE_COLLECTION_TASK_JOB_KEY;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.EXPORT_START_MAX_DELAY; import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.EXPORT_START_MAX_DELAY;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.MONGO_TASK_REQUEST_COLLECTION;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.TASK_URL; import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.TASK_URL;
import static com.zhiweidata.automatictest.publics.BeanContainer.HTTP_CLIENT; import static com.zhiweidata.automatictest.publics.BeanContainer.HTTP_CLIENT;
import static com.zhiweidata.automatictest.publics.BeanContainer.SCHEDULER; import static com.zhiweidata.automatictest.publics.BeanContainer.SCHEDULER;
import static com.zhiweidata.automatictest.publics.BeanContainer.SQL_SESSION_FACTORY;
import static com.zhiweidata.automatictest.publics.BeanContainer.STANDARD_DATE_FORMAT; import static com.zhiweidata.automatictest.publics.BeanContainer.STANDARD_DATE_FORMAT;
/** /**
...@@ -42,9 +43,9 @@ public abstract class CreateTaskJob implements Job { ...@@ -42,9 +43,9 @@ public abstract class CreateTaskJob implements Job {
* 请求弹幕采集服务器创建采集任务 * 请求弹幕采集服务器创建采集任务
*/ */
@NotNull @NotNull
protected final BarrageCollectionTask createCollectionTask(String liveUrl, long currentTime) throws IOException { protected final BarrageCollectionTestTask createCollectionTask(String liveUrl, long currentTime) throws IOException {
final String liveName = UUID.randomUUID().toString(); final String liveName = UUID.randomUUID().toString();
BarrageCollectionTask collectionTask = new BarrageCollectionTask(liveUrl, liveName, currentTime); BarrageCollectionTestTask collectionTask = new BarrageCollectionTestTask(liveUrl, liveName, currentTime);
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
String startTime = STANDARD_DATE_FORMAT.format(collectionTask.getStartTime() * 1000L); String startTime = STANDARD_DATE_FORMAT.format(collectionTask.getStartTime() * 1000L);
String endTime = STANDARD_DATE_FORMAT.format(collectionTask.getEndTime() * 1000L); String endTime = STANDARD_DATE_FORMAT.format(collectionTask.getEndTime() * 1000L);
...@@ -54,18 +55,22 @@ public abstract class CreateTaskJob implements Job { ...@@ -54,18 +55,22 @@ public abstract class CreateTaskJob implements Job {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
post.setEntity(new ByteArrayEntity(objectMapper.writeValueAsBytes(collectionTask), ContentType.APPLICATION_JSON)); post.setEntity(new ByteArrayEntity(objectMapper.writeValueAsBytes(collectionTask), ContentType.APPLICATION_JSON));
HttpResponse response = HTTP_CLIENT.execute(post); HttpResponse response = HTTP_CLIENT.execute(post);
Map<?, ?> jsonMap = objectMapper.readValue(response.getEntity().getContent(), Map.class); ServerResponseMessage responseMessage = objectMapper.readValue(response.getEntity().getContent(), ServerResponseMessage.class);
responseMessage.setName(collectionTask.getName());
collectionTask.setCode((Integer) jsonMap.get("code")); try (SqlSession session = SQL_SESSION_FACTORY.openSession(true)) {
collectionTask.setMessage((String) jsonMap.get("message")); BarrageCollectionTestTaskMapper testTaskMapper = session.getMapper(BarrageCollectionTestTaskMapper.class);
MONGO_TASK_REQUEST_COLLECTION.insertOne(collectionTask); testTaskMapper.insert(collectionTask);
ServerResponseMessageMapper messageMapper = session.getMapper(ServerResponseMessageMapper.class);
messageMapper.insert(responseMessage);
}
return collectionTask; return collectionTask;
} }
/** /**
* 创建定时导出任务 * 创建定时导出任务
*/ */
protected final <T extends BarrageExportTaskJob> void createExportTask(@NotNull BarrageCollectionTask collectionTask, Class<T> tClass) throws SchedulerException { protected final <T extends BarrageExportTaskJob> void createExportTask(@NotNull BarrageCollectionTestTask collectionTask, Class<T> tClass) throws SchedulerException {
JobBuilder jobBuilder = JobBuilder.newJob(tClass); JobBuilder jobBuilder = JobBuilder.newJob(tClass);
String name = collectionTask.getName(), group = tClass.getSimpleName(); String name = collectionTask.getName(), group = tClass.getSimpleName();
jobBuilder.withIdentity(name, group); jobBuilder.withIdentity(name, group);
......
...@@ -2,7 +2,7 @@ package com.zhiweidata.automatictest.barragecrawlerserver.createtasks; ...@@ -2,7 +2,7 @@ package com.zhiweidata.automatictest.barragecrawlerserver.createtasks;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import com.zhiweidata.automatictest.barragecrawlerserver.exception.BarrageHomePageException; import com.zhiweidata.automatictest.barragecrawlerserver.exception.BarrageHomePageException;
import com.zhiweidata.automatictest.barragecrawlerserver.exporttasks.DouyuExportTaskJob; import com.zhiweidata.automatictest.barragecrawlerserver.exporttasks.DouyuExportTaskJob;
import java.util.HashSet; import java.util.HashSet;
...@@ -44,7 +44,7 @@ public class DouyuCreateTaskJob extends CreateTaskJob { ...@@ -44,7 +44,7 @@ public class DouyuCreateTaskJob extends CreateTaskJob {
final long currentTime = System.currentTimeMillis(); final long currentTime = System.currentTimeMillis();
liveUrls.forEach(liveUrl -> { liveUrls.forEach(liveUrl -> {
try { try {
BarrageCollectionTask collectionTask = super.createCollectionTask(liveUrl, currentTime); BarrageCollectionTestTask collectionTask = super.createCollectionTask(liveUrl, currentTime);
super.createExportTask(collectionTask, DouyuExportTaskJob.class); super.createExportTask(collectionTask, DouyuExportTaskJob.class);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
......
...@@ -2,7 +2,7 @@ package com.zhiweidata.automatictest.barragecrawlerserver.createtasks; ...@@ -2,7 +2,7 @@ package com.zhiweidata.automatictest.barragecrawlerserver.createtasks;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import com.zhiweidata.automatictest.barragecrawlerserver.exception.BarrageHomePageException; import com.zhiweidata.automatictest.barragecrawlerserver.exception.BarrageHomePageException;
import com.zhiweidata.automatictest.barragecrawlerserver.exporttasks.HuyaExportTaskJob; import com.zhiweidata.automatictest.barragecrawlerserver.exporttasks.HuyaExportTaskJob;
import java.util.HashSet; import java.util.HashSet;
...@@ -96,7 +96,7 @@ public class HuyaCreateTaskJob extends CreateTaskJob { ...@@ -96,7 +96,7 @@ public class HuyaCreateTaskJob extends CreateTaskJob {
final long currentTime = System.currentTimeMillis(); final long currentTime = System.currentTimeMillis();
liveUrls.forEach(liveUrl -> { liveUrls.forEach(liveUrl -> {
try { try {
BarrageCollectionTask collectionTask = super.createCollectionTask(liveUrl, currentTime); BarrageCollectionTestTask collectionTask = super.createCollectionTask(liveUrl, currentTime);
super.createExportTask(collectionTask, HuyaExportTaskJob.class); super.createExportTask(collectionTask, HuyaExportTaskJob.class);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
......
package com.zhiweidata.automatictest.barragecrawlerserver.entity; package com.zhiweidata.automatictest.barragecrawlerserver.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Calendar; import java.util.Calendar;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
...@@ -11,16 +10,18 @@ import lombok.ToString; ...@@ -11,16 +10,18 @@ import lombok.ToString;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.MAX_COLLECTION_TIME; import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.MAX_COLLECTION_TIME;
/** /**
* 弹幕采集测试任务
*
* @author aszswaz * @author aszswaz
* @createTime 2021-08-24 15:53:39 * @createTime 2021-08-24 15:53:39
* @ide IntelliJ IDEA * @ide IntelliJ IDEA
*/ */
@SuppressWarnings("JavaDoc") @SuppressWarnings({"JavaDoc", "GrazieInspection"})
@Getter @Getter
@Setter @Setter
@EqualsAndHashCode @EqualsAndHashCode
@ToString @ToString
public class BarrageCollectionTask { public class BarrageCollectionTestTask {
/** /**
* 任务名称 * 任务名称
*/ */
...@@ -41,18 +42,8 @@ public class BarrageCollectionTask { ...@@ -41,18 +42,8 @@ public class BarrageCollectionTask {
*/ */
@JsonProperty(value = "endTime") @JsonProperty(value = "endTime")
private Integer endTime; private Integer endTime;
/**
* 服务器的响应代码
*/
@JsonIgnore
private int code;
/**
* 响应信息
*/
@JsonIgnore
private String message;
public BarrageCollectionTask(String liveUrl, String name, long currentTime) { public BarrageCollectionTestTask(String liveUrl, String name, long currentTime) {
this.url = liveUrl; this.url = liveUrl;
this.name = name; this.name = name;
......
...@@ -7,33 +7,63 @@ import java.io.Serializable; ...@@ -7,33 +7,63 @@ import java.io.Serializable;
import lombok.Data; import lombok.Data;
/** /**
* 弹幕信息实体类 * 弹幕导出信息
* *
* @author aszswaz * @author aszswaz
* @createTime 2021-09-06 11:40:09 * @createTime 2021-09-06 11:40:09
* @ide IntelliJ IDEA * @ide IntelliJ IDEA
*/ */
@SuppressWarnings("JavaDoc") @SuppressWarnings({"JavaDoc", "GrazieInspection"})
@Data @Data
public class BarrageTaskResponse implements Serializable { public class BarrageExportInfo implements Serializable {
/**
* 任务ID
*/
@JsonProperty(value = "id") @JsonProperty(value = "id")
private String id; private String id;
/**
* 任务名称
*/
@JsonProperty(value = "name") @JsonProperty(value = "name")
private String name; private String name;
/**
* 直播间地址
*/
@JsonProperty(value = "url") @JsonProperty(value = "url")
private String url; private String url;
/**
* 直播间ID
*/
@JsonProperty(value = "roomId") @JsonProperty(value = "roomId")
private String roomId; private String roomId;
/**
* 任务开始时间
*/
@JsonProperty(value = "startTime") @JsonProperty(value = "startTime")
private int startTime; private int startTime;
/**
* 任务结束时间
*/
@JsonProperty(value = "endTime") @JsonProperty(value = "endTime")
private int endTime; private int endTime;
/**
* 任务执行状态
*/
@JsonProperty(value = "status") @JsonProperty(value = "status")
private BarrageStatusEnums status; private BarrageStatusEnums status;
/**
* 直播间平台
*/
@JsonProperty(value = "platform") @JsonProperty(value = "platform")
private PlatformEnum platform; private PlatformEnum platform;
/**
* 任务创建时间
*/
@JsonProperty(value = "createTime") @JsonProperty(value = "createTime")
private int createTime; private int createTime;
/**
* 弹幕采集量
*/
@JsonProperty(value = "collectionCount") @JsonProperty(value = "collectionCount")
private int collectionCount; private int collectionCount;
} }
package com.zhiweidata.automatictest.barragecrawlerserver.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* 服务器响应信息
*
* @author aszswaz
* @createTime 2021-09-09 14:18:29
* @ide IntelliJ IDEA
*/
@SuppressWarnings("JavaDoc")
@Data
public class ServerResponseMessage {
@JsonIgnore
private String name;
@JsonProperty(value = "code")
private int code;
@JsonProperty(value = "message")
private String message;
}
...@@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory; ...@@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.CACHE_DIR; import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.CACHE_DIR;
import static java.util.Objects.isNull; import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
/** /**
...@@ -32,9 +33,8 @@ public interface BarrageExportTaskJob extends Job { ...@@ -32,9 +33,8 @@ public interface BarrageExportTaskJob extends Job {
* *
* @return 解压得到的文件 * @return 解压得到的文件
*/ */
default List<File> write(String taskId, InputStream inputStream) throws IOException { default List<File> write(File cacheDir, InputStream inputStream) throws IOException {
final File outDir = new File(CACHE_DIR, taskId); if (!cacheDir.exists()) if (!cacheDir.mkdirs()) log.error("文件夹{}创建失败", cacheDir.getName());
if (!outDir.exists()) if (!outDir.mkdirs()) log.error("文件夹{}创建失败", outDir.getName());
final List<File> outFiles = new ArrayList<>(); final List<File> outFiles = new ArrayList<>();
try (ZipInputStream zipInputStream = new ZipInputStream(inputStream)) { try (ZipInputStream zipInputStream = new ZipInputStream(inputStream)) {
...@@ -43,7 +43,7 @@ public interface BarrageExportTaskJob extends Job { ...@@ -43,7 +43,7 @@ public interface BarrageExportTaskJob extends Job {
while (true) { while (true) {
ZipEntry zipEntry = zipInputStream.getNextEntry(); ZipEntry zipEntry = zipInputStream.getNextEntry();
if (isNull(zipEntry)) break; if (isNull(zipEntry)) break;
File execFile = new File(requireNonNull(zipEntry.getName())); File execFile = new File(cacheDir, requireNonNull(zipEntry.getName()));
try (FileOutputStream fileOutputStream = new FileOutputStream(execFile)) { try (FileOutputStream fileOutputStream = new FileOutputStream(execFile)) {
while ((len = zipInputStream.read(buff)) != -1) fileOutputStream.write(buff, 0, len); while ((len = zipInputStream.read(buff)) != -1) fileOutputStream.write(buff, 0, len);
} }
...@@ -53,4 +53,19 @@ public interface BarrageExportTaskJob extends Job { ...@@ -53,4 +53,19 @@ public interface BarrageExportTaskJob extends Job {
} }
return outFiles; return outFiles;
} }
/**
* 删除文件
*/
default void removeFile(File file) {
// 如果是文件夹,先删除文件夹中的文件
if (file.isDirectory()) {
File[] files = file.listFiles();
if (nonNull(files)) {
for (File subFile : files) this.removeFile(subFile);
}
}
// 删除文件夹或文件
if (!file.delete()) log.error("文件夹:{}删除失败", file.getName());
}
} }
...@@ -3,8 +3,8 @@ package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks; ...@@ -3,8 +3,8 @@ package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.event.SyncReadListener; import com.alibaba.excel.event.SyncReadListener;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageTaskResponse; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageExportInfo;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
...@@ -20,7 +20,7 @@ import org.quartz.JobExecutionContext; ...@@ -20,7 +20,7 @@ import org.quartz.JobExecutionContext;
import org.quartz.SchedulerException; import org.quartz.SchedulerException;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.BARRAGE_COLLECTION_TASK_JOB_KEY; import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.BARRAGE_COLLECTION_TASK_JOB_KEY;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.MONGO_TASK_REQUEST_COLLECTION; import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.CACHE_DIR;
import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.TASK_URL; import static com.zhiweidata.automatictest.barragecrawlerserver.config.BaseConfig.TASK_URL;
import static com.zhiweidata.automatictest.publics.BeanContainer.HTTP_CLIENT; import static com.zhiweidata.automatictest.publics.BeanContainer.HTTP_CLIENT;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
...@@ -47,7 +47,7 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob { ...@@ -47,7 +47,7 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob {
public void execute(JobExecutionContext context) { public void execute(JobExecutionContext context) {
try { try {
JobDataMap jobDataMap = requireNonNull(context.getMergedJobDataMap()); JobDataMap jobDataMap = requireNonNull(context.getMergedJobDataMap());
BarrageCollectionTask collectionTask = (BarrageCollectionTask) requireNonNull(jobDataMap.get(BARRAGE_COLLECTION_TASK_JOB_KEY)); BarrageCollectionTestTask collectionTask = (BarrageCollectionTestTask) requireNonNull(jobDataMap.get(BARRAGE_COLLECTION_TASK_JOB_KEY));
this.export(collectionTask); this.export(collectionTask);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
...@@ -57,7 +57,7 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob { ...@@ -57,7 +57,7 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob {
/** /**
* 尝试导出弹幕 * 尝试导出弹幕
*/ */
public void export(@NotNull BarrageCollectionTask collectionTask) throws IOException, SchedulerException { public void export(@NotNull BarrageCollectionTestTask collectionTask) throws IOException, SchedulerException {
String url = TASK_URL + "?limit=20&page=1&name=" + collectionTask.getName(); String url = TASK_URL + "?limit=20&page=1&name=" + collectionTask.getName();
HttpResponse response = HTTP_CLIENT.execute(new HttpGet(url)); HttpResponse response = HTTP_CLIENT.execute(new HttpGet(url));
...@@ -71,14 +71,14 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob { ...@@ -71,14 +71,14 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob {
Map<?, ?> dataMap = (Map<?, ?>) requireNonNull(jsonMap.get("data")); Map<?, ?> dataMap = (Map<?, ?>) requireNonNull(jsonMap.get("data"));
List<?> dataList = (List<?>) requireNonNull(dataMap.get("list")); List<?> dataList = (List<?>) requireNonNull(dataMap.get("list"));
BarrageTaskResponse taskResponse = jsonMapper.convertValue(dataList.get(0), BarrageTaskResponse.class); BarrageExportInfo taskResponse = jsonMapper.convertValue(dataList.get(0), BarrageExportInfo.class);
this.checkFile(collectionTask, taskResponse); this.checkFile(collectionTask, taskResponse);
} }
/** /**
* 下载excel文件,并检查excel文件 * 下载excel文件,并检查excel文件
*/ */
private void checkFile(@NotNull BarrageCollectionTask collectionTask, @NotNull BarrageTaskResponse taskResponse) throws IOException { private void checkFile(@NotNull BarrageCollectionTestTask collectionTask, @NotNull BarrageExportInfo taskResponse) throws IOException {
String url = TASK_URL + "/" + taskResponse.getId() + "/barrage"; String url = TASK_URL + "/" + taskResponse.getId() + "/barrage";
HttpGet get = new HttpGet(url); HttpGet get = new HttpGet(url);
HttpResponse response = HTTP_CLIENT.execute(get); HttpResponse response = HTTP_CLIENT.execute(get);
...@@ -88,20 +88,20 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob { ...@@ -88,20 +88,20 @@ public class BiliBiliExportTaskJob implements BarrageExportTaskJob {
Map<?, ?> jsonMap = jsonMapper.readValue(response.getEntity().getContent(), Map.class); Map<?, ?> jsonMap = jsonMapper.readValue(response.getEntity().getContent(), Map.class);
String message = (String) jsonMap.get("message"); String message = (String) jsonMap.get("message");
log.info(message); log.info(message);
collectionTask.setCode((Integer) jsonMap.get("code"));
collectionTask.setMessage(message);
MONGO_TASK_REQUEST_COLLECTION.insertOne(collectionTask);
} else { } else {
List<File> excelFiles = this.write(taskResponse.getId(), response.getEntity().getContent()); final File cacheDir = new File(CACHE_DIR, taskResponse.getId());
List<File> excelFiles = this.write(cacheDir, response.getEntity().getContent());
// 检查文件中的数据量 // 检查文件中的数据量
excelFiles.forEach(excelFile -> { for (File excelFile : excelFiles) {
List<Map<Integer, String>> dataList = EasyExcel.read(excelFile, new SyncReadListener()).doReadAllSync(); List<Map<Integer, String>> dataList = EasyExcel.read(excelFile, new SyncReadListener()).doReadAllSync();
if (dataList.isEmpty()) { if (dataList.isEmpty()) {
log.error("任务ID:{},文件:{}为空", taskResponse.getId(), excelFile.getName()); log.error("任务ID:{},文件:{}为空", taskResponse.getId(), excelFile.getName());
return; return;
} }
log.info("任务ID:{},文件:{}弹幕数量:{}", taskResponse.getId(), excelFile.getName(), dataList.size()); log.info("任务ID:{},文件:{}弹幕数量:{}", taskResponse.getId(), excelFile.getName(), dataList.size());
}); }
// 删除文件
this.removeFile(cacheDir);
} }
} }
} }
package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks; package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.quartz.JobDataMap; import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
...@@ -22,7 +22,7 @@ public class DouyuExportTaskJob implements BarrageExportTaskJob { ...@@ -22,7 +22,7 @@ public class DouyuExportTaskJob implements BarrageExportTaskJob {
public void execute(JobExecutionContext context) { public void execute(JobExecutionContext context) {
try { try {
JobDataMap dataMap = requireNonNull(context.getMergedJobDataMap()); JobDataMap dataMap = requireNonNull(context.getMergedJobDataMap());
BarrageCollectionTask collectionTask = (BarrageCollectionTask) requireNonNull(dataMap.get(BARRAGE_COLLECTION_TASK_JOB_KEY)); BarrageCollectionTestTask collectionTask = (BarrageCollectionTestTask) requireNonNull(dataMap.get(BARRAGE_COLLECTION_TASK_JOB_KEY));
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
......
package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks; package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.quartz.JobDataMap; import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
...@@ -22,7 +22,7 @@ public class HuyaExportTaskJob implements BarrageExportTaskJob { ...@@ -22,7 +22,7 @@ public class HuyaExportTaskJob implements BarrageExportTaskJob {
public void execute(JobExecutionContext context) { public void execute(JobExecutionContext context) {
try { try {
JobDataMap dataMap = requireNonNull(context.getMergedJobDataMap()); JobDataMap dataMap = requireNonNull(context.getMergedJobDataMap());
BarrageCollectionTask collectionTask = (BarrageCollectionTask) requireNonNull(dataMap.get(BARRAGE_COLLECTION_TASK_JOB_KEY)); BarrageCollectionTestTask collectionTask = (BarrageCollectionTestTask) requireNonNull(dataMap.get(BARRAGE_COLLECTION_TASK_JOB_KEY));
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
......
package com.zhiweidata.automatictest.barragecrawlerserver.mapper;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import org.apache.ibatis.annotations.Param;
/**
* 测试任务信息Mapper
*
* @author aszswaz
* @createTime 2021-09-09 11:31:16
* @ide IntelliJ IDEA
*/
@SuppressWarnings("JavaDoc")
public interface BarrageCollectionTestTaskMapper {
void insert(
@Param(value = "task") BarrageCollectionTestTask testTask
);
}
package com.zhiweidata.automatictest.barragecrawlerserver.mapper;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.ServerResponseMessage;
import org.apache.ibatis.annotations.Param;
/**
* 服务器响应信息存储
*
* @author aszswaz
* @createTime 2021-09-09 14:23:25
* @ide IntelliJ IDEA
*/
@SuppressWarnings("JavaDoc")
public interface ServerResponseMessageMapper {
void insert(@Param(value = "message") ServerResponseMessage responseMessage);
}
<?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="com.zhiweidata.automatictest.barragecrawlerserver.mapper.BarrageCollectionTestTaskMapper">
<resultMap id="BarrageCollectionTask"
type="com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask">
<result column="name" property="name"/>
<result column="url" property="url"/>
<result column="start_time" property="startTime"/>
<result column="end_time" property="endTime"/>
</resultMap>
<insert id="insert">
INSERT INTO barrage_collection_test_task (name, url, start_time, end_time)
VALUE (#{task.name}, #{task.url}, #{task.startTime}, #{task.endTime})
</insert>
</mapper>
\ No newline at end of file
<?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="com.zhiweidata.automatictest.barragecrawlerserver.mapper.ServerResponseMessageMapper">
<resultMap id="ServerResponseMessage"
type="com.zhiweidata.automatictest.barragecrawlerserver.entity.ServerResponseMessage">
<result property="name" column="name"/>
<result property="code" column="code"/>
<result property="message" column="message"/>
</resultMap>
<insert id="insert">
INSERT INTO server_response_message(barrage_collection_test_task_name, code, message)
VALUE (#{message.name}, #{message.code}, #{message.message})
</insert>
</mapper>
\ No newline at end of file
package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks; package com.zhiweidata.automatictest.barragecrawlerserver.exporttasks;
import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTask; import com.zhiweidata.automatictest.barragecrawlerserver.entity.BarrageCollectionTestTask;
import java.io.IOException; import java.io.IOException;
import org.quartz.SchedulerException; import org.quartz.SchedulerException;
import static com.zhiweidata.automatictest.publics.BeanContainer.SCHEDULER;
/** /**
* @author aszswaz * @author aszswaz
* @createTime 2021-09-06 10:03:42 * @createTime 2021-09-06 10:03:42
...@@ -13,11 +15,12 @@ import org.quartz.SchedulerException; ...@@ -13,11 +15,12 @@ import org.quartz.SchedulerException;
class BiliBiliExportTaskJobTest { class BiliBiliExportTaskJobTest {
public static void main(String[] args) throws SchedulerException, IOException { public static void main(String[] args) throws SchedulerException, IOException {
BarrageCollectionTask collectionTask = new BarrageCollectionTask( BarrageCollectionTestTask collectionTask = new BarrageCollectionTestTask(
"https://live.bilibili.com/21544906?hotRank=0", "6783d422-840f-4230-9875-81ee91c06d09", System.currentTimeMillis() "https://live.bilibili.com/1440094?hotRank=0", "a9e30479-e231-46f3-991c-a8858400678f", System.currentTimeMillis()
); );
BiliBiliExportTaskJob exportTaskJob = new BiliBiliExportTaskJob(); BiliBiliExportTaskJob exportTaskJob = new BiliBiliExportTaskJob();
exportTaskJob.export(collectionTask); exportTaskJob.export(collectionTask);
SCHEDULER.shutdown(true);
} }
} }
\ No newline at end of file
...@@ -43,11 +43,23 @@ ...@@ -43,11 +43,23 @@
<version>${quartz.version}</version> <version>${quartz.version}</version>
</dependency> </dependency>
<!--mongodb client--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency> <dependency>
<groupId>org.mongodb</groupId> <groupId>org.mybatis</groupId>
<artifactId>mongodb-driver-sync</artifactId> <artifactId>mybatis</artifactId>
<version>${mongodb.version}</version> <version>3.5.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
......
package com.zhiweidata.automatictest.publics; package com.zhiweidata.automatictest.publics;
import com.mongodb.client.MongoClient; import java.io.File;
import com.mongodb.client.MongoClients; import java.io.IOException;
import com.mongodb.client.MongoDatabase; import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.FastDateFormat; import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.http.client.HttpClient; import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.bson.codecs.configuration.CodecProvider; import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.bson.codecs.configuration.CodecRegistry; import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.bson.codecs.pojo.PojoCodecProvider; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.jetbrains.annotations.NotNull;
import org.quartz.Scheduler; import org.quartz.Scheduler;
import org.quartz.SchedulerException; import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.StdSchedulerFactory;
import static com.mongodb.MongoClientSettings.getDefaultCodecRegistry; import static java.util.Objects.requireNonNull;
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
/** /**
* Bean容器 * Bean容器
...@@ -39,17 +43,13 @@ public class BeanContainer { ...@@ -39,17 +43,13 @@ public class BeanContainer {
*/ */
public static final Scheduler SCHEDULER; public static final Scheduler SCHEDULER;
/** /**
* mongodb 客户端
*/
public static final MongoClient MONGO_CLIENT;
/**
* 整个项目专用数据库
*/
public static final MongoDatabase MONGO_DATABASE;
/**
* 标准日期格式化 * 标准日期格式化
*/ */
public static final FastDateFormat STANDARD_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.SSS"); public static final FastDateFormat STANDARD_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.SSS");
/**
* mybatis session工厂
*/
public static final SqlSessionFactory SQL_SESSION_FACTORY;
static { static {
...@@ -71,11 +71,46 @@ public class BeanContainer { ...@@ -71,11 +71,46 @@ public class BeanContainer {
configBuilder.setRedirectsEnabled(true); configBuilder.setRedirectsEnabled(true);
clientBuilder.setDefaultRequestConfig(configBuilder.build()); clientBuilder.setDefaultRequestConfig(configBuilder.build());
HTTP_CLIENT = clientBuilder.build(); HTTP_CLIENT = clientBuilder.build();
}
static {
SqlSessionFactory sqlSessionFactory = null;
try (InputStream inputStream = Resources.getResourceAsStream("mybatis.xml")) {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 先读取xml中的配置
XMLConfigBuilder configBuilder = new XMLConfigBuilder(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
configBuilder.parse();
Configuration configuration = configBuilder.getConfiguration();
// 扫描mapper
File mappersDir = Resources.getResourceAsFile("mappers");
scanMapper(mappersDir, configuration);
MONGO_CLIENT = MongoClients.create("mongodb://admin:z199809051593@192.168.0.119"); sqlSessionFactory = builder.build(configuration);
// 启用 POJO 对象映射 } catch (Exception e) {
CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build(); log.error(e.getMessage(), e);
CodecRegistry pojoCodecRegistry = fromRegistries(getDefaultCodecRegistry(), fromProviders(pojoCodecProvider)); }
MONGO_DATABASE = MONGO_CLIENT.getDatabase("automatic_test").withCodecRegistry(pojoCodecRegistry); SQL_SESSION_FACTORY = sqlSessionFactory;
}
/**
* 扫描mapper
*/
private static void scanMapper(@NotNull File file, @NotNull Configuration configuration) throws IOException {
if (file.isDirectory()) {
File[] mappers = requireNonNull(file.listFiles());
for (File mapper : mappers) {
scanMapper(mapper, configuration);
}
} else {
String fileName = file.getName();
if (".xml".equals(fileName.substring(fileName.lastIndexOf(".")))) {
String resource = file.toPath().toUri().toString();
try (InputStream inputStream = Resources.getUrlAsStream(resource)) {
XMLMapperBuilder mapperBuilder = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());
mapperBuilder.parse();
}
}
}
} }
} }
package com.zhiweidata.automatictest.publics;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.util.Properties;
import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.datasource.DataSourceFactory;
import org.jetbrains.annotations.NotNull;
/**
* mysql的数据库连接池Hikari工厂
*
* @author aszswaz
* @createTime 2021-09-09 10:41:07
* @ide IntelliJ IDEA
*/
@Slf4j
@SuppressWarnings("JavaDoc")
public class HikariDataSourceFactory implements DataSourceFactory {
/**
* 数据库连接池
*/
private HikariDataSource dataSource;
@Override
public void setProperties(@NotNull Properties props) {
final String initSql = "SHOW DATABASES";
final long timeout = 60000;
HikariConfig config = new HikariConfig();
config.setAutoCommit(true);
config.setDriverClassName(props.getProperty("driver"));
config.setUsername(props.getProperty("username"));
config.setPassword(props.getProperty("password"));
config.setJdbcUrl(props.getProperty("url"));
config.setConnectionTestQuery(initSql);
config.setConnectionInitSql(initSql);
config.setConnectionTimeout(timeout);
config.setIdleTimeout(timeout << 1);
config.setInitializationFailTimeout(timeout);
config.setMaximumPoolSize(10);
config.setMinimumIdle(5);
config.setMaxLifetime(timeout << 2);
this.dataSource = new HikariDataSource(config);
}
@Override
public DataSource getDataSource() {
return this.dataSource;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="com.zhiweidata.automatictest.publics.HikariDataSourceFactory">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.0.119:3306/automatic_test?useSSL=FALSE&amp;serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="z199809051593"/>
</dataSource>
</environment>
</environments>
</configuration>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment