2023-02-28 15:26:17 +08:00
|
|
|
package com.galaxy.tsg.function;
|
|
|
|
|
|
|
|
|
|
import com.galaxy.tsg.pojo.*;
|
2023-05-23 17:48:06 +08:00
|
|
|
import org.apache.flink.api.java.tuple.Tuple5;
|
2023-02-28 15:26:17 +08:00
|
|
|
import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction;
|
|
|
|
|
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
|
|
|
|
|
import org.apache.flink.util.Collector;
|
|
|
|
|
|
|
|
|
|
import java.util.PriorityQueue;
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
public class metricsCalculate extends ProcessWindowFunction<
|
|
|
|
|
transformEntity, // 输入类型
|
|
|
|
|
resultEntity, // 输出类型
|
|
|
|
|
Tuple5<String, Long, String, String, String>, // 键类型
|
2023-02-28 15:26:17 +08:00
|
|
|
TimeWindow> { // 窗口类型
|
|
|
|
|
private final int topSize;
|
|
|
|
|
private final String key;
|
|
|
|
|
// Set<ObjectEntity> allSet = new TreeSet<ObjectEntity>() ;
|
2023-05-23 17:48:06 +08:00
|
|
|
private PriorityQueue<sessionResultEntity> sessionOrderEntity;
|
|
|
|
|
private PriorityQueue<packetResultEntity> packetOrderEntity;
|
|
|
|
|
private PriorityQueue<byteResultEntity> byteOrderEntity;
|
2023-02-28 15:26:17 +08:00
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
private long windowEndTimestamp;
|
|
|
|
|
|
|
|
|
|
public metricsCalculate(int i, String key) {
|
2023-02-28 15:26:17 +08:00
|
|
|
this.key = key;
|
|
|
|
|
this.topSize = i;
|
2023-05-23 17:48:06 +08:00
|
|
|
this.sessionOrderEntity = new PriorityQueue<>();
|
|
|
|
|
this.packetOrderEntity = new PriorityQueue<>();
|
|
|
|
|
this.byteOrderEntity = new PriorityQueue<>();
|
2023-02-28 15:26:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
2023-05-23 17:48:06 +08:00
|
|
|
public void process(Tuple5<String, Long, String, String, String> s,
|
2023-02-28 15:26:17 +08:00
|
|
|
Context context,
|
2023-05-23 17:48:06 +08:00
|
|
|
Iterable<transformEntity> elements, Collector<resultEntity> out) throws Exception {
|
|
|
|
|
|
|
|
|
|
if (context.window().getEnd() == windowEndTimestamp) {
|
|
|
|
|
|
2023-02-28 15:26:17 +08:00
|
|
|
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
if (elements.iterator().hasNext()) {
|
2023-02-28 15:26:17 +08:00
|
|
|
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
transformEntity objectTransformEntity = elements.iterator().next();
|
2023-02-28 15:26:17 +08:00
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
if (sessionOrderEntity.size() < topSize) {
|
|
|
|
|
sessionOrderEntity.add(enrichessionResult(context.window().getEnd(), objectTransformEntity));
|
|
|
|
|
} else {
|
|
|
|
|
if (sessionOrderEntity.peek() != null) {
|
|
|
|
|
sessionResultEntity res = sessionOrderEntity.peek();
|
|
|
|
|
if (res.getSessions() <= objectTransformEntity.getSessions()) {
|
|
|
|
|
sessionOrderEntity.poll();
|
|
|
|
|
sessionOrderEntity.add(enrichessionResult(context.window().getEnd(), objectTransformEntity));
|
|
|
|
|
}
|
2023-02-28 15:26:17 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
if (packetOrderEntity.size() < topSize) {
|
|
|
|
|
packetOrderEntity.add(enrichPacketResult(context.window().getEnd(), objectTransformEntity));
|
|
|
|
|
} else {
|
|
|
|
|
if (packetOrderEntity.peek() != null) {
|
|
|
|
|
packetResultEntity res = packetOrderEntity.peek();
|
|
|
|
|
if ((res.getIn_pkts() + res.getOut_pkts()) <= (objectTransformEntity.getIn_pkts() + objectTransformEntity.getOut_pkts())) {
|
|
|
|
|
packetOrderEntity.poll();
|
|
|
|
|
packetOrderEntity.add(enrichPacketResult(context.window().getEnd() , objectTransformEntity));
|
|
|
|
|
}
|
2023-02-28 15:26:17 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
if (byteOrderEntity.size() < topSize) {
|
|
|
|
|
byteOrderEntity.add(enrichByteResult(context.window().getEnd(), objectTransformEntity));
|
|
|
|
|
} else {
|
|
|
|
|
if (byteOrderEntity.peek() != null) {
|
|
|
|
|
byteResultEntity res = byteOrderEntity.peek();
|
|
|
|
|
if ((res.getIn_bytes() + res.getOut_bytes()) <= (objectTransformEntity.getIn_bytes() + objectTransformEntity.getOut_bytes())) {
|
|
|
|
|
byteOrderEntity.poll();
|
|
|
|
|
byteOrderEntity.add(enrichByteResult(context.window().getEnd(), objectTransformEntity));
|
|
|
|
|
}
|
2023-02-28 15:26:17 +08:00
|
|
|
}
|
|
|
|
|
}
|
2023-05-23 17:48:06 +08:00
|
|
|
|
|
|
|
|
|
2023-02-28 15:26:17 +08:00
|
|
|
}
|
2023-05-23 17:48:06 +08:00
|
|
|
} else {
|
|
|
|
|
windowEndTimestamp = context.window().getEnd();
|
2023-02-28 15:26:17 +08:00
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
for (com.galaxy.tsg.pojo.sessionResultEntity sessionResultEntity : sessionOrderEntity) {
|
2023-02-28 15:26:17 +08:00
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
resultEntity en = new resultEntity();
|
2023-02-28 15:26:17 +08:00
|
|
|
en.setOrder_by("sessions");
|
2023-05-23 17:48:06 +08:00
|
|
|
en.setStat_time(context.window().getEnd());
|
|
|
|
|
en.setSessionResultEntity(sessionResultEntity);
|
2023-02-28 15:26:17 +08:00
|
|
|
out.collect(en);
|
|
|
|
|
}
|
2023-05-23 17:48:06 +08:00
|
|
|
sessionOrderEntity.clear();
|
2023-02-28 15:26:17 +08:00
|
|
|
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
for (com.galaxy.tsg.pojo.packetResultEntity packetResultEntity : packetOrderEntity) {
|
|
|
|
|
resultEntity en = new resultEntity();
|
2023-02-28 15:26:17 +08:00
|
|
|
en.setOrder_by("packets");
|
2023-05-23 17:48:06 +08:00
|
|
|
en.setStat_time(context.window().getEnd());
|
|
|
|
|
en.setPacketResultEntity(packetResultEntity);
|
2023-02-28 15:26:17 +08:00
|
|
|
out.collect(en);
|
|
|
|
|
}
|
2023-05-23 17:48:06 +08:00
|
|
|
packetOrderEntity.clear();
|
2023-02-28 15:26:17 +08:00
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
for (com.galaxy.tsg.pojo.byteResultEntity byteResultEntity : byteOrderEntity) {
|
|
|
|
|
resultEntity en = new resultEntity();
|
2023-02-28 15:26:17 +08:00
|
|
|
en.setOrder_by("bytes");
|
2023-05-23 17:48:06 +08:00
|
|
|
en.setStat_time(context.window().getEnd());
|
|
|
|
|
en.setByteResultEntity(byteResultEntity);
|
2023-02-28 15:26:17 +08:00
|
|
|
out.collect(en);
|
|
|
|
|
}
|
2023-05-23 17:48:06 +08:00
|
|
|
byteOrderEntity.clear();
|
2023-02-28 15:26:17 +08:00
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
}
|
2023-02-28 15:26:17 +08:00
|
|
|
}
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
public byteResultEntity enrichByteResult(Long time, transformEntity objectTransformEntity) {
|
|
|
|
|
byteResultEntity en = new byteResultEntity();
|
|
|
|
|
en.setVsys_id(objectTransformEntity.getVsys_id());
|
|
|
|
|
en.setTimestamp(time);
|
|
|
|
|
en.setSessions(objectTransformEntity.getSessions());
|
2023-02-28 15:26:17 +08:00
|
|
|
en.setOrder_by("bytes");
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
en.setServer_ip(objectTransformEntity.getServer_ip());
|
|
|
|
|
en.setClient_ip(objectTransformEntity.getClient_ip());
|
|
|
|
|
en.setSubscriber_id(objectTransformEntity.getSubscriber_id());
|
|
|
|
|
en.setFqdn(objectTransformEntity.getFqdn());
|
|
|
|
|
en.setExternal_ip(objectTransformEntity.getExternal_ip());
|
|
|
|
|
en.setInternal_ip(objectTransformEntity.getInternal_ip());
|
|
|
|
|
en.setDomain(objectTransformEntity.getDomain());
|
|
|
|
|
en.setDevice_group(objectTransformEntity.getDevice_group());
|
|
|
|
|
en.setData_center(objectTransformEntity.getData_center());
|
|
|
|
|
en.setIn_bytes(objectTransformEntity.getIn_bytes());
|
|
|
|
|
en.setIn_pkts(objectTransformEntity.getIn_pkts());
|
|
|
|
|
en.setOut_bytes(objectTransformEntity.getOut_bytes());
|
|
|
|
|
en.setOut_pkts(objectTransformEntity.getOut_pkts());
|
|
|
|
|
en.setKey_by(objectTransformEntity.getKey_by());
|
|
|
|
|
|
2023-02-28 15:26:17 +08:00
|
|
|
return en;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
public sessionResultEntity enrichessionResult(Long time, transformEntity objectTransformEntity) {
|
2023-02-28 15:26:17 +08:00
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
sessionResultEntity en = new sessionResultEntity();
|
|
|
|
|
en.setVsys_id(objectTransformEntity.getVsys_id());
|
|
|
|
|
en.setTimestamp(time);
|
|
|
|
|
en.setSessions(objectTransformEntity.getSessions());
|
|
|
|
|
en.setOrder_by("sessions");
|
|
|
|
|
en.setServer_ip(objectTransformEntity.getServer_ip());
|
|
|
|
|
en.setClient_ip(objectTransformEntity.getClient_ip());
|
|
|
|
|
en.setSubscriber_id(objectTransformEntity.getSubscriber_id());
|
|
|
|
|
en.setFqdn(objectTransformEntity.getFqdn());
|
|
|
|
|
en.setExternal_ip(objectTransformEntity.getExternal_ip());
|
|
|
|
|
en.setInternal_ip(objectTransformEntity.getInternal_ip());
|
|
|
|
|
en.setDomain(objectTransformEntity.getDomain());
|
|
|
|
|
en.setDevice_group(objectTransformEntity.getDevice_group());
|
|
|
|
|
en.setData_center(objectTransformEntity.getData_center());
|
|
|
|
|
en.setIn_bytes(objectTransformEntity.getIn_bytes());
|
|
|
|
|
en.setIn_pkts(objectTransformEntity.getIn_pkts());
|
|
|
|
|
en.setOut_bytes(objectTransformEntity.getOut_bytes());
|
|
|
|
|
en.setOut_pkts(objectTransformEntity.getOut_pkts());
|
|
|
|
|
en.setKey_by(objectTransformEntity.getKey_by());
|
|
|
|
|
return en;
|
2023-02-28 15:26:17 +08:00
|
|
|
}
|
|
|
|
|
|
2023-05-23 17:48:06 +08:00
|
|
|
public packetResultEntity enrichPacketResult(Long time, transformEntity objectTransformEntity) {
|
|
|
|
|
packetResultEntity en = new packetResultEntity();
|
|
|
|
|
en.setVsys_id(objectTransformEntity.getVsys_id());
|
|
|
|
|
en.setTimestamp(time);
|
|
|
|
|
en.setSessions(objectTransformEntity.getSessions());
|
|
|
|
|
en.setOrder_by("packets");
|
|
|
|
|
en.setServer_ip(objectTransformEntity.getServer_ip());
|
|
|
|
|
en.setClient_ip(objectTransformEntity.getClient_ip());
|
|
|
|
|
en.setSubscriber_id(objectTransformEntity.getSubscriber_id());
|
|
|
|
|
en.setFqdn(objectTransformEntity.getFqdn());
|
|
|
|
|
en.setExternal_ip(objectTransformEntity.getExternal_ip());
|
|
|
|
|
en.setInternal_ip(objectTransformEntity.getInternal_ip());
|
|
|
|
|
en.setDomain(objectTransformEntity.getDomain());
|
|
|
|
|
en.setDevice_group(objectTransformEntity.getDevice_group());
|
|
|
|
|
en.setData_center(objectTransformEntity.getData_center());
|
|
|
|
|
en.setIn_bytes(objectTransformEntity.getIn_bytes());
|
|
|
|
|
en.setIn_pkts(objectTransformEntity.getIn_pkts());
|
|
|
|
|
en.setOut_bytes(objectTransformEntity.getOut_bytes());
|
|
|
|
|
en.setOut_pkts(objectTransformEntity.getOut_pkts());
|
|
|
|
|
en.setKey_by(objectTransformEntity.getKey_by());
|
2023-02-28 15:26:17 +08:00
|
|
|
|
|
|
|
|
return en;
|
|
|
|
|
}
|
|
|
|
|
}
|