Skip to content

Commit 06a0dd6

Browse files
committed
feat(data-input): add checkpoint table and repository for data input status management
1 parent 5ec71ea commit 06a0dd6

14 files changed

Lines changed: 90 additions & 26 deletions

File tree

backend/src/main/java/com/park/utmstack/domain/UtmDataInputStatus.java renamed to backend/src/main/java/com/park/utmstack/domain/datainput_ingestion/UtmDataInputStatus.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
1-
package com.park.utmstack.domain;
1+
package com.park.utmstack.domain.datainput_ingestion;
22

3-
import com.fasterxml.jackson.annotation.JsonIgnore;
4-
import com.park.utmstack.domain.network_scan.UtmNetworkScan;
53
import lombok.*;
64

75
import javax.persistence.*;
8-
import javax.validation.constraints.NotEmpty;
96
import javax.validation.constraints.NotNull;
107
import javax.validation.constraints.Size;
118
import java.io.Serializable;
129
import java.time.Instant;
1310
import java.util.Objects;
14-
import java.util.concurrent.TimeUnit;
1511

1612
/**
1713
* A UtmDataInputStatus.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.park.utmstack.domain.datainput_ingestion;
2+
3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
import lombok.Setter;
6+
7+
import javax.persistence.*;
8+
import java.time.Instant;
9+
10+
@Entity
11+
@Getter
12+
@Setter
13+
@NoArgsConstructor
14+
@Table(name = "utm_data_input_status_checkpoint")
15+
public class UtmDataInputStatusCheckpoint {
16+
17+
@Id
18+
@GeneratedValue(strategy = GenerationType.IDENTITY)
19+
private Long id;
20+
21+
@Column(name = "last_processed_timestamp", nullable = false)
22+
private Instant lastProcessedTimestamp;
23+
}

backend/src/main/java/com/park/utmstack/domain/network_scan/UtmNetworkScan.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import com.fasterxml.jackson.annotation.JsonIgnore;
55
import com.park.utmstack.domain.UtmAssetMetrics;
6-
import com.park.utmstack.domain.UtmDataInputStatus;
76
import com.park.utmstack.domain.network_scan.enums.AssetRegisteredMode;
87
import com.park.utmstack.domain.network_scan.enums.AssetStatus;
98
import com.park.utmstack.domain.network_scan.enums.UpdateLevel;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.park.utmstack.repository.datainput_ingestion;
2+
3+
import com.park.utmstack.domain.datainput_ingestion.UtmDataInputStatusCheckpoint;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface UtmDataInputStatusCheckpointRepository extends JpaRepository<UtmDataInputStatusCheckpoint, Long> {}

backend/src/main/java/com/park/utmstack/repository/UtmDataInputStatusRepository.java renamed to backend/src/main/java/com/park/utmstack/repository/datainput_ingestion/UtmDataInputStatusRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.park.utmstack.repository;
1+
package com.park.utmstack.repository.datainput_ingestion;
22

3-
import com.park.utmstack.domain.UtmDataInputStatus;
3+
import com.park.utmstack.domain.datainput_ingestion.UtmDataInputStatus;
44
import org.springframework.data.domain.Page;
55
import org.springframework.data.domain.Pageable;
66
import org.springframework.data.jpa.repository.JpaRepository;

backend/src/main/java/com/park/utmstack/service/UtmDataInputStatusQueryService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.park.utmstack.service;
22

3-
import com.park.utmstack.domain.UtmDataInputStatus;
4-
import com.park.utmstack.domain.UtmDataInputStatus_;
5-
import com.park.utmstack.repository.UtmDataInputStatusRepository;
3+
import com.park.utmstack.domain.datainput_ingestion.UtmDataInputStatus;
4+
import com.park.utmstack.domain.datainput_ingestion.UtmDataInputStatus_;
5+
import com.park.utmstack.repository.datainput_ingestion.UtmDataInputStatusRepository;
66
import com.park.utmstack.service.dto.UtmDataInputStatusCriteria;
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;

backend/src/main/java/com/park/utmstack/service/UtmDataInputStatusService.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package com.park.utmstack.service;
22

33
import com.park.utmstack.config.Constants;
4-
import com.park.utmstack.domain.UtmDataInputStatus;
4+
import com.park.utmstack.domain.datainput_ingestion.UtmDataInputStatus;
55
import com.park.utmstack.domain.UtmServerModule;
66
import com.park.utmstack.domain.application_events.enums.ApplicationEventType;
77
import com.park.utmstack.domain.chart_builder.types.query.FilterType;
88
import com.park.utmstack.domain.chart_builder.types.query.OperatorType;
99
import com.park.utmstack.domain.correlation.config.UtmDataTypes;
10+
import com.park.utmstack.domain.datainput_ingestion.UtmDataInputStatusCheckpoint;
1011
import com.park.utmstack.domain.network_scan.UtmNetworkScan;
1112
import com.park.utmstack.domain.network_scan.enums.AssetStatus;
1213
import com.park.utmstack.domain.network_scan.enums.UpdateLevel;
1314
import com.park.utmstack.domain.shared_types.alert.UtmAlert;
14-
import com.park.utmstack.repository.UtmDataInputStatusRepository;
15+
import com.park.utmstack.repository.datainput_ingestion.UtmDataInputStatusCheckpointRepository;
16+
import com.park.utmstack.repository.datainput_ingestion.UtmDataInputStatusRepository;
1517
import com.park.utmstack.repository.correlation.config.UtmDataTypesRepository;
1618
import com.park.utmstack.repository.network_scan.UtmNetworkScanRepository;
1719
import com.park.utmstack.service.application_events.ApplicationEventService;
@@ -22,13 +24,10 @@
2224
import com.park.utmstack.service.network_scan.UtmNetworkScanService;
2325
import com.park.utmstack.util.enums.AlertSeverityEnum;
2426
import com.park.utmstack.util.enums.AlertStatus;
25-
import com.utmstack.opensearch_connector.parsers.TermAggregateParser;
26-
import com.utmstack.opensearch_connector.types.BucketAggregation;
2727
import lombok.RequiredArgsConstructor;
2828
import org.apache.http.conn.util.InetAddressUtils;
2929
import org.opensearch.client.json.JsonData;
3030
import org.opensearch.client.opensearch._types.SortOrder;
31-
import org.opensearch.client.opensearch._types.aggregations.TopHitsAggregate;
3231
import org.opensearch.client.opensearch.core.SearchRequest;
3332
import org.opensearch.client.opensearch.core.SearchResponse;
3433
import org.slf4j.Logger;
@@ -38,13 +37,13 @@
3837
import org.springframework.scheduling.annotation.Scheduled;
3938
import org.springframework.stereotype.Service;
4039
import org.springframework.transaction.annotation.Transactional;
41-
import org.springframework.transaction.support.TransactionSynchronizationManager;
4240
import org.springframework.util.CollectionUtils;
4341
import org.springframework.util.StringUtils;
4442

4543
import java.time.Instant;
4644
import java.time.LocalDateTime;
4745
import java.time.ZoneOffset;
46+
import java.time.temporal.ChronoUnit;
4847
import java.util.*;
4948
import java.util.concurrent.TimeUnit;
5049
import java.util.function.Function;
@@ -68,6 +67,7 @@ public class UtmDataInputStatusService {
6867
private final ElasticsearchService elasticsearchService;
6968
private final UtmDataTypesRepository dataTypesRepository;
7069
private final UtmNetworkScanRepository networkScanRepository;
70+
private final UtmDataInputStatusCheckpointRepository checkpointRepository;
7171

7272

7373
/**
@@ -441,9 +441,16 @@ private Map<String, Object> createAlertForDatasourceDown(UtmDataInputStatus inpu
441441

442442
private Map<String, StatisticDocument> getLatestStatisticsByDataSource() {
443443

444+
UtmDataInputStatusCheckpoint checkpoint = this.checkpointRepository.findById(1L)
445+
.orElseGet(() -> {
446+
UtmDataInputStatusCheckpoint newCheckpoint = new UtmDataInputStatusCheckpoint();
447+
newCheckpoint.setLastProcessedTimestamp(Instant.now().minus(1, ChronoUnit.HOURS));
448+
return newCheckpoint;
449+
});
450+
444451
ArrayList<FilterType> filters = new ArrayList<>();
445452
filters.add(new FilterType("type", OperatorType.IS, "enqueue_success"));
446-
filters.add(new FilterType("@timestamp", OperatorType.IS_BETWEEN, List.of("now-24h", "now")));
453+
filters.add(new FilterType("@timestamp", OperatorType.IS_GREATER_THAN, checkpoint.getLastProcessedTimestamp().toString()));
447454

448455
SearchRequest sr = SearchRequest.of(s -> s
449456
.query(SearchUtil.toQuery(filters))
@@ -457,7 +464,7 @@ private Map<String, StatisticDocument> getLatestStatisticsByDataSource() {
457464
)
458465
)
459466
.sort(sort -> sort.field(f -> f.field("@timestamp").order(SortOrder.Desc)))
460-
.size(10000) // máximo de dataSources esperados
467+
.size(10000)
461468
);
462469

463470
SearchResponse<StatisticDocument> response =
@@ -478,6 +485,15 @@ private Map<String, StatisticDocument> getLatestStatisticsByDataSource() {
478485
}
479486
});
480487

488+
Instant lastTimestamp = result.values().stream()
489+
.map(doc -> Instant.parse(doc.getTimestamp()))
490+
.max(Instant::compareTo)
491+
.orElse(Instant.now());
492+
493+
checkpoint.setLastProcessedTimestamp(lastTimestamp);
494+
495+
this.checkpointRepository.save(checkpoint);
496+
481497
return result;
482498
}
483499

backend/src/main/java/com/park/utmstack/service/correlation/config/UtmDataTypesService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.park.utmstack.domain.application_events.enums.ApplicationEventType;
44
import com.park.utmstack.domain.correlation.config.UtmDataTypes;
5-
import com.park.utmstack.repository.UtmDataInputStatusRepository;
5+
import com.park.utmstack.repository.datainput_ingestion.UtmDataInputStatusRepository;
66
import com.park.utmstack.repository.correlation.config.UtmDataTypesRepository;
77
import com.park.utmstack.repository.network_scan.UtmNetworkScanRepository;
88
import com.park.utmstack.service.UtmDataInputStatusService;

backend/src/main/java/com/park/utmstack/service/dto/network_scan/NetworkScanDTO.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
package com.park.utmstack.service.dto.network_scan;
22

3-
import com.park.utmstack.domain.UtmDataInputStatus;
3+
import com.park.utmstack.domain.datainput_ingestion.UtmDataInputStatus;
44
import com.park.utmstack.domain.network_scan.UtmAssetGroup;
55
import com.park.utmstack.domain.network_scan.UtmAssetTypes;
66
import com.park.utmstack.domain.network_scan.UtmNetworkScan;
77
import com.park.utmstack.domain.network_scan.UtmPorts;
88
import com.park.utmstack.domain.network_scan.enums.AssetRegisteredMode;
99
import com.park.utmstack.domain.network_scan.enums.AssetStatus;
10-
import com.park.utmstack.repository.UtmDataInputStatusRepository;
10+
import com.park.utmstack.repository.datainput_ingestion.UtmDataInputStatusRepository;
1111
import lombok.Getter;
1212
import lombok.Setter;
1313
import org.springframework.util.CollectionUtils;
1414

1515
import java.time.Instant;
1616
import java.util.*;
1717
import java.util.stream.Collectors;
18-
import java.util.stream.Stream;
1918

2019
@Getter
2120
@Setter

backend/src/main/java/com/park/utmstack/service/network_scan/UtmNetworkScanService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.park.utmstack.domain.network_scan.enums.PropertyFilter;
99
import com.park.utmstack.domain.shared_types.enums.ImageShortName;
1010
import com.park.utmstack.repository.UtmAssetMetricsRepository;
11-
import com.park.utmstack.repository.UtmDataInputStatusRepository;
11+
import com.park.utmstack.repository.datainput_ingestion.UtmDataInputStatusRepository;
1212
import com.park.utmstack.repository.network_scan.UtmNetworkScanRepository;
1313
import com.park.utmstack.service.UtmImagesService;
1414
import com.park.utmstack.service.agent_manager.AgentGrpcService;

0 commit comments

Comments
 (0)