299 Commits

Author SHA1 Message Date
Vincent Bernat
b4306375e5 common/embed: check which interfaces are implemented
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (asn2org) (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (iana-assignments) (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (nixpkgs) (push) Has been cancelled
2025-12-07 19:12:20 +01:00
Vincent Bernat
84bd9a6464 common/embed: add a benchmark for reading from embed.zip
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Go toolchain / Update Go toolchain (push) Has been cancelled
This is slower, but it seems reasonable:

```
goos: linux
goarch: amd64
pkg: akvorado/common/embed
cpu: AMD Ryzen 5 5600X 6-Core Processor
BenchmarkData/compressed-12         	    2262	    526553 ns/op	     610 B/op	      10 allocs/op
BenchmarkData/uncompressed-12       	    9482	    123175 ns/op	       0 B/op	       0 allocs/op
```
2025-12-07 09:55:47 +01:00
Vincent Bernat
8886f4a212 Revert "common/kafka: disable client telemetry"
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
This reverts commit c2b7754c15. This is
fixed in franz-go 1.20.5.
2025-11-24 18:13:13 +01:00
Vincent Bernat
bd37c1d553 common/httpserver: listen on an abstract Unix socket
And make healthcheck command use it by default. This makes the
healthcheck command works whatever port the user has configured for the
HTTP service.
2025-11-24 11:29:45 +01:00
Vincent Bernat
c2b7754c15 common/kafka: disable client telemetry
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Temporarily disable client telemetry (not enabled by default in the
Docker Compose setup). This is until
https://github.com/twmb/franz-go/pull/1174 is merged.
2025-11-19 09:59:48 +01:00
Vincent Bernat
cb92fc7199 outlet/flow: persist decoders' state
Currently, for NetFlow, persist data/options templates and options. This
should allow the outlet to restart without loosing any message.

Fix #2100
2025-11-18 21:13:51 +01:00
Vincent Bernat
61eb082db5 common/helpers: replace custom code for atomic file writing
Use github.com/google/renameio/v2 instead.
2025-11-18 08:44:51 +01:00
Vincent Bernat
6b27794dd2 common/kafka: fix logger for kfake 2025-11-17 21:54:45 +01:00
Vincent Bernat
0a18f447b9 common/helpers: remove deprecated reflect.PtrTo
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
2025-11-14 23:30:01 +01:00
Vincent Bernat
abca5e983d chore: modernize some code 2025-11-14 23:22:02 +01:00
Vincent Bernat
beb9a3f0ba build: add even more linting rules
Notably, shorten function signatures by not repeating types.
2025-11-12 22:43:12 +01:00
Vincent Bernat
7f5950f89c build: add more linting rules with revive 2025-11-12 22:37:44 +01:00
Vincent Bernat
f04286d617 common/httpserver: enable block and mutex profiling
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
The value for block should match CPU profiling at 99Hz. The value for
mutex looks low enough to not add too much overhead. There is no
overhead while not profiling.
2025-11-11 12:02:40 +01:00
Vincent Bernat
7c7821bddc common/reporter: optimize stack trace walking when logging
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Instead of computing the same time the call site, use an intermediate
structure with lazily-evaluated functions.
2025-11-05 15:17:32 +01:00
Vincent Bernat
72645ade71 common/reporter: exclude callers from logs.go files (if possible) 2025-11-05 15:17:32 +01:00
Vincent Bernat
f811a8e942 common/reporter: decrease max stack trace to 32
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
2025-11-05 08:22:33 +01:00
Vincent Bernat
3626bc7dcd common/schema: remove useless check when checking columns 2025-11-05 08:22:33 +01:00
Vincent Bernat
a3507a3ff2 commong: move logging functions into */logs.go
The idea is that we should be able to skip it to find the true call
site. However, in some case, there is no true call site as we are in an
internal goroutine (like for Kafka). We can't do too complex things as
it would cost more CPU.

Here is the tentative. We should keep the last valid caller.

```go
// Run adds more context to an event, including "module" and "caller".
func (h contextHook) Run(e *zerolog.Event, _ zerolog.Level, _ string) {
	callStack := stack.Callers()
	callStack = callStack[3:] // Trial and error, there is a test to check it works.

	// We want to get the next caller that is in our own module but that is not logs.go.
	for _, call := range callStack {
		module := call.FunctionName()
		if !strings.HasPrefix(module, stack.ModuleName) || strings.HasSuffix(call.FileName(), "/logs.go") {
			continue
		}
		caller := callStack[0].SourceFile(true)
		e.Str("caller", caller)
		module = strings.SplitN(module, ".", 2)[0]
		e.Str("module", module)
		break
	}
}
```
2025-11-05 08:22:33 +01:00
Vincent Bernat
217c484061 common/helpers: rename PrefixTo16 to PrefixTo6
Move it to common/helpers/ipv6.go and use it where needed.
2025-11-04 08:05:30 +01:00
Vincent Bernat
ffe696e0e1 common/helpers: rename NetIPTo6 to AddrTo6 2025-11-04 07:43:19 +01:00
Vincent Bernat
23518c3e2e common/helpers: add a NetIPTo6() function
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
This should be netip.To6() but it does not exist and it was rejected.
There is a benchmark showing the improvment of such optimisation:

BenchmarkNetIPTo6/safe_v4-12            170152954                7.054 ns/op
BenchmarkNetIPTo6/unsafe_v4-12          764772190                1.553 ns/op

See https://github.com/golang/go/issues/54365.
2025-11-03 21:36:33 +01:00
Vincent Bernat
e68b2de72c common/helpers: migrate from verify to skip-verify in TLS config
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Otherwise, the default is "false" for verify. This is a breaking change.

Fix #2055.
2025-10-30 08:31:27 +01:00
Vincent Bernat
a2339312ac common/remotedatasource: accept specific TLS configuration
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
2025-10-29 22:34:38 +01:00
Vincent Bernat
ea3d5a9f28 common/remotedatasource: accept empty transform query 2025-10-29 22:04:37 +01:00
Gregor Düster
73d005d229 outlet/flow: implement RFC 5103 support 2025-09-29 05:37:19 +02:00
Vincent Bernat
a1e29071a9 common/schema: add ability to reverse flow direction 2025-09-29 05:37:19 +02:00
Vincent Bernat
801f3f1676 common/kafka: also logs output of kfake cluster 2025-09-23 07:06:58 +02:00
oliverpool
f3ebff6ce5 refactor: use sync.OnceValue 2025-09-22 14:03:44 +02:00
Vincent Bernat
86f2c9b1fa Revert "common/daemon: test if sending SIGINT terminates the component"
This reverts commit 7859cb0019. This seems
to break randomly when the process is encapsulated (during coverage?).
2025-09-19 21:53:01 +02:00
Vincent Bernat
75f6908f71 Revert "common/daemon: add a method to reexec itself"
This reverts commit 216786d40e. We don't
really need that if we move logic to cmd package.
2025-09-19 21:53:01 +02:00
Vincent Bernat
9f34f9caf9 common/helpers: return files parsed by yaml.UnmarshalWithInclude 2025-09-19 21:53:01 +02:00
Vincent Bernat
fa9315b9e1 common/daemon: add a method to reexec itself 2025-09-19 21:53:01 +02:00
Vincent Bernat
f735e46665 common/daemon: test if sending SIGINT terminates the component 2025-09-19 21:53:01 +02:00
Vincent Bernat
0db8f43b10 common/httpserver: do not connect to Redis before starting component
We need to be able to dump the configuration without redis being present.
2025-09-16 21:50:09 +02:00
Vincent Bernat
970fad2e47 common/schema: fix comment about ConsoleTruncateIP 2025-09-13 07:20:48 +02:00
Vincent Bernat
31b6591e0e build: update revive
And remove some unused variables.
2025-09-09 07:39:00 +02:00
Vincent Bernat
8a38e2a912 common/helpers: switch to go.yaml.in/yaml/v3
gopkg.in/yaml.v3 is now unmaintained.
2025-09-09 07:24:42 +02:00
Vincent Bernat
93ae69ad9e inlet/flow: switch to binary.NativeEndian to get native endianness
This is available since Go 1.21 and it is better than enumerating
architectures. We were not up-to-date. See for example:

https://cs.opensource.google/go/go/+/refs/tags/go1.25.1:src/encoding/binary/native_endian_big.go
2025-09-07 10:18:26 +02:00
Vincent Bernat
e21e612259 common/helpers: use Modify() for subnet maps as well
Replace `table.Update()` with `table.Modify()`.
2025-09-06 20:01:19 +02:00
Vincent Bernat
fdb65c93a5 outlet/routing: store v4 routes into a v4 tree
This is improves performance significantly:

```
goos: linux
goarch: amd64
pkg: akvorado/outlet/routing/provider/bmp
cpu: AMD Ryzen 5 5600X 6-Core Processor
                                       │      1       │                  2                   │
                                       │  sec/route   │  sec/route    vs base                │
RIBInsertion/1000_routes,_1_peers-12     466.6n ± ∞ ¹   413.6n ± ∞ ¹       ~ (p=1.000 n=1) ²
RIBInsertion/1000_routes,_2_peers-12     468.5n ± ∞ ¹   424.6n ± ∞ ¹       ~ (p=1.000 n=1) ²
RIBInsertion/1000_routes,_5_peers-12     475.0n ± ∞ ¹   419.6n ± ∞ ¹       ~ (p=1.000 n=1) ²
RIBInsertion/10000_routes,_1_peers-12    485.3n ± ∞ ¹   434.1n ± ∞ ¹       ~ (p=1.000 n=1) ²
RIBInsertion/10000_routes,_2_peers-12    532.6n ± ∞ ¹   477.0n ± ∞ ¹       ~ (p=1.000 n=1) ²
RIBInsertion/10000_routes,_5_peers-12    585.6n ± ∞ ¹   551.9n ± ∞ ¹       ~ (p=1.000 n=1) ²
RIBInsertion/100000_routes,_1_peers-12   623.8n ± ∞ ¹   587.7n ± ∞ ¹       ~ (p=1.000 n=1) ²
RIBInsertion/100000_routes,_2_peers-12   682.1n ± ∞ ¹   637.8n ± ∞ ¹       ~ (p=1.000 n=1) ²
RIBInsertion/100000_routes,_5_peers-12   804.9n ± ∞ ¹   740.8n ± ∞ ¹       ~ (p=1.000 n=1) ²
geomean                                  559.6n         510.1n        -8.85%
¹ need >= 6 samples for confidence interval at level 0.95
² need >= 4 samples to detect a difference at alpha level 0.05

                                    │       1       │                   2                   │
                                    │    sec/op     │    sec/op     vs base                 │
RIBLookup/1000_routes,_1_peers-12      82.87n ± ∞ ¹   14.59n ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBLookup/1000_routes,_2_peers-12      82.86n ± ∞ ¹   14.68n ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBLookup/1000_routes,_5_peers-12      83.24n ± ∞ ¹   14.56n ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBLookup/10000_routes,_1_peers-12     87.27n ± ∞ ¹   14.69n ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBLookup/10000_routes,_2_peers-12     89.92n ± ∞ ¹   14.62n ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBLookup/10000_routes,_5_peers-12     99.67n ± ∞ ¹   14.74n ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBLookup/100000_routes,_1_peers-12   129.60n ± ∞ ¹   14.68n ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBLookup/100000_routes,_2_peers-12   121.50n ± ∞ ¹   14.71n ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBLookup/100000_routes,_5_peers-12   122.90n ± ∞ ¹   14.69n ± ∞ ¹        ~ (p=1.000 n=1) ²
geomean                                98.40n         14.66n        -85.10%
¹ need >= 6 samples for confidence interval at level 0.95
² need >= 4 samples to detect a difference at alpha level 0.05

                                   │      1       │                   2                   │
                                   │    ms/op     │    ms/op      vs base                 │
RIBFlush/1000_routes,_1_peers-12     268.9m ± ∞ ¹   214.4m ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBFlush/1000_routes,_2_peers-12     457.2m ± ∞ ¹   357.8m ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBFlush/1000_routes,_5_peers-12     954.7m ± ∞ ¹   697.6m ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBFlush/10000_routes,_1_peers-12     2.832 ± ∞ ¹    2.157 ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBFlush/10000_routes,_2_peers-12     5.660 ± ∞ ¹    4.247 ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBFlush/10000_routes,_5_peers-12     14.00 ± ∞ ¹    10.48 ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBFlush/100000_routes,_1_peers-12    48.33 ± ∞ ¹    41.31 ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBFlush/100000_routes,_2_peers-12    86.33 ± ∞ ¹    75.51 ± ∞ ¹        ~ (p=1.000 n=1) ²
RIBFlush/100000_routes,_5_peers-12    197.5 ± ∞ ¹    155.7 ± ∞ ¹        ~ (p=1.000 n=1) ²
geomean                               6.534          5.138        -21.36%
¹ need >= 6 samples for confidence interval at level 0.95
² need >= 4 samples to detect a difference at alpha level 0.05
```

Suggested in https://github.com/gaissmai/bart/issues/247#issuecomment-3257156436.
2025-09-05 20:49:16 +02:00
Vincent Bernat
b1d6382585 common/embed: replace all go:embed use by an embedded archive
Some of the files were quite big:

- asns.csv ~ 3 MB
- index.js ~ 1.5 MB
- *.svg ~ 2 MB

Use a ZIP archive to put them all and embed it. This reduce the binary
size from 89 MB to 82 MB. 🤯

This also pulls some code modernization (use of http.ServeFileFS).
2025-09-03 00:00:05 +02:00
Vincent Bernat
413f923dcc docker: update ClickHouse to 25.8 2025-08-30 23:46:17 +02:00
Vincent Bernat
bd787e654f common/daemon: experiment with the test/synctest package 2025-08-30 19:48:52 +02:00
Vincent Bernat
77306ddcee build: bump go.mod to Go 1.25 to use wg.Go() 2025-08-30 19:15:26 +02:00
Vincent Bernat
866658bc70 outlet/kafka: fix crash when scaling down and up the workers
The same metrics cannot be registered twice. Introduce a new method in
reporter to unregister a previously registered collector.

Fix #1908
2025-08-27 08:28:14 +02:00
Vincent Bernat
fa11e7de6d common/reporter: simplify interface for collecting metrics
Remove unused methods and always collect scoped metrics. As a
side-effect, BioRIS gRPC metrics are now correctly scoped.
2025-08-27 07:37:38 +02:00
Vincent Bernat
e2f1df9add tests: replace godebug by go-cmp for structure diffs
go-cmp is stricter and allow to catch more problems. Moreover, the
output is a bit nicer.
2025-08-23 16:03:09 +02:00
Vincent Bernat
59215899fc common/reporter: when running benchmarks, set log level to warning 2025-08-17 11:06:07 +02:00
Vincent Bernat
f7cc5e3dbc orchestrator/clickhouse: add a benchmark for networks.csv
```
goos: linux
goarch: amd64
pkg: akvorado/orchestrator/clickhouse
cpu: AMD Ryzen 5 5600X 6-Core Processor
BenchmarkNetworks-12                 482                 2.447 ms/op
```
2025-08-17 11:05:58 +02:00
Vincent Bernat
6b2af58a64 orchestrator/geoip: add a benchmark for Iterate*Databases()
Now:

```
goos: linux
goarch: amd64
pkg: akvorado/orchestrator/geoip
cpu: AMD Ryzen 7 PRO 6850U with Radeon Graphics
BenchmarkIterDatabase/ASN-16                3376               457.0 ns/entry
BenchmarkIterDatabase/GeoIP-16              2410               754.5 ns/entry
```

Before 0a10764cc9:

```
goos: linux
goarch: amd64
pkg: akvorado/orchestrator/geoip
cpu: AMD Ryzen 7 PRO 6850U with Radeon Graphics
BenchmarkIterDatabase/ASN-16                2863               609.3 ns/entry
BenchmarkIterDatabase/GeoIP-16              3286               719.3 ns/entry
```

I was hoping for a bit more!
2025-08-17 08:48:25 +02:00