Skip to content

Commit 33f70b1

Browse files
authored
Merge pull request #316 from EddDoubleD/topics-partition-consumer-stats
feat: add record statistics of partitions and topics from proto
2 parents 4ff4686 + 1b01046 commit 33f70b1

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

topic/src/main/java/tech/ydb/topic/description/ConsumerStats.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,9 @@ public Builder setBytesRead(MultipleWindowsStat bytesRead) {
7373
this.bytesRead = bytesRead;
7474
return this;
7575
}
76+
77+
public ConsumerStats build() {
78+
return new ConsumerStats(this);
79+
}
7680
}
7781
}

topic/src/main/java/tech/ydb/topic/description/PartitionStats.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,5 +95,9 @@ public Builder setPartitionNodeId(int partitionNodeId) {
9595
this.partitionNodeId = partitionNodeId;
9696
return this;
9797
}
98+
99+
public PartitionStats build() {
100+
return new PartitionStats(this);
101+
}
98102
}
99103
}

topic/src/main/java/tech/ydb/topic/impl/TopicClientImpl.java

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,17 @@
2424
import tech.ydb.topic.TopicRpc;
2525
import tech.ydb.topic.description.Codec;
2626
import tech.ydb.topic.description.Consumer;
27+
import tech.ydb.topic.description.ConsumerStats;
2728
import tech.ydb.topic.description.MeteringMode;
29+
import tech.ydb.topic.description.MultipleWindowsStat;
2830
import tech.ydb.topic.description.PartitionInfo;
31+
import tech.ydb.topic.description.PartitionStats;
2932
import tech.ydb.topic.description.SupportedCodecs;
3033
import tech.ydb.topic.description.TopicDescription;
3134
import tech.ydb.topic.read.AsyncReader;
3235
import tech.ydb.topic.read.SyncReader;
3336
import tech.ydb.topic.read.impl.AsyncReaderImpl;
37+
import tech.ydb.topic.read.impl.OffsetsRangeImpl;
3438
import tech.ydb.topic.read.impl.SyncReaderImpl;
3539
import tech.ydb.topic.settings.AlterConsumerSettings;
3640
import tech.ydb.topic.settings.AlterPartitioningSettings;
@@ -260,8 +264,9 @@ private TopicDescription mapDescribeTopic(YdbTopic.DescribeTopicResult result) {
260264
.setPartitionId(partition.getPartitionId())
261265
.setActive(partition.getActive())
262266
.setChildPartitionIds(partition.getChildPartitionIdsList())
263-
.setParentPartitionIds(partition.getParentPartitionIdsList());
264-
// TODO: read partition stats
267+
.setParentPartitionIds(partition.getParentPartitionIdsList())
268+
.setPartitionStats(fromProto(partition.getPartitionStats()));
269+
265270
partitions.add(partitionBuilder.build());
266271
}
267272
description.setPartitions(partitions);
@@ -285,8 +290,7 @@ private TopicDescription mapDescribeTopic(YdbTopic.DescribeTopicResult result) {
285290
consumerSupportedCodecsBuilder.addCodec(codecFromProto(codec));
286291
}
287292
consumerBuilder.setSupportedCodecs(consumerSupportedCodecsBuilder.build());
288-
289-
// TODO: set consumer stats
293+
consumerBuilder.setStats(fromProto(consumer.getConsumerStats()));
290294

291295
consumers.add(consumerBuilder.build());
292296
}
@@ -399,6 +403,47 @@ private static YdbTopic.SupportedCodecs toProto(SupportedCodecs supportedCodecs)
399403
return codecsBuilder.build();
400404
}
401405

406+
private static PartitionStats fromProto(YdbTopic.PartitionStats partitionStats) {
407+
return PartitionStats.newBuilder()
408+
.setPartitionOffsets(
409+
new OffsetsRangeImpl(
410+
partitionStats.getPartitionOffsets().getStart(),
411+
partitionStats.getPartitionOffsets().getEnd()
412+
)
413+
).setStoreSizeBytes(
414+
partitionStats.getStoreSizeBytes()
415+
).setLastWriteTime(
416+
ProtobufUtils.protoToInstant(partitionStats.getLastWriteTime())
417+
).setMaxWriteTimeLag(
418+
ProtobufUtils.protoToDuration(partitionStats.getMaxWriteTimeLag())
419+
).setBytesWritten(
420+
new MultipleWindowsStat(
421+
partitionStats.getBytesWritten().getPerMinute(),
422+
partitionStats.getBytesWritten().getPerHour(),
423+
partitionStats.getBytesWritten().getPerDay()
424+
)
425+
).setPartitionNodeId(
426+
partitionStats.getPartitionNodeId()
427+
).build();
428+
}
429+
430+
private static ConsumerStats fromProto(YdbTopic.Consumer.ConsumerStats consumerStats) {
431+
return ConsumerStats.newBuilder()
432+
.setMinPartitionsLastReadTime(
433+
ProtobufUtils.protoToInstant(consumerStats.getMinPartitionsLastReadTime())
434+
).setMaxReadTimeLag(
435+
ProtobufUtils.protoToDuration(consumerStats.getMaxReadTimeLag())
436+
).setMaxWriteTimeLag(
437+
ProtobufUtils.protoToDuration(consumerStats.getMaxWriteTimeLag())
438+
).setBytesRead(
439+
new MultipleWindowsStat(
440+
consumerStats.getBytesRead().getPerMinute(),
441+
consumerStats.getBytesRead().getPerHour(),
442+
consumerStats.getBytesRead().getPerDay()
443+
)
444+
).build();
445+
}
446+
402447
@Override
403448
public void close() {
404449
logger.debug("TopicClientImpl.close() is called");

0 commit comments

Comments
 (0)