Swap the value picker from @signozhq SelectSimple to the shared NewSelect
CustomSelect/CustomMultiSelect, which provide search, the ALL option and
apply-on-close batching (multi-select edits no longer cascade per toggle).
Deliberate exception to the @signozhq-first preference — reuses the existing,
richer variable-selection control.
Dynamic variables now pass an existingQuery built from the other dynamic
variables' current selections (e.g. `namespace IN ['prod']`) to the field-values
API, so related dynamic variables cascade-filter each other. Ported from the V1
runtime.
* fix: proper definition of user dashboard preferences
* fix: use org id in deletion methods of pref table
* fix: make migration name fit regex
* fix: make compile return empty sql instead of nil
* fix: remove dashboard dependency from user module
* test: remove cleanup fixture from integration test
* chore: make some fields required in perses replicated spec
* chore: build frondend spec
* revert: revert accidental change
* fix: make duration optional
* chore: add todo for duration and refresh interval
* feat(resource): initial commit
* feat(resource): add related resources
* feat(resource): audit cleanup
* refactor(resource): set audit category on resource defs; drop MustNew/validate
- Set Category (access_control) on every service account and role ResourceDef
so audit events carry signoz.audit.action_category
- Remove MustNewResourceDef/MustNewResourcesDef and validate(); registration
via plain ResourceDef literals again. Validation to be revisited separately
* feat(audit): emit audit events only for mutating verbs
- Add coretypes.Verb.IsMutation() (create/update/delete/attach/detach)
- Audit skips read/list defs (they remain for authz); failed and denied
mutations still emit with Outcome=failure
* feat(audit): mirror attach/detach audit on both ends for role↔service account
Role def on SetRole/DeleteRole now carries Related=ServiceAccount so each
permission-checked end emits its own event (serviceaccount.attached to role
and role.attached to serviceaccount), matching the both-ends authz model.
* refactor(resource): co-locate resolved context in handler; slice-of-pointers accessor
Move the resolved-resource context plumbing (resolvedKey, accessors) out of
the resource middleware and into pkg/http/handler next to ResolvedResource, so
type and accessor live in one package (matching the authtypes/ctxtypes
convention) and consumers import a single package.
- Store []*ResolvedResource instead of *[]ResolvedResource; in-place response-id
finalization still works via the element pointers.
- ResolvedResourcesFromContext returns an error (errCodeResolvedResourcesNotFound)
instead of a bool; authz surfaces it, audit treats absence as a no-op.
- Drop the now-dead authz Check/CheckAll/AuthZCheckGroup helpers superseded by
CheckResources.
* refactor(resource): unify id resolution into a single phase-driven mechanism
Replace the two-shaped id mechanism (a resolved string plus a stashed
responseID extractor, decided by resolveID's magic tuple and a zero-value
sentinel) with one retained extractor whose phase decides when it runs.
- ResolvedResource/ResolvedRelated keep idExtractor (renamed from responseID);
it is run in its declared phase, never re-run.
- ResourceIDExtractor gains isPhase + runFor; ResolvedResource gains resolve,
called once per phase (request by the resource middleware, response by audit).
- resolveID and resolveRelated(ec) are gone; FinalizeResponseIDs collapses to a
single resolve(phaseResponse) call. Request and response resolution are now
symmetric.
* refactor(resource): split resourcedef.go along its logical seams
Break the ~320-line resourcedef.go into cohesive files within the handler
package (pure relocation, no behavior or API change):
- extractor.go — extraction: ExtractorContext, phases, extractors + constructors
- resourcedef.go — declaration: ResourceDef/ResourcesDef/RelatedResource/
ResourceSpec + their functions (resolveRequest, ResolveRequest)
and the selectors
- resolved_resource.go — resolved types + their functions (resolve,
newResolvedRelated, FinalizeResponseIDs, HasResponseIDs)
- resolved_context.go — context plumbing (resolvedKey + accessors)
Each file's imports narrow to its concern; mux/gjson are now confined to
extractor.go.
* refactor(resource): extract selectors into selector.go
Move SelectorFunc + WildcardSelector/IDSelector (and the errCode they use)
out of resourcedef.go into selector.go. Pure relocation, no behavior change:
resourcedef.go now holds only the route-author declaration types and narrows
its imports to audittypes + coretypes.
* refactor(resource): extract ResourceSpec into resource_spec.go
Move the sealed ResourceSpec interface out of resourcedef.go into its own
file. Pure relocation, no behavior change.
* refactor(resource): split ResourcesDef into resourcesdef.go
Move the fan-out ResourcesDef (struct + sealResourceSpec/resolveRequest) out
of resourcedef.go into its own file. resourcedef.go keeps ResourceDef, the
shared RelatedResource, and the ResolveRequest orchestrator. Pure relocation,
no behavior change.
* refactor(resource): move RelatedResource and ResolveRequest into resource_spec.go
Cluster the spec contract together: the shared RelatedResource type and the
ResolveRequest orchestrator (over []ResourceSpec) join the ResourceSpec
interface. resourcedef.go now holds only ResourceDef. Pure relocation, no
behavior change.
* refactor(resource): seal ResourceSpec via resolveRequest alone
Drop the redundant sealResourceSpec() marker method; the unexported
resolveRequest already prevents implementations outside the package.
* feat(resource): scaffold coretypes-based resolved model
Introduce the referenceable, coretypes-resident resource model (additive;
the existing ResourceDef path is untouched and the build stays green):
- coretypes: ExtractorContext + ExtractPhase + ResourceIDExtractor/
ResourceIDsExtractor (extractor machinery moved out of handler; handler keeps
only the mux/gjson constructors).
- coretypes: SelectorFunc (now (ctx, resource, id, orgID) to stay cycle-free) +
WildcardSelector/IDSelector.
- coretypes: ResolvedResource + ResolvedResourceWithTargetResource interfaces,
their concrete types with two-phase fill (request ids at construction,
response ids via ResolveResponse), and the resolved-context accessors.
- handler: the three explicit declaration types — BasicResourceDef,
AttachDetachSiblingResourceDef, AttachDetachParentChildResourceDef.
Wiring (defs -> ResolveRequest, middleware, route migration) follows next.
* refactor(resource): wire the coretypes resolved model end-to-end
Cut the resource middleware over to the coretypes-resident resolved model and
the explicit declaration types, replacing the generic ResourceDef/ResourcesDef.
- handler: ResourceDef is now a sealed interface (unexported resolveRequest)
implemented by BasicResourceDef / AttachDetachSiblingResourceDef /
AttachDetachParentChildResourceDef, all consolidated into resourcedef.go.
Removed the old generic defs, the handler-side resolved/selector/context
(moved to coretypes), and the dead AuditDef.
- coretypes: ActionCategory moved here; Category() exposed on the resolved
interface (declared on the def, read by audit; no kind-based derivation).
- middleware: authz does M+N absolute checks (source always, sibling target
too, parent-child child never) via the resolved selectors; audit type-switches
on the resolved interface to emit per resource / per relationship.
- authz forbidden message is now AWS-style: principal is not authorized to
perform <kind>:<verb> on resource "<id>".
- routes: service account + role routes migrated to the explicit defs;
roleSelector takes orgID.
Note: resourcedef_test.go (old API) removed; new tests to follow.
* feat(resource): instrument query-range with telemetry resource authz
Authorize /api/v5/query_range at the telemetry-resource level, derived from the
request body rather than a path/body id:
- coretypes: ResourceExtractor now yields []ResourceWithID (resource + id), and
TelemetrySignalSource maps each query's spec.signal+spec.source to a telemetry
resource (via TelemetryResourceForSignalSource) and reads a per-query id — one
entry per query, no de-duplication, so repeated signals each get their own
resource + id.
- handler: TelemetryResourceDef fans out one resolved resource per query through
NewResolvedResourceWithID; resolveRequest returns a slice to allow fan-out.
- The extractor model (types + constructors + ResourceExtractor) now lives wholly
in coretypes (handler/extractor.go removed); coretypes gains mux/gjson.
- querier route: ViewAccess -> CheckResources + the telemetry def (spec.name is a
placeholder id; the owner picks the real field).
Carries the in-progress removal of Verb.IsMutation and its audit mutation-gate,
so audit currently emits per resolved resource regardless of verb (to revisit).
* feat(resource): instrument planned-maintenance routes + tidy resolved id handling
- ruler.go: downtime_schedules routes move from ViewAccess/EditAccess to
CheckResources with resource defs — Basic for list/read/create/update/delete on
PlannedMaintenance, plus a sibling Attach (schedule <-> the rules in alertIds)
on create/update so both the schedule and each rule are authz-checked.
- coretypes: SourceIDs/TargetIDs return a single empty id when there are none, so
collection-level access lives in the resolved value; authz.checkResource drops
its empty-id shim and just iterates.
- readability: expand crammed multi-arg signatures and calls (checkResource,
NewResolvedResource/WithID, forbidden errors.Newf, telemetry mapping) to one
argument per line.
* refactor(resource): drop query-range/planned-maintenance instrumentation; mirror sibling audit
- Revert /api/v5/query_range and downtime_schedules routes to ViewAccess/EditAccess
and remove the telemetry-resource scaffolding that only query-range consumed
(TelemetryResourceDef, TelemetrySignalSource, TelemetryResourceForSignalSource,
ResourceExtractor/ResourceWithID, NewResolvedResourceWithID).
- audit: a sibling attach/detach now emits the event from both ends, matching the
both-ends authz model (parent-child stays one-directional).
- Strip non-essential doc/inline comments across the resource middleware files.
* refactor(coretypes): fold extractor/selector _func files into their concept files
- Merge extractor_func.go + extractor_context.go into extractor.go, and
selector_func.go into selector.go, matching the type.go/object.go/verb.go
convention of keeping a type with its constructors and helpers.
- Order each file const/var -> type -> func (also reorders action_category.go).
* feat(resource): capture response body only when an id is resolved from it
- Restore the capture gate lost in the coretypes move: ResolvedResource gains an
unexported hasResponsePhase(), and ShouldCaptureResponseBody(ctx) drives the
audit middleware so the body is buffered only when some resolved resource reads
an id out of it (e.g. a create), not for every resource-declared route.
- Add ResourceIDsExtractor.IsPhase (mirroring ResourceIDExtractor) and reuse it.
- Fold resolved_context.go into resolved.go.
---------
Co-authored-by: grandwizard28 <vibhupandey28@gmail.com>
* fix(dashboard-v2): align list & patch code with the generated client
Match the now-upstream V2 client: PatchOpDTO (was JSONPatchOperationDTOOp),
ListedDashboardV2DTO as the list item, and ListSortDTO/ListOrderDTO casts on the
list params. No behaviour change — these files are still parked here.
* feat(dashboard-v2): serve V2 dashboard pages behind use_dashboard_v2 flag
Gate the dashboards list & detail entry points on useIsDashboardV2() — V1 falls
through when the flag is off (V1 detail logic moved into DashboardPage.tsx). Un-park
the V2 page directories in tsconfig so they typecheck and ship.
Also convert the // header comments in states.module.scss to /* */ — once the V2
list is wired into the import graph, vite compiles that stylesheet and the
backtick in the // comment crashed the CSS-modules parser ('Unclosed string').
* refactor(dashboard-v2): type list sort/order with the generated enums
Drop the local string-literal SortColumn/SortOrder unions and the `as` casts:
the nuqs query-state hooks now return DashboardtypesListSortDTO / ListOrderDTO
directly, and ListHeader/DashboardsList use the enum members.
Query variables fetch options via /variables/query (passing the other variables'
values); Dynamic variables fetch live telemetry field values. Dependencies are
orchestrated declaratively: a Query selector is enabled only once its parents
resolve and its query key carries the parent values, so it refetches when a
parent changes and a cyclic dependency is simply never enabled. Options
auto-select the default/first value so dependent children always have input.
Render a runtime variable bar above the panels (one control per spec variable),
seeding each value from URL -> localStorage(store) -> default and persisting
changes to the store + URL (?variables=). Custom (static options) and Text
selectors are wired; Query/Dynamic render the picker shell (option-fetching and
dependency orchestration follow).
Pure runtime-selection groundwork (no UI yet): inter-variable dependency graph
(detect query references, topo order, cycle detection, transitive descendants)
ported to the V2 model; selection value types; and a persisted zustand
variableValues slice (frontend-only — selecting a value never patches the spec).
Wire the Variables tab into the settings drawer (replacing the placeholder):
list variables, add/edit in place, delete via inline confirm, reorder, each
persisted with a single /spec/variables patch -> toast -> refetch.
Flat VariableFormModel + adapters between the nested envelope/plugin DTO union
(ListVariable{Query,Custom,Dynamic} / TextVariable) and the model, plus a
JSON-patch builder that replaces /spec/variables atomically. Pure, no UI.
* fix: compile error fix
* fix: remove soft delete references
* fix: use new pattern of checking for admin permission
* fix: remove soft delete reference
* test: key value tags in test
* fix: build error in patch module method
* feat: method to build postable tags from tags
* fix: build error in Apply method
* chore: remove newline
* fix: remove soft delete references
* fix: build error fix
* chore: embed StorableDashboard in listedRow
* fix: visitor should follow new tag struct
* fix: diff error codes for invalid keys and values
* fix: correct pk in bun model for tag relations
* fix: created and updated by schema
* fix: use coretypes.Kind instead of defining entity type
* fix: singular table name
* chore: remove org ID from tag relation
* feat: foreign key on tag id
* feat: add SyncTags method that covers creation and linking
* fix: remove entity type definition
* fix: fix build errors in dashboard module
* chore: bump migration number
* chore: change entity id to resource id
* fix: add org id filter in all list and delete queries
* fix: remove user auditable
* fix: add ID in tag relation
* fix: fix build error
* fix: fix build error
* chore: bump migration number
* fix: add len check on tags keys and values
* fix: add regex for tags
* chore: remove methods that shouldn't be exposed
* fix: use sync tags in create api
* feat: functional unique index in sql schema
* fix: only ascii in regex
* fix: use sync tags method in update
* fix: use sync tags method in update
* fix: correct the method name being called
* chore: rename create method to createOrGet
* chore: use tagtypestest package for mock store
* chore: combine functional unique index with unique index
* chore: move tag resolution to module
* test: add unit tests for new idx type
* chore: comment out tags unique index for now
* chore: add a todo comment
* chore: comment out unique index test
* feat: add created at to tag relations
* chore: comment out unique index test
* chore: bump migration number
* chore: remove uploaded grafana flag from metadata
* Merge branch 'main' into nv/v2-dashboard-create
* chore: revert idx generation to resolve conflicts
* fix: use store.RunInTx instead of taking in sqlstore
* fix: use binding package to get request
* chore: move NewDashboardV2 to NewDashboardV2WithoutTags
* chore: rename module to m
* fix: add ctx needed in sqlstore
* fix: remove sqlstore passage in ee pkg
* chore: change dashboardData to dashboardSpec
* feat: follow the metadata+spec key structure
* feat: follow the metadata+spec key structure in open api spec
* feat: v2 dashboard GET API (#11136)
* feat: v2 dashboard GET API
* Merge branch 'nv/v2-dashboard-create' into nv/v2-dashboard-get
* chore: update api specs
* fix: remove soft delete references
* chore: embed StorableDashboard into joinedRow in store method
* fix: fix build error
* chore: revert all frontend changes
* fix: remove public dashboard from get v2 call
* chore: revert all frontend changes
* fix: fix build errors post merge conflict resolution
* feat: lock, unlock, create public, update public v2 dashboard APIs (#11167)
* feat: lock, unlock, create public, update public v2 dashboard APIs
* chore: update api specs
* fix: use new pattern of checking for admin permission
* fix: remove soft delete reference
* chore: revert all frontend changes
* fix: fix build errors and remove v2 create/update public apis
* chore: use v1 methods wherever possible
* fix: use update v2 store method
* chore: update frontend schema
* chore: update frontend schema
* chore: generate api specs
* chore: generate api specs
* feat: patch dashboard api (#11182)
* feat: lock, unlock, create public, update public v2 dashboard APIs
* feat: delete dashboard v2 API and hard delete cron job
* feat: patch dashboard api
* chore: update api specs
* chore: update api specs
* chore: update api specs
* chore: remove delete related work
* fix: add examples of structs for value param in param description
* test: unit test fixes
* fix: use new pattern of checking for admin permission
* fix: remove soft delete reference
* test: key value tags in test
* fix: build error in patch module method
* fix: build error in Apply method
* fix: use sync tags method in update
* fix: fix build errors
* fix: fix all patch application tests
* chore: add more mapper methods
* fix: fix build errors
* chore: generate api specs
* fix: update migration numbering
* fix: add missing request struct in list api
* fix: remove hasMore from list response
* chore: bump migration number
* fix: send total count in response + bug fixes
* fix: add source for v2 dashboards
* chore: incorporate source
* chore: incorporate source in api spec
* chore: incorporate source
* fix: remove system dashboards from list v2 response
* fix: add some required fields
* feat: add immutable name in dashboard v2
* feat: add immutable name in dashboard v2
* feat: add immutable name in dashboard v2 api specs
* fix: remove unused param in constructor
* fix: improve api descriptions
* fix: remove unneeded comment
* chore: increase MaxTagsPerDashboard to 10
* fix: set display name in unmarshal json
* chore: remove integration test for now (will add along with list api)
* feat: add validation on dashboard name
* test: fix build errors and tests based on name related changes
* chore: bump migration number
* chore: generate api specs
* fix: fix tests based on name related changes
* fix: dont include full data in list response
* fix: add quotes around tag relation kind
* chore: bump migration number
* fix: correct convertor method name
* test: add unit tests for type conversions
* chore: remove enum def of threshold comparison operator
* feat: add flag to generate unique name in backend
* chore: generate api specs
* chore: make tags required in postable
* fix: build error fix
* chore: bump migration number
* fix: fix build error in test after merge conflict
* fix: remove unused store method
* fix: remove unused module methods
* fix: use v1 store update method
* fix: change data to spec in api param description
* chore: add back accidentally removed tests
* chore: update api spec
* chore: bump migration number
* feat: delete dashboard v2 API (#11299)
* feat: delete dashboard v2 API
* fix: fix post merge build and spec errors
* fix: address review comments
* chore: generate frontend api spec
* fix: add missing name fetch in listv2 store method
* fix: change title to name in api description
* fix: add all error codes for new apis
* test: change data to spec in unit tests
* fix: remove join to public dashboard table in list call
* fix: use valuer string for list order and sort
* test: integration test and fixes found through it
* chore: use same jsonpatch package as done in zeus
* chore: remove JSONPatchDocument and use patchable everywhere
* fix: make remove idempotent in patch
* chore: separate file for patch types
* chore: better error passage
* fix: remove extra decodePatch calls
* fix: use must new org id
* fix: proper error passage
* chore: rename updateable to updatable
* fix: use must new org id
* feat: include list of all dashboard tags in list api response
* fix: remove wrong api description msg
* fix: use must method for user id as well
* chore: add nolint comment
* fix: add missing image field in list response
* chore: regenerate api specs
* fix: make GettableTag a defined type instead of an alias
* fix: dont allow system dashboards to be deleted
* fix: remove public filter from visitor
* chore: use go sqlbuilder
* fix: use ESCAPE literal in contains and like operators
* fix: use correct perses package in list v2 file
* feat: change pinned dashboard table to user dashboard preference table
* fix: delete preferences on dashboard delete
* test: add integration test for pinning
* fix: wrap naked errors
* fix: integration dashboards should not be deletable either
* fix: remove org column in preferences and add foreign key to users table
* chore: add fk from prefs to dashbaord table
* chore: remove outer parenthesis removal function
* test: add unit test to ensure that all reserved keys have handlers
* fix: proper url for pin apis
* fix: delete preferences on user deletion
* test: address integration test comments
* test: change limit
* fix: revert the check in can delete
* fix: remove unit test from ee package
* fix: move list filter to impl to avoid db impl logic in types
* chore: code movement
* feat: add a pin free list dashboards api
* fix: update api specs
* fix: use request query in api defs for list apis
* chore: explicitly mark request as nil in list apis
---------
Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com>
* fix: add check for percentile aggregation for non-histogram metrics
* test: correct errors pkg in test file
* fix: catch type related errors in querier
* fix: remove comparison related tests
---------
Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com>
* chore: add discriminator on kind in perses spec
* chore: add discriminator to builder query spec
* chore: update in query builder directly
* docs: add info about discriminator in handler.md
* fix: move back to restrictKindToOneValue
* fix: move back to restrictKindToOneValue
* chore: updated logic and use centralized function in the module
* chore: filter metric groups
* chore: filter metric groups
* chore: formula correction
* chore: added step flooring note
* chore: comment correction
* chore: comment correction
* chore: removed function
* chore: renamed variables
* chore: added happy test
* chore: added test 2 for accuracy and test 3 for missing metrics check
* chore: added filter test 4
* chore: added 5th test for filterByStatus
* chore: added group by tests
* chore: pagination test added
* chore: added validation tests
* chore: added auth test
* chore: added all tests
* chore: fix for surfacing meta for pods custom group by
* chore: added nodes integration test suite
* chore: namespaces integration tests
* ci: register inframonitoring suite + ruff format 01_hosts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore: added integration tests for clusters
* chore: formatting changed
* chore: formatting changed
* chore: formatting changed
* chore: added volumes integration tests
* chore: added deployments
* chore: added tests
* chore: added order by host.name test
* refactor(infra-monitoring): address review comments on hosts integration tests
- inline _post helper at call sites
- combine filter operator tests into parametrized test_hosts_filter
- combine bad attr/grammar tests into parametrized test_hosts_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_hosts_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align pods integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_pods_filter
- combine bad attr/grammar tests into parametrized test_pods_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_pods_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_nodes_filter
- combine bad attr/grammar tests into parametrized test_nodes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_nodes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_namespaces_filter
- combine bad attr/grammar tests into parametrized test_namespaces_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_namespaces_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align clusters integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_clusters_filter
- combine bad attr/grammar tests into parametrized test_clusters_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_clusters_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align volumes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_volumes_filter
- combine bad attr/grammar tests into parametrized test_volumes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_volumes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align deployments integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_deployments_filter
- combine bad attr/grammar tests into parametrized test_deployments_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_deployments_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align statefulsets integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_statefulsets_filter
- combine bad attr/grammar tests into parametrized test_statefulsets_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_statefulsets_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts groupby tests into parametrized test
- merge test_hosts_groupby_hostname + test_hosts_groupby_os_type into
test_hosts_groupby parametrized on (dataset, group key, expected counts/values)
- preserves all assertions incl hostName populated-vs-empty branch coverage
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts orderby tests into parametrized test
- merge total_invariant_across_orderby + orderby_correctness + orderby_by_host_name
into test_hosts_orderby parametrized on (column, record_field) x direction
- each case asserts both the total/len invariant and sortedness; sortedness now
covered for all metric columns, not just cpu
- single dataset (hosts_orderby.jsonl) + CONTAINS 'order-' guard on all cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts pagination tests
- fold offset-beyond-total case into the test_hosts_pagination page walk
(offset K+5 expects 0 records via max(0, min(limit, K-offset)); total
invariant covers the beyond-total page's total == K)
- single seed instead of two
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): merge hosts happy_path into test_hosts_accuracy
- happy_path and value_accuracy datasets were structurally identical
(same 4 metrics, same sample counts, 2 hosts); one test now asserts
shape/contract + exact metric values in a single seed/request
- drop unused hosts_happy_path.jsonl
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine pods integration tests logically
- merge happy_path into test_pods_accuracy (datasets structurally identical);
drop unused pods_happy_path.jsonl
- merge groupby namespace/deployment into parametrized test_pods_groupby
- merge orderby invariant + correctness + by-pod-name into test_pods_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_pods_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine nodes integration tests logically
- merge happy_path into test_nodes_accuracy; drop unused nodes_happy_path.jsonl
- merge orderby invariant + correctness + by-node-name into test_nodes_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_nodes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine namespaces integration tests logically
- merge happy_path into test_namespaces_accuracy; drop unused namespaces_happy_path.jsonl
- merge orderby invariant + correctness + by-namespace-name into test_namespaces_orderby
- fold offset-beyond-total into test_namespaces_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine clusters integration tests logically
- merge happy_path into test_clusters_accuracy; drop unused clusters_happy_path.jsonl
- merge orderby invariant + correctness + by-cluster-name into test_clusters_orderby
- fold offset-beyond-total into test_clusters_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine volumes integration tests logically
- merge happy_path into test_volumes_accuracy; drop unused volumes_happy_path.jsonl
- merge orderby invariant + correctness + by-pvc-name into test_volumes_orderby
- fold offset-beyond-total into test_volumes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine deployments integration tests logically
- merge happy_path into test_deployments_accuracy; drop unused deployments_happy_path.jsonl
- merge orderby invariant + correctness + by-deployment-name into test_deployments_orderby
- fold offset-beyond-total into test_deployments_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine statefulsets integration tests logically
- merge happy_path into test_statefulsets_accuracy; drop unused statefulsets_happy_path.jsonl
- merge orderby invariant + correctness + by-statefulset-name into test_statefulsets_orderby
- fold offset-beyond-total into test_statefulsets_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in hosts filter tests
- regenerate hosts_filter_dataset.jsonl so every host mirrors the acc-h1
sample pattern from hosts_value_accuracy.jsonl (CI-proven expected values)
- test_hosts_filter now asserts cpu/memory/wait/load15/diskUsage per filtered
record against FILTER_DATASET_EXPECTED (1e-9), proving filters don't
distort aggregation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): scope filter expected values inside test_hosts_filter
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in pods filter tests
- regenerate pods_filter_dataset.jsonl so every pod mirrors the acc-p1
sample pattern from pods_value_accuracy.jsonl (CI-proven expected values)
- test_pods_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in nodes filter tests
- regenerate nodes_filter_dataset.jsonl so every node mirrors the acc-n1
sample pattern from nodes_value_accuracy.jsonl (CI-proven expected values)
- test_nodes_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in namespaces filter tests
- regenerate namespaces_filter_dataset.jsonl so every namespace mirrors the
acc-ns-1 sample pattern (2 pods) from namespaces_value_accuracy.jsonl
- test_namespaces_filter now asserts namespaceCPU/namespaceMemory per record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in clusters filter tests
- regenerate clusters_filter_dataset.jsonl so every cluster mirrors the
acc-cluster-1 sample pattern (2 nodes) from clusters_value_accuracy.jsonl
- test_clusters_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in volumes filter tests
- regenerate volumes_filter_dataset.jsonl so every PVC mirrors the acc-pvc-1
sample pattern from volumes_value_accuracy.jsonl (CI-proven expected values)
- test_volumes_filter now asserts all 6 volume fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in deployments filter tests
- regenerate deployments_filter_dataset.jsonl so every deployment mirrors the
acc-dep-1 sample pattern (2 pods) from deployments_value_accuracy.jsonl
- test_deployments_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in statefulsets filter tests
- regenerate statefulsets_filter_dataset.jsonl so every statefulset mirrors
the acc-ss-1 sample pattern (2 pods) from statefulsets_value_accuracy.jsonl
- test_statefulsets_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes groupby + pod-phase tests with structure
- merge pod_phase_counts_list_mode + _no_pods_on_node into parametrized
test_nodes_pod_phase_counts ((dataset, node, filter, expected) cases)
- rename groupby_cluster -> test_nodes_groupby, parametrize over
k8s.node.name + k8s.cluster.name; adds the node-name-in-groupBy branch
(nodeName populated, condition derived) that hosts/pods both cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces groupby with structure
- rename groupby_cluster -> test_namespaces_groupby, parametrize over
k8s.namespace.name + k8s.cluster.name; adds the namespace-name-in-groupBy
branch (namespaceName populated) that hosts/pods/nodes all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align clusters groupby with structure
- rename groupby_cloud_provider -> test_clusters_groupby, parametrize over
k8s.cluster.name + cloud.provider; adds the cluster-name-in-groupBy branch
(clusterName populated) that hosts/pods/nodes/namespaces all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align volumes groupby with structure
- rename groupby_namespace -> test_volumes_groupby, parametrize over
k8s.persistentvolumeclaim.name + k8s.namespace.name; adds the
pvc-name-in-groupBy branch (persistentVolumeClaimName populated) that the
other endpoints all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align deployments groupby with structure
- rename groupby_namespace -> test_deployments_groupby, parametrize over
k8s.deployment.name + k8s.namespace.name; adds the deployment-name-in-groupBy
branch (deploymentName populated) that the other endpoints all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align statefulsets groupby with structure
- rename groupby_namespace -> test_statefulsets_groupby, parametrize over
k8s.statefulset.name + k8s.namespace.name; adds the statefulset-name-in-groupBy
branch (statefulSetName populated) that the other endpoints all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: updated logic and use centralized function in the module
* chore: filter metric groups
* chore: filter metric groups
* chore: formula correction
* chore: added step flooring note
* chore: comment correction
* chore: comment correction
* chore: removed function
* chore: renamed variables
* chore: added happy test
* chore: added test 2 for accuracy and test 3 for missing metrics check
* chore: added filter test 4
* chore: added 5th test for filterByStatus
* chore: added group by tests
* chore: pagination test added
* chore: added validation tests
* chore: added auth test
* chore: added all tests
* chore: fix for surfacing meta for pods custom group by
* chore: added nodes integration test suite
* chore: namespaces integration tests
* ci: register inframonitoring suite + ruff format 01_hosts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore: added integration tests for clusters
* chore: formatting changed
* chore: formatting changed
* chore: formatting changed
* chore: added volumes integration tests
* chore: added deployments
* chore: added order by host.name test
* refactor(infra-monitoring): address review comments on hosts integration tests
- inline _post helper at call sites
- combine filter operator tests into parametrized test_hosts_filter
- combine bad attr/grammar tests into parametrized test_hosts_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_hosts_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align pods integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_pods_filter
- combine bad attr/grammar tests into parametrized test_pods_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_pods_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_nodes_filter
- combine bad attr/grammar tests into parametrized test_nodes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_nodes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_namespaces_filter
- combine bad attr/grammar tests into parametrized test_namespaces_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_namespaces_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align clusters integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_clusters_filter
- combine bad attr/grammar tests into parametrized test_clusters_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_clusters_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align volumes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_volumes_filter
- combine bad attr/grammar tests into parametrized test_volumes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_volumes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align deployments integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_deployments_filter
- combine bad attr/grammar tests into parametrized test_deployments_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_deployments_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts groupby tests into parametrized test
- merge test_hosts_groupby_hostname + test_hosts_groupby_os_type into
test_hosts_groupby parametrized on (dataset, group key, expected counts/values)
- preserves all assertions incl hostName populated-vs-empty branch coverage
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts orderby tests into parametrized test
- merge total_invariant_across_orderby + orderby_correctness + orderby_by_host_name
into test_hosts_orderby parametrized on (column, record_field) x direction
- each case asserts both the total/len invariant and sortedness; sortedness now
covered for all metric columns, not just cpu
- single dataset (hosts_orderby.jsonl) + CONTAINS 'order-' guard on all cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts pagination tests
- fold offset-beyond-total case into the test_hosts_pagination page walk
(offset K+5 expects 0 records via max(0, min(limit, K-offset)); total
invariant covers the beyond-total page's total == K)
- single seed instead of two
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): merge hosts happy_path into test_hosts_accuracy
- happy_path and value_accuracy datasets were structurally identical
(same 4 metrics, same sample counts, 2 hosts); one test now asserts
shape/contract + exact metric values in a single seed/request
- drop unused hosts_happy_path.jsonl
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine pods integration tests logically
- merge happy_path into test_pods_accuracy (datasets structurally identical);
drop unused pods_happy_path.jsonl
- merge groupby namespace/deployment into parametrized test_pods_groupby
- merge orderby invariant + correctness + by-pod-name into test_pods_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_pods_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine nodes integration tests logically
- merge happy_path into test_nodes_accuracy; drop unused nodes_happy_path.jsonl
- merge orderby invariant + correctness + by-node-name into test_nodes_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_nodes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine namespaces integration tests logically
- merge happy_path into test_namespaces_accuracy; drop unused namespaces_happy_path.jsonl
- merge orderby invariant + correctness + by-namespace-name into test_namespaces_orderby
- fold offset-beyond-total into test_namespaces_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine clusters integration tests logically
- merge happy_path into test_clusters_accuracy; drop unused clusters_happy_path.jsonl
- merge orderby invariant + correctness + by-cluster-name into test_clusters_orderby
- fold offset-beyond-total into test_clusters_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine volumes integration tests logically
- merge happy_path into test_volumes_accuracy; drop unused volumes_happy_path.jsonl
- merge orderby invariant + correctness + by-pvc-name into test_volumes_orderby
- fold offset-beyond-total into test_volumes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine deployments integration tests logically
- merge happy_path into test_deployments_accuracy; drop unused deployments_happy_path.jsonl
- merge orderby invariant + correctness + by-deployment-name into test_deployments_orderby
- fold offset-beyond-total into test_deployments_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in hosts filter tests
- regenerate hosts_filter_dataset.jsonl so every host mirrors the acc-h1
sample pattern from hosts_value_accuracy.jsonl (CI-proven expected values)
- test_hosts_filter now asserts cpu/memory/wait/load15/diskUsage per filtered
record against FILTER_DATASET_EXPECTED (1e-9), proving filters don't
distort aggregation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): scope filter expected values inside test_hosts_filter
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in pods filter tests
- regenerate pods_filter_dataset.jsonl so every pod mirrors the acc-p1
sample pattern from pods_value_accuracy.jsonl (CI-proven expected values)
- test_pods_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in nodes filter tests
- regenerate nodes_filter_dataset.jsonl so every node mirrors the acc-n1
sample pattern from nodes_value_accuracy.jsonl (CI-proven expected values)
- test_nodes_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in namespaces filter tests
- regenerate namespaces_filter_dataset.jsonl so every namespace mirrors the
acc-ns-1 sample pattern (2 pods) from namespaces_value_accuracy.jsonl
- test_namespaces_filter now asserts namespaceCPU/namespaceMemory per record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in clusters filter tests
- regenerate clusters_filter_dataset.jsonl so every cluster mirrors the
acc-cluster-1 sample pattern (2 nodes) from clusters_value_accuracy.jsonl
- test_clusters_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in volumes filter tests
- regenerate volumes_filter_dataset.jsonl so every PVC mirrors the acc-pvc-1
sample pattern from volumes_value_accuracy.jsonl (CI-proven expected values)
- test_volumes_filter now asserts all 6 volume fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in deployments filter tests
- regenerate deployments_filter_dataset.jsonl so every deployment mirrors the
acc-dep-1 sample pattern (2 pods) from deployments_value_accuracy.jsonl
- test_deployments_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes groupby + pod-phase tests with structure
- merge pod_phase_counts_list_mode + _no_pods_on_node into parametrized
test_nodes_pod_phase_counts ((dataset, node, filter, expected) cases)
- rename groupby_cluster -> test_nodes_groupby, parametrize over
k8s.node.name + k8s.cluster.name; adds the node-name-in-groupBy branch
(nodeName populated, condition derived) that hosts/pods both cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces groupby with structure
- rename groupby_cluster -> test_namespaces_groupby, parametrize over
k8s.namespace.name + k8s.cluster.name; adds the namespace-name-in-groupBy
branch (namespaceName populated) that hosts/pods/nodes all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align clusters groupby with structure
- rename groupby_cloud_provider -> test_clusters_groupby, parametrize over
k8s.cluster.name + cloud.provider; adds the cluster-name-in-groupBy branch
(clusterName populated) that hosts/pods/nodes/namespaces all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align volumes groupby with structure
- rename groupby_namespace -> test_volumes_groupby, parametrize over
k8s.persistentvolumeclaim.name + k8s.namespace.name; adds the
pvc-name-in-groupBy branch (persistentVolumeClaimName populated) that the
other endpoints all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align deployments groupby with structure
- rename groupby_namespace -> test_deployments_groupby, parametrize over
k8s.deployment.name + k8s.namespace.name; adds the deployment-name-in-groupBy
branch (deploymentName populated) that the other endpoints all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: updated logic and use centralized function in the module
* chore: filter metric groups
* chore: filter metric groups
* chore: formula correction
* chore: added step flooring note
* chore: comment correction
* chore: comment correction
* chore: removed function
* chore: renamed variables
* chore: added happy test
* chore: added test 2 for accuracy and test 3 for missing metrics check
* chore: added filter test 4
* chore: added 5th test for filterByStatus
* chore: added group by tests
* chore: pagination test added
* chore: added validation tests
* chore: added auth test
* chore: added all tests
* chore: fix for surfacing meta for pods custom group by
* chore: added nodes integration test suite
* chore: namespaces integration tests
* ci: register inframonitoring suite + ruff format 01_hosts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore: added integration tests for clusters
* chore: formatting changed
* chore: formatting changed
* chore: formatting changed
* chore: added volumes integration tests
* chore: added order by host.name test
* refactor(infra-monitoring): address review comments on hosts integration tests
- inline _post helper at call sites
- combine filter operator tests into parametrized test_hosts_filter
- combine bad attr/grammar tests into parametrized test_hosts_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_hosts_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align pods integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_pods_filter
- combine bad attr/grammar tests into parametrized test_pods_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_pods_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_nodes_filter
- combine bad attr/grammar tests into parametrized test_nodes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_nodes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_namespaces_filter
- combine bad attr/grammar tests into parametrized test_namespaces_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_namespaces_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align clusters integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_clusters_filter
- combine bad attr/grammar tests into parametrized test_clusters_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_clusters_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align volumes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_volumes_filter
- combine bad attr/grammar tests into parametrized test_volumes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_volumes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts groupby tests into parametrized test
- merge test_hosts_groupby_hostname + test_hosts_groupby_os_type into
test_hosts_groupby parametrized on (dataset, group key, expected counts/values)
- preserves all assertions incl hostName populated-vs-empty branch coverage
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts orderby tests into parametrized test
- merge total_invariant_across_orderby + orderby_correctness + orderby_by_host_name
into test_hosts_orderby parametrized on (column, record_field) x direction
- each case asserts both the total/len invariant and sortedness; sortedness now
covered for all metric columns, not just cpu
- single dataset (hosts_orderby.jsonl) + CONTAINS 'order-' guard on all cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts pagination tests
- fold offset-beyond-total case into the test_hosts_pagination page walk
(offset K+5 expects 0 records via max(0, min(limit, K-offset)); total
invariant covers the beyond-total page's total == K)
- single seed instead of two
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): merge hosts happy_path into test_hosts_accuracy
- happy_path and value_accuracy datasets were structurally identical
(same 4 metrics, same sample counts, 2 hosts); one test now asserts
shape/contract + exact metric values in a single seed/request
- drop unused hosts_happy_path.jsonl
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine pods integration tests logically
- merge happy_path into test_pods_accuracy (datasets structurally identical);
drop unused pods_happy_path.jsonl
- merge groupby namespace/deployment into parametrized test_pods_groupby
- merge orderby invariant + correctness + by-pod-name into test_pods_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_pods_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine nodes integration tests logically
- merge happy_path into test_nodes_accuracy; drop unused nodes_happy_path.jsonl
- merge orderby invariant + correctness + by-node-name into test_nodes_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_nodes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine namespaces integration tests logically
- merge happy_path into test_namespaces_accuracy; drop unused namespaces_happy_path.jsonl
- merge orderby invariant + correctness + by-namespace-name into test_namespaces_orderby
- fold offset-beyond-total into test_namespaces_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine clusters integration tests logically
- merge happy_path into test_clusters_accuracy; drop unused clusters_happy_path.jsonl
- merge orderby invariant + correctness + by-cluster-name into test_clusters_orderby
- fold offset-beyond-total into test_clusters_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine volumes integration tests logically
- merge happy_path into test_volumes_accuracy; drop unused volumes_happy_path.jsonl
- merge orderby invariant + correctness + by-pvc-name into test_volumes_orderby
- fold offset-beyond-total into test_volumes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in hosts filter tests
- regenerate hosts_filter_dataset.jsonl so every host mirrors the acc-h1
sample pattern from hosts_value_accuracy.jsonl (CI-proven expected values)
- test_hosts_filter now asserts cpu/memory/wait/load15/diskUsage per filtered
record against FILTER_DATASET_EXPECTED (1e-9), proving filters don't
distort aggregation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): scope filter expected values inside test_hosts_filter
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in pods filter tests
- regenerate pods_filter_dataset.jsonl so every pod mirrors the acc-p1
sample pattern from pods_value_accuracy.jsonl (CI-proven expected values)
- test_pods_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in nodes filter tests
- regenerate nodes_filter_dataset.jsonl so every node mirrors the acc-n1
sample pattern from nodes_value_accuracy.jsonl (CI-proven expected values)
- test_nodes_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in namespaces filter tests
- regenerate namespaces_filter_dataset.jsonl so every namespace mirrors the
acc-ns-1 sample pattern (2 pods) from namespaces_value_accuracy.jsonl
- test_namespaces_filter now asserts namespaceCPU/namespaceMemory per record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in clusters filter tests
- regenerate clusters_filter_dataset.jsonl so every cluster mirrors the
acc-cluster-1 sample pattern (2 nodes) from clusters_value_accuracy.jsonl
- test_clusters_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in volumes filter tests
- regenerate volumes_filter_dataset.jsonl so every PVC mirrors the acc-pvc-1
sample pattern from volumes_value_accuracy.jsonl (CI-proven expected values)
- test_volumes_filter now asserts all 6 volume fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes groupby + pod-phase tests with structure
- merge pod_phase_counts_list_mode + _no_pods_on_node into parametrized
test_nodes_pod_phase_counts ((dataset, node, filter, expected) cases)
- rename groupby_cluster -> test_nodes_groupby, parametrize over
k8s.node.name + k8s.cluster.name; adds the node-name-in-groupBy branch
(nodeName populated, condition derived) that hosts/pods both cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces groupby with structure
- rename groupby_cluster -> test_namespaces_groupby, parametrize over
k8s.namespace.name + k8s.cluster.name; adds the namespace-name-in-groupBy
branch (namespaceName populated) that hosts/pods/nodes all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align clusters groupby with structure
- rename groupby_cloud_provider -> test_clusters_groupby, parametrize over
k8s.cluster.name + cloud.provider; adds the cluster-name-in-groupBy branch
(clusterName populated) that hosts/pods/nodes/namespaces all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align volumes groupby with structure
- rename groupby_namespace -> test_volumes_groupby, parametrize over
k8s.persistentvolumeclaim.name + k8s.namespace.name; adds the
pvc-name-in-groupBy branch (persistentVolumeClaimName populated) that the
other endpoints all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: cleanup waterfall v3 api
We've moved to v4 as part of memory allocation optimisation
* chore: remove select all limit from waterfall request
It was added for testing only and fine tuning the limit value
* chore: update openapi specs
* chore: remove waterfall v2 since we've moved to v4 now
* chore: updated logic and use centralized function in the module
* chore: filter metric groups
* chore: filter metric groups
* chore: formula correction
* chore: added step flooring note
* chore: comment correction
* chore: comment correction
* chore: removed function
* chore: renamed variables
* chore: added happy test
* chore: added test 2 for accuracy and test 3 for missing metrics check
* chore: added filter test 4
* chore: added 5th test for filterByStatus
* chore: added group by tests
* chore: pagination test added
* chore: added validation tests
* chore: added auth test
* chore: added all tests
* chore: fix for surfacing meta for pods custom group by
* chore: added nodes integration test suite
* chore: namespaces integration tests
* ci: register inframonitoring suite + ruff format 01_hosts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore: added integration tests for clusters
* chore: formatting changed
* chore: formatting changed
* chore: formatting changed
* chore: added order by host.name test
* refactor(infra-monitoring): address review comments on hosts integration tests
- inline _post helper at call sites
- combine filter operator tests into parametrized test_hosts_filter
- combine bad attr/grammar tests into parametrized test_hosts_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_hosts_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align pods integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_pods_filter
- combine bad attr/grammar tests into parametrized test_pods_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_pods_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_nodes_filter
- combine bad attr/grammar tests into parametrized test_nodes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_nodes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_namespaces_filter
- combine bad attr/grammar tests into parametrized test_namespaces_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_namespaces_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align clusters integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_clusters_filter
- combine bad attr/grammar tests into parametrized test_clusters_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_clusters_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts groupby tests into parametrized test
- merge test_hosts_groupby_hostname + test_hosts_groupby_os_type into
test_hosts_groupby parametrized on (dataset, group key, expected counts/values)
- preserves all assertions incl hostName populated-vs-empty branch coverage
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts orderby tests into parametrized test
- merge total_invariant_across_orderby + orderby_correctness + orderby_by_host_name
into test_hosts_orderby parametrized on (column, record_field) x direction
- each case asserts both the total/len invariant and sortedness; sortedness now
covered for all metric columns, not just cpu
- single dataset (hosts_orderby.jsonl) + CONTAINS 'order-' guard on all cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts pagination tests
- fold offset-beyond-total case into the test_hosts_pagination page walk
(offset K+5 expects 0 records via max(0, min(limit, K-offset)); total
invariant covers the beyond-total page's total == K)
- single seed instead of two
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): merge hosts happy_path into test_hosts_accuracy
- happy_path and value_accuracy datasets were structurally identical
(same 4 metrics, same sample counts, 2 hosts); one test now asserts
shape/contract + exact metric values in a single seed/request
- drop unused hosts_happy_path.jsonl
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine pods integration tests logically
- merge happy_path into test_pods_accuracy (datasets structurally identical);
drop unused pods_happy_path.jsonl
- merge groupby namespace/deployment into parametrized test_pods_groupby
- merge orderby invariant + correctness + by-pod-name into test_pods_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_pods_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine nodes integration tests logically
- merge happy_path into test_nodes_accuracy; drop unused nodes_happy_path.jsonl
- merge orderby invariant + correctness + by-node-name into test_nodes_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_nodes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine namespaces integration tests logically
- merge happy_path into test_namespaces_accuracy; drop unused namespaces_happy_path.jsonl
- merge orderby invariant + correctness + by-namespace-name into test_namespaces_orderby
- fold offset-beyond-total into test_namespaces_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine clusters integration tests logically
- merge happy_path into test_clusters_accuracy; drop unused clusters_happy_path.jsonl
- merge orderby invariant + correctness + by-cluster-name into test_clusters_orderby
- fold offset-beyond-total into test_clusters_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in hosts filter tests
- regenerate hosts_filter_dataset.jsonl so every host mirrors the acc-h1
sample pattern from hosts_value_accuracy.jsonl (CI-proven expected values)
- test_hosts_filter now asserts cpu/memory/wait/load15/diskUsage per filtered
record against FILTER_DATASET_EXPECTED (1e-9), proving filters don't
distort aggregation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): scope filter expected values inside test_hosts_filter
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in pods filter tests
- regenerate pods_filter_dataset.jsonl so every pod mirrors the acc-p1
sample pattern from pods_value_accuracy.jsonl (CI-proven expected values)
- test_pods_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in nodes filter tests
- regenerate nodes_filter_dataset.jsonl so every node mirrors the acc-n1
sample pattern from nodes_value_accuracy.jsonl (CI-proven expected values)
- test_nodes_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in namespaces filter tests
- regenerate namespaces_filter_dataset.jsonl so every namespace mirrors the
acc-ns-1 sample pattern (2 pods) from namespaces_value_accuracy.jsonl
- test_namespaces_filter now asserts namespaceCPU/namespaceMemory per record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in clusters filter tests
- regenerate clusters_filter_dataset.jsonl so every cluster mirrors the
acc-cluster-1 sample pattern (2 nodes) from clusters_value_accuracy.jsonl
- test_clusters_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes groupby + pod-phase tests with structure
- merge pod_phase_counts_list_mode + _no_pods_on_node into parametrized
test_nodes_pod_phase_counts ((dataset, node, filter, expected) cases)
- rename groupby_cluster -> test_nodes_groupby, parametrize over
k8s.node.name + k8s.cluster.name; adds the node-name-in-groupBy branch
(nodeName populated, condition derived) that hosts/pods both cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces groupby with structure
- rename groupby_cluster -> test_namespaces_groupby, parametrize over
k8s.namespace.name + k8s.cluster.name; adds the namespace-name-in-groupBy
branch (namespaceName populated) that hosts/pods/nodes all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align clusters groupby with structure
- rename groupby_cloud_provider -> test_clusters_groupby, parametrize over
k8s.cluster.name + cloud.provider; adds the cluster-name-in-groupBy branch
(clusterName populated) that hosts/pods/nodes/namespaces all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* fix(billing): fix cancel subscription flow failing silently for users without a default mail client
* fix(billing): refactor test case
* fix(billing): added log event to the copy template and reopen button
* fix(billing): test case refactor
* fix(billing): use native <a> for mailto retry to maximize cross-browser reliability
* chore: added fastPath
* chore: rearrange and readable
* chore: build fix
* chore: combining two functions into a common flow
* chore: variable name update:
* feat(metrics-explorer): fast path for get treemap in case of no filter (#11459)
* chore: fastpath for treemap
* chore: added fastpath function
* chore: refactor fir common code
* chore: refactor changes
* chore: added tests for get stats and get treemap
* chore: updated logic and use centralized function in the module
* chore: filter metric groups
* chore: filter metric groups
* chore: formula correction
* chore: added step flooring note
* chore: comment correction
* chore: comment correction
* chore: removed function
* chore: renamed variables
* chore: added happy test
* chore: added test 2 for accuracy and test 3 for missing metrics check
* chore: added filter test 4
* chore: added 5th test for filterByStatus
* chore: added group by tests
* chore: pagination test added
* chore: added validation tests
* chore: added auth test
* chore: added all tests
* chore: fix for surfacing meta for pods custom group by
* chore: added nodes integration test suite
* chore: namespaces integration tests
* ci: register inframonitoring suite + ruff format 01_hosts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore: formatting changed
* chore: formatting changed
* chore: formatting changed
* chore: added order by host.name test
* refactor(infra-monitoring): address review comments on hosts integration tests
- inline _post helper at call sites
- combine filter operator tests into parametrized test_hosts_filter
- combine bad attr/grammar tests into parametrized test_hosts_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_hosts_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align pods integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_pods_filter
- combine bad attr/grammar tests into parametrized test_pods_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_pods_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_nodes_filter
- combine bad attr/grammar tests into parametrized test_nodes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_nodes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_namespaces_filter
- combine bad attr/grammar tests into parametrized test_namespaces_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_namespaces_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts groupby tests into parametrized test
- merge test_hosts_groupby_hostname + test_hosts_groupby_os_type into
test_hosts_groupby parametrized on (dataset, group key, expected counts/values)
- preserves all assertions incl hostName populated-vs-empty branch coverage
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts orderby tests into parametrized test
- merge total_invariant_across_orderby + orderby_correctness + orderby_by_host_name
into test_hosts_orderby parametrized on (column, record_field) x direction
- each case asserts both the total/len invariant and sortedness; sortedness now
covered for all metric columns, not just cpu
- single dataset (hosts_orderby.jsonl) + CONTAINS 'order-' guard on all cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts pagination tests
- fold offset-beyond-total case into the test_hosts_pagination page walk
(offset K+5 expects 0 records via max(0, min(limit, K-offset)); total
invariant covers the beyond-total page's total == K)
- single seed instead of two
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): merge hosts happy_path into test_hosts_accuracy
- happy_path and value_accuracy datasets were structurally identical
(same 4 metrics, same sample counts, 2 hosts); one test now asserts
shape/contract + exact metric values in a single seed/request
- drop unused hosts_happy_path.jsonl
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine pods integration tests logically
- merge happy_path into test_pods_accuracy (datasets structurally identical);
drop unused pods_happy_path.jsonl
- merge groupby namespace/deployment into parametrized test_pods_groupby
- merge orderby invariant + correctness + by-pod-name into test_pods_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_pods_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine nodes integration tests logically
- merge happy_path into test_nodes_accuracy; drop unused nodes_happy_path.jsonl
- merge orderby invariant + correctness + by-node-name into test_nodes_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_nodes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine namespaces integration tests logically
- merge happy_path into test_namespaces_accuracy; drop unused namespaces_happy_path.jsonl
- merge orderby invariant + correctness + by-namespace-name into test_namespaces_orderby
- fold offset-beyond-total into test_namespaces_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in hosts filter tests
- regenerate hosts_filter_dataset.jsonl so every host mirrors the acc-h1
sample pattern from hosts_value_accuracy.jsonl (CI-proven expected values)
- test_hosts_filter now asserts cpu/memory/wait/load15/diskUsage per filtered
record against FILTER_DATASET_EXPECTED (1e-9), proving filters don't
distort aggregation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): scope filter expected values inside test_hosts_filter
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in pods filter tests
- regenerate pods_filter_dataset.jsonl so every pod mirrors the acc-p1
sample pattern from pods_value_accuracy.jsonl (CI-proven expected values)
- test_pods_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in nodes filter tests
- regenerate nodes_filter_dataset.jsonl so every node mirrors the acc-n1
sample pattern from nodes_value_accuracy.jsonl (CI-proven expected values)
- test_nodes_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in namespaces filter tests
- regenerate namespaces_filter_dataset.jsonl so every namespace mirrors the
acc-ns-1 sample pattern (2 pods) from namespaces_value_accuracy.jsonl
- test_namespaces_filter now asserts namespaceCPU/namespaceMemory per record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes groupby + pod-phase tests with structure
- merge pod_phase_counts_list_mode + _no_pods_on_node into parametrized
test_nodes_pod_phase_counts ((dataset, node, filter, expected) cases)
- rename groupby_cluster -> test_nodes_groupby, parametrize over
k8s.node.name + k8s.cluster.name; adds the node-name-in-groupBy branch
(nodeName populated, condition derived) that hosts/pods both cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align namespaces groupby with structure
- rename groupby_cluster -> test_namespaces_groupby, parametrize over
k8s.namespace.name + k8s.cluster.name; adds the namespace-name-in-groupBy
branch (namespaceName populated) that hosts/pods/nodes all cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: updated logic and use centralized function in the module
* chore: filter metric groups
* chore: filter metric groups
* chore: formula correction
* chore: added step flooring note
* chore: comment correction
* chore: comment correction
* chore: removed function
* chore: renamed variables
* chore: added happy test
* chore: added test 2 for accuracy and test 3 for missing metrics check
* chore: added filter test 4
* chore: added 5th test for filterByStatus
* chore: added group by tests
* chore: pagination test added
* chore: added validation tests
* chore: added auth test
* chore: added all tests
* chore: fix for surfacing meta for pods custom group by
* chore: added nodes integration test suite
* ci: register inframonitoring suite + ruff format 01_hosts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore: formatting changed
* chore: formatting changed
* chore: added order by host.name test
* refactor(infra-monitoring): address review comments on hosts integration tests
- inline _post helper at call sites
- combine filter operator tests into parametrized test_hosts_filter
- combine bad attr/grammar tests into parametrized test_hosts_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_hosts_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align pods integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_pods_filter
- combine bad attr/grammar tests into parametrized test_pods_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_pods_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_nodes_filter
- combine bad attr/grammar tests into parametrized test_nodes_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_nodes_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts groupby tests into parametrized test
- merge test_hosts_groupby_hostname + test_hosts_groupby_os_type into
test_hosts_groupby parametrized on (dataset, group key, expected counts/values)
- preserves all assertions incl hostName populated-vs-empty branch coverage
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts orderby tests into parametrized test
- merge total_invariant_across_orderby + orderby_correctness + orderby_by_host_name
into test_hosts_orderby parametrized on (column, record_field) x direction
- each case asserts both the total/len invariant and sortedness; sortedness now
covered for all metric columns, not just cpu
- single dataset (hosts_orderby.jsonl) + CONTAINS 'order-' guard on all cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts pagination tests
- fold offset-beyond-total case into the test_hosts_pagination page walk
(offset K+5 expects 0 records via max(0, min(limit, K-offset)); total
invariant covers the beyond-total page's total == K)
- single seed instead of two
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): merge hosts happy_path into test_hosts_accuracy
- happy_path and value_accuracy datasets were structurally identical
(same 4 metrics, same sample counts, 2 hosts); one test now asserts
shape/contract + exact metric values in a single seed/request
- drop unused hosts_happy_path.jsonl
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine pods integration tests logically
- merge happy_path into test_pods_accuracy (datasets structurally identical);
drop unused pods_happy_path.jsonl
- merge groupby namespace/deployment into parametrized test_pods_groupby
- merge orderby invariant + correctness + by-pod-name into test_pods_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_pods_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine nodes integration tests logically
- merge happy_path into test_nodes_accuracy; drop unused nodes_happy_path.jsonl
- merge orderby invariant + correctness + by-node-name into test_nodes_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_nodes_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in hosts filter tests
- regenerate hosts_filter_dataset.jsonl so every host mirrors the acc-h1
sample pattern from hosts_value_accuracy.jsonl (CI-proven expected values)
- test_hosts_filter now asserts cpu/memory/wait/load15/diskUsage per filtered
record against FILTER_DATASET_EXPECTED (1e-9), proving filters don't
distort aggregation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): scope filter expected values inside test_hosts_filter
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in pods filter tests
- regenerate pods_filter_dataset.jsonl so every pod mirrors the acc-p1
sample pattern from pods_value_accuracy.jsonl (CI-proven expected values)
- test_pods_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in nodes filter tests
- regenerate nodes_filter_dataset.jsonl so every node mirrors the acc-n1
sample pattern from nodes_value_accuracy.jsonl (CI-proven expected values)
- test_nodes_filter now asserts the 4 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align nodes groupby + pod-phase tests with structure
- merge pod_phase_counts_list_mode + _no_pods_on_node into parametrized
test_nodes_pod_phase_counts ((dataset, node, filter, expected) cases)
- rename groupby_cluster -> test_nodes_groupby, parametrize over
k8s.node.name + k8s.cluster.name; adds the node-name-in-groupBy branch
(nodeName populated, condition derived) that hosts/pods both cover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* chore: updated logic and use centralized function in the module
* chore: filter metric groups
* chore: filter metric groups
* chore: formula correction
* chore: added step flooring note
* chore: comment correction
* chore: comment correction
* chore: removed function
* chore: renamed variables
* chore: added happy test
* chore: added test 2 for accuracy and test 3 for missing metrics check
* chore: added filter test 4
* chore: added 5th test for filterByStatus
* chore: added group by tests
* chore: pagination test added
* chore: added validation tests
* chore: added auth test
* chore: added all tests
* chore: fix for surfacing meta for pods custom group by
* ci: register inframonitoring suite + ruff format 01_hosts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore: formatting changed
* chore: added order by host.name test
* refactor(infra-monitoring): address review comments on hosts integration tests
- inline _post helper at call sites
- combine filter operator tests into parametrized test_hosts_filter
- combine bad attr/grammar tests into parametrized test_hosts_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_hosts_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): align pods integration tests with review feedback
- inline _post helper at call sites
- combine filter operator tests into parametrized test_pods_filter
- combine bad attr/grammar tests into parametrized test_pods_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_pods_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts groupby tests into parametrized test
- merge test_hosts_groupby_hostname + test_hosts_groupby_os_type into
test_hosts_groupby parametrized on (dataset, group key, expected counts/values)
- preserves all assertions incl hostName populated-vs-empty branch coverage
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts orderby tests into parametrized test
- merge total_invariant_across_orderby + orderby_correctness + orderby_by_host_name
into test_hosts_orderby parametrized on (column, record_field) x direction
- each case asserts both the total/len invariant and sortedness; sortedness now
covered for all metric columns, not just cpu
- single dataset (hosts_orderby.jsonl) + CONTAINS 'order-' guard on all cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts pagination tests
- fold offset-beyond-total case into the test_hosts_pagination page walk
(offset K+5 expects 0 records via max(0, min(limit, K-offset)); total
invariant covers the beyond-total page's total == K)
- single seed instead of two
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): merge hosts happy_path into test_hosts_accuracy
- happy_path and value_accuracy datasets were structurally identical
(same 4 metrics, same sample counts, 2 hosts); one test now asserts
shape/contract + exact metric values in a single seed/request
- drop unused hosts_happy_path.jsonl
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine pods integration tests logically
- merge happy_path into test_pods_accuracy (datasets structurally identical);
drop unused pods_happy_path.jsonl
- merge groupby namespace/deployment into parametrized test_pods_groupby
- merge orderby invariant + correctness + by-pod-name into test_pods_orderby
((column, record_field) x direction; sortedness now covered for all columns)
- fold offset-beyond-total into test_pods_pagination page walk
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in hosts filter tests
- regenerate hosts_filter_dataset.jsonl so every host mirrors the acc-h1
sample pattern from hosts_value_accuracy.jsonl (CI-proven expected values)
- test_hosts_filter now asserts cpu/memory/wait/load15/diskUsage per filtered
record against FILTER_DATASET_EXPECTED (1e-9), proving filters don't
distort aggregation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): scope filter expected values inside test_hosts_filter
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in pods filter tests
- regenerate pods_filter_dataset.jsonl so every pod mirrors the acc-p1
sample pattern from pods_value_accuracy.jsonl (CI-proven expected values)
- test_pods_filter now asserts the 6 CPU/memory fields per filtered record
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* test(infra-monitoring): drop dangling generator-script reference in pods tests
pods_phases.jsonl comment referenced tests/gen_pods_datasets.py, which was
never committed. Reword to describe the committed dataset instead.
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* feat: adding support for Azure AKS
* refactor: updating metric names in integration config
* chore: generating OpenAPI spec
* chore: adding note in overview
* refactor: updating spatial aggregation and other names
* refactor: updating reduceTo to empty value
* refactor: updating title
* chore: updated logic and use centralized function in the module
* chore: filter metric groups
* chore: filter metric groups
* chore: formula correction
* chore: added step flooring note
* chore: comment correction
* chore: comment correction
* chore: removed function
* chore: renamed variables
* chore: added happy test
* chore: added test 2 for accuracy and test 3 for missing metrics check
* chore: added filter test 4
* chore: added 5th test for filterByStatus
* chore: added group by tests
* chore: pagination test added
* chore: added validation tests
* chore: added auth test
* chore: fix for surfacing meta for pods custom group by
* ci: register inframonitoring suite + ruff format 01_hosts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* chore: added order by host.name test
* refactor(infra-monitoring): address review comments on hosts integration tests
- inline _post helper at call sites
- combine filter operator tests into parametrized test_hosts_filter
- combine bad attr/grammar tests into parametrized test_hosts_filter_invalid
- convert orderby total-invariant nested loop to stacked parametrize
- drop redundant test_hosts_auth (auth covered globally)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts groupby tests into parametrized test
- merge test_hosts_groupby_hostname + test_hosts_groupby_os_type into
test_hosts_groupby parametrized on (dataset, group key, expected counts/values)
- preserves all assertions incl hostName populated-vs-empty branch coverage
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts orderby tests into parametrized test
- merge total_invariant_across_orderby + orderby_correctness + orderby_by_host_name
into test_hosts_orderby parametrized on (column, record_field) x direction
- each case asserts both the total/len invariant and sortedness; sortedness now
covered for all metric columns, not just cpu
- single dataset (hosts_orderby.jsonl) + CONTAINS 'order-' guard on all cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): combine hosts pagination tests
- fold offset-beyond-total case into the test_hosts_pagination page walk
(offset K+5 expects 0 records via max(0, min(limit, K-offset)); total
invariant covers the beyond-total page's total == K)
- single seed instead of two
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): merge hosts happy_path into test_hosts_accuracy
- happy_path and value_accuracy datasets were structurally identical
(same 4 metrics, same sample counts, 2 hosts); one test now asserts
shape/contract + exact metric values in a single seed/request
- drop unused hosts_happy_path.jsonl
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(infra-monitoring): assert metric value accuracy in hosts filter tests
- regenerate hosts_filter_dataset.jsonl so every host mirrors the acc-h1
sample pattern from hosts_value_accuracy.jsonl (CI-proven expected values)
- test_hosts_filter now asserts cpu/memory/wait/load15/diskUsage per filtered
record against FILTER_DATASET_EXPECTED (1e-9), proving filters don't
distort aggregation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(infra-monitoring): scope filter expected values inside test_hosts_filter
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* refactor(uPlotV2): split Legend into presentational + uPlot controller
Separate the legend into a presentational `Legend` (renders supplied items +
delegated handlers, with search/copy/virtualization) and a `UPlotLegend`
controller that wires it to the uPlot config via useLegendsSync/useLegendActions.
This lets non-uPlot charts reuse the legend. ChartWrapper now renders UPlotLegend
(behaviour unchanged for TimeSeries/Bar/Histogram). Also fixes the copy-button
hover layout shift (reserve space, fade via opacity) and uses @signozhq/ui
tooltips for legend items.
* feat(charts): add shared Pie chart component
Add a reusable @visx donut Pie chart (charts/Pie) that consumes the shared
presentational Legend: chart/legend split via calculateChartDimensions,
search/copy, hover-sync, slice hide/unhide (mirrors the uPlot legend) with
localStorage persistence, leader labels and a centre total. Split into PieArc /
PieCenterLabel / usePieInteractions for readability.
Also renames the tooltip click payload TooltipClickData -> ChartClickData across
the TooltipPlugin and chart prop types (the type describes any chart click, not
just tooltips).
* test(charts): add Pie chart + usePieInteractions tests
Cover the shared Pie chart and its helpers/hook:
- utils: scaled font size, arc geometry, colour lighten/fill dimming
- usePieInteractions: marker toggle, label isolate/reset, hover focus,
hidden-slice guard, localStorage persistence + rehydration
- PieArc: leader-label threshold, label truncation, enter/leave/click
- PieCenterLabel: numeric/unit split
- Pie: no-data state, arc-per-slice rendering, legend, layout per position,
hide-on-marker-click
Adds a global ResizeObserver polyfill to jest.setup.ts (alongside the existing
IntersectionObserver one) since visx's useTooltipInPortal requires it.
* chore: pr review fixes
* chore: pr review comments
* chore: pr review comments
* feat: add types for flamegraph v3 in module structure
* chore: remove limit from request payload
It's a new api so doesn't need to be backward compatible
* feat: add config for flamegraph
* feat: add method to enrich selected spans
* feat: add api and module for flamegraph v3
* feat: query full spans for smaller traces
* chore: move exported methods to the top
* chore: ignore nil assigment lint error
* chore: extract out flamegraph building logic for easier review
* chore: update openapi specs
* chore: move flamegraph after aggregation to reduce diff
* chore: remove un related changes to keep diff minimum
* chore: avoid passing request type to module
* feat: return selected fields only in flamegraph
And reduce the no. of fields scanned from db
* chore: make array fields required and non nullable
* chore: update openapi specs
* chore: mark all fields in response as required
* refactor: switch to using group by instead of distinct on
Since group by is faster is enough no. of threads are used
* chore: remove service name root level field from flamegraph span
* chore: update openapi specs
* fix: update alias in order by of the query
* chore: remove unnecessary nil check
* fix: set empty array for missing data
* chore: use single line for error creation
* chore: mark response fields as required
* chore: update openapi specs
* chore: add test to verify the flamegraph query sql
* chore: update openapi specs
* chore: use orderbyasc instead of order by
* fix(authn): include base path in SSO callback and error-redirect URLs
The SAML ACS URL and the OIDC/Google redirect URLs were built from the
site URL host plus a hardcoded path (e.g. /api/v1/complete/saml), dropping
the base path. When SigNoz is served under a sub-path (global.external_url
with a path, e.g. https://example.com/signoz), the API is served at
<prefix>/api/v1/complete/<provider>, so the identity provider was told to
call back to a path without the prefix and hit a 404.
Thread global.Config into the SAML/OIDC/Google callback providers and the
session handler, and prepend global.Config.ExternalPath() to the callback
paths and the SSO error redirect to /login. Root deployments are
unchanged since ExternalPath() returns "" without a configured sub-path.
* fix(authn): run callbackauthn suite with base path
* refactor(tests): self-contained base-path fixture for callbackauthn
Move the base-path setup out of the shared create_signoz factory and into
a package-scoped signoz fixture in the callbackauthn suite's own conftest
(same pattern as rootuser/conftest.py). When --base-path is set the fixture
appends SIGNOZ_GLOBAL_EXTERNAL__URL and the url-config prefix locally;
without it it behaves exactly like the global fixture. The shared factory
and docker config are left untouched.
* test(authn): add base-path SSO integration suite
Adds a dedicated `basepath` integration suite that serves SigNoz under a
hardcoded /signoz prefix (SIGNOZ_GLOBAL_EXTERNAL__URL) and exercises the SAML
and OIDC happy-path logins end-to-end. Every SigNoz API call is issued under
the prefix and the IdP callback (ACS / redirect URI) is registered with the
prefix, so the flow only passes when the backend builds prefixed callback URLs.
The shared TestContainerUrlConfig and create_signoz factory are left untouched.
The suite's conftest shadows the same-named auth fixtures (create_user_admin,
get_token, get_session_context, apply_license) with base-path-aware variants and
reuses the Keycloak/browser fixtures, which are not under the base path.
Google SSO is not covered: it requires the real accounts.google.com issuer and
a real Google login, so it cannot run against the local Keycloak IdP; it shares
the identical path.Join(ExternalPath, redirectPath) callback logic that SAML
and OIDC validate.
* revert: drop in-place base-path wiring from integration harness
Removes the --base-path flag, TestContainerUrlConfig.base_path, the idp.py and
02_saml.py .get() changes, and the callbackauthn base-path conftest fixture.
Base-path SSO is now covered by the dedicated `basepath` suite, so the shared
harness (TestContainerUrlConfig, create_signoz, callbackauthn) is back to its
original root-only form.
* refactor(test): remove apply_license fixture
* refactor(test): extract base-path-aware auth factories
Extract the session-context / token / token-pair / admin-registration logic
in fixtures/auth.py into reusable factory functions that take an optional
base_path (token_getter, session_context_getter, tokens_getter, register_admin),
with the fixtures delegating to them. Default base_path="" is byte-identical for
existing callers.
The basepath suite's conftest now reuses these factories with the /signoz prefix
as thin one-line fixture overrides instead of duplicating the request logic.
* refactor(test): give base-path admin registration a distinct cache key
register_admin takes an optional cache_key (default "create_user_admin"); the
basepath suite passes a distinct key so that under --reuse the admin marker
cached against the signoz-base-path container is not restored for (or from)
other suites' default signoz instance.
* feat(billing): migrate BillingUsageGraph from uPlotLib to uPlotV2 and added stacking
* feat(billing): revamp billing page UI to match Settings Revamp designs
* feat(billing): refactor and feedback fixes
* feat(billing): test case fix and css refactor
* feat(billing): css fix
* feat(billing): migrate BillingContainer and BillingUsageGraph to CSS modules
* feat(billing): feedback fixes
* feat: wire available colors on spans instead of aggregations from waterfall api
* feat: integrate aggregation api
* feat: integrate v4 waterfall
* feat: dropdown style fix
* feat: move to open api spec
* feat: move to open api spec
* feat: minor changes
* refactor(sentry-config): disable tracing & ensure correct environment
* refactor(sentry-config): derive environment from build-time env var
Replace the runtime hostname-based getCurrentEnvironment() with a
build-time process.env.ENVIRONMENT value. The environment is injected
once at build time via VITE_ENVIRONMENT, wired through the vite define
block, and consumed directly by Sentry.init.
Staging builds bake in 'staging' and enterprise builds bake in
'production'.
* refactor(sentry-config): keep browserTracingIntegration for transaction tag
Tracing stays disabled (tracesSampleRate: 0), but the integration is
retained so the transaction tag remains available for routing.
Ref: https://github.com/SigNoz/platform-pod/issues/2393#issuecomment-4603658055
* feat(sentry-config): set Sentry release from VITE_VERSION
Set release in Sentry.init from process.env.VERSION (VITE_VERSION, default 'dev') and pin the @sentry/vite-plugin upload release to the same value so sourcemaps resolve. Plumb VITE_VERSION through build-enterprise & build-staging (make info-version) and gor-signoz (tag).
* fix(sentry-config): align Sentry.init indentation and set VITE_ENVIRONMENT for gor-signoz
* fix(sentry-config): require VITE_VERSION for sourcemap upload
Refuse to register the Sentry vite plugin without an explicit VITE_VERSION, and drop the 'dev' fallback for both the plugin release name and process.env.VERSION so a sourcemap upload can never happen without a matching release.
---------
Co-authored-by: grandwizard28 <vibhupandey28@gmail.com>
For a sum type whose variants are keyed by a property (e.g. `kind`), expose the variants via `JSONSchemaOneOf()` and add a discriminator. Without it, code generators intersect the variants (`A & B & C`) instead of producing a clean discriminated union (`A | B | C`).
The parent keeps its `JSONSchemaOneOf()` (the `oneOf` itself) and *additionally* tags it via `PrepareJSONSchema` with the `x-signoz-discriminator` extension; `signoz.attachDiscriminators` then promotes that marker to a real OpenAPI 3 `discriminator` (and strips the duplicate parent properties) after reflection.
```go
// On the parent: expose the oneOf variants...
func(Plugin)JSONSchemaOneOf()[]any{
return[]any{FooVariant{}}
}
// ...and tag that same oneOf with the discriminator marker.
@@ -23,8 +23,6 @@ You are operating within a constrained context window and strict system prompts.
- Always add data-testid or testId (if supported) to critical/behavioral components like inputs, buttons, etc...
- When creating test, these IDs should be used instead of finding by role.
- Never create barrel files.
- When writing new css, prefer CSS Modules
- Use ./docs/css-modules-guide.md as reference on how to write good CSS Modules.
3. FORCED VERIFICATION: Your internal tools mark file writes as successful even if the code does not compile. You are FORBIDDEN from reporting a task as complete until you have:
* Prevents bracket access on CSS module imports that may fail with camelCaseOnly config.
*
* With Vite's `localsConvention: 'camelCaseOnly'`, kebab-case class names are
* converted to camelCase and the original key is NOT exported.
*
* This rule catches patterns like:
* styles['my-class'] // BAD - undefined if CSS has .my-class
* styles['myClass'] // OK but prefer dot notation
* styles.myClass // GOOD
*
* Catches:
* - Bracket access with kebab-case strings (always fails)
* - Bracket access with any string literal (warn - prefer dot notation)
* - Dynamic bracket access (warn - risky)
*/
constCSS_MODULE_IMPORT_NAMES=newSet([
'styles',
'classes',
'css',
'classNames',
]);
functionlooksLikeCssModuleImport(name){
// Common patterns: styles, componentStyles, alertHistoryStyles
return(
CSS_MODULE_IMPORT_NAMES.has(name)||
name.endsWith('Styles')||
name.endsWith('Classes')||
name.endsWith('Css')
);
}
functionisKebabCase(str){
returnstr.includes('-');
}
functionisSnakeCase(str){
returnstr.includes('_');
}
exportdefault{
create(context){
return{
MemberExpression(node){
// Only check bracket notation: styles['...']
if(!node.computed){
return;
}
constobject=node.object;
if(object.type!=='Identifier'){
return;
}
// Check if this looks like a CSS module import
if(!looksLikeCssModuleImport(object.name)){
return;
}
constproperty=node.property;
// Dynamic access: styles[variable]
if(property.type==='Identifier'){
context.report({
node,
message:`Dynamic CSS module access '${object.name}[${property.name}]' is risky. With 'camelCaseOnly' config, kebab-case keys don't exist. Use dot notation or verify the key exists.`,
});
return;
}
// Template literal: styles[\`...\`]
if(property.type==='TemplateLiteral'){
context.report({
node,
message:`Template literal CSS module access is risky. With 'camelCaseOnly' config, kebab-case keys don't exist. Prefer dot notation.`,
});
return;
}
// Numeric / boolean / null literal: styles[0]. Not a class lookup; ignore.
message:`CSS module class '${className}' uses kebab-case which won't work with 'camelCaseOnly' config. Use '${object.name}.${toCamelCase(className)}' instead.`,
});
return;
}
// Snake_case is suspicious
if(isSnakeCase(className)){
context.report({
node,
message:`CSS module class '${className}' uses snake_case which may not work as expected. Prefer camelCase: '${object.name}.${toCamelCase(className)}'.`,
});
return;
}
// Valid camelCase but using bracket notation - prefer dot
if(/^[a-z][a-zA-Z0-9]*$/.test(className)){
context.report({
node,
message:`Prefer dot notation: '${object.name}.${className}' instead of '${object.name}['${className}']'.`,
message:`Dynamic CSS module access on '${object.name}' is risky. With 'camelCaseOnly' config, kebab-case keys don't exist. Use dot notation or verify each key resolves to an exported camelCase class.`,
replaysSessionSampleRate: 0.1,// This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.
replaysOnErrorSampleRate: 1.0,// If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.
* Returns a page of v2-shape dashboards for the org. This is the pure, user-independent list — it carries no pin state. Use ListDashboardsForUserV2 for the personalized, pin-aware list. Supports a filter DSL (`query`), sort (`updated_at`/`created_at`/`name`), order (`asc`/`desc`), and offset-based pagination (`limit`/`offset`).
* Same as ListDashboardsV2 but personalized for the calling user: each dashboard carries the caller's `pinned` state, and pinned dashboards float to the top of the requested ordering. Supports the same filter DSL, sort, order, and pagination.
* @summary List dashboards for the current user (v2)
* Pins the dashboard for the calling user. A user can pin at most 10 dashboards; pinning when at the limit returns 409. Re-pinning an already-pinned dashboard is a no-op success.
* @summary Pin a dashboard for the current user (v2)
* Returns the waterfall view of spans including all spans if total spans are under a limit, a max count otherwise. Aggregations are dropped compared to v3
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.