emqx/apps/emqx_resource
Thales Macedo Garitezi 8b060a75f1 refactor(metrics): use absolute gauge values rather than deltas
https://emqx.atlassian.net/browse/EMQX-8548

Currently, we face several issues trying to keep resource metrics
reasonable.  For example, when a resource is re-created and has its
metrics reset, but then its durable queue resumes its previous work
and leads to strange (often negative) metrics.

Instead using `counters` that are shared by more than one worker to
manage gauges, we introduce an ETS table whose key is not only scoped
by the Resource ID as before, but also by the worker ID.  This way,
when a worker starts/terminates, they should set their own gauges to
their values (often 0 or `replayq:count` when resuming off a queue).
With this scoping and initialization procedure, we'll hopefully avoid
hitting those strange metrics scenarios and have better control over
the gauges.
2022-12-30 16:51:24 -03:00
..
i18n refactor: refine worker pool config and doc 2022-12-20 09:02:51 +01:00
include refactor: refine worker pool config and doc 2022-12-20 09:02:51 +01:00
src refactor(metrics): use absolute gauge values rather than deltas 2022-12-30 16:51:24 -03:00
test refactor(metrics): use absolute gauge values rather than deltas 2022-12-30 16:51:24 -03:00
README.md feat: add test cases for batching query 2022-08-10 00:34:35 +08:00
rebar.config fix: drop no longer supported dialyzer option 2022-12-16 13:45:05 +03:00

emqx_resource

The emqx_resource is a behavior that manages configuration specs and runtime states for resources like mysql or redis backends.

It is intended to be used by the emqx_bridges and all other resources that need CRUD operations to their configs, and need to initialize the states when creating.

There can be foreign references between resource instances via resource-id. So they may find each other via this Id.

The main idea of the emqx resource is to put all the general code in a common lib, including the config operations (like config validation, config dump back to files), and the state management. And we put all the specific codes to the callback modules.

See

  • test/emqx_connector_demo.erl for a minimal emqx_resource implementation;
  • test/emqx_resource_SUITE.erl for examples of emqx_resource usage.