Skip to main content

API Overview

NetTraceX provides a comprehensive API for network diagnostics and tool integration.

Core Interfaces​

DiagnosticTool​

The main interface for all network diagnostic tools.

type DiagnosticTool interface {
Name() string
Description() string
Execute(ctx context.Context, params Parameters) (Result, error)
Validate(params Parameters) error
GetDefaultParameters() Parameters
}

NetworkClient​

Abstracts network operations for testing and flexibility.

type NetworkClient interface {
Ping(ctx context.Context, host string, params PingParameters) (PingResult, error)
TraceRoute(ctx context.Context, host string, params TraceRouteParameters) (TraceRouteResult, error)
DNSLookup(ctx context.Context, domain string, params DNSParameters) (DNSResult, error)
WHOISLookup(ctx context.Context, domain string, params WHOISParameters) (WHOISResult, error)
SSLCheck(ctx context.Context, host string, params SSLParameters) (SSLResult, error)
}

Result​

Represents diagnostic operation results with formatting and export capabilities.

type Result interface {
Format(format Format) (string, error)
Export(path string, format Format) error
GetMetadata() Metadata
GetData() interface{}
}

Built-in Tools​

Ping Tool​

type PingTool struct {
client NetworkClient
}

func (p *PingTool) Execute(ctx context.Context, params Parameters) (Result, error) {
pingParams := params.(PingParameters)
return p.client.Ping(ctx, pingParams.Host, pingParams)
}

Traceroute Tool​

type TracerouteTool struct {
client NetworkClient
}

func (t *TracerouteTool) Execute(ctx context.Context, params Parameters) (Result, error) {
traceParams := params.(TraceRouteParameters)
return t.client.TraceRoute(ctx, traceParams.Host, traceParams)
}

DNS Tool​

type DNSTool struct {
client NetworkClient
}

func (d *DNSTool) Execute(ctx context.Context, params Parameters) (Result, error) {
dnsParams := params.(DNSParameters)
return d.client.DNSLookup(ctx, dnsParams.Domain, dnsParams)
}

WHOIS Tool​

type WHOISTool struct {
client NetworkClient
}

func (w *WHOISTool) Execute(ctx context.Context, params Parameters) (Result, error) {
whoisParams := params.(WHOISParameters)
return w.client.WHOISLookup(ctx, whoisParams.Domain, whoisParams)
}

SSL Tool​

type SSLTool struct {
client NetworkClient
}

func (s *SSLTool) Execute(ctx context.Context, params Parameters) (Result, error) {
sslParams := params.(SSLParameters)
return s.client.SSLCheck(ctx, sslParams.Host, sslParams)
}

Parameter Types​

PingParameters​

type PingParameters struct {
Host string `json:"host" yaml:"host"`
Count int `json:"count" yaml:"count"`
Interval time.Duration `json:"interval" yaml:"interval"`
Timeout time.Duration `json:"timeout" yaml:"timeout"`
PacketSize int `json:"packet_size" yaml:"packet_size"`
TTL int `json:"ttl" yaml:"ttl"`
}

TraceRouteParameters​

type TraceRouteParameters struct {
Host string `json:"host" yaml:"host"`
MaxHops int `json:"max_hops" yaml:"max_hops"`
Timeout time.Duration `json:"timeout" yaml:"timeout"`
Protocol string `json:"protocol" yaml:"protocol"`
}

DNSParameters​

type DNSParameters struct {
Domain string `json:"domain" yaml:"domain"`
RecordTypes []string `json:"record_types" yaml:"record_types"`
Server string `json:"server" yaml:"server"`
Timeout time.Duration `json:"timeout" yaml:"timeout"`
}

WHOISParameters​

type WHOISParameters struct {
Domain string `json:"domain" yaml:"domain"`
Server string `json:"server" yaml:"server"`
Timeout time.Duration `json:"timeout" yaml:"timeout"`
}

SSLParameters​

type SSLParameters struct {
Host string `json:"host" yaml:"host"`
Port int `json:"port" yaml:"port"`
VerifyCertificate bool `json:"verify_certificate" yaml:"verify_certificate"`
CheckExpiry bool `json:"check_expiry" yaml:"check_expiry"`
CheckChain bool `json:"check_chain" yaml:"check_chain"`
}

Result Types​

PingResult​

type PingResult struct {
Host string `json:"host"`
Packets []PacketInfo `json:"packets"`
Summary PingSummary `json:"summary"`
Duration time.Duration `json:"duration"`
}

TraceRouteResult​

type TraceRouteResult struct {
Host string `json:"host"`
Hops []HopInfo `json:"hops"`
Summary TraceRouteSummary `json:"summary"`
}

DNSResult​

type DNSResult struct {
Domain string `json:"domain"`
Records []DNSRecord `json:"records"`
Server string `json:"server"`
}

WHOISResult​

type WHOISResult struct {
Domain string `json:"domain"`
Data map[string]string `json:"data"`
Server string `json:"server"`
RawData string `json:"raw_data"`
}

SSLResult​

type SSLResult struct {
Host string `json:"host"`
Port int `json:"port"`
Certificate CertInfo `json:"certificate"`
Chain []CertInfo `json:"chain"`
Valid bool `json:"valid"`
}

Configuration API​

ConfigurationManager​

type ConfigurationManager interface {
Load() (*Config, error)
Save(config *Config) error
Validate(config *Config) error
Get(key string) (interface{}, error)
Set(key string, value interface{}) error
}

Config Structure​

type Config struct {
Network NetworkConfig `yaml:"network"`
UI UIConfig `yaml:"ui"`
Plugins PluginsConfig `yaml:"plugins"`
Export ExportConfig `yaml:"export"`
Logging LoggingConfig `yaml:"logging"`
}

Error Handling​

Custom Error Types​

type DiagnosticError struct {
Tool string
Message string
Cause error
}

func (e *DiagnosticError) Error() string {
return fmt.Sprintf("%s: %s", e.Tool, e.Message)
}

func (e *DiagnosticError) Unwrap() error {
return e.Cause
}

Error Handling Best Practices​

func (t *Tool) Execute(ctx context.Context, params Parameters) (Result, error) {
if err := t.Validate(params); err != nil {
return nil, &DiagnosticError{
Tool: t.Name(),
Message: "parameter validation failed",
Cause: err,
}
}

// Execute tool logic...
}

Next Steps​