я пишу код для нагрузочного тестирования на джава . у меня есть джава программы две программы, с которыми надо работать: PackageLT - класс, в котором можно вызвать функции для нагрузочного тестирования и Feeders - в нем записаны пути к файлам с запросами на сервер для разных функций. суть такая. надо отправлять запросы на сервер с помощью джава программы. запустить функцию appMMBLoadTesting в PackageLT и остановить выполнение кода в 23:59. затем собрать новый файл с запросами (через выполнение скрипта питон) и запустить функцию appMMBLoadTesting еще раз. и так несколько дней подряд, то есть таких итераций будет 2-3. есть две проблемы с которыми я столкнулся:
1. я не могу останавливать выполнение функции тестирования принудительно. она выполняется дольше чем один день, а мне в 23:59 надо остановить отправку запросов и заново запустить функцию с новыми запросами
2. джава неверно определяет текущую дату
вот код к которому привязана функция
package ru.sber.pprb.mars.spr.lt.gatling.scenario;

import com.sbt.ott.api.client.interfaces.TokenResult;
import io.gatling.javaapi.core.ChainBuilder;
import io.gatling.javaapi.core.PopulationBuilder;
import io.gatling.javaapi.core.ScenarioBuilder;
import io.gatling.javaapi.core.Simulation;
import io.gatling.javaapi.http.HttpProtocolBuilder;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpHeaderValues;
import lombok.SneakyThrows;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import ru.sber.pprb.mars.spr.lt.gatling.utils.Feeders;
import ru.sber.pprb.mars.spr.lt.gatling.utils.dto.RepeatResult;
import ru.sber.pprb.mars.spr.lt.services.OTTService;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.time.Duration;
import java.util.concurrent.atomic.AtomicInteger;

import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.http;
import static io.gatling.javaapi.http.HttpDsl.status;

@Slf4j
public class OrchestratorStrategy extends Simulation {
    public static String test = null;
    public static String strategy = null;
    public static OTTService ottService = null;
    public static String repeatFile = null;
    private static AtomicInteger count;
    private static final AtomicInteger i = new AtomicInteger();

    public static String URL = "ссылка";
    private static FileWriter fileError;

    // настройка протокола http
    HttpProtocolBuilder httpProtocol = http.baseUrl(URL)
            .sign(request -> {
                if (ottService.isEnable()) {
                    TokenResult tokenResult = ottService.getTokenResult();
                    request.getHeaders().add("ott-token", tokenResult.getTokenCompactSerialization());
                    request.getHeaders().add("ott-hash", tokenResult.hash(request.getBody().getBytes()));
                }
            })
            .transformResponse((response, session) -> {
                if (response.status().code() != 200)
                    writeErrorLine(RepeatResult.builder()
                            .uuid(session.get("uuid"))
                            .request(new String(response.request().getBody().getBytes()).replaceAll("\r\n","\t"))
                            .response(response.status().reasonPhrase() + " " + response.body().string().replaceAll("\r\n","\t"))
                            .build().toString());
                return response;
            });


    ScenarioBuilder applicationMMBLT = scenario("applicationMMBLT")
            .asLongAs(session -> count.decrementAndGet() >= 0)
            .on(exec(MmbStrategy.applicationStrategy()));



    {
        count = test.equals("debug") ? new AtomicInteger(10) : countByFeeder();
        log.info("Пулл {}", count.get());
        setUp(switchLoad()).protocols(httpProtocol);
    }


    @SneakyThrows
    @Override
    public void before() {
        File file = new File("./result/" + System.currentTimeMillis() + "/repeat.csv");
        file.getParentFile().mkdirs();
        fileError = new FileWriter(file);
        fileError.write(String.join(";", new String[]{"uuid", "request", "response"}));
        fileError.write("\n");
        fileError.flush();
    }


    @SneakyThrows
    @Override
    public void after() {
        fileError.close();
        log.info("Завершили запись файла {}!", fileError);
    }

    @Synchronized
    public void writeErrorLine(String line) {
        try {
            fileError.write(line);
            fileError.write("\n");
            i.getAndIncrement();
            if (i.get() % 10 == 0) fileError.flush();
        } catch (IOException e) {
            log.error("{}", line);
        }
    }

    private AtomicInteger countByFeeder() {
        return switch (strategy) {

            case "applicationMMB" -> new AtomicInteger(Feeders.appMMB.recordsCount());

            default -> throw new IllegalStateException("Не выбран тип стратегии для запуска");
        };
    }

    private PopulationBuilder switchLoad() {
        if (test.equals("debug")) {
            return switch (strategy) {

                case "applicationMMB" -> applicationMMBLT.injectOpen(atOnceUsers(5));

                default -> throw new IllegalStateException("Не выбран тип стратегии для запуска");
            };
        } else {
            return switch (strategy) {
                case "applicationMMB" ->
                        applicationMMBLT.injectClosed(constantConcurrentUsers(2).during(Duration.ofMinutes(510)));

                default -> throw new IllegalStateException("Не выбран тип стратегии для запуска");
            };
        }
    }

    static class MmbStrategy {

        @SneakyThrows
        public static ChainBuilder applicationStrategy() {
            return feed(Feeders.uuid32)
                    .feed(Feeders.appMMB)
                    .exec(
                            http("applicationStrategy")
                                    .post("/v1/execute")
                                    .header(
                                            HttpHeaderNames.CONTENT_TYPE,
                                            String.valueOf(HttpHeaderValues.APPLICATION_JSON))
                                    .requestTimeout(60000)
                                    .body(ElFileBody("data/requestCommonTemplate.json"))
                                    .check(status().is(200))
                                    .check(bodyLength().exists())
                    );
        }
package ru.sber.pprb.mars.spr.lt.gatling.test;
import ru.sber.pprb.mars.spr.lt.gatling.test.PackageLT;
import ru.sber.pprb.mars.spr.lt.gatling.utils.Feeders;
// Импортируем другие необходимые классы

import java.time.LocalTime;
import java.util.concurrent.TimeUnit;
import java.io.IOException;

public class LoadTestRunner {

    public static void main(String[] args) {
        LoadTestRunner runner = new LoadTestRunner();
        runner.runLoadTestingDaily();
    }

    public void runLoadTestingDaily() {
        PackageLT packageLT = new PackageLT(); // Создаем экземпляр вашего тестового класса

        while (true) {
            try {
                // Запускаем нагрузочное тестирование
                packageLT.appMMBLoadTesting();
                // Ждем до конца текущего дня
                waitForEndOfDay();
                // Запуск генерации нового файла через Python-скрипт
                generateNewRequestsFile();

            } catch (Exception e) {
                e.printStackTrace();
                break; // Выйти из цикла при исключении
            }
        }
    }

    private void waitForEndOfDay() throws InterruptedException {
        LocalTime targetTime = LocalTime.of(23, 59);
        while (LocalTime.now().isBefore(targetTime)) {
            TimeUnit.MINUTES.sleep(1); // Пауза в ожидании конца дня
        }
    }

    private void generateNewRequestsFile() throws IOException, InterruptedException {
        String pythonScriptPath = "C:\\Users\\22240938\\Desktop\\пакеты\\PYTHON_Project\\generate_requests.py";
        // Создание процесса для запуска Python-скрипта
        ProcessBuilder processBuilder = new ProcessBuilder("python", pythonScriptPath);
        processBuilder.inheritIO(); // Чтобы вывод скрипта показывался в консоли Java
        Process process = processBuilder.start();
        int exitCode = process.waitFor(); // Ждем окончания процесса

        if (exitCode != 0) {
            throw new RuntimeException("Ошибка при выполнении Python-скрипта");
        }
    }
}