Compare commits

..

3 Commits

Author SHA1 Message Date
Ashwin Bhatkal
ade26dcae5 refactor(home): drop the custom request for firing alert rules 2026-11-10 15:58:20 +05:30
Ashwin Bhatkal
b8e7d02b4b Merge remote-tracking branch 'origin/main' into fix/generated-api-repeated-array-params 2026-11-10 15:56:52 +05:30
Ashwin Bhatkal
d7ef3b0a67 fix(api): send array query params as repeated keys 2026-11-06 22:27:11 +05:30
56 changed files with 218 additions and 268 deletions

View File

@@ -11,6 +11,8 @@ import axios, { AxiosError, AxiosRequestConfig } from 'axios';
// generated API Instance
const generatedAPIAxiosInstance = axios.create({
baseURL: ENVIRONMENT.baseURL,
// The backend binds repeated keys (`states=a&states=b`); axios' default sends `states[]=`.
paramsSerializer: { indexes: null },
});
let generatedAPIQueryKeyHeaderContext: Record<string, unknown> | undefined;

View File

@@ -1,12 +1,10 @@
import { useMemo } from 'react';
import { useListRulesV3 } from 'api/generated/services/rules';
import {
type ListRulesV3200,
type ListRulesV3Params,
RuletypesAlertStateDTO,
type RuletypesListableRuleDTO,
} from 'api/generated/services/sigNoz.schemas';
import { GeneratedAPIInstance } from 'api/generatedAPIInstance';
const HOME_ALERT_RULES_LIMIT = 5;
@@ -23,18 +21,7 @@ interface HomeAlertRules {
export function useHomeAlertRules(): HomeAlertRules {
const firing = useListRulesV3(FIRING_RULES_PARAMS, {
query: {
cacheTime: 0,
// The backend binds repeated `states=` keys; axios' default sends `states[]=`.
queryFn: ({ signal }) =>
GeneratedAPIInstance<ListRulesV3200>({
url: '/api/v3/rules',
method: 'GET',
params: FIRING_RULES_PARAMS,
paramsSerializer: { indexes: null },
signal,
}),
},
query: { cacheTime: 0 },
});
const firingRules = firing.data?.data.rules;
const latest = useListRulesV3(

View File

@@ -3,13 +3,11 @@ import logEvent from 'api/common/logEvent';
import { convertToApiError } from 'api/ErrorResponseHandlerForGeneratedAPIs';
import { useListRulesV3 } from 'api/generated/services/rules';
import type {
ListRulesV3200,
ListRulesV3Params,
RenderErrorResponseDTO,
RuletypesLabelPairDTO,
} from 'api/generated/services/sigNoz.schemas';
import type { AxiosError } from 'axios';
import { GeneratedAPIInstance } from 'api/generatedAPIInstance';
import { isUndefined } from 'lodash-es';
import type { AlertRule } from './types';
@@ -35,18 +33,7 @@ export function useAlertRulesData(
const hasLoggedEvent = useRef(false);
const rulesResponse = useListRulesV3(params, {
query: {
keepPreviousData: true,
// The backend binds repeated `states=` keys; axios' default sends `states[]=`.
queryFn: ({ signal }) =>
GeneratedAPIInstance<ListRulesV3200>({
url: '/api/v3/rules',
method: 'GET',
params,
paramsSerializer: { indexes: null },
signal,
}),
},
query: { keepPreviousData: true },
});
const rules = useMemo(

View File

@@ -173,7 +173,7 @@ def make_query_request(
end_ms: int,
queries: list[dict],
*,
request_type: str,
request_type: str = RequestType.TIME_SERIES,
format_options: dict | None = None,
variables: dict | None = None,
no_cache: bool = True,
@@ -209,7 +209,7 @@ def make_preview_query_request(
end_ms: int,
queries: list[dict],
*,
request_type: str,
request_type: str = RequestType.TIME_SERIES,
format_options: dict | None = None,
variables: dict | None = None,
verbose: bool = True,
@@ -282,7 +282,6 @@ def query_metric_values( # pylint: disable=too-many-arguments,too-many-position
start_ms=start_epoch * 1000,
end_ms=end_epoch * 1000,
queries=[build_builder_query("A", metric_name, time_agg, space_agg, step_interval=step_interval)],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK, response.text
return sorted(get_series_values(response.json(), "A"), key=lambda v: v["timestamp"])
@@ -680,7 +679,7 @@ def assert_raw_row_subset(
assert expected.items() <= data.items(), f"expected subset {expected}, got data {data}"
def build_aggregation_query(
def build_scalar_query(
name: str,
signal: str,
aggregations: list[dict],
@@ -769,7 +768,7 @@ def build_heatmap_query(
return {"type": "builder_query", "spec": spec}
def build_traces_aggregation_query(
def build_traces_scalar_query(
aggregations: list[dict],
*,
name: str = "A",
@@ -782,7 +781,8 @@ def build_traces_aggregation_query(
disabled: bool = False,
functions: list[dict] | None = None,
) -> dict:
return build_aggregation_query(
"""build_scalar_query pinned to the traces signal, with name defaulting to 'A'."""
return build_scalar_query(
name=name,
signal="traces",
aggregations=aggregations,
@@ -1321,7 +1321,7 @@ def run_query_case(signoz: types.SigNoz, token: str, now: datetime, case: dict[s
aggregations = aggregation
else:
aggregations = []
query = build_aggregation_query(
query = build_scalar_query(
name=case["name"],
signal="logs",
aggregations=aggregations,

View File

@@ -10,8 +10,8 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.querier import (
BuilderQuery,
build_aggregation,
build_aggregation_query,
build_order_by,
build_scalar_query,
make_query_request,
)
@@ -361,7 +361,7 @@ def test_audit_scalar_count_failures(
start_ms=int((now - timedelta(seconds=30)).timestamp() * 1000),
end_ms=int(now.timestamp() * 1000),
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="logs",
source="audit",

View File

@@ -6,7 +6,6 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metricreduction import build_recent_gauge_data
from fixtures.querier import (
RequestType,
aligned_epoch,
build_builder_query,
get_all_series,
@@ -60,7 +59,6 @@ def test_recent_queries_group_by_full_labels(
start_ms=base_epoch * 1000,
end_ms=(base_epoch + MINUTES * 60) * 1000,
queries=[build_builder_query("A", metric_name, "sum", "sum", step_interval=300, group_by=["service"])],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK, response.text

View File

@@ -8,7 +8,7 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.promqltestcorpus import ingest_promqltest_corpus
from fixtures.querier import RequestType, get_all_series, make_query_request
from fixtures.querier import get_all_series, make_query_request
TESTDATA_DIR = os.path.join(os.path.dirname(__file__), "..", "..", "testdata")
# The corpus (see fixtures/promqltestcorpus.py) is frozen from Prometheus' own
@@ -57,7 +57,7 @@ def test_upstream_promqltest_corpus(
}
case_id = f"{case['source']}[{case['variant']}]"
response = make_query_request(signoz, token, req_start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, req_start_ms, end_ms, [query])
if response.status_code != HTTPStatus.OK:
failures.append(f"{case_id}: HTTP {response.status_code} for {case['expr']!r}: {response.text[:200]}")
continue

View File

@@ -5,7 +5,7 @@ from http import HTTPStatus
from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import RequestType, get_all_series, make_query_request
from fixtures.querier import get_all_series, make_query_request
METRIC = "probe_requests"
EVOLVED_METRIC = "probe_schema_evolution"
@@ -74,7 +74,7 @@ def test_identical_labelsets_merge_and_grouping(
def run(promql: str, start_ms: int, end_ms: int) -> list[tuple[dict, list]]:
q = {"type": "promql", "spec": {"name": "A", "query": promql, "step": 60, "skipStepAlignment": True}}
resp = make_query_request(signoz, token, start_ms, end_ms, [q], request_type=RequestType.TIME_SERIES)
resp = make_query_request(signoz, token, start_ms, end_ms, [q])
assert resp.status_code == HTTPStatus.OK, f"{promql!r}: {resp.text[:300]}"
out = []
for series in get_all_series(resp.json(), "A") or []:

View File

@@ -6,7 +6,7 @@ from uuid import uuid4
from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import RequestType, get_all_series, make_query_request
from fixtures.querier import get_all_series, make_query_request
HOUR_MS = 3_600_000
SAMPLE_INTERVAL_MS = 60_000
@@ -40,7 +40,7 @@ def test_promql_ratio_with_zero_denominator_is_dropped_and_cached(
def run() -> tuple[dict[str, dict[int, object]], int]:
query = {"type": "promql", "spec": {"name": "A", "query": promql}}
response = make_query_request(signoz, token, start_ms, end_ms, [query], no_cache=False, request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query], no_cache=False)
assert response.status_code == HTTPStatus.OK, response.text[:300]
body = response.json()
out: dict[str, dict[int, object]] = {}

View File

@@ -6,7 +6,7 @@ from uuid import uuid4
from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import RequestType, get_all_series, make_query_request
from fixtures.querier import get_all_series, make_query_request
MINUTE_MS = 60_000
@@ -41,7 +41,7 @@ def test_promql_subquery_without_step_evaluates(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = {"type": "promql", "spec": {"name": "A", "query": f"max_over_time({metric}[5m:])", "skipStepAlignment": True}}
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK, response.text[:300]
series = get_all_series(response.json(), "A")
assert series, "the subquery must return the inserted series"
@@ -55,6 +55,5 @@ def test_promql_subquery_without_step_evaluates(
start_ms,
end_ms,
[{"type": "promql", "spec": {"name": "A", "query": metric, "skipStepAlignment": True}}],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK, response.text[:300]

View File

@@ -8,7 +8,7 @@ import requests
from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import RequestType, get_all_series, make_query_request
from fixtures.querier import get_all_series, make_query_request
MINUTE_MS = 60_000
QUERY_TIMEOUT = 30
@@ -73,7 +73,7 @@ def test_or_arms_merge_under_subquery_name_drop(
# query_range over the same grid must agree point for point.
spec = {"name": "A", "query": query, "step": 300, "skipStepAlignment": True}
response = make_query_request(signoz, token, start_ms, end_ms, [{"type": "promql", "spec": spec}], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [{"type": "promql", "spec": spec}])
assert response.status_code == HTTPStatus.OK, response.text[:300]
series = get_all_series(response.json(), "A")
assert len(series) == 1, f"both or arms must merge into one series: {series}"

View File

@@ -7,10 +7,10 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.logs import Logs
from fixtures.querier import (
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_order_by,
build_raw_query,
build_scalar_query,
get_rows,
get_scalar_table_data,
make_query_request,
@@ -136,7 +136,7 @@ def test_non_body_filter_groupby_aggregation(
step_interval=60,
)
else:
query = build_aggregation_query(
query = build_scalar_query(
name=case["name"],
signal="logs",
aggregations=[build_aggregation(case["aggregation"])],
@@ -233,7 +233,7 @@ def test_non_body_orderby(
step_interval=60,
)
else:
query = build_aggregation_query(
query = build_scalar_query(
name=case["name"],
signal="logs",
aggregations=[build_aggregation(case["aggregation"])],

View File

@@ -12,9 +12,9 @@ from fixtures.logs import Logs
from fixtures.querier import (
RequestType,
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_raw_query,
build_scalar_query,
get_rows,
get_scalar_table_data,
make_query_request,
@@ -68,7 +68,7 @@ def test_json_body_unknown_key_collision_groupby(
token,
now,
[
build_aggregation_query(
build_scalar_query(
"A",
"logs",
[build_aggregation("count()")],
@@ -175,7 +175,7 @@ def test_json_body_unknown_key_attribute_parity(
token,
now,
[
build_aggregation_query(
build_scalar_query(
"A",
"logs",
[build_aggregation("count()")],
@@ -225,7 +225,7 @@ def test_json_body_unknown_key_aggregation_over_body(
token,
now,
[
build_aggregation_query(
build_scalar_query(
"A",
"logs",
[build_aggregation("count(field)", "cnt"), build_aggregation("count_distinct(field)", "distinct")],
@@ -291,7 +291,7 @@ def test_json_body_unknown_key_body_path_parity(
token,
now,
[
build_aggregation_query(
build_scalar_query(
"A",
"logs",
[build_aggregation("count()")],
@@ -308,7 +308,7 @@ def test_json_body_unknown_key_body_path_parity(
token,
now,
[
build_aggregation_query(
build_scalar_query(
"A",
"logs",
[build_aggregation(f"count_distinct({field})")],

View File

@@ -8,7 +8,7 @@ import pytest
from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.logs import Logs
from fixtures.querier import build_aggregation, build_aggregation_query, build_raw_query, get_rows, get_scalar_table_data, make_query_request
from fixtures.querier import build_aggregation, build_raw_query, build_scalar_query, get_rows, get_scalar_table_data, make_query_request
SERVICE = "quoting-json-svc"
@@ -55,7 +55,7 @@ def test_body_json_group_by_and_select_hostile_key(
token,
start_ms,
end_ms,
[build_aggregation_query("A", "logs", [build_aggregation("count()")], group_by=[field], order=[{"key": {"name": key}, "direction": "asc"}], filter_expression=f"service.name = '{SERVICE}'")],
[build_scalar_query("A", "logs", [build_aggregation("count()")], group_by=[field], order=[{"key": {"name": key}, "direction": "asc"}], filter_expression=f"service.name = '{SERVICE}'")],
request_type="scalar",
)
assert response.status_code == HTTPStatus.OK, response.text

View File

@@ -118,7 +118,7 @@ INVALID_REGEXP = "write the pattern in RE2 syntax, which has no lookaround or ba
id="regexp_in_sql",
),
pytest.param(
querier.build_aggregation_query("A", "logs", [querier.build_aggregation("count()")], filter_expression="body REGEXP '(?=a)'"),
querier.build_scalar_query("A", "logs", [querier.build_aggregation("count()")], filter_expression="body REGEXP '(?=a)'"),
"invalid_regexp",
INVALID_REGEXP,
id="regexp_in_filter",

View File

@@ -195,7 +195,6 @@ def test_metrics_negative_operators_include_keyless_series(
filter_expression=expression,
)
],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK, response.text

View File

@@ -9,11 +9,10 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.logs import Logs
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_aggregation,
build_aggregation_query,
build_builder_query,
build_raw_query,
build_scalar_query,
get_all_series,
get_rows,
get_scalar_table_data,
@@ -67,7 +66,7 @@ def test_logs_group_by_order_by_and_select_hostile_attribute(
token,
start_ms,
end_ms,
[build_aggregation_query("A", "logs", [build_aggregation("count()")], group_by=[field], filter_expression=f"service.name = '{SERVICE}'")],
[build_scalar_query("A", "logs", [build_aggregation("count()")], group_by=[field], filter_expression=f"service.name = '{SERVICE}'")],
request_type="scalar",
)
assert response.status_code == HTTPStatus.OK, response.text
@@ -79,7 +78,7 @@ def test_logs_group_by_order_by_and_select_hostile_attribute(
token,
start_ms,
end_ms,
[build_aggregation_query("A", "logs", [build_aggregation("count()")], group_by=[field], order=[{"key": {"name": key}, "direction": "asc"}], filter_expression=f"service.name = '{SERVICE}'")],
[build_scalar_query("A", "logs", [build_aggregation("count()")], group_by=[field], order=[{"key": {"name": key}, "direction": "asc"}], filter_expression=f"service.name = '{SERVICE}'")],
request_type="scalar",
)
assert response.status_code == HTTPStatus.OK, response.text
@@ -171,7 +170,7 @@ def test_logs_aggregation_with_dollar_in_key(
token,
start_ms,
end_ms,
[build_aggregation_query("A", "logs", [build_aggregation(expression)], filter_expression=f"service.name = '{SERVICE}'")],
[build_scalar_query("A", "logs", [build_aggregation(expression)], filter_expression=f"service.name = '{SERVICE}'")],
request_type="scalar",
)
assert response.status_code == HTTPStatus.OK, f"{expression}: {response.text}"
@@ -202,7 +201,7 @@ def test_logs_group_by_hostile_resource_attribute(
token,
int((now - timedelta(minutes=2)).timestamp() * 1000),
int((now + timedelta(seconds=1)).timestamp() * 1000),
[build_aggregation_query("A", "logs", [build_aggregation("count()")], group_by=[{"name": key, "fieldContext": "resource", "fieldDataType": "string"}], filter_expression=f"service.name = '{SERVICE}'")],
[build_scalar_query("A", "logs", [build_aggregation("count()")], group_by=[{"name": key, "fieldContext": "resource", "fieldDataType": "string"}], filter_expression=f"service.name = '{SERVICE}'")],
request_type="scalar",
)
assert response.status_code == HTTPStatus.OK, response.text
@@ -237,7 +236,7 @@ def test_traces_group_by_and_select_hostile_attribute(
token,
start_ms,
end_ms,
[build_aggregation_query("A", "traces", [build_aggregation("count()")], group_by=[field], filter_expression=f"service.name = '{SERVICE}'")],
[build_scalar_query("A", "traces", [build_aggregation("count()")], group_by=[field], filter_expression=f"service.name = '{SERVICE}'")],
request_type="scalar",
)
assert response.status_code == HTTPStatus.OK, response.text
@@ -275,7 +274,6 @@ def test_metrics_group_by_hostile_label(
int((now - timedelta(minutes=5)).timestamp() * 1000),
int((now + timedelta(minutes=1)).timestamp() * 1000),
[build_builder_query("A", metric, "avg", "avg", group_by=[label])],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK, response.text
labels = {tuple(sorted((entry["key"]["name"], entry["value"]) for entry in item.get("labels", []))) for item in get_all_series(response.json(), "A")}

View File

@@ -12,7 +12,6 @@ from fixtures.querier import (
Aggregation,
BuilderQuery,
MetricAggregation,
RequestType,
get_all_warnings,
get_error_message,
get_series_values,
@@ -48,7 +47,6 @@ def test_time_range_rejected(
start_ms=start_ms,
end_ms=end_ms,
queries=[BuilderQuery(signal="logs", aggregations=[Aggregation(expression="count()")], step_interval=60).to_dict()],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.BAD_REQUEST
@@ -81,7 +79,6 @@ def test_two_year_logs_timeseries_step_clamped(
).to_dict()
],
format_options={"formatTableResultForUI": False, "fillGaps": True},
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK
@@ -120,7 +117,6 @@ def test_two_year_traces_timeseries_step_clamped(
).to_dict()
],
format_options={"formatTableResultForUI": False, "fillGaps": True},
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK
@@ -159,7 +155,6 @@ def test_two_year_metrics_timeseries_step_clamped(
).to_dict()
],
format_options={"formatTableResultForUI": False, "fillGaps": True},
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK

View File

@@ -7,11 +7,10 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.logs import Logs
from fixtures.querier import (
RequestType,
build_aggregation,
build_aggregation_query,
build_function,
build_group_by_field,
build_scalar_query,
get_all_series,
index_series_by_label,
make_query_request,
@@ -59,7 +58,7 @@ def test_time_shift_partial_hit_matches_no_cache(
]
)
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],
@@ -72,11 +71,11 @@ def test_time_shift_partial_hit_matches_no_cache(
first_end_ms = int((now - 30 * MINUTE).timestamp() * 1000)
second_end_ms = int((now - 10 * MINUTE).timestamp() * 1000)
warm = make_query_request(signoz, token, start_ms, first_end_ms, [query], no_cache=False, request_type=RequestType.TIME_SERIES)
warm = make_query_request(signoz, token, start_ms, first_end_ms, [query], no_cache=False)
assert warm.status_code == HTTPStatus.OK, warm.text
cached = make_query_request(signoz, token, start_ms, second_end_ms, [query], no_cache=False, request_type=RequestType.TIME_SERIES)
cached = make_query_request(signoz, token, start_ms, second_end_ms, [query], no_cache=False)
assert cached.status_code == HTTPStatus.OK, cached.text
fresh = make_query_request(signoz, token, start_ms, second_end_ms, [query], no_cache=True, request_type=RequestType.TIME_SERIES)
fresh = make_query_request(signoz, token, start_ms, second_end_ms, [query], no_cache=True)
assert fresh.status_code == HTTPStatus.OK, fresh.text
fresh_points = {service: {point["timestamp"]: point["value"] for point in series["values"]} for service, series in index_series_by_label(get_all_series(fresh.json(), "A"), "service.name").items()}

View File

@@ -7,11 +7,10 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.logs import Logs
from fixtures.querier import (
RequestType,
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_order_by,
build_scalar_query,
get_all_series,
index_series_by_label,
make_query_request,
@@ -49,7 +48,7 @@ def test_limited_group_by_partial_hit_matches_no_cache(
]
)
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],
@@ -63,11 +62,11 @@ def test_limited_group_by_partial_hit_matches_no_cache(
head_end_ms = int((head_start + 20 * MINUTE).timestamp() * 1000)
tail_end_ms = int((head_start + 40 * MINUTE).timestamp() * 1000)
warm = make_query_request(signoz, token, head_start_ms, head_end_ms, [query], no_cache=False, request_type=RequestType.TIME_SERIES)
warm = make_query_request(signoz, token, head_start_ms, head_end_ms, [query], no_cache=False)
assert warm.status_code == HTTPStatus.OK, warm.text
cached = make_query_request(signoz, token, head_start_ms, tail_end_ms, [query], no_cache=False, request_type=RequestType.TIME_SERIES)
cached = make_query_request(signoz, token, head_start_ms, tail_end_ms, [query], no_cache=False)
assert cached.status_code == HTTPStatus.OK, cached.text
fresh = make_query_request(signoz, token, head_start_ms, tail_end_ms, [query], no_cache=True, request_type=RequestType.TIME_SERIES)
fresh = make_query_request(signoz, token, head_start_ms, tail_end_ms, [query], no_cache=True)
assert fresh.status_code == HTTPStatus.OK, fresh.text
fresh_points = {service: {point["timestamp"]: point["value"] for point in series["values"]} for service, series in index_series_by_label(get_all_series(fresh.json(), "A"), "service.name").items()}
@@ -107,7 +106,7 @@ def test_limited_group_by_shrunk_window_matches_no_cache(
]
)
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],
@@ -121,11 +120,11 @@ def test_limited_group_by_shrunk_window_matches_no_cache(
middle_ms = int((start + 5 * MINUTE).timestamp() * 1000)
end_ms = int((start + 10 * MINUTE).timestamp() * 1000)
warm = make_query_request(signoz, token, start_ms, end_ms, [query], no_cache=False, request_type=RequestType.TIME_SERIES)
warm = make_query_request(signoz, token, start_ms, end_ms, [query], no_cache=False)
assert warm.status_code == HTTPStatus.OK, warm.text
cached = make_query_request(signoz, token, middle_ms, end_ms, [query], no_cache=False, request_type=RequestType.TIME_SERIES)
cached = make_query_request(signoz, token, middle_ms, end_ms, [query], no_cache=False)
assert cached.status_code == HTTPStatus.OK, cached.text
fresh = make_query_request(signoz, token, middle_ms, end_ms, [query], no_cache=True, request_type=RequestType.TIME_SERIES)
fresh = make_query_request(signoz, token, middle_ms, end_ms, [query], no_cache=True)
assert fresh.status_code == HTTPStatus.OK, fresh.text
fresh_points = {service: {point["timestamp"]: point["value"] for point in series["values"]} for service, series in index_series_by_label(get_all_series(fresh.json(), "A"), "service.name").items()}

View File

@@ -9,10 +9,10 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.logs import Logs
from fixtures.querier import (
build_aggregation,
build_aggregation_query,
build_formula_query,
build_group_by_field,
build_order_by,
build_scalar_query,
find_named_result,
get_all_series,
get_error_message,
@@ -101,7 +101,7 @@ def test_logs_formula_orderby_and_limit(
end_ms=int(now.timestamp() * 1000),
request_type="scalar",
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],
@@ -109,7 +109,7 @@ def test_logs_formula_orderby_and_limit(
filter_expression="severity_text = 'ERROR'",
disabled=True,
),
build_aggregation_query(
build_scalar_query(
name="B",
signal="logs",
aggregations=[build_aggregation("count()")],
@@ -240,8 +240,8 @@ def test_logs_formula_having_time_series_matches_query_having(
end_ms=int(now.timestamp() * 1000),
request_type="time_series",
queries=[
build_aggregation_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], group_by=group_by, disabled=True),
build_aggregation_query(name="B", signal="logs", aggregations=[build_aggregation("count()")], group_by=group_by, having_expression=query_having),
build_scalar_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], group_by=group_by, disabled=True),
build_scalar_query(name="B", signal="logs", aggregations=[build_aggregation("count()")], group_by=group_by, having_expression=query_having),
build_formula_query("F1", "A", having_expression=formula_having),
],
)
@@ -290,8 +290,8 @@ def test_logs_formula_having_scalar_matches_query_having(
end_ms=int(now.timestamp() * 1000),
request_type="scalar",
queries=[
build_aggregation_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], group_by=group_by, disabled=True),
build_aggregation_query(name="B", signal="logs", aggregations=[build_aggregation("count()")], group_by=group_by, having_expression=query_having),
build_scalar_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], group_by=group_by, disabled=True),
build_scalar_query(name="B", signal="logs", aggregations=[build_aggregation("count()")], group_by=group_by, having_expression=query_having),
build_formula_query("F1", "A", having_expression=formula_having),
],
)
@@ -325,7 +325,7 @@ def test_logs_formula_having_invalid_reference(
end_ms=int(now.timestamp() * 1000),
request_type="time_series",
queries=[
build_aggregation_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], disabled=True),
build_scalar_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], disabled=True),
build_formula_query("F1", "A", having_expression="count() > 0"),
],
)

View File

@@ -10,9 +10,9 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.logs import Logs
from fixtures.querier import (
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_order_by,
build_scalar_query,
get_scalar_table_data,
make_scalar_query_request,
)
@@ -72,7 +72,7 @@ def test_logs_aggregate_functions(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[
@@ -165,7 +165,7 @@ def test_logs_aggregate_if_predicates_use_filter_syntax(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[
@@ -240,7 +240,7 @@ def test_logs_aggregate_arguments_are_field_names(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[
@@ -288,7 +288,7 @@ def test_logs_aggregate_invalid_expression_is_bad_request(
now = datetime.now(tz=UTC).replace(second=0, microsecond=0)
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(name="A", signal="logs", aggregations=[build_aggregation(expression)])
query = build_scalar_query(name="A", signal="logs", aggregations=[build_aggregation(expression)])
response = make_scalar_query_request(signoz, token, now, [query])
assert response.status_code == HTTPStatus.BAD_REQUEST, response.text
@@ -335,7 +335,7 @@ def test_logs_aggregate_having(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation(expr) for expr in aggregations],

View File

@@ -10,9 +10,9 @@ from fixtures.logs import Logs
from fixtures.querier import (
RequestType,
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_order_by,
build_scalar_query,
get_all_series,
get_scalar_table_data,
index_series_by_label,
@@ -64,7 +64,7 @@ def test_logs_aggregate_min_max(
end_ms=int((now + timedelta(seconds=5)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="logs",
aggregations=[
@@ -135,7 +135,7 @@ def test_logs_aggregate_time_series_limit(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],
@@ -187,7 +187,7 @@ def test_logs_aggregate_multi_group_by(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],

View File

@@ -10,9 +10,9 @@ from fixtures.logs import Logs
from fixtures.querier import (
RequestType,
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_raw_query,
build_scalar_query,
get_rows,
get_scalar_table_data,
make_query_request,
@@ -92,7 +92,7 @@ def test_logs_unknown_key_collision_groupby_parity(
token,
now,
[
build_aggregation_query(
build_scalar_query(
"A",
"logs",
[build_aggregation("count()")],
@@ -210,7 +210,7 @@ def test_logs_unknown_key_collision_aggregation_parity(
token,
now,
[
build_aggregation_query(
build_scalar_query(
"A",
"logs",
[build_aggregation(f"count({key})", "cnt"), build_aggregation(f"count_distinct({key})", "distinct")],

View File

@@ -11,12 +11,12 @@ from fixtures.querier import (
RequestType,
assert_distribution_sums_heatmap,
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_heatmap_query,
build_linear_bucket_options,
build_log_bucket_options,
build_order_by,
build_scalar_query,
get_all_series,
get_buckets,
get_error_message,
@@ -200,7 +200,7 @@ def test_heatmap_rejections(
token,
int((now - timedelta(minutes=5)).timestamp() * 1000),
int(now.timestamp() * 1000),
[build_aggregation_query("A", "logs", aggregations)],
[build_scalar_query("A", "logs", aggregations)],
request_type=RequestType.HEATMAP,
)
assert response.status_code == HTTPStatus.BAD_REQUEST, response.text

View File

@@ -7,7 +7,6 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.fs import get_testdata_file_path
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_builder_query,
get_all_warnings,
make_query_request,
@@ -51,12 +50,12 @@ def test_histogram_p90_returns_warning_outside_data_window(
end_ms = int(now.timestamp() * 1000)
start_4h = int((now - timedelta(hours=4)).timestamp() * 1000)
response = make_query_request(signoz, token, start_4h, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_4h, end_ms, [query])
assert response.status_code == HTTPStatus.OK
assert response.json()["status"] == "success"
start_15m = int((now - timedelta(minutes=15)).timestamp() * 1000)
response = make_query_request(signoz, token, start_15m, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_15m, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
warnings = get_all_warnings(data)
@@ -84,7 +83,7 @@ def test_non_existent_metrics_returns_warning(
end_ms = int(now.timestamp() * 1000)
start_2h = int((now - timedelta(hours=2)).timestamp() * 1000)
response = make_query_request(signoz, token, start_2h, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_2h, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -112,7 +111,7 @@ def test_non_existent_internal_metrics_returns_no_warning(
end_ms = int(now.timestamp() * 1000)
start_2h = int((now - timedelta(hours=2)).timestamp() * 1000)
response = make_query_request(signoz, token, start_2h, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_2h, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
assert get_all_warnings(data) == []
@@ -173,7 +172,6 @@ def test_variable_in_filter_returns_no_warning(
end_ms,
[query],
variables={"tag": {"type": "query", "value": "service-a"}},
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK

View File

@@ -9,7 +9,6 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.fs import get_testdata_file_path
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_builder_query,
get_all_series,
get_series_values,
@@ -76,7 +75,7 @@ def test_histogram_count_for_one_endpoint(
filter_expression='endpoint = "/health"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -143,7 +142,7 @@ def test_histogram_count_for_one_service(
filter_expression='service = "api"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -213,7 +212,7 @@ def test_histogram_count_for_delta_service(
filter_expression='service = "web"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -272,7 +271,7 @@ def test_histogram_count_for_all_services(
## no services filter, this tests for multitemporality handling as well
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -309,7 +308,7 @@ def test_histogram_count_no_param(
"count",
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -395,7 +394,7 @@ def test_histogram_percentile_for_all_services(
space_agg,
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -446,7 +445,7 @@ def test_histogram_percentile_for_cumulative_service(
filter_expression='service = "api"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -501,7 +500,6 @@ def test_histogram_percentile_with_a_gap_in_one_bucket(
start_ms,
end_ms,
[build_builder_query("A", metric_name, "doesnotreallymatter", "p50")],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK, response.text
@@ -550,7 +548,7 @@ def test_histogram_percentile_for_delta_service(
filter_expression='service = "web"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -592,7 +590,6 @@ def test_histogram_percentile_explicit_le_group_by(
build_builder_query("A", metric_name, "doesnotreallymatter", "p95", group_by=["le", "service"]),
build_builder_query("B", metric_name, "doesnotreallymatter", "p95", group_by=["service"]),
],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK, response.text

View File

@@ -10,7 +10,6 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.fs import get_testdata_file_path
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_builder_query,
get_all_series,
get_series_values,
@@ -60,7 +59,7 @@ def test_with_steady_values_and_reset(
filter_expression='endpoint = "/orders"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -119,7 +118,7 @@ def test_group_by_endpoint(
group_by=["endpoint"],
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -243,7 +242,7 @@ def test_for_service_with_switch(
filter_expression='service = "api"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -295,7 +294,7 @@ def test_for_week_long_time_range(
"sum",
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
result_values = sorted(get_series_values(data, "A"), key=lambda x: x["timestamp"])
@@ -339,7 +338,7 @@ def test_for_month_long_time_range(
"sum",
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
result_values = sorted(get_series_values(data, "A"), key=lambda x: x["timestamp"])

View File

@@ -9,7 +9,6 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.fs import get_testdata_file_path
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_builder_query,
get_series_values,
make_query_request,
@@ -73,7 +72,7 @@ def test_for_one_service(
filter_expression=f'service = "{service}"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -129,7 +128,7 @@ def test_for_multiple_aggregations(
space_agg,
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()

View File

@@ -8,7 +8,6 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_builder_query,
get_all_series,
get_series_values,
@@ -47,7 +46,7 @@ def test_rate_with_steady_values_and_reset(
filter_expression='endpoint = "/orders"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -91,7 +90,7 @@ def test_rate_group_by_endpoint(
group_by=["endpoint"],
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()

View File

@@ -8,7 +8,6 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_builder_query,
get_all_series,
get_series_values,
@@ -46,7 +45,7 @@ def test_rate_with_steady_values_and_reset(
filter_expression='endpoint = "/orders"',
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()
@@ -88,7 +87,7 @@ def test_rate_group_by_endpoint(
group_by=["endpoint"],
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()

View File

@@ -8,7 +8,6 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.meter import MeterSample, make_meter_samples
from fixtures.querier import (
RequestType,
build_builder_query,
get_series_values,
make_query_request,
@@ -50,7 +49,7 @@ def test_query_range_cost_meter(
temporality="delta",
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK
data = response.json()

View File

@@ -45,7 +45,7 @@ def test_metrics_group_by_context_collapse(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="metrics",
aggregations=[querier.build_metrics_aggregation(METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -93,7 +93,7 @@ def test_metrics_filter_label_context(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="metrics",
aggregations=[querier.build_metrics_aggregation(METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -113,7 +113,7 @@ def test_metrics_filter_label_context(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="metrics",
aggregations=[querier.build_metrics_aggregation(METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -154,7 +154,7 @@ def test_metrics_group_by_unknown_label(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="metrics",
aggregations=[querier.build_metrics_aggregation(METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -199,7 +199,7 @@ def test_metrics_filter_unknown_label_matches_nothing(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="metrics",
aggregations=[querier.build_metrics_aggregation(METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -245,7 +245,7 @@ def test_metrics_full_text_filter_does_not_error(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="metrics",
aggregations=[querier.build_metrics_aggregation(METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -290,7 +290,7 @@ def test_metrics_group_by_label_named_value(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="metrics",
aggregations=[querier.build_metrics_aggregation(METRIC, "latest", "sum", "unspecified", reduce_to="last")],

View File

@@ -7,7 +7,7 @@ import pytest
from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import RequestType, build_builder_query, get_series_values, make_query_request
from fixtures.querier import build_builder_query, get_series_values, make_query_request
# A delta, non-monotonic Sum queried without an explicit type must be treated as
@@ -53,7 +53,7 @@ def test_delta_nonmonotonic_sum_is_treated_as_sum(
# No type and no temporality: the server resolves both from the seeded series.
query = build_builder_query("A", metric_name, time_aggregation, "sum")
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK, response.text
values = get_series_values(response.json(), "A")

View File

@@ -52,7 +52,7 @@ def test_metrics_filter_bool_label(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="metrics",
aggregations=[querier.build_metrics_aggregation(METRIC, "latest", "sum", "unspecified", reduce_to="last")],

View File

@@ -8,7 +8,6 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import ExpHistogramMetrics
from fixtures.querier import (
RequestType,
build_builder_query,
get_all_series,
get_all_warnings,
@@ -75,7 +74,7 @@ def test_exp_histogram_percentile_delta_grouped(
group_by=["service.name"],
)
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK, response.text
data = response.json()
@@ -124,7 +123,7 @@ def test_exp_histogram_percentile_delta_merges_across_series(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_builder_query("A", metric_name, "", "p95", temporality="delta")
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
assert response.status_code == HTTPStatus.OK, response.text
data = response.json()
@@ -165,7 +164,7 @@ def test_exp_histogram_percentile_cumulative_is_rejected(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_builder_query("A", metric_name, "", "p95", temporality="cumulative")
response = make_query_request(signoz, token, start_ms, end_ms, [query], request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms, end_ms, [query])
# the request is well formed; it is the stored metric that cannot be read, so
# this is reported as unsupported rather than as bad input

View File

@@ -7,7 +7,6 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
assert_results_equal,
build_builder_query,
get_series_values,
@@ -57,16 +56,16 @@ def test_builder_shortening_the_time_range_at_the_end(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
base_query = make_query_request(signoz, token, start_time_ms, end_time_ms_base_query, query, no_cache=False, request_type=RequestType.TIME_SERIES)
base_query = make_query_request(signoz, token, start_time_ms, end_time_ms_base_query, query, no_cache=False)
assert base_query.status_code == HTTPStatus.OK, base_query.text
points = sorted(get_series_values(base_query.json(), "A"), key=lambda point: point["timestamp"])
returned_points = [(point["value"], point.get("partial", False)) for point in points]
assert returned_points == [(16, False), (4096, False)]
from_cache = make_query_request(signoz, token, start_time_ms, end_time_ms_shortened_query, query, no_cache=False, request_type=RequestType.TIME_SERIES)
from_cache = make_query_request(signoz, token, start_time_ms, end_time_ms_shortened_query, query, no_cache=False)
assert from_cache.status_code == HTTPStatus.OK, from_cache.text
uncached = make_query_request(signoz, token, start_time_ms, end_time_ms_shortened_query, query, no_cache=True, request_type=RequestType.TIME_SERIES)
uncached = make_query_request(signoz, token, start_time_ms, end_time_ms_shortened_query, query, no_cache=True)
assert uncached.status_code == HTTPStatus.OK, uncached.text
assert_results_equal(from_cache.json(), uncached.json(), "A", "shortened end")
@@ -117,16 +116,16 @@ def test_builder_shortening_the_time_range_at_the_start(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
base_query = make_query_request(signoz, token, start_time_ms_base_query, end_time_ms, query, no_cache=False, request_type=RequestType.TIME_SERIES)
base_query = make_query_request(signoz, token, start_time_ms_base_query, end_time_ms, query, no_cache=False)
assert base_query.status_code == HTTPStatus.OK, base_query.text
points = sorted(get_series_values(base_query.json(), "A"), key=lambda point: point["timestamp"])
returned_points = [(point["value"], point.get("partial", False)) for point in points]
assert returned_points == [(65536, False), (4096, False)]
from_cache = make_query_request(signoz, token, start_time_ms_shortened_query, end_time_ms, query, no_cache=False, request_type=RequestType.TIME_SERIES)
from_cache = make_query_request(signoz, token, start_time_ms_shortened_query, end_time_ms, query, no_cache=False)
assert from_cache.status_code == HTTPStatus.OK, from_cache.text
uncached = make_query_request(signoz, token, start_time_ms_shortened_query, end_time_ms, query, no_cache=True, request_type=RequestType.TIME_SERIES)
uncached = make_query_request(signoz, token, start_time_ms_shortened_query, end_time_ms, query, no_cache=True)
assert uncached.status_code == HTTPStatus.OK, uncached.text
assert_results_equal(from_cache.json(), uncached.json(), "A", "shortened start")
@@ -179,16 +178,16 @@ def test_builder_time_range_shorter_than_the_step(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
base_query = make_query_request(signoz, token, start_time_ms, end_time_ms_base_query, query, no_cache=False, request_type=RequestType.TIME_SERIES)
base_query = make_query_request(signoz, token, start_time_ms, end_time_ms_base_query, query, no_cache=False)
assert base_query.status_code == HTTPStatus.OK, base_query.text
points = sorted(get_series_values(base_query.json(), "A"), key=lambda point: point["timestamp"])
returned_points = [(point["value"], point.get("partial", False)) for point in points]
assert returned_points == [(16, False), (4096, False)]
from_cache = make_query_request(signoz, token, start_time_ms_short_query, end_time_ms_short_query, query, no_cache=False, request_type=RequestType.TIME_SERIES)
from_cache = make_query_request(signoz, token, start_time_ms_short_query, end_time_ms_short_query, query, no_cache=False)
assert from_cache.status_code == HTTPStatus.OK, from_cache.text
uncached = make_query_request(signoz, token, start_time_ms_short_query, end_time_ms_short_query, query, no_cache=True, request_type=RequestType.TIME_SERIES)
uncached = make_query_request(signoz, token, start_time_ms_short_query, end_time_ms_short_query, query, no_cache=True)
assert uncached.status_code == HTTPStatus.OK, uncached.text
assert_results_equal(from_cache.json(), uncached.json(), "A", "range shorter than the step")
@@ -239,10 +238,10 @@ def test_promql_running_the_same_query_twice(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
first = make_query_request(signoz, token, start_time_ms, end_time_ms, query, no_cache=False, request_type=RequestType.TIME_SERIES)
first = make_query_request(signoz, token, start_time_ms, end_time_ms, query, no_cache=False)
assert first.status_code == HTTPStatus.OK, first.text
second = make_query_request(signoz, token, start_time_ms, end_time_ms, query, no_cache=False, request_type=RequestType.TIME_SERIES)
second = make_query_request(signoz, token, start_time_ms, end_time_ms, query, no_cache=False)
assert second.status_code == HTTPStatus.OK, second.text
assert_results_equal(first.json(), second.json(), "A", "the same query twice")
@@ -297,7 +296,7 @@ def test_promql_shifting_the_time_range(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
aligned_and_cached = make_query_request(signoz, token, aligned_start_time_ms, aligned_end_time_ms, query, no_cache=False, request_type=RequestType.TIME_SERIES)
aligned_and_cached = make_query_request(signoz, token, aligned_start_time_ms, aligned_end_time_ms, query, no_cache=False)
assert aligned_and_cached.status_code == HTTPStatus.OK, aligned_and_cached.text
## at each timestamp t, promql takes the highest sample in (t-2minutes, t],
@@ -313,7 +312,7 @@ def test_promql_shifting_the_time_range(
# an unaligned range is rounded down to the step, so this asks for the same
# instants as the aligned query and gets the same answer
unaligned_and_cached = make_query_request(signoz, token, unaligned_start_time_ms, unaligned_end_time_ms, query, no_cache=False, request_type=RequestType.TIME_SERIES)
unaligned_and_cached = make_query_request(signoz, token, unaligned_start_time_ms, unaligned_end_time_ms, query, no_cache=False)
assert unaligned_and_cached.status_code == HTTPStatus.OK, unaligned_and_cached.text
points = sorted(get_series_values(unaligned_and_cached.json(), "A"), key=lambda point: point["timestamp"])
assert [(point["timestamp"], point["value"]) for point in points] == aligned_points, "unaligned query, rounded to the step"
@@ -330,7 +329,7 @@ def test_promql_shifting_the_time_range(
(unaligned_end_time_ms, 1100), # t = 3m30s
]
for run in ("first", "second"):
unaligned_as_asked = make_query_request(signoz, token, unaligned_start_time_ms, unaligned_end_time_ms, unaligned_query, no_cache=False, request_type=RequestType.TIME_SERIES)
unaligned_as_asked = make_query_request(signoz, token, unaligned_start_time_ms, unaligned_end_time_ms, unaligned_query, no_cache=False)
assert unaligned_as_asked.status_code == HTTPStatus.OK, unaligned_as_asked.text
points = sorted(get_series_values(unaligned_as_asked.json(), "A"), key=lambda point: point["timestamp"])
assert [(point["timestamp"], point["value"]) for point in points] == unaligned_points, f"unaligned query as asked, {run} run"
@@ -372,17 +371,17 @@ def test_promql_time_range_shorter_than_the_step(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
base_query = make_query_request(signoz, token, start_time_ms, end_time_ms_base_query, query, no_cache=False, request_type=RequestType.TIME_SERIES)
base_query = make_query_request(signoz, token, start_time_ms, end_time_ms_base_query, query, no_cache=False)
assert base_query.status_code == HTTPStatus.OK, base_query.text
points = sorted(get_series_values(base_query.json(), "A"), key=lambda point: point["timestamp"])
assert [(point["timestamp"], point["value"]) for point in points] == [(start_time_ms, 100), (end_time_ms_base_query, 1100)]
# a range shorter than the step rounds down to the single instant at minute
# 10, the instant the base query closed on
from_cache = make_query_request(signoz, token, start_time_ms_short_query, end_time_ms_short_query, query, no_cache=False, request_type=RequestType.TIME_SERIES)
from_cache = make_query_request(signoz, token, start_time_ms_short_query, end_time_ms_short_query, query, no_cache=False)
assert from_cache.status_code == HTTPStatus.OK, from_cache.text
uncached = make_query_request(signoz, token, start_time_ms_short_query, end_time_ms_short_query, query, no_cache=True, request_type=RequestType.TIME_SERIES)
uncached = make_query_request(signoz, token, start_time_ms_short_query, end_time_ms_short_query, query, no_cache=True)
assert uncached.status_code == HTTPStatus.OK, uncached.text
assert_results_equal(from_cache.json(), uncached.json(), "A", "range shorter than the step")
@@ -428,7 +427,7 @@ def test_builder_refreshing_a_sliding_time_range(
# a dashboard left open on a one hour range, re-running a minute later each time
for refresh in range(20):
refresh_start_ms = start_time_ms + refresh * MINUTE_MS
from_cache = make_query_request(signoz, token, refresh_start_ms, refresh_start_ms + 60 * MINUTE_MS, query, no_cache=False, request_type=RequestType.TIME_SERIES)
from_cache = make_query_request(signoz, token, refresh_start_ms, refresh_start_ms + 60 * MINUTE_MS, query, no_cache=False)
assert from_cache.status_code == HTTPStatus.OK, from_cache.text
# each refresh is stitched out of overlapping cached ranges, so this catches
@@ -439,7 +438,7 @@ def test_builder_refreshing_a_sliding_time_range(
assert returned_points == expected_points, f"refresh {refresh} did not return the minutes it covers"
last_refresh_start_ms = start_time_ms + 19 * MINUTE_MS
uncached = make_query_request(signoz, token, last_refresh_start_ms, last_refresh_start_ms + 60 * MINUTE_MS, query, no_cache=True, request_type=RequestType.TIME_SERIES)
uncached = make_query_request(signoz, token, last_refresh_start_ms, last_refresh_start_ms + 60 * MINUTE_MS, query, no_cache=True)
assert uncached.status_code == HTTPStatus.OK, uncached.text
assert_results_equal(from_cache.json(), uncached.json(), "A", "the twentieth refresh")

View File

@@ -7,7 +7,7 @@ import pytest
from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import RequestType, build_builder_query, get_all_series, make_query_request
from fixtures.querier import build_builder_query, get_all_series, make_query_request
@pytest.mark.parametrize(
@@ -62,7 +62,6 @@ def test_metrics_time_series_offset_skips_series_in_order(
offset=offset,
)
],
request_type=RequestType.TIME_SERIES,
)
assert response.status_code == HTTPStatus.OK, response.text

View File

@@ -46,7 +46,7 @@ def build_logs_query(
gb = [querier.build_group_by_field(f, "string", "resource") for f in group_by] if group_by else None
order = [querier.build_order_by(name, direction) for name, direction in order_by] if order_by else None
return querier.build_aggregation_query(
return querier.build_scalar_query(
name=name,
signal="logs",
aggregations=aggs,

View File

@@ -52,7 +52,7 @@ def build_traces_query(
gb = [querier.build_group_by_field(f, "string", "resource") for f in group_by] if group_by else None
order = [querier.build_order_by(name, direction) for name, direction in order_by] if order_by else None
return querier.build_aggregation_query(
return querier.build_scalar_query(
name=name,
signal="traces",
aggregations=aggs,

View File

@@ -48,7 +48,7 @@ def build_metrics_query(
gb = [querier.build_group_by_field(f, "string", "attribute") for f in group_by] if group_by else None
order = [querier.build_order_by(name, direction) for name, direction in order_by] if order_by else None
return querier.build_aggregation_query(
return querier.build_scalar_query(
name=name,
signal="metrics",
aggregations=aggs,

View File

@@ -8,9 +8,9 @@ from fixtures.logs import Logs
from fixtures.querier import (
assert_scalar_result_order,
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_order_by,
build_scalar_query,
get_scalar_table_data,
make_scalar_query_request,
)
@@ -41,7 +41,7 @@ def test_logs_scalar_group_by_having(
insert_logs(logs)
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],

View File

@@ -9,10 +9,10 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import (
assert_scalar_result_order,
build_aggregation_query,
build_group_by_field,
build_metrics_aggregation,
build_order_by,
build_scalar_query,
get_scalar_table_data,
make_scalar_query_request,
)
@@ -59,7 +59,7 @@ def test_metrics_scalar_reduce_to_modes(
aggregation = build_metrics_aggregation("test.reduce.metric", "latest", "sum", "unspecified")
aggregation["reduceTo"] = reduce_to
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="metrics",
aggregations=[aggregation],
@@ -118,7 +118,7 @@ def test_metrics_scalar_limit_ranks_by_reduced_value(
)
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(metric_name, "latest", "sum", "unspecified", reduce_to=reduce_to)],
@@ -175,7 +175,7 @@ def test_metrics_scalar_limit_ranks_after_functions(
)
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(metric_name, "latest", "sum", "unspecified", reduce_to="max")],
@@ -200,7 +200,7 @@ def test_metrics_scalar_missing_reduce_to_rejected(
now = datetime.now(tz=UTC).replace(second=0, microsecond=0)
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation("test.reduce.metric", "latest", "sum", "unspecified")],
@@ -221,7 +221,7 @@ def test_metrics_scalar_invalid_reduce_to_rejected(
aggregation = build_metrics_aggregation("test.reduce.metric", "latest", "sum", "unspecified")
aggregation["reduceTo"] = "p99"
query = build_aggregation_query(name="A", signal="metrics", aggregations=[aggregation])
query = build_scalar_query(name="A", signal="metrics", aggregations=[aggregation])
response = make_scalar_query_request(signoz, token, now, [query])
assert response.status_code == HTTPStatus.BAD_REQUEST, response.text

View File

@@ -8,9 +8,9 @@ from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import (
build_aggregation_query,
build_group_by_field,
build_metrics_aggregation,
build_scalar_query,
get_scalar_table_data,
make_scalar_query_request,
)
@@ -52,7 +52,7 @@ def test_metrics_scalar_space_aggregations(
insert_metrics([Metrics(metric_name="test.metric", labels={"service.name": service}, timestamp=now - timedelta(seconds=1), temporality="Unspecified", type_="Gauge", is_monotonic=False, value=value) for service, value in METRIC_VALUES.items()])
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation("test.metric", "latest", space_aggregation, "unspecified", reduce_to="last")],
@@ -93,7 +93,7 @@ def test_metrics_scalar_having(
insert_metrics([Metrics(metric_name="test.metric", labels={"service.name": service}, timestamp=now - timedelta(seconds=1), temporality="Unspecified", type_="Gauge", is_monotonic=False, value=value) for service, value in METRIC_VALUES.items()])
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_aggregation_query(
query = build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation("test.metric", "latest", "sum", "unspecified", reduce_to="last")],

View File

@@ -32,7 +32,7 @@ def test_logs_scalar_filter_unknown_key_synthesizes(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="logs",
aggregations=[querier.build_aggregation("count()")],
@@ -64,7 +64,7 @@ def test_logs_scalar_group_by_over_empty_filter_returns_no_rows(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="logs",
aggregations=[querier.build_aggregation("count()")],
@@ -95,7 +95,7 @@ def test_logs_scalar_group_by_unknown_key_null_bucket(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="logs",
aggregations=[querier.build_aggregation("count()")],
@@ -142,7 +142,7 @@ def test_traces_scalar_filter_unknown_key_synthesizes(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="traces",
aggregations=[querier.build_aggregation("count()")],
@@ -187,7 +187,7 @@ def test_traces_scalar_group_by_unknown_key_null_bucket(
token,
now,
[
querier.build_aggregation_query(
querier.build_scalar_query(
name="A",
signal="traces",
aggregations=[querier.build_aggregation("count()")],

View File

@@ -11,11 +11,11 @@ from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_aggregation,
build_aggregation_query,
build_formula_query,
build_group_by_field,
build_metrics_aggregation,
build_order_by,
build_scalar_query,
find_named_result,
get_scalar_table_data,
make_query_request,
@@ -62,7 +62,7 @@ def test_logs_scalar_offset_skips_rows_in_order(
token,
now,
[
build_aggregation_query(
build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],
@@ -117,7 +117,7 @@ def test_traces_scalar_offset_skips_rows_in_order(
token,
now,
[
build_aggregation_query(
build_scalar_query(
name="A",
signal="traces",
aggregations=[build_aggregation("count()")],
@@ -162,7 +162,7 @@ def test_metrics_scalar_offset_skips_rows_in_order(
token,
now,
[
build_aggregation_query(
build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation("offset.gauge", "latest", "sum", "unspecified", reduce_to="last")],
@@ -205,7 +205,7 @@ def test_formula_scalar_offset_skips_rows_in_order(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count()")],
@@ -240,7 +240,7 @@ def test_negative_offset_is_rejected(
signoz,
token,
datetime.now(tz=UTC).replace(second=0, microsecond=0),
[build_aggregation_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], offset=-1)],
[build_scalar_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], offset=-1)],
)
assert response.status_code == HTTPStatus.BAD_REQUEST, response.text
@@ -257,7 +257,7 @@ def test_offset_without_limit_is_rejected(
signoz,
token,
datetime.now(tz=UTC).replace(second=0, microsecond=0),
[build_aggregation_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], offset=1)],
[build_scalar_query(name="A", signal="logs", aggregations=[build_aggregation("count()")], offset=1)],
)
assert response.status_code == HTTPStatus.BAD_REQUEST, response.text

View File

@@ -18,7 +18,7 @@ from fixtures.querier import (
build_aggregation,
build_group_by_field,
build_order_by,
build_traces_aggregation_query,
build_traces_scalar_query,
get_all_series,
get_scalar_table_data,
index_series_by_label,
@@ -208,7 +208,7 @@ def test_traces_aggregate_functions(
build_aggregation("rate_sum(duration_nano)", "rate_sum_d"),
build_aggregation("avg(latency_ms)", "avg_lat"),
]
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=aggregations,
group_by=[build_group_by_field("service.name", "string", "resource")],
order=[build_order_by("count()", "desc")],
@@ -284,7 +284,7 @@ def test_traces_aggregate_calculated_range_countif(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=[build_aggregation("countIf(response_status_code >= 400 AND response_status_code < 500)")],
)
response = make_scalar_query_request(signoz, token, now, [query])
@@ -342,7 +342,7 @@ def test_traces_aggregate_having(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("service.name", "string", "resource")],
order=[build_order_by("count()", "desc")],
@@ -418,7 +418,7 @@ def test_traces_aggregate_time_series_limit(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("service.name", "string", "resource")],
order=[build_order_by("count()", direction)],
@@ -495,7 +495,7 @@ def test_traces_aggregate_unknown_key(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_traces_aggregation_query(aggregations=[build_aggregation(expression)])
query = build_traces_scalar_query(aggregations=[build_aggregation(expression)])
response = make_scalar_query_request(signoz, token, now, [query])
assert response.status_code == HTTPStatus.OK, response.text

View File

@@ -12,7 +12,7 @@ from fixtures.querier import (
build_aggregation,
build_formula_query,
build_group_by_field,
build_traces_aggregation_query,
build_traces_scalar_query,
find_named_result,
get_all_series,
index_series_by_label,
@@ -72,7 +72,7 @@ def test_traces_fill_plain(
start_ms=int((now - timedelta(minutes=5)).timestamp() * 1000),
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[build_traces_aggregation_query(aggregations=[build_aggregation("count()")], functions=functions)],
queries=[build_traces_scalar_query(aggregations=[build_aggregation("count()")], functions=functions)],
format_options=format_options,
)
@@ -138,7 +138,7 @@ def test_traces_fill_group_by(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("service.name", "string", "resource")],
functions=functions,
@@ -212,8 +212,8 @@ def test_traces_fill_formula(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(aggregations=[build_aggregation("count()")], filter_expression="resource.service.name = 'test'", disabled=True),
build_traces_aggregation_query(name="B", aggregations=[build_aggregation("count()")], filter_expression="resource.service.name = 'another-test'", disabled=True),
build_traces_scalar_query(aggregations=[build_aggregation("count()")], filter_expression="resource.service.name = 'test'", disabled=True),
build_traces_scalar_query(name="B", aggregations=[build_aggregation("count()")], filter_expression="resource.service.name = 'another-test'", disabled=True),
build_formula_query("F1", "A + B", functions=functions),
],
format_options=format_options,
@@ -284,8 +284,8 @@ def test_traces_fill_formula_group_by(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(aggregations=[build_aggregation("count()")], group_by=group_by, disabled=True),
build_traces_aggregation_query(name="B", aggregations=[build_aggregation("count()")], group_by=group_by, disabled=True),
build_traces_scalar_query(aggregations=[build_aggregation("count()")], group_by=group_by, disabled=True),
build_traces_scalar_query(name="B", aggregations=[build_aggregation("count()")], group_by=group_by, disabled=True),
build_formula_query("F1", "A + B", functions=functions),
],
format_options=format_options,

View File

@@ -9,7 +9,7 @@ from fixtures.querier import (
assert_grouped_series,
build_aggregation,
build_group_by_field,
build_traces_aggregation_query,
build_traces_scalar_query,
get_resource_evolution_time,
index_series_by_label,
make_query_request,
@@ -99,7 +99,7 @@ def test_traces_resource_evolution(
end_ms=int((before_1 + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("service.name")],
)
@@ -131,7 +131,7 @@ def test_traces_resource_evolution(
end_ms=int((after_2 + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("service.name")],
)
@@ -163,7 +163,7 @@ def test_traces_resource_evolution(
end_ms=int((after_2 + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("service.name")],
)
@@ -202,7 +202,7 @@ def test_traces_resource_evolution(
end_ms=int((after_2 + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count_distinct(service.name)")],
group_by=[build_group_by_field("deployment.environment")],
)

View File

@@ -10,7 +10,7 @@ from fixtures.querier import (
RequestType,
build_aggregation,
build_group_by_field,
build_traces_aggregation_query,
build_traces_scalar_query,
index_series_by_label,
make_query_request,
)
@@ -71,7 +71,7 @@ def test_traces_aggregate_min_max(
end_ms=int((now + timedelta(seconds=5)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[
build_aggregation("max(duration_nano)", "maxDuration"),
build_aggregation("min(duration_nano)", "minDuration"),

View File

@@ -11,7 +11,7 @@ from fixtures.querier import (
build_aggregation,
build_group_by_field,
build_raw_query,
build_traces_aggregation_query,
build_traces_scalar_query,
get_rows,
get_scalar_table_data,
make_query_request,
@@ -44,7 +44,7 @@ def test_traces_filter_unknown_key_synthesizes(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
[build_aggregation("count()")],
filter_expression='totally.unknown.key = "x"',
)
@@ -152,7 +152,7 @@ def test_traces_group_by_unknown_key_null_bucket(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
[build_aggregation("count()")],
group_by=[build_group_by_field("totally.unknown.key", field_data_type="", field_context="")],
filter_expression='service.name = "groupby-unknown-svc"',

View File

@@ -11,7 +11,7 @@ from fixtures.querier import (
build_aggregation,
build_group_by_field,
build_order_by,
build_traces_aggregation_query,
build_traces_scalar_query,
get_scalar_table_data,
make_scalar_query_request,
)
@@ -73,7 +73,7 @@ def test_traces_aggregate_percentiles(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
percentiles = [25, 50, 90, 95, 99]
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=[build_aggregation(f"p{p}(duration_nano)", f"p{p}") for p in percentiles],
)
response = make_scalar_query_request(signoz, token, now, [query])
@@ -138,7 +138,7 @@ def test_traces_aggregate_group_by_non_resource(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field(group_key, field_data_type="", field_context="")],
filter_expression="resource.service.name = 'gb-svc'",
@@ -193,7 +193,7 @@ def test_traces_aggregate_multi_group_by(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[
build_group_by_field("service.name", "string", "resource"),
@@ -262,7 +262,7 @@ def test_traces_aggregate_having_breadth(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=[build_aggregation("count()"), build_aggregation("sum(duration_nano)")],
group_by=[build_group_by_field("service.name", "string", "resource")],
order=[build_order_by("count()", "desc")],
@@ -325,7 +325,7 @@ def test_traces_duration_nano_qol_filter_with_collision(
token = get_token(USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD)
query = build_traces_aggregation_query(
query = build_traces_scalar_query(
aggregations=[build_aggregation("count()", "cnt")],
filter_expression=duration_filter,
)

View File

@@ -12,7 +12,7 @@ from fixtures.querier import (
assert_grouped_series,
build_aggregation,
build_group_by_field,
build_traces_aggregation_query,
build_traces_scalar_query,
get_all_warnings,
get_preview_sql,
get_rows,
@@ -90,7 +90,7 @@ def test_traces_attributes_json_evolution(
end_ms=int((before_1 + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("http.route", field_context="attribute")],
)
@@ -114,7 +114,7 @@ def test_traces_attributes_json_evolution(
end_ms=int((after_2 + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("http.route", field_context="attribute")],
)
@@ -138,7 +138,7 @@ def test_traces_attributes_json_evolution(
end_ms=int((after_2 + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("http.route", field_context="attribute")],
)
@@ -212,7 +212,7 @@ def test_traces_attributes_json_typed_filters(
end_ms=end_ms,
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("http.route", field_context="attribute")],
filter_expression=filter_expression,
@@ -291,7 +291,7 @@ def test_traces_attributes_json_collision_and_map_parity(
end_ms=end_ms,
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("app.status", field_context="attribute")],
filter_expression="app.status EXISTS",
@@ -325,7 +325,7 @@ def test_traces_attributes_json_collision_and_map_parity(
end_ms=end_ms,
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("http.route", field_context="attribute")],
filter_expression=filter_expression,
@@ -382,7 +382,7 @@ def test_traces_attributes_json_number_reads(
end_ms=end_ms,
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
group_by=[build_group_by_field("http.route", field_context="attribute")],
filter_expression=filter_expression,
@@ -513,7 +513,7 @@ def test_traces_attributes_json_unreported_key(
insert_traces(spans)
queries = [
build_traces_aggregation_query(
build_traces_scalar_query(
aggregations=[build_aggregation("count()")],
filter_expression="unreported.key = 'value'",
)
@@ -523,11 +523,11 @@ def test_traces_attributes_json_unreported_key(
start_ms = int((before - timedelta(minutes=1)).timestamp() * 1000)
end_ms = int((before + timedelta(minutes=1)).timestamp() * 1000)
sql = get_preview_sql(make_preview_query_request(signoz, token, start_ms=start_ms, end_ms=end_ms, queries=queries, request_type=RequestType.TIME_SERIES), "A")
sql = get_preview_sql(make_preview_query_request(signoz, token, start_ms=start_ms, end_ms=end_ms, queries=queries), "A")
assert "attributes_string['unreported.key']" in sql
assert "attributes.`unreported.key`" not in sql
response = make_query_request(signoz, token, start_ms=start_ms, end_ms=end_ms, queries=queries, request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms=start_ms, end_ms=end_ms, queries=queries)
assert response.status_code == HTTPStatus.OK
series = response.json()["data"]["data"]["results"][0]["aggregations"][0]["series"]
assert [value["value"] for value in series[0]["values"]] == [1]
@@ -537,11 +537,11 @@ def test_traces_attributes_json_unreported_key(
start_ms = int((after - timedelta(minutes=1)).timestamp() * 1000)
end_ms = int((after + timedelta(minutes=1)).timestamp() * 1000)
sql = get_preview_sql(make_preview_query_request(signoz, token, start_ms=start_ms, end_ms=end_ms, queries=queries, request_type=RequestType.TIME_SERIES), "A")
sql = get_preview_sql(make_preview_query_request(signoz, token, start_ms=start_ms, end_ms=end_ms, queries=queries), "A")
assert "attributes.`unreported.key`" in sql
assert "attributes_string" not in sql
response = make_query_request(signoz, token, start_ms=start_ms, end_ms=end_ms, queries=queries, request_type=RequestType.TIME_SERIES)
response = make_query_request(signoz, token, start_ms=start_ms, end_ms=end_ms, queries=queries)
assert response.status_code == HTTPStatus.OK
series = response.json()["data"]["data"]["results"][0]["aggregations"][0]["series"]
assert [value["value"] for value in series[0]["values"]] == [1]

View File

@@ -7,7 +7,7 @@ import requests
from fixtures import types
from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.querier import RequestType, build_aggregation, build_traces_aggregation_query, get_preview_statements, make_preview_query_request
from fixtures.querier import RequestType, build_aggregation, build_traces_scalar_query, get_preview_statements, make_preview_query_request
from fixtures.traces import ATTRIBUTE_JSON_ROLLOUT_TIME, Traces
PROMOTED_PATHS = "/api/v1/promoted_paths"
@@ -72,7 +72,7 @@ def test_traces_filters_use_skip_indexes(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.SCALAR,
# count() over primary-key filters is answered by the exact count projection, which reads no index
queries=[build_traces_aggregation_query(aggregations=[build_aggregation("sum(duration_nano)")], filter_expression=filter_expression)],
queries=[build_traces_scalar_query(aggregations=[build_aggregation("sum(duration_nano)")], filter_expression=filter_expression)],
),
"A",
)

View File

@@ -10,11 +10,11 @@ from fixtures.metadata import AttributesMetadata, get_field_keys, get_field_valu
from fixtures.querier import (
RequestType,
build_aggregation,
build_aggregation_query,
build_group_by_field,
build_order_by,
build_raw_query,
build_traces_aggregation_query,
build_scalar_query,
build_traces_scalar_query,
get_all_warnings,
get_column_data_from_response,
get_scalar_columns,
@@ -178,7 +178,7 @@ def test_group_by_merges_and_echoes_requested_spelling(
end_ms=int((family_fleet + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
[build_aggregation("count_distinct(name)")],
filter_expression=f"service.name LIKE '{PREFIX}%'",
group_by=[build_group_by_field(requested_key, "string", "resource")],
@@ -214,7 +214,7 @@ def test_log_group_by_merges_and_echoes_requested_spelling(
end_ms=int((family_fleet + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="logs",
aggregations=[build_aggregation("count_distinct(body)")],
@@ -245,7 +245,7 @@ def test_time_series_group_by_merges_family(
end_ms=int((family_fleet + timedelta(minutes=1)).timestamp() * 1000),
request_type=RequestType.TIME_SERIES,
queries=[
build_traces_aggregation_query(
build_traces_scalar_query(
[build_aggregation("count_distinct(name)")],
filter_expression=f"service.name LIKE '{PREFIX}%'",
group_by=[build_group_by_field(CURRENT_KEY, "string", "resource")],

View File

@@ -9,9 +9,9 @@ from fixtures.auth import USER_ADMIN_EMAIL, USER_ADMIN_PASSWORD
from fixtures.metrics import Metrics
from fixtures.querier import (
RequestType,
build_aggregation_query,
build_group_by_field,
build_metrics_aggregation,
build_scalar_query,
get_scalar_columns,
get_scalar_table_data,
make_query_request,
@@ -40,7 +40,7 @@ def test_metric_label_filter_merges_stored_spellings(
end_ms=int(metric_family_fleet.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(LABEL_METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -69,7 +69,7 @@ def test_metric_label_group_by_merges_stored_spellings(
end_ms=int(metric_family_fleet.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(LABEL_METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -113,7 +113,7 @@ def test_span_metric_label_filter_reads_resource_layout(
end_ms=int(metric_family_fleet.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(SPAN_METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -142,7 +142,7 @@ def test_metric_name_family_unions_storage_names(
end_ms=int(metric_family_fleet.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(requested, "latest", "sum", "unspecified", reduce_to="last")],
@@ -177,7 +177,7 @@ def test_metric_name_union_double_counts_dual_emission(
end_ms=int(now.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(CURRENT_NAME_METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -203,7 +203,7 @@ def test_metric_family_stays_literal_with_flag_off(
end_ms=int(metric_family_fleet.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(LABEL_METRIC, "latest", "sum", "unspecified", reduce_to="last")],
@@ -223,7 +223,7 @@ def test_metric_family_stays_literal_with_flag_off(
end_ms=int(metric_family_fleet.timestamp() * 1000),
request_type=RequestType.SCALAR,
queries=[
build_aggregation_query(
build_scalar_query(
name="A",
signal="metrics",
aggregations=[build_metrics_aggregation(OLD_NAME_METRIC, "latest", "sum", "unspecified", reduce_to="last")],