Skip to content

Commit 2f5f408

Browse files
committed
fix: use shortest fqdn as workspace display name
1 parent e694321 commit 2f5f408

File tree

5 files changed

+35
-27
lines changed

5 files changed

+35
-27
lines changed

Coder Desktop/Coder Desktop/Preview Content/PreviewVPN.swift

+11-11
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,27 @@ import SwiftUI
33

44
@MainActor
55
final class PreviewVPN: Coder_Desktop.VPNService {
6-
@Published var state: Coder_Desktop.VPNServiceState = .disabled
6+
@Published var state: Coder_Desktop.VPNServiceState = .connected
77
@Published var menuState: VPNMenuState = .init(agents: [
8-
UUID(): Agent(id: UUID(), name: "dev", status: .error, copyableDNS: "asdf.coder", wsName: "dogfood2",
8+
UUID(): Agent(id: UUID(), name: "dev", status: .error, fqdns: ["asdf.coder"], wsName: "dogfood2",
99
wsID: UUID()),
10-
UUID(): Agent(id: UUID(), name: "dev", status: .okay, copyableDNS: "asdf.coder",
10+
UUID(): Agent(id: UUID(), name: "dev", status: .okay, fqdns: ["asdf.coder"],
1111
wsName: "testing-a-very-long-name", wsID: UUID()),
12-
UUID(): Agent(id: UUID(), name: "dev", status: .warn, copyableDNS: "asdf.coder", wsName: "opensrc",
12+
UUID(): Agent(id: UUID(), name: "dev", status: .warn, fqdns: ["asdf.coder"], wsName: "opensrc",
1313
wsID: UUID()),
14-
UUID(): Agent(id: UUID(), name: "dev", status: .off, copyableDNS: "asdf.coder", wsName: "gvisor",
14+
UUID(): Agent(id: UUID(), name: "dev", status: .off, fqdns: ["asdf.coder"], wsName: "gvisor",
1515
wsID: UUID()),
16-
UUID(): Agent(id: UUID(), name: "dev", status: .off, copyableDNS: "asdf.coder", wsName: "example",
16+
UUID(): Agent(id: UUID(), name: "dev", status: .off, fqdns: ["asdf.coder"], wsName: "example",
1717
wsID: UUID()),
18-
UUID(): Agent(id: UUID(), name: "dev", status: .error, copyableDNS: "asdf.coder", wsName: "dogfood2",
18+
UUID(): Agent(id: UUID(), name: "dev", status: .error, fqdns: ["asdf.coder"], wsName: "dogfood2",
1919
wsID: UUID()),
20-
UUID(): Agent(id: UUID(), name: "dev", status: .okay, copyableDNS: "asdf.coder",
20+
UUID(): Agent(id: UUID(), name: "dev", status: .okay, fqdns: ["asdf.coder"],
2121
wsName: "testing-a-very-long-name", wsID: UUID()),
22-
UUID(): Agent(id: UUID(), name: "dev", status: .warn, copyableDNS: "asdf.coder", wsName: "opensrc",
22+
UUID(): Agent(id: UUID(), name: "dev", status: .warn, fqdns: ["asdf.coder"], wsName: "opensrc",
2323
wsID: UUID()),
24-
UUID(): Agent(id: UUID(), name: "dev", status: .off, copyableDNS: "asdf.coder", wsName: "gvisor",
24+
UUID(): Agent(id: UUID(), name: "dev", status: .off, fqdns: ["asdf.coder"], wsName: "gvisor",
2525
wsID: UUID()),
26-
UUID(): Agent(id: UUID(), name: "dev", status: .off, copyableDNS: "asdf.coder", wsName: "example",
26+
UUID(): Agent(id: UUID(), name: "dev", status: .off, fqdns: ["asdf.coder"], wsName: "example",
2727
wsID: UUID()),
2828
], workspaces: [:])
2929
let shouldFail: Bool

Coder Desktop/Coder Desktop/VPNMenuState.swift

+7-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ struct Agent: Identifiable, Equatable, Comparable {
66
let id: UUID
77
let name: String
88
let status: AgentStatus
9-
let copyableDNS: String
9+
let fqdns: [String]
1010
let wsName: String
1111
let wsID: UUID
1212

@@ -17,6 +17,11 @@ struct Agent: Identifiable, Equatable, Comparable {
1717
}
1818
return lhs.wsName.localizedCompare(rhs.wsName) == .orderedAscending
1919
}
20+
21+
// Choose the shortest hostname, and remove trailing dot if present
22+
var primaryHost: String? { fqdns.min(by: { $0.count < $1.count })
23+
.map { $0.hasSuffix(".") ? String($0.dropLast()) : $0 }
24+
}
2025
}
2126

2227
enum AgentStatus: Int, Equatable, Comparable {
@@ -67,9 +72,7 @@ struct VPNMenuState {
6772
name: agent.name,
6873
// If last handshake was not within last five minutes, the agent is unhealthy
6974
status: agent.lastHandshake.date > Date.now.addingTimeInterval(-300) ? .okay : .warn,
70-
// Choose the shortest hostname, and remove trailing dot if present
71-
copyableDNS: agent.fqdn.min(by: { $0.count < $1.count })
72-
.map { $0.hasSuffix(".") ? String($0.dropLast()) : $0 } ?? "UNKNOWN",
75+
fqdns: agent.fqdn,
7376
wsName: wsName,
7477
wsID: wsID
7578
)

Coder Desktop/Coder Desktop/Views/VPNMenuItem.swift

+13-8
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,17 @@ struct MenuItemView: View {
4747
@State private var nameIsSelected: Bool = false
4848
@State private var copyIsSelected: Bool = false
4949

50-
private var fmtWsName: AttributedString {
51-
var formattedName = AttributedString(item.wsName)
50+
private var itemName: AttributedString {
51+
let name = switch item {
52+
case let .agent(agent): agent.primaryHost ?? "\(item.wsName).coder"
53+
case .offlineWorkspace: "\(item.wsName).coder"
54+
}
55+
56+
var formattedName = AttributedString(name)
5257
formattedName.foregroundColor = .primary
53-
var coderPart = AttributedString(".coder")
54-
coderPart.foregroundColor = .gray
55-
formattedName.append(coderPart)
58+
if let range = formattedName.range(of: ".coder") {
59+
formattedName[range].foregroundColor = .gray
60+
}
5661
return formattedName
5762
}
5863

@@ -73,7 +78,7 @@ struct MenuItemView: View {
7378
.fill(item.status.color.opacity(1.0))
7479
.frame(width: 7, height: 7)
7580
}
76-
Text(fmtWsName).lineLimit(1).truncationMode(.tail)
81+
Text(itemName).lineLimit(1).truncationMode(.tail)
7782
Spacer()
7883
}.padding(.horizontal, Theme.Size.trayPadding)
7984
.frame(minHeight: 22)
@@ -84,10 +89,10 @@ struct MenuItemView: View {
8489
.onHover { hovering in nameIsSelected = hovering }
8590
Spacer()
8691
}.buttonStyle(.plain)
87-
if case let .agent(agent) = item {
92+
if case let .agent(agent) = item, let copyableDNS = agent.primaryHost {
8893
Button {
8994
NSPasteboard.general.clearContents()
90-
NSPasteboard.general.setString(agent.copyableDNS, forType: .string)
95+
NSPasteboard.general.setString(copyableDNS, forType: .string)
9196
} label: {
9297
Image(systemName: "doc.on.doc")
9398
.symbolVariant(.fill)

Coder Desktop/Coder DesktopTests/AgentsTests.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ struct AgentsTests {
2424
id: UUID(),
2525
name: "dev",
2626
status: .okay,
27-
copyableDNS: "a\($0).example.com",
28-
wsName: "a\($0)",
27+
fqdns: ["a\($0).coder"],
28+
wsName: "ws\($0)",
2929
wsID: UUID()
3030
)
3131
return (agent.id, agent)

Coder Desktop/Coder DesktopTests/VPNMenuStateTests.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ struct VPNMenuStateTests {
2727
#expect(storedAgent.name == "dev")
2828
#expect(storedAgent.wsID == workspaceID)
2929
#expect(storedAgent.wsName == "foo")
30-
#expect(storedAgent.copyableDNS == "foo.coder")
30+
#expect(storedAgent.primaryHost == "foo.coder")
3131
#expect(storedAgent.status == .okay)
3232
}
3333

@@ -123,7 +123,7 @@ struct VPNMenuStateTests {
123123
let storedAgent = try #require(state.agents[newAgentID])
124124
#expect(storedAgent.name == "agent1")
125125
#expect(storedAgent.wsID == workspaceID)
126-
#expect(storedAgent.copyableDNS == "foo.coder")
126+
#expect(storedAgent.primaryHost == "foo.coder")
127127
#expect(storedAgent.status == .okay)
128128
}
129129

0 commit comments

Comments
 (0)