Files
EvoBGP/internal/birdfmt/protocols.go
T
Denozordec 399622cc70
CI / changes (push) Successful in 5s
CI / openapi (push) Has been skipped
CI / go (push) Successful in 23s
CI / bird2 (push) Has been cancelled
CI / docker-go (deploy/docker/evobgp-agent/Dockerfile, , evobgp-agent) (push) Has been cancelled
CI / docker-go (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, , evobgp-all) (push) Has been cancelled
CI / docker-go (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, , evobgp-api) (push) Has been cancelled
CI / docker-go (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, , evobgp-deploy) (push) Has been cancelled
CI / docker-go (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, , evobgp-ingest) (push) Has been cancelled
CI / docker-go (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, , evobgp-node) (push) Has been cancelled
CI / docker-go (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, , evobgp-render) (push) Has been cancelled
CI / docker-go (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, , evobgp-scheduler) (push) Has been cancelled
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Has started running
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Has been cancelled
CI / docker-bird (push) Has been cancelled
feat: improve BGP protocol summary handling by introducing isBGPProtocolSummaryRow function. Update SummarizeProtocolsOutput and related tests to ensure evobgp_* static names are not counted as BGP sessions, enhancing accuracy in protocol summaries.
2026-04-06 00:41:59 +07:00

53 lines
1.4 KiB
Go

package birdfmt
import (
"bytes"
"context"
"fmt"
"os/exec"
"strings"
)
// ShowProtocols runs `birdc [-s socket] show protocols all` and returns stdout (BIRD 2).
func ShowProtocols(ctx context.Context, socket, birdcBin string) (string, error) {
if birdcBin == "" {
birdcBin = "birdc"
}
args := []string{"show", "protocols", "all"}
if s := strings.TrimSpace(socket); s != "" {
args = append([]string{"-s", s}, args...)
}
cmd := exec.CommandContext(ctx, birdcBin, args...)
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
msg := strings.TrimSpace(stderr.String())
if msg != "" {
return "", fmt.Errorf("birdc show protocols: %w: %s", err, msg)
}
return "", fmt.Errorf("birdc show protocols: %w", err)
}
return stdout.String(), nil
}
// CountEstablishedBGPSessions counts BGP protocol rows whose line contains "Established"
// (heuristic for `birdc show protocols` / `show protocols all` output).
func CountEstablishedBGPSessions(showProtocolsOutput string) int {
lines := strings.Split(showProtocolsOutput, "\n")
n := 0
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "name") || strings.HasPrefix(strings.ToLower(line), "table") {
continue
}
if !isBGPProtocolSummaryRow(line) {
continue
}
if strings.Contains(strings.ToLower(line), "established") {
n++
}
}
return n
}