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 # min
ct.monitoring-interval=${MONITORING_INTERVAL:15} ct.monitoring-interval=${MONITORING_INTERVAL:15}
ct.monitoring-membercodes=${MONITORING_MEMBERCODES:0001XX,0001BB}
# days # days
ct.update-flags-cron-expression=${UPDATE_FLAGS_CRON_EXPRESSION:0 25 18 * * *} ct.update-flags-cron-expression=${UPDATE_FLAGS_CRON_EXPRESSION:0 25 18 * * *}
ct.new-flags-cron-expression=${NEW_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 # min
MONITORING_INTERVAL=15 MONITORING_INTERVAL=15
MONITORING_MEMBERCODES=0001XX,0001BB
# days # days
DAYS_TO_UPDATE_FLAGS=30 DAYS_TO_UPDATE_FLAGS=30

View file

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

14
pom.xml
View file

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

View file

@ -1,5 +1,6 @@
package ru.nbch.credit_tracker.config.settings; package ru.nbch.credit_tracker.config.settings;
import java.util.List;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
@ -33,6 +34,7 @@ public class CreditTrackerSettings {
private Long maxXmlFileSize; private Long maxXmlFileSize;
private String loadDir; private String loadDir;
private Long monitoringInterval; private Long monitoringInterval;
private List<String> monitoringMembercodes;
private String updateFlagsCronExpression; private String updateFlagsCronExpression;
private Integer daysToUpdateFlags; private Integer daysToUpdateFlags;
private Long daysToUpdateFids; 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> findUserPackages(@Param("userId") String userId, @Param("statuses") List<String> status);
List<UserPackage> findAllPackagesByStatus(@Param("statuses") String... statuses); List<UserPackage> findAllPackagesByStatus(@Param("statuses") String... statuses);
List<UserPackage> findOnMonitoringByMemberCode(List<String> membercodes);
List<UserPackage> findAllPackagesByUserId(@Param("userId") String userId); List<UserPackage> findAllPackagesByUserId(@Param("userId") String userId);
UserPackage findByPackageName(@Param("packageName") String packageName); 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.Signal;
import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Signals; 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.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.FlagDetailMapper;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
import ru.nbch.credit_tracker.service.signal.HitsService; import ru.nbch.credit_tracker.service.signal.HitsService;
@ -80,6 +79,7 @@ public class MonitoringService {
} }
public void run() { public void run() {
log.debug("Running scheduler for monitoring by membercode: {}", config.getMonitoringMembercodes());
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new CustomizableThreadFactory("monitoring-")); ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new CustomizableThreadFactory("monitoring-"));
long period = config.getMonitoringInterval() != null ? config.getMonitoringInterval() : 15; long period = config.getMonitoringInterval() != null ? config.getMonitoringInterval() : 15;
scheduler.scheduleAtFixedRate(this::monitor, 0, period, TimeUnit.MINUTES); scheduler.scheduleAtFixedRate(this::monitor, 0, period, TimeUnit.MINUTES);
@ -88,8 +88,7 @@ public class MonitoringService {
private void monitor() { private void monitor() {
try { try {
log.info("Start monitoring"); log.info("Start monitoring");
List<UserPackage> packages = userPackageMapper.findAllPackagesByStatus(Status.ON_MONITORING.name(), List<UserPackage> packages = userPackageMapper.findOnMonitoringByMemberCode(config.getMonitoringMembercodes());
Status.PROCESSING_REPEATED.name());
for (UserPackage userPackage : packages) { for (UserPackage userPackage : packages) {
MDC.put("ru.nbch.credit_tracker.log.mdc.key", "[" + userPackage.getPackageName() + "]"); MDC.put("ru.nbch.credit_tracker.log.mdc.key", "[" + userPackage.getPackageName() + "]");
processPackage(userPackage); processPackage(userPackage);

View file

@ -248,7 +248,8 @@ public class SignalRestService {
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers); HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange( ResponseEntity<String> response = exchangeWithTiming(
"onlinereport",
url, url,
HttpMethod.GET, HttpMethod.GET,
requestEntity, requestEntity,
@ -283,12 +284,12 @@ public class SignalRestService {
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers); HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
ResponseEntity<byte[]> response = restTemplate.exchange( ResponseEntity<byte[]> response = exchangeWithTiming(
url, "onlinedownload",
HttpMethod.GET, url,
requestEntity, HttpMethod.GET,
byte[].class requestEntity,
); byte[].class);
Path targetFilePathWithExt = null; Path targetFilePathWithExt = null;
if (response.getHeaders().getContentType().equals(MEDIA_TYPE_GZIP)) { if (response.getHeaders().getContentType().equals(MEDIA_TYPE_GZIP)) {
Path folder = Path.of(config.getLoadDir(), Path folder = Path.of(config.getLoadDir(),
@ -333,4 +334,21 @@ public class SignalRestService {
return "unknown error"; return "unknown error";
return "%s: %s".formatted(response.getError().getName(), response.getError().getDescription()); 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> <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="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="logFileNamePattern" value="${basedir}/logs/app/credit-tracker-${APP_JAR}.%i.log" />
<property name="jsonLogFile" value="${basedir}/logs/json/credit-tracker-json.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" /> <property name="jsonLogFileNamePattern" value="${basedir}/logs/json/credit-tracker-json.%d{yyyy-MM-dd}.%i.gz" />

View file

@ -229,6 +229,24 @@
</foreach> </foreach>
</select> </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="findByMemberCodeAndPackageName" resultMap="packageDataResultMap">
SELECT id, SELECT id,
membercode, membercode,