2020-07-08 19:44:46 +08:00
|
|
|
|
package cn.ac.iie.dao;
|
|
|
|
|
|
|
|
|
|
|
|
import cn.ac.iie.config.ApplicationConfig;
|
2020-07-23 19:09:12 +08:00
|
|
|
|
import cn.ac.iie.service.ingestion.ReadClickhouseData;
|
2020-07-20 19:36:32 +08:00
|
|
|
|
import cn.ac.iie.service.update.Document;
|
|
|
|
|
|
import cn.ac.iie.service.update.relationship.LocateFqdn2Ip;
|
|
|
|
|
|
import cn.ac.iie.service.update.relationship.LocateSubscriber2Ip;
|
|
|
|
|
|
import cn.ac.iie.service.update.relationship.VisitIp2Fqdn;
|
|
|
|
|
|
import cn.ac.iie.service.update.vertex.Fqdn;
|
|
|
|
|
|
import cn.ac.iie.service.update.vertex.Ip;
|
|
|
|
|
|
import cn.ac.iie.service.update.vertex.Subscriber;
|
2020-07-08 19:44:46 +08:00
|
|
|
|
import cn.ac.iie.utils.ArangoDBConnect;
|
|
|
|
|
|
import cn.ac.iie.utils.ExecutorThreadPool;
|
|
|
|
|
|
import com.arangodb.entity.BaseDocument;
|
|
|
|
|
|
import com.arangodb.entity.BaseEdgeDocument;
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
2020-07-23 19:09:12 +08:00
|
|
|
|
import java.lang.reflect.Constructor;
|
|
|
|
|
|
import java.sql.ResultSet;
|
2020-07-08 19:44:46 +08:00
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
import java.util.HashMap;
|
2020-07-23 19:09:12 +08:00
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
2020-07-08 19:44:46 +08:00
|
|
|
|
import java.util.concurrent.CountDownLatch;
|
2020-07-23 19:09:12 +08:00
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
|
import java.util.function.Supplier;
|
2020-07-08 19:44:46 +08:00
|
|
|
|
|
2020-07-20 19:36:32 +08:00
|
|
|
|
import static cn.ac.iie.dao.BaseArangoData.*;
|
|
|
|
|
|
import static cn.ac.iie.dao.BaseClickhouseData.*;
|
|
|
|
|
|
|
2020-07-09 17:41:43 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 更新图数据库业务类
|
2020-07-20 19:36:32 +08:00
|
|
|
|
* @author wlh
|
2020-07-09 17:41:43 +08:00
|
|
|
|
*/
|
2020-07-08 19:44:46 +08:00
|
|
|
|
public class UpdateGraphData {
|
|
|
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(UpdateGraphData.class);
|
|
|
|
|
|
private static ExecutorThreadPool pool = ExecutorThreadPool.getInstance();
|
|
|
|
|
|
private static ArangoDBConnect arangoManger = ArangoDBConnect.getInstance();
|
2020-07-23 19:09:12 +08:00
|
|
|
|
private static BaseArangoData baseArangoData = new BaseArangoData();
|
2020-07-17 19:28:03 +08:00
|
|
|
|
private static BaseClickhouseData baseClickhouseData = new BaseClickhouseData();
|
2020-07-23 19:09:12 +08:00
|
|
|
|
|
2020-07-08 19:44:46 +08:00
|
|
|
|
|
|
|
|
|
|
public void updateArango(){
|
2020-07-20 19:36:32 +08:00
|
|
|
|
long start = System.currentTimeMillis();
|
2020-07-08 19:44:46 +08:00
|
|
|
|
try {
|
2020-07-20 19:36:32 +08:00
|
|
|
|
|
2020-08-24 18:14:08 +08:00
|
|
|
|
// updateDocument(newVertexFqdnMap, historyVertexFqdnMap, "FQDN", Fqdn.class,BaseDocument.class,
|
|
|
|
|
|
// ReadClickhouseData::getVertexFqdnSql,ReadClickhouseData::getVertexFqdnDocument);
|
2020-07-20 19:36:32 +08:00
|
|
|
|
|
2020-08-24 18:14:08 +08:00
|
|
|
|
// updateDocument(newVertexIpMap,historyVertexIpMap,"IP", Ip.class,BaseDocument.class,
|
|
|
|
|
|
// ReadClickhouseData::getVertexIpSql,ReadClickhouseData::getVertexIpDocument);
|
2020-07-20 19:36:32 +08:00
|
|
|
|
|
2020-08-24 18:14:08 +08:00
|
|
|
|
// updateDocument(newVertexSubscriberMap,historyVertexSubscriberMap,"SUBSCRIBER", Subscriber.class,BaseDocument.class,
|
|
|
|
|
|
// ReadClickhouseData::getVertexSubscriberSql,ReadClickhouseData::getVertexSubscriberDocument);
|
2020-07-20 19:36:32 +08:00
|
|
|
|
|
2020-08-13 17:37:17 +08:00
|
|
|
|
updateDocument(newRelationFqdnAddressIpMap,historyRelationFqdnAddressIpMap,"R_LOCATE_FQDN2IP", LocateFqdn2Ip.class,BaseEdgeDocument.class,
|
2020-07-23 19:09:12 +08:00
|
|
|
|
ReadClickhouseData::getRelationshipFqdnAddressIpSql,ReadClickhouseData::getRelationFqdnAddressIpDocument);
|
2020-07-20 19:36:32 +08:00
|
|
|
|
|
2020-07-31 19:26:58 +08:00
|
|
|
|
// updateDocument(newRelationIpVisitFqdnMap,historyRelationIpVisitFqdnMap,"R_VISIT_IP2FQDN",
|
|
|
|
|
|
// VisitIp2Fqdn.class,BaseEdgeDocument.class,
|
|
|
|
|
|
// ReadClickhouseData::getRelationshipIpVisitFqdnSql,ReadClickhouseData::getRelationIpVisitFqdnDocument);
|
2020-07-23 19:09:12 +08:00
|
|
|
|
|
2020-08-24 18:14:08 +08:00
|
|
|
|
// updateDocument(newRelationSubsciberLocateIpMap,historyRelationSubsciberLocateIpMap,"R_LOCATE_SUBSCRIBER2IP",
|
|
|
|
|
|
// LocateSubscriber2Ip.class,BaseEdgeDocument.class,
|
|
|
|
|
|
// ReadClickhouseData::getRelationshipSubsciberLocateIpSql,ReadClickhouseData::getRelationshipSubsciberLocateIpDocument);
|
2020-07-20 19:36:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long last = System.currentTimeMillis();
|
2020-07-23 19:09:12 +08:00
|
|
|
|
LOG.info("iplearning application运行完毕,用时:"+(last - start));
|
2020-07-08 19:44:46 +08:00
|
|
|
|
}catch (Exception e){
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
}finally {
|
2020-07-09 17:41:43 +08:00
|
|
|
|
arangoManger.clean();
|
2020-07-20 19:36:32 +08:00
|
|
|
|
pool.shutdown();
|
2020-07-08 19:44:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-07-23 19:09:12 +08:00
|
|
|
|
private <T extends BaseDocument> void updateDocument(HashMap<Integer, HashMap<String, ArrayList<T>>> newMap,
|
|
|
|
|
|
ConcurrentHashMap<Integer, ConcurrentHashMap<String, T>> historyMap,
|
|
|
|
|
|
String collection,
|
|
|
|
|
|
Class<? extends Document<T>> taskType,
|
|
|
|
|
|
Class<T> docmentType,
|
|
|
|
|
|
Supplier<String> getSqlSupplier,
|
|
|
|
|
|
Function<ResultSet,T> formatResultFunc
|
|
|
|
|
|
) {
|
2020-07-09 17:41:43 +08:00
|
|
|
|
try {
|
|
|
|
|
|
|
2020-07-23 19:09:12 +08:00
|
|
|
|
baseArangoData.readHistoryData(collection,historyMap,docmentType);
|
|
|
|
|
|
LOG.info(collection+" 读取clickhouse,封装结果集");
|
|
|
|
|
|
baseClickhouseData.baseDocumentFromClickhouse(newMap, getSqlSupplier,formatResultFunc);
|
2020-07-08 19:44:46 +08:00
|
|
|
|
|
2020-07-23 19:09:12 +08:00
|
|
|
|
LOG.info(collection+" 开始更新");
|
2020-07-20 19:36:32 +08:00
|
|
|
|
long start = System.currentTimeMillis();
|
2020-07-23 19:09:12 +08:00
|
|
|
|
CountDownLatch countDownLatch = new CountDownLatch(ApplicationConfig.THREAD_POOL_NUMBER);
|
|
|
|
|
|
for (int i = 0; i < ApplicationConfig.THREAD_POOL_NUMBER; i++){
|
|
|
|
|
|
HashMap<String, ArrayList<T>> tmpNewMap = newMap.get(i);
|
|
|
|
|
|
ConcurrentHashMap<String, T> tmpHisMap = historyMap.get(i);
|
|
|
|
|
|
Constructor constructor = taskType.getConstructor(
|
|
|
|
|
|
HashMap.class,
|
|
|
|
|
|
ArangoDBConnect.class,
|
|
|
|
|
|
String.class,
|
|
|
|
|
|
ConcurrentHashMap.class,
|
|
|
|
|
|
CountDownLatch.class);
|
2020-07-31 19:26:58 +08:00
|
|
|
|
Document docTask = (Document)constructor.newInstance(tmpNewMap, arangoManger, collection, tmpHisMap, countDownLatch);
|
2020-07-23 19:09:12 +08:00
|
|
|
|
pool.executor(docTask);
|
2020-07-08 19:44:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
countDownLatch.await();
|
2020-07-20 19:36:32 +08:00
|
|
|
|
long last = System.currentTimeMillis();
|
2020-07-23 19:09:12 +08:00
|
|
|
|
LOG.info(collection+" 更新完毕,共耗时:"+(last-start));
|
2020-07-08 19:44:46 +08:00
|
|
|
|
}catch (Exception e){
|
|
|
|
|
|
e.printStackTrace();
|
2020-07-20 19:36:32 +08:00
|
|
|
|
}finally {
|
2020-07-23 19:09:12 +08:00
|
|
|
|
newMap.clear();
|
|
|
|
|
|
historyMap.clear();
|
2020-07-08 19:44:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|