Opis mechanizmu
Scheduler Service jest to Serwis który zarządza predefiniowanymi jobami. Aktualnie są to:
paymentUpdate - job odpowiadający za odświeżanie statusów płatności w cyklach co 6h począwszy od godziny 12:00. Job cyklicznie z takim interwałem czasowym wywołuje API wymaganych ASPSP z zapytaniem getPayment o wszystkie płatności, które w bazie są w statusie InProgress. Płatności te są zapisane w bazie LDS (SQL) w tabeli payment.Payment. kolumna Status wskazuje aktualny status zleconej płatności.
syncUpdate job odpowiada za odświeżanie danych klientów (transakcje i konta) co 8h począwszy od godziny 12:00. Job cyklicznie z takim interwałem czasowym wywołuje API wymaganych ASPSP z zapytaniem getTransactions oraz getAccount. Każde odpytanie ASPSP tworzy nową sesję , która zapisywane jest w LDS w tabeli ApiSession. Wartość 3 w kolumnie sessionSource oznacza że taka sesja to wynik działania schedulera.
Konfiguracja mechanizmu
W docker compose w sekcji SchedulerService konfigurowane są godziny uruchamiana danego job'a oraz flaga jego aktywacji/ deaktywacji. Poszczególne parametry zostały opisane w tabeli poniżej
Parametr | Opis | Komentarz |
SchedulerServiceStartupConfig__Jobs__DailyJobs__syncUpdate__disabled | flaga true wyłącza, false włącza dla job'a do odświeżania kont | |
SchedulerServiceStartupConfig__Jobs__DailyJobs__syncUpdate__timeOfDay__hour | godzina uruchomienia z przedziału [1;24], dla job'a do odświeżania kont | |
SchedulerServiceStartupConfig__Jobs__DailyJobs__syncUpdate__timeOfDay__minute | minuty danej godziny uruchomienia z przedziału [0;60], dla job'a do odświeżania kont | |
SchedulerServiceStartupConfig__Jobs__DailyJobs__paymentUpdate__timeOfDay__hour | godzina uruchomienia z przedziału [1;24], dla job'a do odświeżania płatności | |
SchedulerServiceStartupConfig__Jobs__DailyJobs__paymentUpdate__timeOfDay__minute | minuty danej godziny uruchomienia z przedziału [0;60], dla job'a do odświeżania płatności | |
SchedulerServiceStartupConfig__Jobs__DailyJobs__paymentUpdate__disabled | flaga true wyłącza, false włącza dla joba do odświeżania płatności | |
SchedulerServiceStartupConfig__Jobs__DailyJobs__syncUpdate__jobArguments__batchSize | Liczba użytkowników odświeżonych w jednym batch’u. | Default: 10 Typ int, nie może przyjmować wartości ułamkowych, tylko całkowite. Obie minimalne wartości to 1 |
SchedulerServiceStartupConfig__Jobs__DailyJobs__syncUpdate__jobArguments__batchInterval | Liczba minut co jaką uruchamiany jest kolejny batch użytkowników ustawionych. Liczność pojedynczego batch'a zdefiniowana jest w parametrze SchedulerServiceStartupConfig__Jobs__DailyJobs__syncUpdate__jobArguments__batchSize | Default: 2 Typ int, nie może przyjmować wartości ułamkowych, tylko całkowite. Obie minimalne wartości to 1 |
Zalecane, aby zadania się nie zazębiały oraz aby nie były startowane zbyt często.
Job do synchronizacji dla każdego usera w danym banku odświeża konta, co może tworzyć w przyszłości liczbę sesji uzależnioną od liczby klientów przemnożoną przez liczbę podłączonych banków.
Jeżeli ASPSP zwróci informacje o rachunkach w krótkim czasie (np. dla 10 rachunków w ciągu 1 minuty), to wtedy będzie oznaczało minutę bezczynności do kolejnego job'a. Można przyspieszyć odświeżanie informacji o rachunkach poprzez zwiększenie batchSize.
Uruchomione joby sprawdzają w bazie User w kolekcji User czy użytkownik posiada flagę "updateOffline" ustawioną na wartość true - jeśli tak, to będzie oznaczało, że konta użytkownika zostaną odświeżone.
Nie zapewniamy kolejności odświeżania rachunków, są one brane losowo do odświeżenia.
Log w wykonania sesji schedulera
Weryfikacja przebiegu danego job'a można też kontrolować w bazie Mongo. W tym celu należy odszukać log który występuje message:
“Job syncAllActiveOldUsersUsingActiveConsents started”
lub “Job updatePaymentStatus started”
Biorąc pełny trace po executionData.id, można przejrzeć cały przebieg job'a.
Przykładowa konfiguracja i działanie
BatchSizejest ustawione na wartość 5Mamy 5 userów, każdy user ma 2 zgody w 2 różnych bankach na 2 rachunki
Odświeżamy konta używając metody GET bankaccount z flagą RefreshActiveAccounts=true (zleca jest Scheduler Service)
Powstanie 10 sesji w 1 interwale czasu zdefiniowanym w
BatchInterval