Refactor docs; Add 'ipng_source_tag', add udp listener for nginx-ipng-stats plugin

This commit is contained in:
2026-04-17 09:50:54 +02:00
parent 0ecca06069
commit 577ed3dad5
26 changed files with 1319 additions and 1718 deletions

View File

@@ -24,6 +24,7 @@ type sharedFlags struct {
uriReNeg string // RE2 regex exclusion against request URI
isTor string // "", "1" / "!=0" (TOR only), "0" / "!=1" (non-TOR only)
asn string // expression: "12345", "!=65000", ">=1000", etc.
sourceTag string // exact ipng_source_tag match
}
// bindShared registers the shared flags on fs and returns a pointer to the
@@ -42,6 +43,7 @@ func bindShared(fs *flag.FlagSet) (*sharedFlags, *string) {
fs.StringVar(&sf.uriReNeg, "uri-re-neg", "", "filter: RE2 regex exclusion against request URI")
fs.StringVar(&sf.isTor, "is-tor", "", "filter: TOR traffic (1 or !=0 = TOR only; 0 or !=1 = non-TOR only)")
fs.StringVar(&sf.asn, "asn", "", "filter: ASN expression (12345, !=65000, >=1000, <64512, …)")
fs.StringVar(&sf.sourceTag, "source-tag", "", "filter: exact ipng_source_tag match (e.g. direct, cdn, …)")
return sf, target
}
@@ -64,7 +66,7 @@ func parseTargets(s string) []string {
}
func buildFilter(sf *sharedFlags) *pb.Filter {
if sf.website == "" && sf.prefix == "" && sf.uri == "" && sf.status == "" && sf.websiteRe == "" && sf.uriRe == "" && sf.websiteReNeg == "" && sf.uriReNeg == "" && sf.isTor == "" && sf.asn == "" {
if sf.website == "" && sf.prefix == "" && sf.uri == "" && sf.status == "" && sf.websiteRe == "" && sf.uriRe == "" && sf.websiteReNeg == "" && sf.uriReNeg == "" && sf.isTor == "" && sf.asn == "" && sf.sourceTag == "" {
return nil
}
f := &pb.Filter{}
@@ -118,6 +120,9 @@ func buildFilter(sf *sharedFlags) *pb.Filter {
f.AsnNumber = &n
f.AsnOp = op
}
if sf.sourceTag != "" {
f.IpngSourceTag = &sf.sourceTag
}
return f
}
@@ -152,8 +157,12 @@ func parseGroupBy(s string) pb.GroupBy {
return pb.GroupBy_REQUEST_URI
case "status":
return pb.GroupBy_HTTP_RESPONSE
case "asn":
return pb.GroupBy_ASN_NUMBER
case "source_tag", "source-tag":
return pb.GroupBy_SOURCE_TAG
default:
fmt.Fprintf(os.Stderr, "--group-by: unknown value %q; valid: website prefix uri status\n", s)
fmt.Fprintf(os.Stderr, "--group-by: unknown value %q; valid: website prefix uri status asn source_tag\n", s)
os.Exit(1)
panic("unreachable")
}

View File

@@ -22,11 +22,14 @@ Subcommand flags (all subcommands):
--status EXPR filter: HTTP status expression (200, !=200, >=400, <500, …)
--website-re REGEX filter: RE2 regex against website
--uri-re REGEX filter: RE2 regex against request URI
--is-tor EXPR filter: TOR (1/!=0 = only, 0/!=1 = none)
--asn EXPR filter: ASN expression (12345, !=65000, …)
--source-tag STRING filter: exact ipng_source_tag match
topn flags:
--n INT number of entries (default 10)
--window STR 1m 5m 15m 60m 6h 24h (default 5m)
--group-by STR website prefix uri status (default website)
--group-by STR website prefix uri status asn source_tag (default website)
trend flags:
--window STR 1m 5m 15m 60m 6h 24h (default 5m)