diff --git a/backend/app/version.py b/backend/app/version.py index f3f8ca7..dceee1b 100644 --- a/backend/app/version.py +++ b/backend/app/version.py @@ -1,5 +1,5 @@ """Единый источник версии SAC (API, health, логи, OpenAPI).""" APP_NAME = "Security Alert Center" -APP_VERSION = "0.3.9" +APP_VERSION = "0.4.0" APP_VERSION_LABEL = f"{APP_NAME} v.{APP_VERSION}" diff --git a/frontend/src/components/HostAgentVersionUpgrade.vue b/frontend/src/components/HostAgentVersionUpgrade.vue index 2826a77..af13d36 100644 --- a/frontend/src/components/HostAgentVersionUpgrade.vue +++ b/frontend/src/components/HostAgentVersionUpgrade.vue @@ -7,8 +7,12 @@ v-if="showUpgrade" type="button" class="agent-version-upgrade" - :disabled="updating" - :title="upgradeTitle" + :class="{ + 'agent-version-upgrade--inactive': upgradeBlocked, + 'agent-version-upgrade--updating': updating, + }" + :disabled="updating || upgradeBlocked" + :title="buttonTitle" @click.stop="emit('upgrade')" > @@ -31,6 +35,8 @@ const props = defineProps<{ host: HostSummary; git: AgentGitVersions | null | undefined; updating?: boolean; + /** Другой хост сейчас обновляется — стрелка видна, но неактивна (серая). */ + upgradeBlocked?: boolean; outdatedHighlight?: boolean; }>(); @@ -40,9 +46,7 @@ const emit = defineEmits<{ const gitTargetVersion = computed(() => gitTargetVersionForHost(props.host, props.git)); -const showUpgrade = computed( - () => !props.updating && isGitAgentUpgradeAvailable(props.host, props.git), -); +const showUpgrade = computed(() => isGitAgentUpgradeAvailable(props.host, props.git)); const currentTitle = computed(() => { if (!props.host.product_version) return ""; @@ -56,6 +60,16 @@ const upgradeTitle = computed(() => { if (!gitTargetVersion.value) return ""; return `Обновить агент до ${gitTargetVersion.value}`; }); + +const buttonTitle = computed(() => { + if (props.updating) { + return "Обновление выполняется…"; + } + if (props.upgradeBlocked) { + return "Дождитесь завершения обновления на другом хосте"; + } + return upgradeTitle.value; +});