Skip to content

Commit af0fb89

Browse files
authored
Make ID optional to signal deleted fleet/collector (#25560)
1 parent d919e37 commit af0fb89

4 files changed

Lines changed: 41 additions & 17 deletions

File tree

graylog2-server/src/main/java/org/graylog/collectors/rest/CollectorsActivityResource.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,22 +135,34 @@ private RecentActivityResponse.ActivityEntry toActivityEntry(
135135
// Resolve targets
136136
final List<RecentActivityResponse.TargetInfo> targets = new ArrayList<>();
137137
for (final var targetId : marker.targetIds()) {
138+
final String id;
138139
final String name;
139140
if (TransactionMarker.TARGET_FLEET.equals(marker.target())) {
140-
// skip the target if it's a fleet we have no permission to
141-
if (!isPermitted(CollectorsPermissions.FLEET_READ, targetId)) {
142-
continue;
141+
if (fleetNames.containsKey(targetId)) {
142+
// skip the target if it's a fleet we have no permission to
143+
if (!isPermitted(CollectorsPermissions.FLEET_READ, targetId)) {
144+
continue;
145+
}
146+
id = targetId;
147+
name = fleetNames.get(targetId);
148+
} else {
149+
id = null;
150+
name = "[deleted]";
143151
}
144-
name = fleetNames.getOrDefault(targetId, targetId);
145152
} else {
146-
// skip the target if the user cannot see the target's fleet
147-
if (instances.containsKey(targetId)
148-
&& !isPermitted(CollectorsPermissions.FLEET_READ, instances.get(targetId).fleetId())) {
149-
continue;
153+
if (instances.containsKey(targetId)) {
154+
// skip the target if the user cannot see the target's fleet
155+
if (!isPermitted(CollectorsPermissions.FLEET_READ, instances.get(targetId).fleetId())) {
156+
continue;
157+
}
158+
id = targetId;
159+
name = resolveInstanceHostname(instances, targetId);
160+
} else {
161+
id = null;
162+
name = "[deleted]";
150163
}
151-
name = resolveInstanceHostname(instances, targetId);
152164
}
153-
targets.add(new RecentActivityResponse.TargetInfo(targetId, name, marker.target()));
165+
targets.add(new RecentActivityResponse.TargetInfo(id, name, marker.target()));
154166
}
155167

156168
// Resolve details
@@ -180,10 +192,16 @@ private String resolveInstanceHostname(Map<String, CollectorInstanceDTO> instanc
180192
private Map<String, String> resolveDetails(TransactionMarker marker, Map<String, String> fleetNames) {
181193
if (marker.type() == MarkerType.FLEET_REASSIGNED && marker.payload() != null) {
182194
final String newFleetId = marker.payload().getString("new_fleet_id");
183-
if (newFleetId != null && isPermitted(CollectorsPermissions.FLEET_READ, newFleetId)) {
184-
return Map.of(
185-
"new_fleet_id", newFleetId,
186-
"new_fleet_name", fleetNames.getOrDefault(newFleetId, newFleetId));
195+
if (newFleetId != null) {
196+
if (fleetNames.containsKey(newFleetId)) {
197+
if (isPermitted(CollectorsPermissions.FLEET_READ, newFleetId)) {
198+
return Map.of(
199+
"new_fleet_id", newFleetId,
200+
"new_fleet_name", fleetNames.get(newFleetId));
201+
}
202+
return Map.of();
203+
}
204+
return Map.of("new_fleet_name", "[deleted]");
187205
}
188206
}
189207
return Map.of();

graylog2-server/src/main/java/org/graylog/collectors/rest/RecentActivityResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public record ActorInfo(
4141
}
4242

4343
public record TargetInfo(
44-
@JsonProperty("id") String id,
44+
@JsonProperty("id") @Nullable String id,
4545
@JsonProperty("name") String name,
4646
@JsonProperty("type") String type) {
4747
}

graylog2-web-interface/src/components/collectors/overview/RecentActivity.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ const ICON_MAP: Record<ActivityEntry['type'], IconName> = {
8181
};
8282

8383
const targetLink = (target: TargetInfo) => {
84+
if (!target.id) {
85+
return <MutedText>[deleted]</MutedText>;
86+
}
87+
8488
if (target.type === 'fleet') {
8589
return <Link to={Routes.SYSTEM.COLLECTORS.FLEET(target.id)}>{target.name}</Link>;
8690
}
@@ -127,7 +131,9 @@ const renderDescription = (entry: ActivityEntry) => {
127131
return (
128132
<span>
129133
Collector {targetLink(target)} reassigned to fleet{' '}
130-
{newFleetId ? <Link to={Routes.SYSTEM.COLLECTORS.FLEET(newFleetId)}>{newFleetName}</Link> : 'unknown'}
134+
{newFleetId
135+
? <Link to={Routes.SYSTEM.COLLECTORS.FLEET(newFleetId)}>{newFleetName}</Link>
136+
: <MutedText>[deleted]</MutedText>}
131137
</span>
132138
);
133139
}

graylog2-web-interface/src/components/collectors/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ export type ActorInfo = {
162162
};
163163

164164
export type TargetInfo = {
165-
id: string;
165+
id: string | null;
166166
name: string;
167167
type: 'fleet' | 'collector';
168168
};

0 commit comments

Comments
 (0)