Skip to content

Commit e38b854

Browse files
authored
Update to reporting API v1alpha10 (#240)
The reporting API update includes the major update to common API v1alpha8. This also requires an update to the new metrics package in the client-common.
2 parents 2c9a2a2 + f492944 commit e38b854

File tree

6 files changed

+46
-41
lines changed

6 files changed

+46
-41
lines changed

RELEASE_NOTES.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
## Summary
44

5-
<!-- Here goes a general summary of what this release is about -->
5+
> **Warning:** This client is compatible *only* with Reporting API `v1alpha10` or later.
6+
> Using with services that use an older API version **will cause failures**.
67
78
## Upgrading
89

9-
<!-- Here goes notes on how to upgrade from previous versions, including deprecations and what they should be replaced with -->
10+
* Breaking change to reporting API v1alpha10.
1011

1112
## New Features
1213

pyproject.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ classifiers = [
2626
]
2727
requires-python = ">= 3.11, < 4"
2828
dependencies = [
29-
"typing_extensions >= 4.6.1, < 5",
29+
"typing_extensions >= 4.13.0, < 5",
3030
"grpc-stubs == 1.53.0.6",
31-
"frequenz-api-reporting >= 0.8.0, < 0.9",
32-
"frequenz-client-common >= 0.3.0, < 0.4",
31+
"frequenz-api-reporting >= 0.10.0, < 0.11",
32+
"frequenz-client-common >= 0.3.7, < 0.4",
3333
"grpcio >=1.72.1, < 2",
34-
"protobuf >=6.31.1, < 7",
34+
"protobuf >=6.33.1, < 7",
3535
"frequenz-client-base >= 0.11.0, < 0.12.0",
3636
]
3737
dynamic = ["version"]

src/frequenz/client/reporting/_client.py

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,48 +8,50 @@
88
from typing import cast
99

1010
# pylint: disable=no-name-in-module
11-
from frequenz.api.common.v1.microgrid.microgrid_pb2 import (
12-
MicrogridComponentIDs as PBMicrogridComponentIDs,
11+
from frequenz.api.common.v1alpha8.microgrid.microgrid_pb2 import (
12+
MicrogridElectricalComponentIDs as PBMicrogridComponentIDs,
1313
)
14-
from frequenz.api.common.v1.microgrid.microgrid_pb2 import (
14+
from frequenz.api.common.v1alpha8.microgrid.microgrid_pb2 import (
1515
MicrogridSensorIDs as PBMicrogridSensorIDs,
1616
)
17-
from frequenz.api.reporting.v1.reporting_pb2 import (
17+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
1818
AggregationConfig as PBAggregationConfig,
1919
)
20-
from frequenz.api.reporting.v1.reporting_pb2 import FilterOption as PBFilterOption
21-
from frequenz.api.reporting.v1.reporting_pb2 import (
20+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
21+
FilterOption as PBFilterOption,
22+
)
23+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
2224
MetricConnections as PBMetricConnections,
2325
)
24-
from frequenz.api.reporting.v1.reporting_pb2 import (
26+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
2527
ReceiveAggregatedMicrogridComponentsDataStreamRequest as PBAggregatedStreamRequest,
2628
)
27-
from frequenz.api.reporting.v1.reporting_pb2 import (
29+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
2830
ReceiveAggregatedMicrogridComponentsDataStreamResponse as PBAggregatedStreamResponse,
2931
)
30-
from frequenz.api.reporting.v1.reporting_pb2 import (
32+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
3133
ReceiveMicrogridComponentsDataStreamRequest as PBReceiveMicrogridComponentsDataStreamRequest,
3234
)
33-
from frequenz.api.reporting.v1.reporting_pb2 import (
35+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
3436
ReceiveMicrogridComponentsDataStreamResponse as PBReceiveMicrogridComponentsDataStreamResponse,
3537
)
36-
from frequenz.api.reporting.v1.reporting_pb2 import (
38+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
3739
ReceiveMicrogridSensorsDataStreamRequest as PBReceiveMicrogridSensorsDataStreamRequest,
3840
)
39-
from frequenz.api.reporting.v1.reporting_pb2 import (
41+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
4042
ReceiveMicrogridSensorsDataStreamResponse as PBReceiveMicrogridSensorsDataStreamResponse,
4143
)
42-
from frequenz.api.reporting.v1.reporting_pb2 import (
44+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
4345
ResamplingOptions as PBResamplingOptions,
4446
)
45-
from frequenz.api.reporting.v1.reporting_pb2 import TimeFilter as PBTimeFilter
46-
from frequenz.api.reporting.v1.reporting_pb2_grpc import ReportingStub
47+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import TimeFilter as PBTimeFilter
48+
from frequenz.api.reporting.v1alpha10.reporting_pb2_grpc import ReportingStub
4749
from frequenz.channels import Receiver
4850
from frequenz.client.base.channel import ChannelOptions
4951
from frequenz.client.base.client import BaseApiClient
5052
from frequenz.client.base.exception import ClientNotConnected
5153
from frequenz.client.base.streaming import GrpcStreamBroadcaster
52-
from frequenz.client.common.metric import Metric
54+
from frequenz.client.common.metrics import Metric
5355
from google.protobuf.timestamp_pb2 import Timestamp as PBTimestamp
5456

5557
from ._batch_unroll_receiver import BatchUnrollReceiver
@@ -250,7 +252,7 @@ def _receive_microgrid_components_data_batch(
250252
or not self._components_data_streams[stream_key].is_running
251253
):
252254
microgrid_components_pb = [
253-
PBMicrogridComponentIDs(microgrid_id=mid, component_ids=cids)
255+
PBMicrogridComponentIDs(microgrid_id=mid, electrical_component_ids=cids)
254256
for mid, cids in microgrid_components
255257
]
256258

@@ -294,7 +296,7 @@ def dt2ts(dt: datetime) -> PBTimestamp:
294296
)
295297

296298
metric_conns_pb = [
297-
PBMetricConnections(metric=metric.to_proto(), connections=[])
299+
PBMetricConnections(metric=metric.value, connections=[])
298300
for metric in metrics
299301
]
300302

@@ -477,7 +479,7 @@ def dt2ts(dt: datetime) -> PBTimestamp:
477479

478480
metric_conns_pb = [
479481
PBMetricConnections(
480-
metric=metric.to_proto(),
482+
metric=metric.value,
481483
connections=[],
482484
)
483485
for metric in metrics
@@ -556,7 +558,7 @@ def receive_aggregated_data(
556558

557559
aggregation_config = PBAggregationConfig(
558560
microgrid_id=microgrid_id,
559-
metric=metric.to_proto(),
561+
metric=metric.value,
560562
aggregation_formula=aggregation_formula,
561563
)
562564

src/frequenz/client/reporting/_types.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,23 @@
55

66
from collections.abc import Iterable, Iterator
77
from dataclasses import dataclass
8-
from datetime import datetime, timezone
8+
from datetime import datetime
99
from typing import Any, NamedTuple
1010

1111
# pylint: disable=no-name-in-module
12-
from frequenz.api.reporting.v1.reporting_pb2 import (
12+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
1313
ReceiveAggregatedMicrogridComponentsDataStreamResponse as PBAggregatedStreamResponse,
1414
)
15-
from frequenz.api.reporting.v1.reporting_pb2 import (
15+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
1616
ReceiveMicrogridComponentsDataStreamResponse as PBReceiveMicrogridComponentsDataStreamResponse,
1717
)
18-
from frequenz.api.reporting.v1.reporting_pb2 import (
18+
from frequenz.api.reporting.v1alpha10.reporting_pb2 import (
1919
ReceiveMicrogridSensorsDataStreamResponse as PBReceiveMicrogridSensorsDataStreamResponse,
2020
)
2121

2222
# pylint: enable=no-name-in-module
23-
from frequenz.client.common.metric import Metric
23+
from frequenz.client.common.metrics import Metric
24+
from frequenz.client.common.proto import datetime_from_proto, enum_from_proto
2425

2526

2627
class MetricSample(NamedTuple):
@@ -92,8 +93,8 @@ def __iter__(self) -> Iterator[MetricSample]:
9293
for item in items:
9394
cid = getattr(item, self.id_attr)
9495
for sample in getattr(item, "metric_samples", []):
95-
ts = sample.sampled_at.ToDatetime().replace(tzinfo=timezone.utc)
96-
met = Metric.from_proto(sample.metric).name
96+
ts = datetime_from_proto(sample.sample_time)
97+
met = enum_from_proto(sample.metric, Metric, allow_invalid=False).name
9798

9899
# Handle simple_metric
99100
if sample.value.HasField("simple_metric"):
@@ -126,8 +127,8 @@ def __iter__(self) -> Iterator[MetricSample]:
126127
ts, mid, cid, f"{met}_bound_{i}_upper", bound.upper
127128
)
128129

129-
for state in getattr(item, "states", []):
130-
ts = state.sampled_at.ToDatetime().replace(tzinfo=timezone.utc)
130+
for state in getattr(item, "state_snapshots", []):
131+
ts = datetime_from_proto(state.origin_time)
131132
for category, category_items in {
132133
"state": getattr(state, "states", []),
133134
"warning": getattr(state, "warnings", []),
@@ -150,7 +151,10 @@ def __init__(self, data_pb: PBReceiveMicrogridComponentsDataStreamResponse):
150151
data_pb: The underlying protobuf message.
151152
"""
152153
super().__init__(
153-
data_pb, id_attr="component_id", items_attr="components", has_bounds=True
154+
data_pb,
155+
id_attr="electrical_component_id",
156+
items_attr="components",
157+
has_bounds=True,
154158
)
155159

156160

@@ -177,9 +181,7 @@ class AggregatedMetric:
177181
def sample(self) -> MetricSample:
178182
"""Return the aggregated metric sample."""
179183
return MetricSample(
180-
timestamp=self._data_pb.sample.sample_time.ToDatetime().replace(
181-
tzinfo=timezone.utc
182-
),
184+
timestamp=datetime_from_proto(self._data_pb.sample.sample_time),
183185
microgrid_id=self._data_pb.aggregation_config.microgrid_id,
184186
component_id=self._data_pb.aggregation_config.aggregation_formula,
185187
metric=Metric(self._data_pb.aggregation_config.metric).name,

src/frequenz/client/reporting/cli/__main__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from datetime import datetime, timedelta
99
from typing import AsyncIterator
1010

11-
from frequenz.client.common.metric import Metric
11+
from frequenz.client.common.metrics import Metric
1212

1313
from frequenz.client.reporting import ReportingApiClient
1414
from frequenz.client.reporting._types import MetricSample

tests/test_client_reporting.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from unittest.mock import MagicMock, patch
66

77
import pytest
8-
from frequenz.api.reporting.v1.reporting_pb2_grpc import ReportingStub
8+
from frequenz.api.reporting.v1alpha10.reporting_pb2_grpc import ReportingStub
99
from frequenz.client.base.channel import ChannelOptions
1010
from frequenz.client.base.client import BaseApiClient
1111

0 commit comments

Comments
 (0)