Skip to content

mismatched/libtower

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libtower

Go Reference Go Report Card FOSSA Status

Network health-check primitives for Go — TCP, TLS, HTTP, HTTPS, DNS, ICMP ping, WebSocket, and certificate expiry. Flat package, no sub-packages.

Install

go get github.com/mismatched/libtower

Quick start

package main

import (
    "context"
    "net/url"
    "time"

    "github.com/mismatched/libtower"
)

func main() {
    ctx := context.Background()

    // TCP port check
    u, _ := url.Parse("tcp://example.com:443")
    tcp := &libtower.TCP{URL: u, Timeout: 5 * time.Second}
    ok, _ := tcp.TCPPortCheck(ctx)

    // DNS lookup
    ip, dur, _ := libtower.DNSLookup("example.com")

    // TLS cert check with expiry warning
    hs := &libtower.HTTPS{
        Host:                  "example.com",
        Timeout:               5 * time.Second,
        WarnIfExpiringWithin:  30 * 24 * time.Hour,
    }
    r := hs.Check(ctx)
    if r.Warning != nil {
        println("cert expiring soon:", r.Warning.Error())
    }

    _ = ok
    _ = ip
    _ = dur
}

Checks

Check Type/Function Returns
TCP port TCP.TCPPortCheck(ctx) (bool, error)
TLS port (client cert) TCP.TLSPortCheck(ctx) (bool, error)
HTTP status HTTP.HTTPStatus() error (receiver populated)
HTTP trace (per-phase timing) HTTPTrace.Trace() error (receiver populated)
TLS cert validity HTTPS.HTTPSCheck(ctx) (bool, time.Time, error)
DNS lookup DNSLookup(addr) (*net.IPAddr, time.Duration, error)
Direct DNS query DNSLookupFrom(addr, server) (*net.IPAddr, time.Duration, error)
ICMP ping ⚠️ Ping(addr, seq) (*net.IPAddr, time.Duration, error)
WebSocket WebSocket.WSCheck(ctx) error

⚠️ Ping requires root (or CAP_NET_RAW on Linux).

Composing checks

All types implement Checker, so you can run them uniformly:

checks := []libtower.Checker{
    &libtower.TCP{URL: u, Timeout: time.Second},
    &libtower.HTTPS{Host: "example.com", WarnIfExpiringWithin: 30 * 24 * time.Hour},
    &libtower.DNS{ADDR: "example.com"},
}
for _, c := range checks {
    r := c.Check(ctx)
    if !r.OK { panic(r.Error) }
}

Context variants

Short names (Ping, DNSLookup) use context.Background(). Use the ...Context variants for cancellation:

PingContext(ctx, addr, seq)
DNSLookupContext(ctx, addr)
DNSLookupFromContext(ctx, addr, server)
HTTPStatusContext(ctx)
TraceContext(ctx)

License

MIT

FOSSA Status

About

No description, website, or topics provided.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

 
 
 

Contributors