Files
tasks/tools/tdbg/flags.go
ShivamandGitHub 6f2377b4b2 tdbg: --describe task queue partition (#6450)
## 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
2024-09-09 08:10:15 -04:00

95 lines
4.3 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.
package tdbg
// Flags used to specify cli command line arguments
var (
FlagAddress = "address"
FlagHistoryAddress = "history-address"
FlagNamespaceID = "namespace-id"
FlagNamespace = "namespace"
FlagNamespaceAlias = []string{"n"}
FlagShardID = "shard-id"
FlagWorkflowID = "workflow-id"
FlagWorkflowIDAlias = []string{"wid"}
FlagRunID = "run-id"
FlagRunIDAlias = []string{"rid"}
FlagNumberOfShards = "number-of-shards"
FlagMinEventID = "min-event-id"
FlagMaxEventID = "max-event-id"
FlagTaskQueue = "task-queue"
FlagTaskQueueType = "task-queue-type"
FlagContextTimeout = "context-timeout"
FlagContextTimeoutAlias = []string{"ct"}
FlagCluster = "cluster"
FlagTargetCluster = "target-cluster"
FlagPageSize = "pagesize"
FlagFrom = "from"
FlagPrintFullyDetail = "print-full"
FlagPrintJSON = "print-json"
FlagHeartbeatedWithin = "heartbeated-within"
FlagInputFilename = "input-filename"
FlagOutputFilename = "output-filename"
FlagClusterMembershipRole = "role"
FlagSkipErrorMode = "skip-errors"
FlagTaskID = "task-id"
FlagTaskCategory = "task-category"
FlagTaskVisibilityTimestamp = "task-timestamp"
FlagMinVisibilityTimestamp = "min-visibility-ts"
FlagMaxVisibilityTimestamp = "max-visibility-ts"
FlagEnableTLS = "tls"
FlagTLSCertPath = "tls-cert-path"
FlagTLSKeyPath = "tls-key-path"
FlagTLSCaPath = "tls-ca-path"
FlagTLSDisableHostVerification = "tls-disable-host-verification"
FlagTLSServerName = "tls-server-name"
FlagLastMessageID = "last-message-id"
FlagJobToken = "job-token"
FlagReason = "reason"
FlagYes = "yes"
FlagMore = "more"
FlagMinEventVersion = "min-event-version"
FlagMaxEventVersion = "max-event-version"
FlagMinTaskID = "min-task-id"
FlagMaxTaskID = "max-task-id"
FlagDLQType = "dlq-type"
FlagQueueType = "queue-type"
FlagDLQVersion = "dlq-version"
FlagMaxMessageCount = "max-message-count"
FlagProtoType = "type"
FlagHexData = "hex-data"
FlagHexFile = "hex-file"
FlagBinaryFile = "binary-file"
FlagBase64Data = "base64-data"
FlagBase64File = "base64-file"
FlagTaskCategoryID = "task-category-id"
FlagEncoding = "encoding"
FlagPartitionID = "partition-id"
FlagStickyName = "sticky-name"
FlagBuildIDs = "select-build-id"
FlagUnversioned = "select-unversioned"
FlagAllActive = "select-all-active"
)