Merge branch 'develop/3.5' of github.com:thingsboard/thingsboard into develop/3.5

This commit is contained in:
Igor Kulikov 2023-04-13 17:21:18 +03:00
commit fd490f8097
5 changed files with 27 additions and 11 deletions

View File

@ -16,6 +16,7 @@
package org.thingsboard.server.transport.lwm2m.server.store; package org.thingsboard.server.transport.lwm2m.server.store;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Hex;
import org.springframework.data.redis.connection.RedisClusterConnection; import org.springframework.data.redis.connection.RedisClusterConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.Cursor;
@ -48,7 +49,12 @@ public class TbRedisLwM2MClientStore implements TbLwM2MClientStore {
if (data == null) { if (data == null) {
return null; return null;
} else { } else {
try {
return deserialize(data); return deserialize(data);
} catch (Exception e) {
log.warn("[{}] Failed to deserialize client from data: {}", endpoint, Hex.encodeHexString(data), e);
return null;
}
} }
} }
} }
@ -70,7 +76,13 @@ public class TbRedisLwM2MClientStore implements TbLwM2MClientStore {
scans.forEach(scan -> { scans.forEach(scan -> {
scan.forEachRemaining(key -> { scan.forEachRemaining(key -> {
byte[] element = connection.get(key); byte[] element = connection.get(key);
if (element != null) {
try {
clients.add(deserialize(element)); clients.add(deserialize(element));
} catch (Exception e) {
log.warn("[{}] Failed to deserialize client from data: {}", Hex.encodeHexString(key), Hex.encodeHexString(element), e);
}
}
}); });
}); });
return clients; return clients;

View File

@ -15,7 +15,7 @@
limitations under the License. limitations under the License.
--> -->
<div style="min-width: 600px;"> <form style="width: 600px;">
<mat-toolbar color="primary"> <mat-toolbar color="primary">
<span fxFlex></span> <span fxFlex></span>
<button mat-icon-button (click)="close()" type="button"> <button mat-icon-button (click)="close()" type="button">
@ -30,4 +30,4 @@
[alarmActivityOnly]="true"> [alarmActivityOnly]="true">
</tb-alarm-comment> </tb-alarm-comment>
</div> </div>
</div> </form>

View File

@ -15,7 +15,7 @@
limitations under the License. limitations under the License.
--> -->
<form [formGroup]="alarmFormGroup" style="min-width: 600px;"> <form [formGroup]="alarmFormGroup" style="width: 600px;">
<mat-toolbar color="primary"> <mat-toolbar color="primary">
<h2>{{ 'alarm.alarm-details' | translate }}</h2> <h2>{{ 'alarm.alarm-details' | translate }}</h2>
<span fxFlex></span> <span fxFlex></span>

View File

@ -91,14 +91,18 @@
{{ getUserInitials(alarm) }} {{ getUserInitials(alarm) }}
</span> </span>
<span [matTooltip]="getUserDisplayName(alarm)" <span [matTooltip]="getUserDisplayName(alarm)"
matTooltipPosition="above" matTooltipPosition="above">
style="text-overflow: ellipsis">
{{ getUserDisplayName(alarm) }} {{ getUserDisplayName(alarm) }}
</span> </span>
</span> </span>
<span *ngIf="!alarm.assigneeId" class="unassigned-container" fxLayout="row" fxLayoutAlign="start center"> <span *ngIf="!alarm.assigneeId" class="unassigned-container">
<mat-icon class="material-icons unassigned-icon">account_circle</mat-icon> <mat-icon class="material-icons unassigned-icon">account_circle</mat-icon>
<span translate>alarm.unassigned</span> <span matTooltip="{{ 'alarm.unassigned' | translate }}"
matTooltipPosition="above"
style="vertical-align: middle"
translate>
alarm.unassigned
</span>
</span> </span>
<button *ngIf="allowAssign" <button *ngIf="allowAssign"
mat-icon-button [disabled]="isLoading$ | async" mat-icon-button [disabled]="isLoading$ | async"

View File

@ -28,8 +28,8 @@
} }
.mat-mdc-cell { .mat-mdc-cell {
.assignee-cell { .assignee-cell {
.assigned-container {
white-space: nowrap; white-space: nowrap;
.assigned-container {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
.user-avatar { .user-avatar {
@ -48,7 +48,6 @@
} }
} }
.unassigned-container { .unassigned-container {
white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
.material-icons.unassigned-icon { .material-icons.unassigned-icon {
@ -58,6 +57,7 @@
margin-right: 8px; margin-right: 8px;
color: rgba(0, 0, 0, 0.38); color: rgba(0, 0, 0, 0.38);
overflow: visible; overflow: visible;
vertical-align: middle;
} }
} }
} }