mirror of
https://github.com/clearml/clearml-server
synced 2025-03-16 02:18:43 +00:00
Do not return the last incomplete interval for worker stats chart
This commit is contained in:
parent
207b9e4746
commit
046a142f36
@ -78,6 +78,8 @@ class WorkerStats:
|
|||||||
if from_date >= to_date:
|
if from_date >= to_date:
|
||||||
raise bad_request.FieldsValueError("from_date must be less than to_date")
|
raise bad_request.FieldsValueError("from_date must be less than to_date")
|
||||||
|
|
||||||
|
interval = max(request.interval, self.min_chart_interval)
|
||||||
|
|
||||||
def get_dates_agg() -> dict:
|
def get_dates_agg() -> dict:
|
||||||
es_to_agg_types = (
|
es_to_agg_types = (
|
||||||
("avg", AggregationType.avg.value),
|
("avg", AggregationType.avg.value),
|
||||||
@ -85,7 +87,6 @@ class WorkerStats:
|
|||||||
("max", AggregationType.max.value),
|
("max", AggregationType.max.value),
|
||||||
)
|
)
|
||||||
|
|
||||||
interval = max(request.interval, self.min_chart_interval)
|
|
||||||
return {
|
return {
|
||||||
"dates": {
|
"dates": {
|
||||||
"date_histogram": {
|
"date_histogram": {
|
||||||
@ -136,16 +137,16 @@ class WorkerStats:
|
|||||||
with translate_errors_context():
|
with translate_errors_context():
|
||||||
data = self._search_company_stats(company_id, es_req)
|
data = self._search_company_stats(company_id, es_req)
|
||||||
|
|
||||||
return self._extract_results(data, request.items, request.split_by_variant)
|
cutoff_date = (to_date - 0.9 * interval) * 1000 # do not return the point for the incomplete last interval
|
||||||
|
return self._extract_results(data, request.items, request.split_by_variant, cutoff_date)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _extract_results(
|
def _extract_results(
|
||||||
data: dict, request_items: Sequence[StatItem], split_by_variant: bool
|
data: dict, request_items: Sequence[StatItem], split_by_variant: bool, cutoff_date
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""
|
"""
|
||||||
Clean results returned from elastic search (remove "aggregations", "buckets" etc.),
|
Clean results returned from elastic search (remove "aggregations", "buckets" etc.),
|
||||||
leave only aggregation types requested by the user and return a clean dictionary
|
leave only aggregation types requested by the user and return a clean dictionary
|
||||||
and return a "clean" dictionary of
|
|
||||||
:param data: aggregation data retrieved from ES
|
:param data: aggregation data retrieved from ES
|
||||||
:param request_items: aggs types requested by the user
|
:param request_items: aggs types requested by the user
|
||||||
:param split_by_variant: if False then aggregate by metric type, otherwise metric type + variant
|
:param split_by_variant: if False then aggregate by metric type, otherwise metric type + variant
|
||||||
@ -172,6 +173,7 @@ class WorkerStats:
|
|||||||
return [
|
return [
|
||||||
extract_date_stats(date, metric_key)
|
extract_date_stats(date, metric_key)
|
||||||
for date in metric_or_variant["dates"]["buckets"]
|
for date in metric_or_variant["dates"]["buckets"]
|
||||||
|
if date["key"] <= cutoff_date
|
||||||
]
|
]
|
||||||
|
|
||||||
def extract_variant_results(metric: dict) -> dict:
|
def extract_variant_results(metric: dict) -> dict:
|
||||||
|
@ -180,7 +180,7 @@ class TestWorkersService(TestService):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
set(stat.aggregation for stat in metric.stats), metric_stats
|
set(stat.aggregation for stat in metric.stats), metric_stats
|
||||||
)
|
)
|
||||||
self.assertEqual(len(metric.dates), 11)
|
self.assertTrue(11 >= len(metric.dates) >= 10)
|
||||||
|
|
||||||
# split by variants
|
# split by variants
|
||||||
res = self.api.workers.get_stats(
|
res = self.api.workers.get_stats(
|
||||||
@ -199,7 +199,7 @@ class TestWorkersService(TestService):
|
|||||||
set(metric.variant for metric in worker.metrics),
|
set(metric.variant for metric in worker.metrics),
|
||||||
{"0", "1"} if worker.worker == workers[0] else {"0"},
|
{"0", "1"} if worker.worker == workers[0] else {"0"},
|
||||||
)
|
)
|
||||||
self.assertEqual(len(metric.dates), 11)
|
self.assertTrue(11 >= len(metric.dates) >= 10)
|
||||||
|
|
||||||
res = self.api.workers.get_stats(
|
res = self.api.workers.get_stats(
|
||||||
items=[dict(key="cpu_usage", aggregation="avg")],
|
items=[dict(key="cpu_usage", aggregation="avg")],
|
||||||
|
Loading…
Reference in New Issue
Block a user