fix(plugins): report metrics for all plugin types, not only MetadataAgents (#4303)

- Add ErrNotImplemented error to plugins/api package with proper documentation
- Refactor callMethod in wasm_base_plugin to use api.ErrNotImplemented
- Improve metrics recording logic to exclude not-implemented methods
- Add better tracing and context handling for plugin calls
- Reorganize error definitions with clear documentation
This commit is contained in:
Deluan Quintão
2025-07-02 22:05:28 -04:00
committed by GitHub
parent d4f869152b
commit 9b3d3d15a1
2 changed files with 18 additions and 15 deletions
+13 -14
View File
@@ -6,10 +6,10 @@ import (
"fmt"
"time"
"github.com/navidrome/navidrome/core/agents"
"github.com/navidrome/navidrome/core/metrics"
"github.com/navidrome/navidrome/log"
"github.com/navidrome/navidrome/model/id"
"github.com/navidrome/navidrome/plugins/api"
)
// newWasmBasePlugin creates a new instance of wasmBasePlugin with the required parameters.
@@ -101,19 +101,18 @@ func callMethod[S any, R any](ctx context.Context, w wasmPlugin[S], methodName s
elapsed := time.Since(start)
if em, ok := any(w).(errorMapper); ok {
mappedErr := em.mapError(err)
if !errors.Is(mappedErr, agents.ErrNotFound) {
id := w.PluginID()
isOk := mappedErr == nil
metrics := w.getMetrics()
if metrics != nil {
metrics.RecordPluginRequest(ctx, id, methodName, isOk, elapsed.Milliseconds())
}
log.Trace(ctx, "callMethod", "plugin", id, "method", methodName, "ok", isOk, elapsed)
}
return r, mappedErr
err = em.mapError(err)
}
if !errors.Is(err, api.ErrNotImplemented) {
id := w.PluginID()
isOk := err == nil
metrics := w.getMetrics()
if metrics != nil {
metrics.RecordPluginRequest(ctx, id, methodName, isOk, elapsed.Milliseconds())
log.Trace(ctx, "callMethod: sending metrics", "plugin", id, "method", methodName, "ok", isOk, elapsed)
}
}
return r, err
}