Added writing logic
This commit is contained in:
parent
56ac04ede0
commit
d2800aa2bf
4 changed files with 48 additions and 9 deletions
|
|
@ -11,6 +11,5 @@ import ru.nbch.credit_tracker.enums.EventType;
|
||||||
public class SignalKafkaEvent {
|
public class SignalKafkaEvent {
|
||||||
private EventType eventType;
|
private EventType eventType;
|
||||||
|
|
||||||
private Long packageId;
|
private UserPackagePhoneData userPackagePhoneData;
|
||||||
// other data for signal
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,4 +12,6 @@ public class UserPackagePhoneData {
|
||||||
private String signalTypes;
|
private String signalTypes;
|
||||||
private Long phone;
|
private Long phone;
|
||||||
private String subjectId;
|
private String subjectId;
|
||||||
|
private String userId;
|
||||||
|
private String packageName;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -132,14 +132,13 @@ public class KafkaMonitoringService {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (UserPackagePhoneData userPackagePhoneData : userPackagePhoneDataList) {
|
for (UserPackagePhoneData userPackagePhoneData : userPackagePhoneDataList) {
|
||||||
Long packageId = userPackagePhoneData.getPackageId();
|
|
||||||
String subjectId = userPackagePhoneData.getSubjectId();
|
String subjectId = userPackagePhoneData.getSubjectId();
|
||||||
String signalTypes = userPackagePhoneData.getSignalTypes();
|
String signalTypes = userPackagePhoneData.getSignalTypes();
|
||||||
|
|
||||||
if (signalTypes.contains(signalType.toString())) {
|
if (signalTypes.contains(signalType.toString())) {
|
||||||
SignalKafkaEvent event = new SignalKafkaEvent();
|
SignalKafkaEvent event = new SignalKafkaEvent();
|
||||||
event.setEventType(EventType.WRITE);
|
event.setEventType(EventType.WRITE);
|
||||||
event.setPackageId(packageId);
|
event.setUserPackagePhoneData(userPackagePhoneData);
|
||||||
putToQueue(event);
|
putToQueue(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,17 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||||
|
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
||||||
import ru.nbch.credit_tracker.enums.EventType;
|
import ru.nbch.credit_tracker.enums.EventType;
|
||||||
|
import ru.nbch.credit_tracker.enums.Status;
|
||||||
|
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
|
||||||
import ru.nbch.credit_tracker.model.SignalKafkaEvent;
|
import ru.nbch.credit_tracker.model.SignalKafkaEvent;
|
||||||
|
import ru.nbch.credit_tracker.model.UserPackagePhoneData;
|
||||||
|
import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.BlockingQueue;
|
import java.util.concurrent.BlockingQueue;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|
@ -14,18 +22,23 @@ import java.util.concurrent.BlockingQueue;
|
||||||
public class SignalKafkaEventWriterService {
|
public class SignalKafkaEventWriterService {
|
||||||
|
|
||||||
private final BlockingQueue<SignalKafkaEvent> signalEventsQueue;
|
private final BlockingQueue<SignalKafkaEvent> signalEventsQueue;
|
||||||
|
private final UserPackageMapper userPackageMapper;
|
||||||
private final CreditTrackerSettings config;
|
private final CreditTrackerSettings config;
|
||||||
|
|
||||||
public SignalKafkaEventWriterService(@Qualifier("signalKafkaEventQueue") BlockingQueue<SignalKafkaEvent> signalEventsQueue,
|
public SignalKafkaEventWriterService(@Qualifier("signalKafkaEventQueue") BlockingQueue<SignalKafkaEvent> signalEventsQueue,
|
||||||
|
UserPackageMapper userPackageMapper,
|
||||||
CreditTrackerSettings config) {
|
CreditTrackerSettings config) {
|
||||||
this.signalEventsQueue = signalEventsQueue;
|
this.signalEventsQueue = signalEventsQueue;
|
||||||
|
this.userPackageMapper = userPackageMapper;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO вызвать в main
|
|
||||||
public void startWriting() {
|
public void startWriting() {
|
||||||
while (true) {
|
while (true) {
|
||||||
SignalKafkaEvent event = take();
|
SignalKafkaEvent event = take();
|
||||||
|
if (event == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (event.getEventType() == EventType.STOP) {
|
if (event.getEventType() == EventType.STOP) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -44,15 +57,41 @@ public class SignalKafkaEventWriterService {
|
||||||
* Записывает сигнал в xml для конкретного пакета
|
* Записывает сигнал в xml для конкретного пакета
|
||||||
*/
|
*/
|
||||||
private void writeSignal(SignalKafkaEvent event) {
|
private void writeSignal(SignalKafkaEvent event) {
|
||||||
// TODO записать сигнал в существующий xml/создать новый и записать
|
UserPackagePhoneData packagePhoneData = event.getUserPackagePhoneData();
|
||||||
// TODO добавить пакет в сет
|
try {
|
||||||
|
Path folder = Path.of(config.getLoadDir(),
|
||||||
|
"tmp", packagePhoneData.getUserId(), packagePhoneData.getPackageName());
|
||||||
|
Files.createDirectories(folder);
|
||||||
|
Path targetFilePathWithExt = folder.resolve(packagePhoneData.getUserId() + "_" + packagePhoneData.getPackageName() + ".xml");
|
||||||
|
|
||||||
|
boolean exists = targetFilePathWithExt.toFile().exists();
|
||||||
|
|
||||||
|
if (!exists) {
|
||||||
|
Files.createFile(targetFilePathWithExt);
|
||||||
|
// TODO начать запись
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO записать сигнал
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Report was not created for PackageId = {}, PackageName = {}. {}", packagePhoneData.getPackageId(), packagePhoneData.getPackageName(), ExceptionUtils.getStackTrace(e));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Упаковывает все результирующие xml в архив
|
* Упаковывает все результирующие xml в архив
|
||||||
*/
|
*/
|
||||||
private void rotate() {
|
private void rotate() {
|
||||||
// TODO пройтись по сету пакетов и финализировать запись. Очистить сет
|
List<UserPackage> userPackages = userPackageMapper.findAllPackagesByStatus(Status.ON_MONITORING.name()); // TODO + PROCESSING_REPEATED?
|
||||||
|
for (UserPackage userPackage : userPackages) {
|
||||||
|
Path targetFilePath = Path.of(config.getLoadDir(),
|
||||||
|
"tmp", userPackage.getUserId(), userPackage.getPackageName())
|
||||||
|
.resolve(userPackage.getUserId() + "_" + userPackage.getPackageName() + ".xml");
|
||||||
|
|
||||||
|
if (targetFilePath.toFile().exists()) {
|
||||||
|
// TODO дописать, переименовать с timestamp, зазиповать и выложить в папку
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO update signals_user_packages
|
||||||
}
|
}
|
||||||
|
|
||||||
private SignalKafkaEvent take() {
|
private SignalKafkaEvent take() {
|
||||||
|
|
@ -61,7 +100,7 @@ public class SignalKafkaEventWriterService {
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
log.error("Error while taking signal event", e);
|
log.error("Error while taking signal event", e);
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
throw new RuntimeException(e);
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue