Skip to content

Commit 343b4a1

Browse files
committed
Support formulae in CLI tool
This change allows to pass formula strings as a `cid` argument from the command line. Multiple formula strings can be passed also together with individual components. Multiple metrics are still supported. Signed-off-by: cwasicki <[email protected]>
1 parent 965b0cf commit 343b4a1

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

src/frequenz/client/reporting/__main__.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ def main() -> None:
2828
parser.add_argument(
2929
"--cid",
3030
nargs="+",
31-
type=int,
32-
help="Component IDs",
31+
type=str,
32+
help="Component IDs or formulae",
3333
)
3434
parser.add_argument(
3535
"--metrics",
@@ -102,7 +102,7 @@ def main() -> None:
102102
async def run(
103103
*,
104104
microgrid_id: int,
105-
component_id: list[int],
105+
component_id: list[str],
106106
metric_names: list[str],
107107
start_dt: datetime | None,
108108
end_dt: datetime | None,
@@ -134,31 +134,48 @@ async def run(
134134
client = ReportingApiClient(service_address, key)
135135

136136
metrics = [Metric[mn] for mn in metric_names]
137-
microgrid_components = [(microgrid_id, component_id)]
138137

139-
def data_iter() -> AsyncIterator[MetricSample]:
138+
cids = [int(cid.strip()) for cid in component_id if cid.strip().isdigit()]
139+
formulas = [cid.strip() for cid in component_id if not cid.strip().isdigit()]
140+
microgrid_components = [(microgrid_id, cids)]
141+
142+
async def data_iter() -> AsyncIterator[MetricSample]:
140143
"""Iterate over single metric.
141144
142145
Just a wrapper around the client method for readability.
143146
144-
Returns:
145-
Iterator over single metric samples
147+
Yields:
148+
Single metric samples
146149
"""
147150
resampling_period = (
148151
timedelta(seconds=resampling_period_s)
149152
if resampling_period_s is not None
150153
else None
151154
)
152155

153-
return client.list_microgrid_components_data(
156+
async for sample in client.list_microgrid_components_data(
154157
microgrid_components=microgrid_components,
155158
metrics=metrics,
156159
start_dt=start_dt,
157160
end_dt=end_dt,
158161
resampling_period=resampling_period,
159162
include_states=states,
160163
include_bounds=bounds,
161-
)
164+
):
165+
yield sample
166+
167+
for formula in formulas:
168+
assert resampling_period is not None
169+
for metric in metrics:
170+
async for sample in client.receive_aggregated_data(
171+
microgrid_id=microgrid_id,
172+
metric=metric,
173+
aggregation_formula=formula,
174+
start=start_dt,
175+
end=end_dt,
176+
resampling_period=resampling_period,
177+
):
178+
yield sample
162179

163180
if fmt == "iter":
164181
# Iterate over single metric generator

0 commit comments

Comments
 (0)