(w http.ResponseWriter, r *http.Request)
| 203 | } |
| 204 | |
| 205 | func (a *API) handleNodeRoutes(w http.ResponseWriter, r *http.Request) { |
| 206 | path := strings.TrimPrefix(r.URL.Path, "/v1/nodes/") |
| 207 | parts := strings.Split(path, "/") |
| 208 | if len(parts) == 0 || parts[0] == "" { |
| 209 | writeJSON(w, http.StatusNotFound, map[string]any{"error": "node id is required"}) |
| 210 | return |
| 211 | } |
| 212 | |
| 213 | nodeID := parts[0] |
| 214 | if len(parts) == 1 { |
| 215 | a.handleNode(w, r, nodeID) |
| 216 | return |
| 217 | } |
| 218 | |
| 219 | // DELETE /v1/nodes/{nodeID}/traceroute/results/{snapshotID} |
| 220 | if len(parts) == 4 && parts[1] == "traceroute" && parts[2] == "results" { |
| 221 | a.handleTracerouteResultDelete(w, r, parts[3]) |
| 222 | return |
| 223 | } |
| 224 | |
| 225 | switch strings.Join(parts[1:], "/") { |
| 226 | case "runtime": |
| 227 | a.handleNodeRuntime(w, r, nodeID) |
| 228 | case "runtime/status": |
| 229 | a.handleNodeStatus(w, r, nodeID) |
| 230 | case "runtime/usage": |
| 231 | a.handleNodeUsage(w, r, nodeID) |
| 232 | case "runtime/config": |
| 233 | a.handleNodeConfig(w, r, nodeID) |
| 234 | case "runtime/logs": |
| 235 | a.handleNodeLogs(w, r, nodeID) |
| 236 | case "runtime/logs/stream": |
| 237 | a.handleNodeLogsStream(w, r, nodeID) |
| 238 | case "runtime/start": |
| 239 | a.handleNodeStart(w, r, nodeID) |
| 240 | case "runtime/stop": |
| 241 | a.handleNodeStop(w, r, nodeID) |
| 242 | case "runtime/restart": |
| 243 | a.handleNodeRestart(w, r, nodeID) |
| 244 | case "runtime/apply": |
| 245 | a.handleNodeApply(w, r, nodeID) |
| 246 | case "runtime/metrics": |
| 247 | a.handleNodeMetrics(w, r, nodeID) |
| 248 | case "runtime/speedtest": |
| 249 | a.handleNodeSpeedTest(w, r, nodeID) |
| 250 | case "runtime/check": |
| 251 | a.handleNodeCheck(w, r, nodeID) |
| 252 | case "runtime/traceroute": |
| 253 | a.handleNodeTraceroute(w, r, nodeID) |
| 254 | case "traceroute/results": |
| 255 | a.handleNodeTracerouteResults(w, r, nodeID) |
| 256 | case "update": |
| 257 | a.handleNodeUpdate(w, r, nodeID) |
| 258 | case "sniproxy/sync": |
| 259 | a.handleNodeSNIProxySync(w, r, nodeID) |
| 260 | case "sniproxy/status": |
| 261 | a.handleNodeSNIProxyStatus(w, r, nodeID) |
| 262 | case "traffic": |
nothing calls this directly
no test coverage detected