all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Dominik Csapak <d.csapak@proxmox.com>
To: Dominik Rusovac <d.rusovac@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH manager v2] ui: ha: add disarm/re-arm button
Date: Wed, 15 Apr 2026 16:18:23 +0200	[thread overview]
Message-ID: <ee90ff79-cc2b-46c8-9cd9-f0a9867b705a@proxmox.com> (raw)
In-Reply-To: <DHTRLBOU7JDP.PUV1WT4Q0MKA@proxmox.com>



On 4/15/26 3:30 PM, Dominik Rusovac wrote:
> thx for the comments! I will send a v3
> 
> On Wed Apr 15, 2026 at 2:32 PM CEST, Dominik Csapak wrote:
>> what i miss with using these is some feedback when i activated them.
>>
>> This is probably more due to the backend decision, but
>> when clicking arm/disarm, there is nothing happening in the gui at
>> first, no spinning icon, no change in state..
> 
> regarding feedback after activating either of them: one can see the
> Status changing in the Status panel, which exactly traces what's going
> on for every node, in particular it reveals the armed-state in the
> Status of fencing
> 
> if that's not enough feedback, I'd look into other possible solutions in
> more detail

on my test machine, it multiple seconds from clicking ok to
the status actually changing, so this might be confusing, especially
if the cluster/connection is not the fastest and the updates
take longer to arrive.

> 
>>
>> I think there are a few possible solutions on this, but
>> i'm not super deep in the ha stack, so sorry in advance if
>> some can't work:
>> * use a worker that waits for the change of the ha state, e.g.
>>     via polling. this could directly be shown in the gui
>> * mark the requested state immediately somewhere and return
>>     it with the overall ha state, so we  see in the gui what is happening
>> * 'fake' the progress until we see a status change
>>     (i don't really like this, since it's prone to errors when e.g.
>>      one admin disarms, the other arms again, but the gui does not
>>      get an updated state in the meantime)
>>
>>
>> other comments inline
>>
>> On 4/15/26 8:40 AM, Dominik Rusovac wrote:
>>> The button to disarm HA in either of the resource modes ('freeze' or
>>> 'ignore') is disabled as long as HA is disarmed. Analogously, the button
>>> to arm HA is disabled as long as HA is not disarmed.
>>>
>>> The icons ('unlink' and 'link') are chosen to emphasize that "Disarm HA"
>>> and "Arm HA" are complements. There may be more suitable pairs of icons
>>> though.
>>>
>>> Signed-off-by: Dominik Rusovac <d.rusovac@proxmox.com>
>>> ---
>>> changes since v1:
>>> * use camel case for function names
>>> * choose clearer parameter: 'comp' -> 'menuItem'
>>> * choose clearer function names:
>>>     - 'disarm' -> 'handleDisarmButton'
>>>     - 'rearm'  -> 'handleArmButton'
>>> * deduplicate translation keys
>>> * use same translation keys as for menu items
>>> * remove obsolete 'params'
>>> * change button text "Re-arm HA" to "Arm HA"
>>> * remove extra new-line
>>>
>>>    www/manager6/ha/Status.js     | 104 ++++++++++++++++++++++++++++++++++
>>>    www/manager6/ha/StatusView.js |   8 +++
>>>    2 files changed, 112 insertions(+)
>>>
> 
> [snip]
> 
>>> +    controller: {
>>> +        xclass: 'Ext.app.ViewController',
>>> +
>>> +        checkHaStatus: function (isDisarmed) {
>>> +            let vm = this.getViewModel();
>>> +            vm.set('haDisarmed', isDisarmed);
>>> +        },
>>> +
>>
>> this method does not 'check' it 'sets' the HA status?
>>
>> IMHO a better name would be:
>>
>> setHaStatus
>> or similar
>>
>>
>> also, this is only used once, so it's probably better
>> to just call the vm.set inline
>>
> 
> thx, I will inline it
> 
> [snip]
> 
>>> +
>>> +    dockedItems: [
>>> +        {
>>> +            xtype: 'toolbar',
>>> +            dock: 'top',
>>> +            items: [
>>
>> it should be able to shorten that to just using 'tbar'
>>
>> tbar: [
>>       { ... }, // button 1
>>       { ... }, // button 2
>> ],
>>
> 
> indeed, thx, will use 'tbar' instead
> 
>>> +                {
>>> +                    text: gettext('Disarm HA'),
>>> +                    iconCls: 'fa fa-unlink',
>>> +                    bind: {
>>> +                        disabled: '{haDisarmed}',
>>> +                    },
>>> +                    menu: [
>>> +                        {
>>> +                            text: gettext('Freeze'),
>>> +                            iconCls: 'fa fa-snowflake-o',
>>> +                            mode: 'freeze',
>>> +                            handler: 'handleDisarmButton',
>>> +                        },
>>> +                        {
>>> +                            text: gettext('Ignore'),
>>> +                            iconCls: 'fa fa-eye-slash',
>>> +                            mode: 'ignore',
>>> +                            handler: 'handleDisarmButton',
>>> +                        },
>>> +                    ],
>>> +                },
>>> +                {
>>> +                    text: gettext('Arm HA'),
>>> +                    iconCls: 'fa fa-link',
>>> +                    bind: {
>>> +                        disabled: '{!haDisarmed}',
>>> +                    },
>>> +                    handler: 'handleArmButton',
>>> +                },
>>> +            ],
>>
>> i'm not totally against having two buttons here, but since
>> there is always only one or the other active, wouldn't
>> it make more sense to hide the button that
>> can't do anything? (though i admit we do most often show the
>> unusable buttons across our gui, so it's fine too)
>>
> 
> tbh, I just tried to adhere to what I found in other places of the gui
> 
> if hiding the unusable button is more desirable, I can go for that
> option instead
> 
>> At least i would probably switch the position of these,
>> since the more  (for the lack of a better word) 'affirming' action
>> is usually at the beginning (like 'add' or 'start') and the other
>> options comes later (like 'remove' or 'shutdown')
>>
>> so
>>
>> | Arm | Disarm |
>>
>> reads more logical to me than
>>
>> | Disarm | Arm |
>>
> 
> in retrospect, I think my reasoning behind this positioning was rather
> about the more 'obvious' or 'natural' action, that is: HA is
> from the get-go (and also usually) armed and can only be (re-)armed,
> once it's been disarmed - just like stopping something is only possible
> once this very something's started
> 
> I see your reasoning though, and if we do not go for hiding either of
> the buttons, I do not mind changing the positioning
> 
>>> +        },
>>> +    ],
>>> +
> 
> [snip]
> 
>>> +            me.rstore.on('load', function () {
>>> +                let fencing = store.findRecord('type', 'fencing');
>>> +                let disarmed = fencing && fencing.get('armed-state') === 'disarmed';
>>> +
>>> +                me.fireEvent('hastatuschange', disarmed);
>>
>> just a remark, not even a nit:
>>
>> the usual convention in extjs is that the first parameter of an event is
>> the component itself, so it would usually be
>>
>> me.fireEvent('foo', me, <remaining arguments>);
>>
>> we (and extjs itself) don't always adhere to that, so it's fine
>> here, but wanted to note it anyway
>>
> 
> thx for this informative remark
> 
> [snip]





      reply	other threads:[~2026-04-15 14:18 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-15  6:41 Dominik Rusovac
2026-04-15  7:34 ` Daniel Kral
2026-04-15 12:32 ` Dominik Csapak
2026-04-15 13:32   ` Dominik Rusovac
2026-04-15 14:18     ` Dominik Csapak [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ee90ff79-cc2b-46c8-9cd9-f0a9867b705a@proxmox.com \
    --to=d.csapak@proxmox.com \
    --cc=d.rusovac@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal