package app import "fmt" import "github.com/seaweedfs/seaweedfs/weed/admin/dash" import "github.com/seaweedfs/seaweedfs/weed/util" templ TopicDetails(data dash.TopicDetailsData) {

Topic Details: {data.TopicName}

Last updated: {data.LastUpdated.Format("2006-01-02 15:04:05")}
Partitions

{fmt.Sprintf("%d", len(data.Partitions))}

Schema Fields

{fmt.Sprintf("%d", len(data.Schema))}

Total Messages

{fmt.Sprintf("%d", data.MessageCount)}

Total Size

{util.BytesToHumanReadable(uint64(data.TotalSize))}

Publishers

{fmt.Sprintf("%d", len(data.Publishers))}

Subscribers

{fmt.Sprintf("%d", len(data.Subscribers))}

Consumer Group Offsets

{fmt.Sprintf("%d", len(data.ConsumerGroupOffsets))}

Saved consumer progress checkpoints

Topic Information
Namespace:
{data.Namespace}
Name:
{data.Name}
Full Name:
{data.TopicName}
Created:
{data.CreatedAt.Format("2006-01-02 15:04:05")}
Retention Policy
Status:
if data.Retention.Enabled { Enabled } else { Disabled }
Duration:
if data.Retention.Enabled { {fmt.Sprintf("%d", data.Retention.DisplayValue)} {data.Retention.DisplayUnit} } else { No retention configured }
Schema Definition
if len(data.Schema) == 0 {

No schema information available

} else {
for _, field := range data.Schema { }
Field Type Required
{field.Name} {field.Type} if field.Required { } else { }
}
Partitions
if len(data.Partitions) == 0 {
No Partitions Found

No partitions are configured for this topic.

} else {
for _, partition := range data.Partitions { }
Partition ID Leader Broker Follower Broker Messages Size Last Data Time Created
{fmt.Sprintf("%d", partition.ID)} {partition.LeaderBroker} if partition.FollowerBroker != "" { {partition.FollowerBroker} } else { None } {fmt.Sprintf("%d", partition.MessageCount)} {util.BytesToHumanReadable(uint64(partition.TotalSize))} if !partition.LastDataTime.IsZero() { {partition.LastDataTime.Format("2006-01-02 15:04:05")} } else { Never } {partition.CreatedAt.Format("2006-01-02 15:04:05")}
}
Active Publishers {fmt.Sprintf("%d", len(data.Publishers))}
if len(data.Publishers) == 0 {
No active publishers found for this topic.
} else {
for _, publisher := range data.Publishers { }
Publisher Partition Broker Status Published Acknowledged Last Seen
{publisher.PublisherName} {fmt.Sprintf("%d", publisher.PartitionID)} {publisher.Broker} if publisher.IsActive { Active } else { Inactive } if publisher.LastPublishedOffset > 0 { {fmt.Sprintf("%d", publisher.LastPublishedOffset)} } else { - } if publisher.LastAckedOffset > 0 { {fmt.Sprintf("%d", publisher.LastAckedOffset)} } else { - } if !publisher.LastSeenTime.IsZero() { {publisher.LastSeenTime.Format("15:04:05")} } else { - }
}
Active Subscribers {fmt.Sprintf("%d", len(data.Subscribers))}
if len(data.Subscribers) == 0 {
No active subscribers found for this topic.
} else {
for _, subscriber := range data.Subscribers { }
Consumer Group Consumer ID Partition Broker Status Received Acknowledged Last Seen
{subscriber.ConsumerGroup} {subscriber.ConsumerID} {fmt.Sprintf("%d", subscriber.PartitionID)} {subscriber.Broker} if subscriber.IsActive { Active } else { Inactive } if subscriber.LastReceivedOffset > 0 { {fmt.Sprintf("%d", subscriber.LastReceivedOffset)} } else { - } if subscriber.CurrentOffset > 0 { {fmt.Sprintf("%d", subscriber.CurrentOffset)} } else { - } if !subscriber.LastSeenTime.IsZero() { {subscriber.LastSeenTime.Format("15:04:05")} } else { - }
}
Consumer Group Offsets {fmt.Sprintf("%d", len(data.ConsumerGroupOffsets))}
if len(data.ConsumerGroupOffsets) == 0 {
No consumer group offsets found for this topic.
} else {
for _, offset := range data.ConsumerGroupOffsets { }
Consumer Group Partition Offset Last Updated
{offset.ConsumerGroup} {fmt.Sprintf("%d", offset.PartitionID)} {fmt.Sprintf("%d", offset.Offset)} {offset.LastUpdated.Format("2006-01-02 15:04:05")}
}
}