Лицензия: предупреждения заранее об окончании и о смене версий внешних систем

За 30, 14, 7 и 1 день до окончания договора (офлайн-ключ или застрявшее продление — до конца
ключа) bj шлёт уведомление: что продолжит работать, а что отключится. Каждый порог — один раз,
при продлении договора отсчёт заново; проверка раз в час в licenseLoop.

После каждого опроса версий bj запоминает версии внешних систем (МНП QUIK, ИШ, DEPO, экспортёр
ARQA, «Валидата», Java, PostgreSQL, ОС). Если обновления bj недоступны и версия изменилась —
уведомление, что совместимость с новой версией не гарантируется.

Решение: после окончания лицензии цикл QUIK МНП и личный кабинет продолжают работать.
Состояние — /var/lib/bj/.bj/license-watch.json.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zuevav
2026-09-16 12:19:47 +03:00
parent 7c653a2490
commit 42f5883b4a
4 changed files with 294 additions and 2 deletions
+3 -2
View File
@@ -181,8 +181,8 @@ func licenseNeedsRenew(rc *RuntimeConfig) bool {
return time.Since(s.LastSync) >= 23*time.Hour
}
// licenseLoop — раз в час проверяет, пора ли продлить ключ (продление — раз в сутки,
// при сбое — повтор через час).
// licenseLoop — раз в час предупреждает о скором окончании лицензии и проверяет, пора ли продлить
// ключ (продление — раз в сутки, при сбое — повтор через час).
func (s *Server) licenseLoop(ctx context.Context) {
ensureInstallID(s.rc)
wait := 2 * time.Minute
@@ -193,6 +193,7 @@ func (s *Server) licenseLoop(ctx context.Context) {
case <-time.After(wait):
}
wait = time.Hour
licenseExpiryWarn(s.rc, time.Now())
if !licenseNeedsRenew(s.rc) {
continue
}