@hyperdx/common-utils@0.25.0
Minor Changes
-
3d61cf9: Cap high-cardinality time-chart series to protect the browser from rendering
thousands of lines at once. Time charts now materialize and draw a bounded
number of series per tile, with escape hatches to reveal the rest on demand: a
"+N more" affordance in the hover and pinned tooltips, and a "load all series"
action that lifts the cap for a chart. Tooltips also cap how many rows they
render per frame so a wide bucket can't mount thousands of popovers. The
external dashboards API exposes the per-tile series limit as a three-state value
across tile types — omit for the default cap, 0 for unlimited, or a positive N
for the top N -
97ca34d: feat: Allow configuring a
seriestable for accelerating metrics -
1af1998: Add Terraform helpers for adopting existing HyperDX resources with the ClickHouse provider. An "Export to Terraform" button on dashboards, saved searches, and saved-search alerts shows a ready-to-paste
import {}block plus collapsible provider setup, and a team settings section ("API & Agents") downloads an import file covering dashboards, alerts, saved searches, sources, connections, and webhooks.Dashboards carrying a tile the provider cannot represent, and PromQL sources, are excluded from the export and reported as skipped — in the UI and in the generated file. The provider reads a dashboard back through the external API v2, which either drops such a tile or substitutes an empty line chart, and writes tiles back whole, so importing one would destroy that tile on the next apply.
Import-only by design: resource configuration is generated by
terraform plan -generate-config-out, which reads through the provider, rather than by HyperDX — the external API's dashboard serialisation is a field allowlist, so generatingdashboard_jsonfrom it could silently drop tile settings on apply. Tile alerts are excluded because the provider models only saved-search alerts.Terraform addresses are derived from each resource's id, not its name, so renaming a resource in HyperDX and re-exporting does not produce a destroy-and-recreate plan. The generator lives in
@hyperdx/common-utilsso the API can produce the same artefact the UI does. The manifest endpoint caps each listing at 1000 rows and reports which types were capped, so a very large team is told its export is partial rather than silently receiving one.Also redacts
AuthorizationandCookieheaders from API request logs.
Patch Changes
-
ed9d9a6: Treat
_and%in a search term as literal characters, not LIKE wildcardsSearch terms were interpolated straight into the ILIKE pattern, so ClickHouse
read their_and%as wildcards.ServiceName:user_servicealso matched
user-serviceanduser.service, and the negated-ServiceName:user_service
dropped those same rows. Token-index lookups still receive the raw term. -
c97789a: Correctly split SQL expressions containing backslash-escaped quotes.
-
2468b25: fix: Encode every
http://,https://andlocalhost:<port>in a search, not
just the firstA search naming two or more URLs left the later colons unescaped, so Lucene read
them as field queries.http://a.com http://b.comcompiled the second URL to
http ILIKE '%//b.com%'— a predicate on a barehttpidentifier rather than a
search of the log body. -
6a35df0: Honor open (
*), exclusive ({}) and non-numeric bounds in Lucene rangesDuration:[* TO 500]compiled toDuration BETWEEN '*' AND 500, which
ClickHouse rejects withTYPE_MISMATCH. Exclusive and half-open ranges such as
Duration:{100 TO 500}were all serialized as an inclusiveBETWEEN. Bounds
were parsed withparseFloat, soTimestamp:[2024-01-01 TO 2024-06-01]became
BETWEEN 2024 AND 2024and matched nothing. The plain-English explanation of a
search now marks excluded bounds too. -
d1c669d: fix: Use ratio value for series-limit ranking in ratio mode
Charts using "ratio" series return type together with a series limit ranked the
top-N series by the bare numerator instead of by the plotted ratio, so a
low-volume group with a high ratio could lose its slot to a high-volume group
with a much lower ratio. The ranking now uses the samedivide(a, b)expression
the chart displays. Non-ratio charts generate identical SQL to before. -
b082f70: Detect ClickHouse timestamp types that carry a timezone or a type wrapper
DateTime('UTC')was not classified as a DateTime, so a source whose timestamp
column listed both aDatepartition column and aDateTimecolumn bucketed
charts on theDate— collapsing a whole day into one bar at midnight. The time
filter also only wrapped bounds intoDate()for an exactDatetype, so a
Date32orNullable(Date)column was compared against a DateTime bound and
lost the whole start day. -
347f0a6: fix: Bound the side panel's row lookup after "View Trace" to a time window