fix(traffic): find a host's senders in the latest-value table, not by a prefix scan of every metric (#6115)
get_host_senders on VDNT-Docker02 ran past 120 s: a prefix LIKE on plugin_metrics.resource_name can't use its index (the column's collation isn't C), so each read went through the whole table, and the host page's Who's sending panel repeats it on every refresh. The containers and NFS mounts under a host are now named from plugin_metric_latest, and their series read by resource IN (...) on the series index. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ def app():
|
||||
|
||||
|
||||
def test_the_host_s_peak_is_put_down_to_its_senders(app):
|
||||
from steward.models.metrics import PluginMetric
|
||||
from steward.models.metrics import PluginMetric, PluginMetricLatest
|
||||
from plugins.host_agent.senders import senders
|
||||
|
||||
now = datetime.now(timezone.utc)
|
||||
@@ -47,6 +47,13 @@ def test_the_host_s_peak_is_put_down_to_its_senders(app):
|
||||
m("host_agent", f"{host}:/nfs/data", "nfs_tx_bps", 100.0, peak),
|
||||
m("host_agent", f"{host}:net:eno1", "net_tx_bps", 1000.0, peak),
|
||||
])
|
||||
# the latest-value table names the resources under the host
|
||||
for src, res, metric in (("docker", f"{host}/web.1.{task}", "net_tx_bps"),
|
||||
("docker", f"{host}/web.2.{task}", "net_tx_bps"),
|
||||
("docker", f"{host}x/web.1.{task}", "net_tx_bps"),
|
||||
("host_agent", f"{host}:/nfs/data", "nfs_tx_bps")):
|
||||
await s.merge(PluginMetricLatest(source_module=src, resource_name=res,
|
||||
metric_name=metric, value=1.0, recorded_at=peak))
|
||||
async with app.db_sessionmaker() as s:
|
||||
return await senders(s, host, now - timedelta(hours=1))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user