Skip to content

Commit 280379d

Browse files
committed
docs: add proposal for Argo CD Agent Visibility UI
Signed-off-by: jiwlee <ddazi9576@gmail.com>
1 parent d314838 commit 280379d

File tree

1 file changed

+276
-0
lines changed

1 file changed

+276
-0
lines changed

docs/proposals/agent-ui.md

Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,276 @@
1+
# Argo CD Agent Visibility UI
2+
3+
## Summary
4+
5+
This proposal introduces a new **Agent Visibility UI** for Argo CD Agent.
6+
Its purpose is to provide a clear and intuitive way to visualize the **connection and synchronization status** of multiple **Agents** within the Argo CD web interface.
7+
8+
Currently, users can only inspect Agent information using the `argocd-agentctl` CLI, making it difficult to monitor multi-cluster environments or understand Agent connectivity at a glance.
9+
This proposal adds a **simple, visibility-focused UI** integrated into the existing Argo CD dashboard.
10+
11+
---
12+
13+
## Motivation
14+
15+
The Argo CD Agent project enables distributed GitOps by allowing multiple Agents — running across different clusters or namespaces — to connect to a single Principal.
16+
While this architecture supports large-scale operations, the current lack of visual monitoring introduces key challenges:
17+
18+
- No unified view of all Agents connected to the Principal.
19+
- Difficult to identify unreachable or disconnected Agents.
20+
- No easy way to inspect Agent configurations such as mode, TLS setup, or Redis linkage.
21+
22+
A native visibility UI allows operators and developers to quickly assess cluster connectivity and inspect configuration details—all within Argo CD.
23+
24+
---
25+
26+
## Goals
27+
28+
- Introduce a new **“Agents”** navigation item in the Argo CD sidebar.
29+
- Display **Principal & Agents** relationship overview.
30+
- Provide **Tile, List, Tree, and Detail** views for clear visualization.
31+
- Show key Agent data: connection, sync status, mode, namespace, and Principal linkage.
32+
- Keep v1 focused on **simple visibility and clarity**, without complex interactions.
33+
34+
---
35+
36+
## Non-Goals
37+
38+
- Deploying, deleting, or reconfiguring Agents.
39+
- Real-time metric streaming or Prometheus integration.
40+
- Editing configuration fields within the UI.
41+
42+
---
43+
44+
## Proposal
45+
46+
### 1. Agents Overview Page
47+
48+
The **Agents** entry in the sidebar opens the overview page, which supports two layouts:
49+
**Tile View** and **List View**. Users can toggle between them.
50+
51+
#### Tile View
52+
53+
Each card represents either the **Principal** or an **Agent**.
54+
55+
**Principal Card Fields**
56+
57+
- **Name:** Principal name
58+
- **Connecting Agents:** number of Agents currently linked
59+
- **Listen Port / Redis Address:** summary of current operational endpoints
60+
61+
**Agent Card Fields**
62+
63+
- **Mode:** `Managed` or `Autonomous`
64+
- **Connection Status:** `Connected`, `Unreachable`, `Disconnected`
65+
- **Sync Status:** `Synced` or `OutOfSync`
66+
- **Principal:** shows associated Principal name
67+
- **Destination:** deployment location (e.g. `in-cluster`)
68+
- **Server Address / Port:** connection endpoint if available
69+
- **Actions:** `Refresh`
70+
71+
Color borders indicate connection health:
72+
73+
- 🟢 Green → Connected
74+
- 🟡 Yellow → Unreachable
75+
- 🔴 Red → Disconnected
76+
77+
#### List View
78+
79+
A compact version of the Tile View with rows for each Agent.
80+
81+
#### Principal Header Row
82+
83+
- **Name:** The name of the Principal (e.g., `agent-principal`)
84+
- **Connecting Agents:** Number of Agents currently connected (e.g., `2`)
85+
86+
#### Agent Rows
87+
88+
Each Agent entry displays key configuration and status information:
89+
90+
- **Principal:** The associated Principal (always the same single Principal)
91+
- **Name:** The Agent name (e.g., `agent-1`)
92+
- **Mode:** `Managed` or `Autonomous`
93+
- **Destination:** The deployment location (e.g., `in-cluster`)
94+
- **Status (right side):**
95+
- **Connection:** `Connected`, `Unreachable`, or `Disconnected`
96+
- **Sync:** `Synced` or `OutOfSync`
97+
98+
#### Visual Cues
99+
100+
- Left border color indicates **connection** state:
101+
- 🟢 **Green** → Connected
102+
- 🟡 **Yellow** → Unreachable
103+
- 🔴 **Red** → Disconnected
104+
105+
#### Navigation
106+
107+
- Clicking an **Agent row** opens the **Agent Detail View**.
108+
- Clicking the **Principal header row** (or its “Details” action) opens the **Principal Detail View**.
109+
110+
---
111+
112+
### 2. Agents Tree View
113+
114+
Displays a hierarchical **Principal → Agents** visualization.
115+
116+
- The Principal appears as the **root node** (e.g., `agent-principal`).
117+
- Each Agent node branches from it, showing:
118+
- Connection (`conn:`) and Sync (`sync:`) indicators.
119+
- **Mode** (Managed / Autonomous) displayed as a small tag.
120+
- Unreachable or disconnected Agents are visually dimmed or marked with warning icons.
121+
122+
Clicking an **Agent node** opens the **Agent Detail View**.
123+
Clicking the **Principal header row** (or its “Details” action) navigates to the **Principal Tree View**.
124+
125+
---
126+
127+
### 3. Detail Views
128+
129+
#### Principal Detail View
130+
131+
A configuration-oriented detail sheet showing all runtime parameters grouped by section:
132+
133+
**General**
134+
135+
- Namespace
136+
- Allowed Namespaces
137+
- Log Level / Format
138+
139+
**Network**
140+
141+
- Listen Port
142+
- Metrics Port
143+
- Health Check Port
144+
- gRPC / Proxy Ports
145+
146+
**Namespace Management**
147+
148+
- Auto-Create Namespace
149+
- Create Pattern / Create Labels
150+
151+
**Authentication / TLS**
152+
153+
- Authentication Method
154+
- Require Client Cert
155+
- TLS Secret / Key Paths
156+
- Root CA Path
157+
- Mutual Subject Mapping
158+
159+
**JWT / Token**
160+
161+
- JWT Key Paths and Secrets
162+
163+
**Resource Proxy**
164+
165+
- Enabled
166+
- TLS Secret
167+
- Cert / Key Paths
168+
169+
**Redis**
170+
171+
- Redis Server Address
172+
- Compression Type
173+
174+
**Communication**
175+
176+
- Keep-Alive Interval
177+
- WebSocket Enabled
178+
179+
#### Agent Detail View
180+
181+
Displays the specific Agent’s runtime config and link to its Principal.
182+
183+
**General**
184+
185+
- Mode (`Managed` / `Autonomous`)
186+
- Namespace
187+
- Log Level / Format
188+
189+
**Connection (Principal)**
190+
191+
- Principal Address
192+
- Principal Port
193+
- Credentials
194+
195+
**Network**
196+
197+
- Metrics Port
198+
- Health Check Port
199+
- Proxy Port
200+
201+
**TLS / Security**
202+
203+
- Skip TLS Validation
204+
- Root CA Secret Name
205+
- TLS Secret Name (Agent Cert)
206+
- Client Cert / Key Paths
207+
208+
**Resource Proxy**
209+
210+
- Enabled
211+
212+
**Redis**
213+
214+
- Redis Server Address
215+
216+
**Communication**
217+
218+
- gRPC Compression Enabled
219+
- Keep-Alive Interval
220+
- WebSocket Enabled
221+
222+
---
223+
224+
## Use Cases
225+
226+
**Use case 1:**
227+
As an operator, I want to visually confirm which Agents are connected or unreachable, directly in Argo CD.
228+
229+
**Use case 2:**
230+
As a developer, I want to quickly check the synchronization and connection status for each Agent.
231+
232+
**Use case 3:**
233+
As an administrator, I want to review Principal and Agent configurations side by side for debugging or validation.
234+
235+
---
236+
237+
## Implementation Details
238+
239+
- The **UI** will be implemented within the Argo CD React/TypeScript frontend.
240+
- The **API server** will expose new endpoints for:
241+
- Listing Agents and their connection metadata.
242+
- Returning full Principal and Agent configuration payloads.
243+
- Data source: Argo CD’s internal cache or the `argocd-agent` control-plane API.
244+
245+
---
246+
247+
## Security Considerations
248+
249+
This proposal only surfaces existing configuration and status data.
250+
No additional privileges or mutating endpoints are required.
251+
252+
---
253+
254+
## Risks and Mitigations
255+
256+
| Risk | Mitigation |
257+
| ----------------------------- | -------------------------------------------------- |
258+
| High Agent count impacts UI | Implement pagination and lazy rendering |
259+
| Outdated cache data | Add manual “Refresh” button for quick reload |
260+
| Inconsistent status reporting | Use unified connection state from agent-controller |
261+
262+
---
263+
264+
## Upgrade / Downgrade Strategy
265+
266+
This change introduces only additional UI components and supporting APIs.
267+
Existing Argo CD instances remain unaffected.
268+
If no Agents are registered, the “Agents” section will show a neutral empty state.
269+
270+
---
271+
272+
## Future Work
273+
274+
- Provide Agent action controls such as **Reconnect**, **Restart**, and **Sync**
275+
- Add a UI to link and navigate between **Applications** and their managing **Agents**
276+
- Allow editing of **Agent configuration** directly from the Argo CD UI

0 commit comments

Comments
 (0)