(
self,
thread_ids: Sequence[int] | None = None,
function_ids: Sequence[int] | None = None,
start_ms: int | None = None,
end_ms: int | None = None,
metrics: Sequence[str] | None = None,
scope: str = "inclusive",
split: str = "auto",
resolution: int | None = None,
)
| 1118 | } |
| 1119 | |
| 1120 | def query_multi_series( |
| 1121 | self, |
| 1122 | thread_ids: Sequence[int] | None = None, |
| 1123 | function_ids: Sequence[int] | None = None, |
| 1124 | start_ms: int | None = None, |
| 1125 | end_ms: int | None = None, |
| 1126 | metrics: Sequence[str] | None = None, |
| 1127 | scope: str = "inclusive", |
| 1128 | split: str = "auto", |
| 1129 | resolution: int | None = None, |
| 1130 | ) -> SeriesResponse: |
| 1131 | selected_metrics = self._normalize_metrics(metrics) |
| 1132 | if len(selected_metrics) == 1: |
| 1133 | return self.query_series( |
| 1134 | thread_ids=thread_ids, |
| 1135 | function_ids=function_ids, |
| 1136 | start_ms=start_ms, |
| 1137 | end_ms=end_ms, |
| 1138 | metric=selected_metrics[0], |
| 1139 | scope=scope, |
| 1140 | split=split, |
| 1141 | resolution=resolution, |
| 1142 | ) |
| 1143 | |
| 1144 | responses = [ |
| 1145 | self.query_series( |
| 1146 | thread_ids=thread_ids, |
| 1147 | function_ids=function_ids, |
| 1148 | start_ms=start_ms, |
| 1149 | end_ms=end_ms, |
| 1150 | metric=metric_name, |
| 1151 | scope=scope, |
| 1152 | split=split, |
| 1153 | resolution=resolution, |
| 1154 | ) |
| 1155 | for metric_name in selected_metrics |
| 1156 | ] |
| 1157 | |
| 1158 | merged_series: dict[str, list[float]] = {} |
| 1159 | for metric_name, response in zip(selected_metrics, responses): |
| 1160 | display_metric_name = _metric_display_name(metric_name) |
| 1161 | for label, values in response.series.items(): |
| 1162 | merged_label = ( |
| 1163 | display_metric_name |
| 1164 | if label == "Total" and len(response.series) == 1 |
| 1165 | else f"{display_metric_name}::{label}" |
| 1166 | ) |
| 1167 | merged_series[merged_label] = values |
| 1168 | |
| 1169 | return SeriesResponse( |
| 1170 | ticks=responses[0].ticks, |
| 1171 | series=merged_series, |
| 1172 | metric="memory", |
| 1173 | scope=responses[0].scope, |
| 1174 | split=responses[0].split, |
| 1175 | ) |
| 1176 | |
| 1177 | def describe_detail_context( |
no test coverage detected