- adds common/slogbridge, a slog.Handler that emits records as logrus entries at the matching
level, with attrs as fields, groups flattened to dotted keys, and the record caller set on the
entry so pfxlog attributes each line to the library function that logged it
- gates on the logrus level at call time, so the configured level and agent set-log-level apply
to library output without mirroring
- installs the handler as the root of foundation's logging registry and as the log/slog default,
with the registry opened to trace so logrus is the only filter, in the CLI root init and both
test package inits
- emits fatal and panic records at their own severity; Entry.Log never exits or panics
- moves foundation from the v2.0.86 pin to the commit carrying its logging registry, pending the
v2.0.102 tag, and drops the replace directives in the root module and zititest
- renames errorz.ApiError.Code to AppCode at every site that range requires, in
controller/apierror, api_impl, command, internal/routes, model, oidc_auth, raft and response
* When routers change (connect/disconnect), we re-check the mesh. We are passing in the routers to the channel and they can build up, which is unnecessary. We only need to signal once for all the routers that change since the last time we checked, that the mesh needs to be checked.
* We pass link changes through the run method, which is unnecessary since we pass it to a new goroutine. This inefficiency should be fixed.
* We're evaluating all faulted links for rerouting, even if they were still pending. Only reroute connected links.
* We're using time.After in each for loop, which can accumulate timers. Use a single Ticker instead.
* Added raft leave and raft list members
* reordered agent raft leave to only check address if is is not found
* instead of adding second raft ctrl, just cast the dispatcher
Previously we often had two sets of events, one in the network
package, and then another in the events package. We now only
have one, in the events package. Events now have a public API,
with minimal deps. There's an implementation package which has
the dependencies. This allows the network package to generate
events, without have a circular dependency on the events
implementation package.