mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed? <!-- Describe what has changed in this PR --> Added a new `tdbg` subcommand : --describe-task-queue-partition which shall output the following statistics, per partition, for better visibility: - [TQ statistics ](https://github.com/temporalio/api/blob/2ed0a18b7ad6b6052a15da6d9d81bb97e05bc359/temporal/api/taskqueue/v1/message.proto#L92) - List of pollers for each build ID - More metrics defined via `InternalTaskQueueStatus` struct (see this PR itself) ## Usage ``` ./tdbg taskqueue describe-task-queue-partition --task-queue "hello-world" --partition-id 2 ``` ## Options/Flags for the command ``` OPTIONS: --namespace-id value NamespaceId (default: "default") --task-queue value Task Queue name --task-queue-type value Task Queue type: activity, workflow, nexus (experimental) (default: "TASK_QUEUE_TYPE_WORKFLOW") --partition-id value Partition ID (default: 0) --sticky-name value Sticky Name for a task queue partition, if present --select-build-id value Build IDs (accepts multiple inputs) --select-unversioned Unversioned task queue partition (default: true) --select-all-active All active task queue versions (default: true) --help, -h show help (default: false) ``` ## Sample output ``` { "versionsInfoInternal": { "": { "physicalTaskQueueInfo": { "taskQueueStats": { "approximateBacklogCount": "1", "approximateBacklogAge": "81.937463s" }, "internalTaskQueueStatus": { "readLevel": "1", "taskIdBlock": { "startId": "2", "endId": "100000" } } } } } } ``` ## Why? <!-- Tell your future self why have you made these changes --> - better visibility into TQ metrics per partition ## How did you test it? <!-- How have you verified this change? Tested locally? Added a unit test? Checked in staging env? --> - 100% unit test coverage - Added more tests for DescribeTaskQueuePartition specifically - Tested the command locally ## Potential risks <!-- Assuming the worst case, what can be broken when deploying this change to production? --> None, this is an internal tool. ## Is hotfix candidate? <!-- Is this PR a hotfix candidate or does it require a notification to be sent to the broader community? (Yes/No) --> nope
290 lines
8.5 KiB
Go
290 lines
8.5 KiB
Go
// The MIT License
|
|
//
|
|
// Copyright (c) 2020 Temporal Technologies Inc. All rights reserved.
|
|
//
|
|
// Copyright (c) 2020 Uber Technologies, Inc.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
// Code generated by protoc-gen-go-helpers. DO NOT EDIT.
|
|
package taskqueue
|
|
|
|
import (
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
// Marshal an object of type TaskVersionDirective to the protobuf v3 wire format
|
|
func (val *TaskVersionDirective) Marshal() ([]byte, error) {
|
|
return proto.Marshal(val)
|
|
}
|
|
|
|
// Unmarshal an object of type TaskVersionDirective from the protobuf v3 wire format
|
|
func (val *TaskVersionDirective) Unmarshal(buf []byte) error {
|
|
return proto.Unmarshal(buf, val)
|
|
}
|
|
|
|
// Size returns the size of the object, in bytes, once serialized
|
|
func (val *TaskVersionDirective) Size() int {
|
|
return proto.Size(val)
|
|
}
|
|
|
|
// Equal returns whether two TaskVersionDirective values are equivalent by recursively
|
|
// comparing the message's fields.
|
|
// For more information see the documentation for
|
|
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
|
|
func (this *TaskVersionDirective) Equal(that interface{}) bool {
|
|
if that == nil {
|
|
return this == nil
|
|
}
|
|
|
|
var that1 *TaskVersionDirective
|
|
switch t := that.(type) {
|
|
case *TaskVersionDirective:
|
|
that1 = t
|
|
case TaskVersionDirective:
|
|
that1 = &t
|
|
default:
|
|
return false
|
|
}
|
|
|
|
return proto.Equal(this, that1)
|
|
}
|
|
|
|
// Marshal an object of type InternalTaskQueueStatus to the protobuf v3 wire format
|
|
func (val *InternalTaskQueueStatus) Marshal() ([]byte, error) {
|
|
return proto.Marshal(val)
|
|
}
|
|
|
|
// Unmarshal an object of type InternalTaskQueueStatus from the protobuf v3 wire format
|
|
func (val *InternalTaskQueueStatus) Unmarshal(buf []byte) error {
|
|
return proto.Unmarshal(buf, val)
|
|
}
|
|
|
|
// Size returns the size of the object, in bytes, once serialized
|
|
func (val *InternalTaskQueueStatus) Size() int {
|
|
return proto.Size(val)
|
|
}
|
|
|
|
// Equal returns whether two InternalTaskQueueStatus values are equivalent by recursively
|
|
// comparing the message's fields.
|
|
// For more information see the documentation for
|
|
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
|
|
func (this *InternalTaskQueueStatus) Equal(that interface{}) bool {
|
|
if that == nil {
|
|
return this == nil
|
|
}
|
|
|
|
var that1 *InternalTaskQueueStatus
|
|
switch t := that.(type) {
|
|
case *InternalTaskQueueStatus:
|
|
that1 = t
|
|
case InternalTaskQueueStatus:
|
|
that1 = &t
|
|
default:
|
|
return false
|
|
}
|
|
|
|
return proto.Equal(this, that1)
|
|
}
|
|
|
|
// Marshal an object of type TaskQueueVersionInfoInternal to the protobuf v3 wire format
|
|
func (val *TaskQueueVersionInfoInternal) Marshal() ([]byte, error) {
|
|
return proto.Marshal(val)
|
|
}
|
|
|
|
// Unmarshal an object of type TaskQueueVersionInfoInternal from the protobuf v3 wire format
|
|
func (val *TaskQueueVersionInfoInternal) Unmarshal(buf []byte) error {
|
|
return proto.Unmarshal(buf, val)
|
|
}
|
|
|
|
// Size returns the size of the object, in bytes, once serialized
|
|
func (val *TaskQueueVersionInfoInternal) Size() int {
|
|
return proto.Size(val)
|
|
}
|
|
|
|
// Equal returns whether two TaskQueueVersionInfoInternal values are equivalent by recursively
|
|
// comparing the message's fields.
|
|
// For more information see the documentation for
|
|
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
|
|
func (this *TaskQueueVersionInfoInternal) Equal(that interface{}) bool {
|
|
if that == nil {
|
|
return this == nil
|
|
}
|
|
|
|
var that1 *TaskQueueVersionInfoInternal
|
|
switch t := that.(type) {
|
|
case *TaskQueueVersionInfoInternal:
|
|
that1 = t
|
|
case TaskQueueVersionInfoInternal:
|
|
that1 = &t
|
|
default:
|
|
return false
|
|
}
|
|
|
|
return proto.Equal(this, that1)
|
|
}
|
|
|
|
// Marshal an object of type PhysicalTaskQueueInfo to the protobuf v3 wire format
|
|
func (val *PhysicalTaskQueueInfo) Marshal() ([]byte, error) {
|
|
return proto.Marshal(val)
|
|
}
|
|
|
|
// Unmarshal an object of type PhysicalTaskQueueInfo from the protobuf v3 wire format
|
|
func (val *PhysicalTaskQueueInfo) Unmarshal(buf []byte) error {
|
|
return proto.Unmarshal(buf, val)
|
|
}
|
|
|
|
// Size returns the size of the object, in bytes, once serialized
|
|
func (val *PhysicalTaskQueueInfo) Size() int {
|
|
return proto.Size(val)
|
|
}
|
|
|
|
// Equal returns whether two PhysicalTaskQueueInfo values are equivalent by recursively
|
|
// comparing the message's fields.
|
|
// For more information see the documentation for
|
|
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
|
|
func (this *PhysicalTaskQueueInfo) Equal(that interface{}) bool {
|
|
if that == nil {
|
|
return this == nil
|
|
}
|
|
|
|
var that1 *PhysicalTaskQueueInfo
|
|
switch t := that.(type) {
|
|
case *PhysicalTaskQueueInfo:
|
|
that1 = t
|
|
case PhysicalTaskQueueInfo:
|
|
that1 = &t
|
|
default:
|
|
return false
|
|
}
|
|
|
|
return proto.Equal(this, that1)
|
|
}
|
|
|
|
// Marshal an object of type TaskQueuePartition to the protobuf v3 wire format
|
|
func (val *TaskQueuePartition) Marshal() ([]byte, error) {
|
|
return proto.Marshal(val)
|
|
}
|
|
|
|
// Unmarshal an object of type TaskQueuePartition from the protobuf v3 wire format
|
|
func (val *TaskQueuePartition) Unmarshal(buf []byte) error {
|
|
return proto.Unmarshal(buf, val)
|
|
}
|
|
|
|
// Size returns the size of the object, in bytes, once serialized
|
|
func (val *TaskQueuePartition) Size() int {
|
|
return proto.Size(val)
|
|
}
|
|
|
|
// Equal returns whether two TaskQueuePartition values are equivalent by recursively
|
|
// comparing the message's fields.
|
|
// For more information see the documentation for
|
|
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
|
|
func (this *TaskQueuePartition) Equal(that interface{}) bool {
|
|
if that == nil {
|
|
return this == nil
|
|
}
|
|
|
|
var that1 *TaskQueuePartition
|
|
switch t := that.(type) {
|
|
case *TaskQueuePartition:
|
|
that1 = t
|
|
case TaskQueuePartition:
|
|
that1 = &t
|
|
default:
|
|
return false
|
|
}
|
|
|
|
return proto.Equal(this, that1)
|
|
}
|
|
|
|
// Marshal an object of type BuildIdRedirectInfo to the protobuf v3 wire format
|
|
func (val *BuildIdRedirectInfo) Marshal() ([]byte, error) {
|
|
return proto.Marshal(val)
|
|
}
|
|
|
|
// Unmarshal an object of type BuildIdRedirectInfo from the protobuf v3 wire format
|
|
func (val *BuildIdRedirectInfo) Unmarshal(buf []byte) error {
|
|
return proto.Unmarshal(buf, val)
|
|
}
|
|
|
|
// Size returns the size of the object, in bytes, once serialized
|
|
func (val *BuildIdRedirectInfo) Size() int {
|
|
return proto.Size(val)
|
|
}
|
|
|
|
// Equal returns whether two BuildIdRedirectInfo values are equivalent by recursively
|
|
// comparing the message's fields.
|
|
// For more information see the documentation for
|
|
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
|
|
func (this *BuildIdRedirectInfo) Equal(that interface{}) bool {
|
|
if that == nil {
|
|
return this == nil
|
|
}
|
|
|
|
var that1 *BuildIdRedirectInfo
|
|
switch t := that.(type) {
|
|
case *BuildIdRedirectInfo:
|
|
that1 = t
|
|
case BuildIdRedirectInfo:
|
|
that1 = &t
|
|
default:
|
|
return false
|
|
}
|
|
|
|
return proto.Equal(this, that1)
|
|
}
|
|
|
|
// Marshal an object of type TaskForwardInfo to the protobuf v3 wire format
|
|
func (val *TaskForwardInfo) Marshal() ([]byte, error) {
|
|
return proto.Marshal(val)
|
|
}
|
|
|
|
// Unmarshal an object of type TaskForwardInfo from the protobuf v3 wire format
|
|
func (val *TaskForwardInfo) Unmarshal(buf []byte) error {
|
|
return proto.Unmarshal(buf, val)
|
|
}
|
|
|
|
// Size returns the size of the object, in bytes, once serialized
|
|
func (val *TaskForwardInfo) Size() int {
|
|
return proto.Size(val)
|
|
}
|
|
|
|
// Equal returns whether two TaskForwardInfo values are equivalent by recursively
|
|
// comparing the message's fields.
|
|
// For more information see the documentation for
|
|
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
|
|
func (this *TaskForwardInfo) Equal(that interface{}) bool {
|
|
if that == nil {
|
|
return this == nil
|
|
}
|
|
|
|
var that1 *TaskForwardInfo
|
|
switch t := that.(type) {
|
|
case *TaskForwardInfo:
|
|
that1 = t
|
|
case TaskForwardInfo:
|
|
that1 = &t
|
|
default:
|
|
return false
|
|
}
|
|
|
|
return proto.Equal(this, that1)
|
|
}
|