|
17 | 17 | package dgraphtest |
18 | 18 |
|
19 | 19 | import ( |
| 20 | + "bytes" |
20 | 21 | "context" |
21 | 22 | "encoding/json" |
22 | 23 | "fmt" |
@@ -281,6 +282,87 @@ func (c *LocalCluster) destroyContainers() error { |
281 | 282 | return nil |
282 | 283 | } |
283 | 284 |
|
| 285 | +// CheckRunningServices checks open ports using lsof and returns the output as a string |
| 286 | +func CheckRunningServices() (string, error) { |
| 287 | + lsofCmd := exec.Command("lsof", "-i", "-n") |
| 288 | + output, err := runCommand(lsofCmd) |
| 289 | + if err != nil { |
| 290 | + return "", fmt.Errorf("error running lsof command: %v", err) |
| 291 | + } |
| 292 | + return output, nil |
| 293 | +} |
| 294 | + |
| 295 | +// ListRunningContainers lists running Docker containers using the Docker Go client |
| 296 | +func (c *LocalCluster) listRunningContainers() (string, error) { |
| 297 | + containers, err := c.dcli.ContainerList(context.Background(), types.ContainerListOptions{}) |
| 298 | + if err != nil { |
| 299 | + return "", fmt.Errorf("error listing Docker containers: %v", err) |
| 300 | + } |
| 301 | + |
| 302 | + var result bytes.Buffer |
| 303 | + for _, container := range containers { |
| 304 | + result.WriteString(fmt.Sprintf("ID: %s, Image: %s, Command: %s, Status: %s\n", |
| 305 | + container.ID[:10], container.Image, container.Command, container.Status)) |
| 306 | + |
| 307 | + result.WriteString("Port Mappings:\n") |
| 308 | + for _, port := range container.Ports { |
| 309 | + result.WriteString(fmt.Sprintf(" %s:%d -> %d\n", port.IP, port.PublicPort, port.PrivatePort)) |
| 310 | + } |
| 311 | + result.WriteString("\n") |
| 312 | + |
| 313 | + result.WriteString("Port Mappings:\n") |
| 314 | + info, err := c.dcli.ContainerInspect(context.Background(), container.ID) |
| 315 | + if err != nil { |
| 316 | + return "", errors.Wrap(err, "error inspecting container") |
| 317 | + } |
| 318 | + |
| 319 | + for port, bindings := range info.NetworkSettings.Ports { |
| 320 | + if len(bindings) == 0 { |
| 321 | + continue |
| 322 | + } |
| 323 | + result.WriteString(fmt.Sprintf(" %s:%s\n", port.Port(), bindings)) |
| 324 | + } |
| 325 | + result.WriteString("\n") |
| 326 | + } |
| 327 | + |
| 328 | + return result.String(), nil |
| 329 | +} |
| 330 | + |
| 331 | +// runCommand executes a command and returns its output or an error |
| 332 | +func runCommand(cmd *exec.Cmd) (string, error) { |
| 333 | + var out bytes.Buffer |
| 334 | + var stderr bytes.Buffer |
| 335 | + cmd.Stdout = &out |
| 336 | + cmd.Stderr = &stderr |
| 337 | + err := cmd.Run() |
| 338 | + if err != nil { |
| 339 | + return "", fmt.Errorf("%v: %v", err, stderr.String()) |
| 340 | + } |
| 341 | + return out.String(), nil |
| 342 | +} |
| 343 | + |
| 344 | +func (c *LocalCluster) printNetworkStuff() { |
| 345 | + log.Printf("Checking running services and ports using lsof, netstat, and Docker...\n") |
| 346 | + |
| 347 | + // Check running services using lsof |
| 348 | + lsofOutput, err := CheckRunningServices() |
| 349 | + if err != nil { |
| 350 | + fmt.Printf("Error checking running services: %v\n", err) |
| 351 | + } else { |
| 352 | + log.Printf("Output of lsof -i:") |
| 353 | + log.Println(lsofOutput) |
| 354 | + } |
| 355 | + |
| 356 | + // List running Docker containers |
| 357 | + dockerOutput, err := c.listRunningContainers() |
| 358 | + if err != nil { |
| 359 | + fmt.Printf("Error listing Docker containers: %v\n", err) |
| 360 | + } else { |
| 361 | + log.Printf("Running Docker containers:") |
| 362 | + log.Println(dockerOutput) |
| 363 | + } |
| 364 | +} |
| 365 | + |
284 | 366 | func (c *LocalCluster) Cleanup(verbose bool) { |
285 | 367 | if c == nil { |
286 | 368 | return |
@@ -489,6 +571,7 @@ func (c *LocalCluster) containerHealthCheck(url func(c *LocalCluster) (string, e |
489 | 571 | if err != nil { |
490 | 572 | return errors.Wrap(err, "error getting health URL") |
491 | 573 | } |
| 574 | + |
492 | 575 | for i := 0; i < 60; i++ { |
493 | 576 | time.Sleep(waitDurBeforeRetry) |
494 | 577 |
|
@@ -530,6 +613,7 @@ func (c *LocalCluster) containerHealthCheck(url func(c *LocalCluster) (string, e |
530 | 613 | return nil |
531 | 614 | } |
532 | 615 |
|
| 616 | + c.printNetworkStuff() |
533 | 617 | return fmt.Errorf("health failed, cluster took too long to come up [%v]", endpoint) |
534 | 618 | } |
535 | 619 |
|
@@ -773,7 +857,7 @@ func (c *LocalCluster) serverURL(server, endpoint string) (string, error) { |
773 | 857 | if err != nil { |
774 | 858 | return "", err |
775 | 859 | } |
776 | | - url := "localhost:" + pubPort + endpoint |
| 860 | + url := "0.0.0.0:" + pubPort + endpoint |
777 | 861 | return url, nil |
778 | 862 | } |
779 | 863 |
|
|
0 commit comments