Compare commits

...

5 commits

Author SHA1 Message Date
etreschenkov
1f14a06cc8 image to nexus 2026-06-19 17:38:21 +03:00
etreschenkov
44a5fb2e6d http://jira.mfd.msk:8088/browse/BKI-3714 2026-06-17 17:23:25 +03:00
etreschenkov
416540754c http://jira.mfd.msk:8088/browse/BKI-3714 2026-06-16 17:43:30 +03:00
etreschenkov
764d6ad9be http://jira.mfd.msk:8088/browse/BKI-3697 2026-06-04 12:14:24 +03:00
etreschenkov
bfcd5285f5 http://jira.mfd.msk:8088/browse/BKI-3697 2026-06-03 13:48:51 +03:00
10 changed files with 66 additions and 16 deletions

View file

@ -65,6 +65,7 @@ ct.load-dir=/opt/app/reports
# min
ct.monitoring-interval=${MONITORING_INTERVAL:15}
ct.monitoring-membercodes=${MONITORING_MEMBERCODES:0001XX,0001BB}
# days
ct.update-flags-cron-expression=${UPDATE_FLAGS_CRON_EXPRESSION:0 25 18 * * *}
ct.new-flags-cron-expression=${NEW_FLAGS_CRON_EXPRESSION:0 25 18 * * *}

View file

@ -72,6 +72,7 @@ SIGNALS_USER=0001ZZ000001
# min
MONITORING_INTERVAL=15
MONITORING_MEMBERCODES=0001XX,0001BB
# days
DAYS_TO_UPDATE_FLAGS=30

View file

@ -64,6 +64,7 @@ services:
- SIGNALS_TOKEN=${SIGNALS_TOKEN}
- SIGNALS_USER=${SIGNALS_USER}
- MONITORING_INTERVAL=${MONITORING_INTERVAL}
- MONITORING_MEMBERCODES=${MONITORING_MEMBERCODES}
- UPDATE_FLAGS_CRON_EXPRESSION=${UPDATE_FLAGS_CRON_EXPRESSION}
- NEW_FLAGS_CRON_EXPRESSION=${NEW_FLAGS_CRON_EXPRESSION}
- UPDATE_FIDS_CRON_EXPRESSION=${UPDATE_FIDS_CRON_EXPRESSION}

14
pom.xml
View file

@ -10,7 +10,7 @@
</parent>
<groupId>ru.nbch</groupId>
<artifactId>credit-tracker</artifactId>
<version>2.21.12</version>
<version>2.21.14</version>
<name>credit_tracker</name>
<description>Credit Tracker Application</description>
@ -18,10 +18,9 @@
<java.version>21</java.version>
<git.info.prefix>git_info</git.info.prefix>
<git.info.filename>git.properties</git.info.filename>
<registry.url>10.230.238.56:5000</registry.url>
<registry.url>nexus-dev.nbki.msk</registry.url>
<jar.main.name>main</jar.main.name>
<jar.monitoring.name>monitoring</jar.monitoring.name>
<!-- <registry.url>rh8-vm3.nbki.msk:5000</registry.url>-->
</properties>
<dependencies>
@ -73,6 +72,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.1.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
@ -161,8 +165,8 @@
<configuration>
<images>
<image>
<name>${project.artifactId}:${project.version}</name>
<registry>${registry.url}</registry>
<name>nexus-dev.nbki.msk/${project.artifactId}:${project.version}</name>
<!-- <registry>${registry.url}</registry>-->
<build>
<dockerFile>${project.basedir}/Dockerfile</dockerFile>
<assembly>

View file

@ -1,5 +1,6 @@
package ru.nbch.credit_tracker.config.settings;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ -33,6 +34,7 @@ public class CreditTrackerSettings {
private Long maxXmlFileSize;
private String loadDir;
private Long monitoringInterval;
private List<String> monitoringMembercodes;
private String updateFlagsCronExpression;
private Integer daysToUpdateFlags;
private Long daysToUpdateFids;

View file

@ -29,6 +29,7 @@ public interface UserPackageMapper {
List<UserPackage> findUserPackages(@Param("userId") String userId, @Param("statuses") List<String> status);
List<UserPackage> findAllPackagesByStatus(@Param("statuses") String... statuses);
List<UserPackage> findOnMonitoringByMemberCode(List<String> membercodes);
List<UserPackage> findAllPackagesByUserId(@Param("userId") String userId);
UserPackage findByPackageName(@Param("packageName") String packageName);

View file

@ -35,7 +35,6 @@ import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.
import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Signal;
import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Signals;
import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Subject;
import ru.nbch.credit_tracker.enums.Status;
import ru.nbch.credit_tracker.mapper.signal.FlagDetailMapper;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
import ru.nbch.credit_tracker.service.signal.HitsService;
@ -80,6 +79,7 @@ public class MonitoringService {
}
public void run() {
log.debug("Running scheduler for monitoring by membercode: {}", config.getMonitoringMembercodes());
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new CustomizableThreadFactory("monitoring-"));
long period = config.getMonitoringInterval() != null ? config.getMonitoringInterval() : 15;
scheduler.scheduleAtFixedRate(this::monitor, 0, period, TimeUnit.MINUTES);
@ -88,8 +88,7 @@ public class MonitoringService {
private void monitor() {
try {
log.info("Start monitoring");
List<UserPackage> packages = userPackageMapper.findAllPackagesByStatus(Status.ON_MONITORING.name(),
Status.PROCESSING_REPEATED.name());
List<UserPackage> packages = userPackageMapper.findOnMonitoringByMemberCode(config.getMonitoringMembercodes());
for (UserPackage userPackage : packages) {
MDC.put("ru.nbch.credit_tracker.log.mdc.key", "[" + userPackage.getPackageName() + "]");
processPackage(userPackage);

View file

@ -248,7 +248,8 @@ public class SignalRestService {
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(
ResponseEntity<String> response = exchangeWithTiming(
"onlinereport",
url,
HttpMethod.GET,
requestEntity,
@ -283,12 +284,12 @@ public class SignalRestService {
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
ResponseEntity<byte[]> response = restTemplate.exchange(
url,
HttpMethod.GET,
requestEntity,
byte[].class
);
ResponseEntity<byte[]> response = exchangeWithTiming(
"onlinedownload",
url,
HttpMethod.GET,
requestEntity,
byte[].class);
Path targetFilePathWithExt = null;
if (response.getHeaders().getContentType().equals(MEDIA_TYPE_GZIP)) {
Path folder = Path.of(config.getLoadDir(),
@ -333,4 +334,21 @@ public class SignalRestService {
return "unknown error";
return "%s: %s".formatted(response.getError().getName(), response.getError().getDescription());
}
private <T> ResponseEntity<T> exchangeWithTiming(
String name,
String url,
HttpMethod method,
HttpEntity<?> requestEntity,
Class<T> responseType
) {
long start = System.nanoTime();
try {
return restTemplate.exchange(url, method, requestEntity, responseType);
} finally {
long durationMs = (System.nanoTime() - start) / 1_000_000;
log.info("REST [{}] {} {} took {} ms", name, method, url, durationMs);
}
}
}

View file

@ -1,7 +1,12 @@
<configuration>
<if condition='isDefined("MONITORING_MEMBERCODES") &amp;&amp; !property("MONITORING_MEMBERCODES").isEmpty()'>
<then>
<property name="monitoringMemberCodesSuffix" value="-${MONITORING_MEMBERCODES}" />
</then>
</if>
<property name="basedir" value="${user.dir}" />
<property name="logFile" value="${basedir}/logs/app/credit-tracker-${APP_JAR}.log" />
<property name="logFile" value="${basedir}/logs/app/credit-tracker-${APP_JAR}${monitoringMemberCodesSuffix:-}.log" />
<property name="logFileNamePattern" value="${basedir}/logs/app/credit-tracker-${APP_JAR}.%i.log" />
<property name="jsonLogFile" value="${basedir}/logs/json/credit-tracker-json.log" />
<property name="jsonLogFileNamePattern" value="${basedir}/logs/json/credit-tracker-json.%d{yyyy-MM-dd}.%i.gz" />

View file

@ -229,6 +229,24 @@
</foreach>
</select>
<select id="findOnMonitoringByMemberCode" resultMap="packageDataResultMap">
SELECT id,
membercode,
package_name,
created_at,
status,
deactivated_at,
last_downloaded_report,
monitoring_at,
reject_status,
signal_types
FROM signals_user_packages
WHERE status in ('ON_MONITORING', 'PROCESSING_REPEATED') and LEFT(membercode, 6) in
<foreach collection="membercodes" item="membercode" separator="," open="(" close=")">
#{membercode}
</foreach>
</select>
<select id="findByMemberCodeAndPackageName" resultMap="packageDataResultMap">
SELECT id,
membercode,