MetricsHub
MetricsHub Community Connectors 1.0.22
-
Home
- Connector Developer Guide Testing and Contributing 4
Run and Debug Locally
Before writing integration tests[1], run your connector for real. The core development loop is:
- Edit the connector YAML.
- Run
metricshubagainst the device (or an emulator). - Inspect detection, discovered instances, and metric values; fix; repeat.
The metricshub CLI ships with every MetricsHub installation.
Basic Invocation
metricshub <hostname> -t <type> <protocol flags> [-u <user> [-p <password>]] [options]
<hostname>— the resource to monitor (localhostworks, see below).-t/--type— the resource type. Accepted tokens includelinux(lin),windows(win),network(switch),storage(san,array),management(mgmt,oob),aix,hpux,solaris,tru64,vms,other. Abbreviations likestoornetare not accepted.- Protocol flags enable and configure each protocol:
--snmp [1|2](--community,--snmp-port),--snmpv3,--http/--https(--http-port),--ssh,--wmi,--winrm,--wbem,--ipmi,--jdbc,--jmx— each with its own--<protocol>-username/--<protocol>-password/--<protocol>-timeoutvariants. At least one protocol is required. -u/--usernameand-p/--passwordset the global credentials;-pwith no value prompts interactively.
Developer Essentials
| Option | Purpose |
|---|---|
-pd, --patch-directory <dir> |
Load connector YAML from a local directory on top of the bundled connectors. Point it at src/main/connector so your working copy is the one that runs. |
-c, --connectors <list> |
Connector selection: +Id forces the connector (skips auto-detection), bare Id stages only it for detection, !Id excludes it, #tag / !#tag stage/exclude whole categories. |
-v, -vv, -vvv, -vvvv |
Verbosity: WARN, INFO, DEBUG, TRACE. Use -vvv to watch each detection criterion and source execute. |
-s, --sequential |
Disable parallelism — easier-to-read logs while debugging. |
-l, --list |
List the available connectors. |
-m, --monitors |
Restrict monitor types (+disk,!memory). |
The standard development invocation, from the repository root:
metricshub my-device --type storage --https --http-port 8443 -u admin -p \
-pd src/main/connector -c +MyConnector -vvv
This forces your work-in-progress connector (+MyConnector) from your source tree (-pd) with DEBUG logging.
For a connector that declares variables[2], pass values with --additional-connector:
metricshub my-host -t linux --ssh -u monitor -p \
--additional-connector systemdProcess --uses LinuxProcess -F matchName=systemd
What to Verify in the Output
metricshub.connector.statusisok— detection passed and jobs ran.- Discovered instances are coherent: expected count, stable
idvalues, no self-referentialhw.parent.id, real serial numbers. - Metric names, units, and attributes follow the naming rules[3].
- Status metrics resolve to
ok/degraded/failed— if you see raw vendor codes, a translation table is missing or misreferenced. - Re-run twice: the second discovery must find the same instances (no duplicates from unstable keys).
If detection fails, run with -vvv and read the criteria evaluation: each criterion logs what was executed, what came back, and why it matched or failed.
Testing Without the Real Device
Command-Line Connectors: the localhost Trick
When the target host is localhost, MetricsHub executes commandLine sources locally as the current user — no SSH connection is made (the --ssh flag and credentials merely enable the protocol for detection):
metricshub localhost -t linux --ssh -u any -p any -pd src/main/connector -c +MyConnector
To emulate a device, put stub scripts that print realistic output (and exit codes) ahead of the real binaries on your PATH, or point the connector's command at a local script while developing.
SNMP Connectors: snmpsim
Use snmpsim[4] to simulate an SNMP agent from a walk recording:
# Terminal 1: serve the recorded data
snmpsim-command-responder --data-dir=./snmp-data --agent-udpv4-endpoint=127.0.0.1:1161
# Terminal 2: point MetricsHub at the simulator
metricshub localhost -t network --snmp 2 --community public --snmp-port 1161 \
-pd src/main/connector -c +MyConnector -vvv
To capture a walk from a real device, use the snmpcli tool that ships with MetricsHub:
snmpcli my-device --walk 1.3.6.1 --community public --version v2c > snmp-data/my-device.snmpwalk
(snmpcli ... --walk <oid> -rec alternatively saves <oid>.walk into the MetricsHub logs directory.)
HTTP/REST Connectors: a Quick Emulator
A small FastAPI app is usually enough to emulate a REST API:
# emulator.py — run with: uvicorn emulator:app --host 0.0.0.0 --port 8080
from fastapi import FastAPI
app = FastAPI()
@app.get("/api/v1/inventory/fans")
def fans():
return {"fans": [
{"id": "fan-01", "name": "Fan 1", "status": "ok", "rpm": 7230},
{"id": "fan-02", "name": "Fan 2", "status": "failed", "rpm": 0},
]}
metricshub localhost -t storage --http --http-port 8080 -u guest -p guest \
-pd src/main/connector -c +MyConnector -vvv
Keep emulators deterministic, and commit them with the connector's integration-test resources so reviewers can reproduce your results — see Contributing[5].
Record and Replay
Once the connector works, capture the real protocol exchanges so they can replay forever without the device:
metricshub ... -rec(--record) writes every source and criterion result as YAML into protocol subfolders (http/,ssh/,wmi/, …) under the MetricsHub logs directory.metricshub ... -e <dir>(--emulate) replays a recorded directory instead of contacting the device.- SNMP walks are captured with
snmpcli --walk(above), not with--record.
These recordings become the src/it/resources/<ConnectorId>/emulation/ content of your replay integration test — the full workflow is on the Integration Testing[1] page.
Common Pitfalls
- Forgetting
-pd src/main/connector: the bundled copy of the connector runs instead of your edited one, and your changes seem to have no effect. - Using
-t stoor-t net: not accepted — writestorage/network. - Testing detection only with
+MyConnector: forcing skips auto-detection, so also run once with-c MyConnector(bare id) to verify the criteria actually match. - Unstable instance
ids that create duplicates on the second run — watch for it before recording test resources.
- [1] integration-testing.html
- [2] reuse-and-configuration.html
- [3] metric-naming.html
- [4] https://github.com/etingof/snmpsim
- [5] contributing.html
