[pve-devel] [PATCH manager follow-up 2/2] ui: ceph status: add tooltip with details to warnings

Aaron Lauterer a.lauterer at proxmox.com
Thu Mar 2 14:22:19 CET 2023



On 3/2/23 14:15, Dominik Csapak wrote:
> one bug did occur when trying it out:
> 
> if i had my mouse over a warning, and then the warnings vanished all,
> the tooltip was still there and i could trigger it with hovering over
> the grid
> 
> so we want to clean the tooltips up on every load anyway,

Wouldn't it cause the tooltip to disappear, or at least flicker?

> or at least when the number of items is smaller than the position
> my mouse is over ;)
Yep

> 
> some comments inline
> 
> On 2/22/23 10:39, Aaron Lauterer wrote:
>> This is another step to make it easier for admins to discover more
>> information for a warning or problem that is shown in the Ceph health
>> panel.
>>
>> The length is limited to give a first glimpse. For the full details one
>> can click on the info/detail button.
>>
>> Signed-off-by: Aaron Lauterer <a.lauterer at proxmox.com>
>> ---
>> Please use this follow up!
>>
>> I found a small bug just after sending it regarding the max length.
>> The length check and substring did have different values.
>>
>>   www/manager6/ceph/Status.js | 41 +++++++++++++++++++++++++++++++++++++
>>   1 file changed, 41 insertions(+)
>>
>> diff --git a/www/manager6/ceph/Status.js b/www/manager6/ceph/Status.js
>> index 45583f51..19a1243a 100644
>> --- a/www/manager6/ceph/Status.js
>> +++ b/www/manager6/ceph/Status.js
>> @@ -76,6 +76,47 @@ Ext.define('PVE.node.CephStatus', {
>>               trackRemoved: false,
>>               data: [],
>>               },
>> +
>> +            listeners: {
>> +            destroy: function() {
>> +                let view = this.getView();
>> +                if (view.tooltip) {
>> +                view.tooltip.destroy();
>> +                delete view.tooltip;
>> +                }
> 
> you could also do :
> 
> view.tooltip?.destroy();
> delete view.tooltip;
> 
> without the if
> 
> also the function is the same on itemmouseleave and destroy, so please
> refactor that into a function
> (since we also have to use it elsewhere too, see my comment at the top)

Okay, will do.

> 
>> +            },
>> +            itemmouseenter: function(record, item) {
>> +                let view = this.getView();
>> +                if (!view) {
>> +                return;
>> +                }
>> +                if (!item.data.detail) {
>> +                return;
>> +                }
>> +                let text = item.data.detail.trimStart().replaceAll('\n', 
>> '<br>');
> 
> any reason why we don't also use the <pre> tag here like in the popup?
> would at least be less computational intensive for long errors

I did try it with the pre tag, the problem then is, that the tooltip has a max 
length and the rest of the line is hidden. but that part contains important 
information as well. So I opted for a line break. Visibly not as pleasing, but 
it shows the full line.

> 
> also i'd check the length before replacing the newlines, otherwise
> it can happen that you cut the text of in the middle of a <br> tag ;)

Okay.

> 
> 
>> +                if (text.length > 500) {
>> +                    text = `${text.substring(0, 500)}…`;
> 
> nit: any special reason for the ellipsis glyph instead of 3 dots?
> not that it's a problem, just want to know

Because the ellipsis is the thing to use in such a situation? It is possible 
that my understanding is wrong. I have no problem with 3 dots as well.

> 
>> +                }
>> +                if (!view.tooltip) {
>> +                view.tooltip = Ext.create('Ext.tip.ToolTip', {
>> +                    target: view,
>> +                    trackMouse: true,
>> +                    dismissDelay: 0,
>> +                    tpl: '{text}',
>> +                    renderTo: Ext.getBody(),
>> +                });
>> +                }
>> +                view.tooltip.setData({ text });
>> +                view.tooltip.show();
>> +            },
>> +            itemmouseleave: function(record, item) {
>> +                let view = this.getView();
>> +                if (view.tooltip) {
>> +                view.tooltip.destroy();
>> +                delete view.tooltip;
>> +                }
>> +            },
>> +            },
>>               emptyText: gettext('No Warnings/Errors'),
>>               columns: [
>>               {
> 
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel





More information about the pve-devel mailing list