diff --git a/cmd/tools/admin/main.go b/cmd/tools/admin/main.go index 5e9b7414..6a73bda1 100644 --- a/cmd/tools/admin/main.go +++ b/cmd/tools/admin/main.go @@ -22,10 +22,22 @@ package main import ( "os" + "time" "github.com/codegangsta/cli" "github.com/uber/cherami-server/common" "github.com/uber/cherami-server/tools/admin" + toolscommon "github.com/uber/cherami-server/tools/common" +) + +const ( + usageCGStartTime = `Consume messages newer than this time in unix-nanos (default: Now; ie, consume no previously published messages)` + usageCGLockTimeoutSeconds = `Acknowledgement timeout for prefetched/received messages` + usageCGMaxDeliveryCount = `Max number of times a message is delivered before it is sent to the DLQ (dead-letter queue)` + usageCGSkipOlderMessagesInSeconds = `Skip messages older than this duration, in seconds ('0' to skip none)` + usageCGDelaySeconds = `Delay, in seconds, to defer all messages by` + usageCGOwnerEmail = "Owner email" + usageCGZoneConfig = "Zone configs for multi-zone CG. For each zone, specify \"Zone,PreferedActiveZone\"; ex: \"zone1,false\"" ) func main() { @@ -95,13 +107,13 @@ func main() { cli.IntFlag{ Name: "consumed_messages_retention, cr", - Value: 3600, + Value: toolscommon.DefaultConsumedMessagesRetention, Usage: "Consumed messages retention period specified in seconds. Default is 1 hour.", }, cli.IntFlag{ Name: "unconsumed_messages_retention, ur", - Value: 7200, + Value: toolscommon.DefaultUnconsumedMessagesRetention, Usage: "Unconsumed messages retention period specified in seconds. Default is two hours.", }, cli.StringFlag{ @@ -111,7 +123,7 @@ func main() { }, cli.StringFlag{ Name: "owner_email, oe", - Value: "", + Value: cliHelper.GetDefaultOwnerEmail(), Usage: "The owner's email who commits the request. Default is the $USER@uber.com", }, }, @@ -126,33 +138,37 @@ func main() { Flags: []cli.Flag{ cli.IntFlag{ Name: "start_time, s", - Value: 0, - Usage: "Start this consumer group at this UNIX timestamp; by default we start at this Unix timestamp (seconds since 1970-1-1)", + Value: int(time.Now().Unix()), + Usage: usageCGStartTime, }, cli.IntFlag{ Name: "lock_timeout_seconds, l", - Value: 60, - Usage: "Ack timeout for each message", + Value: toolscommon.DefaultLockTimeoutSeconds, + Usage: usageCGLockTimeoutSeconds, }, cli.IntFlag{ Name: "max_delivery_count, m", - Value: 10, - Usage: "Maximum delivery count for a message before it sents to dead-letter queue", + Value: toolscommon.DefaultMaxDeliveryCount, + Usage: usageCGMaxDeliveryCount, }, cli.IntFlag{ Name: "skip_older_messages_in_seconds, k", - Value: 0, - Usage: "Skip messages older than this duration in seconds ('0' to skip none).", + Value: toolscommon.DefaultSkipOlderMessageSeconds, + Usage: usageCGSkipOlderMessagesInSeconds, }, cli.IntFlag{ - Name: "delay_seonds, d", - Value: 0, - Usage: "Delay to add to every message, in seconds.", + Name: "delay_seconds, d", + Value: toolscommon.DefaultDelayMessageSeconds, + Usage: usageCGDelaySeconds, }, cli.StringFlag{ Name: "owner_email, oe", - Value: "", - Usage: "The owner's email who commits the request. Default is the $USER@uber.com", + Value: cliHelper.GetDefaultOwnerEmail(), + Usage: usageCGOwnerEmail, + }, + cli.StringSliceFlag{ + Name: "zone_config, zc", + Usage: usageCGZoneConfig, }, }, Action: func(c *cli.Context) { @@ -295,27 +311,22 @@ func main() { Flags: []cli.Flag{ cli.StringFlag{ Name: "status, s", - Value: "enabled", Usage: "status: enabled | disabled | sendonly | recvonly", }, cli.IntFlag{ Name: "consumed_messages_retention, cr", - Value: 3600, Usage: "Consumed messages retention period specified in seconds. Default is one hour.", }, cli.IntFlag{ Name: "unconsumed_messages_retention, ur", - Value: 7200, Usage: "Unconsumed messages retention period specified in seconds. Default is two hours.", }, cli.StringFlag{ Name: "checksum_option, co", - Value: "", Usage: "Checksum_options, can be one of the crcIEEE, md5", }, cli.StringFlag{ Name: "owner_email, oe", - Value: "", Usage: "The updated owner's email", }, cli.StringSliceFlag{ @@ -334,37 +345,30 @@ func main() { Flags: []cli.Flag{ cli.StringFlag{ Name: "status, s", - Value: "enabled", Usage: "status: enabled | disabled", }, cli.IntFlag{ Name: "lock_timeout_seconds, l", - Value: 60, Usage: "Ack timeout for each message", }, cli.IntFlag{ Name: "max_delivery_count, m", - Value: 10, Usage: "Maximum delivery count for a message before it sents to dead-letter queue", }, cli.IntFlag{ Name: "skip_older_messages_in_seconds, k", - Value: 7200, Usage: "Skip messages older than this duration in seconds.", }, cli.IntFlag{ Name: "delay_seonds, d", - Value: 0, Usage: "Delay to add to every message, in seconds.", }, cli.StringFlag{ Name: "owner_email, oe", - Value: "", Usage: "The updated owner's email", }, cli.StringFlag{ Name: "active_zone, az", - Value: "", Usage: "The updated active zone", }, cli.StringSliceFlag{ diff --git a/cmd/tools/cli/main.go b/cmd/tools/cli/main.go index 802f4d36..ce4aec1d 100644 --- a/cmd/tools/cli/main.go +++ b/cmd/tools/cli/main.go @@ -27,18 +27,17 @@ import ( "github.com/codegangsta/cli" "github.com/uber/cherami-server/common" lib "github.com/uber/cherami-server/tools/cli" + toolscommon "github.com/uber/cherami-server/tools/common" ) const ( - strLockTimeoutSeconds = `Acknowledgement timeout for prefetched/received messages` - - strMaxDeliveryCount = "Maximum number of times a message is delivered\n\tbefore it is sent to the dead-letter queue (DLQ)" - - strSkipOlderMessagesInSeconds = `Skip messages older than this duration in seconds ('0' to skip none)` - intSkipOlderMessagesInSeconds = 0 // 0 -> skip none - - strDelaySeconds = `Delay to introduce to all messages, in seconds.` - intDelaySeconds = 0 // zero delay, by default + usageCGStartTime = `Consume messages newer than this time in unix-nanos (default: Now; ie, consume no previously published messages)` + usageCGLockTimeoutSeconds = `Acknowledgement timeout for prefetched/received messages` + usageCGMaxDeliveryCount = `Max number of times a message is delivered before it is sent to the DLQ (dead-letter queue)` + usageCGSkipOlderMessagesInSeconds = `Skip messages older than this duration, in seconds ('0' to skip none)` + usageCGDelaySeconds = `Delay, in seconds, to defer all messages by` + usageCGOwnerEmail = "Owner email" + usageCGZoneConfig = "Zone configs for multi-zone CG. For each zone, specify \"Zone,PreferedActiveZone\"; ex: \"zone1,false\"" ) func main() { @@ -103,13 +102,13 @@ func main() { }, cli.IntFlag{ Name: "consumed_messages_retention, cr", - Value: 3600, - Usage: "Consumed messages retention period specified in seconds. Default is 1 hour.", + Value: toolscommon.DefaultConsumedMessagesRetention, + Usage: "Consumed messages retention period specified in seconds (default: 1 day)", }, cli.IntFlag{ Name: "unconsumed_messages_retention, ur", - Value: 7200, - Usage: "Unconsumed messages retention period specified in seconds. Default is two hours.", + Value: toolscommon.DefaultUnconsumedMessagesRetention, + Usage: "Unconsumed messages retention period specified in seconds (default: 3 days)", }, cli.StringFlag{ Name: "checksum_option, co", @@ -123,7 +122,7 @@ func main() { }, cli.StringSliceFlag{ Name: "zone_config, zc", - Usage: "Zone configs for multi_zone destinations. Format for each zone should be \"ZoneName,AllowPublish,AllowConsume,ReplicaCount\". For example: \"zone1,true,true,3\"", + Usage: "Zone configs for multi_zone destinations. Format for each zone should be \"Zone,AllowPublish,AllowConsume,ReplicaCount\". Ex: \"zone1,true,true,3\"", }, cli.StringFlag{ Name: "kafka_cluster, kc", @@ -146,36 +145,36 @@ func main() { cli.IntFlag{ Name: "start_time, s", Value: int(time.Now().Unix()), - Usage: "Consume messages newer than this UNIX timestamp.\n\tDefault: now (i.e. consume no existing messages)\n\tUse `date -d \"2017-06-11 6:42:42 -7:00\" +%s` to determine a value for this.", + Usage: usageCGStartTime, }, cli.IntFlag{ Name: "lock_timeout_seconds, l", - Value: 60, - Usage: strLockTimeoutSeconds, + Value: toolscommon.DefaultLockTimeoutSeconds, + Usage: usageCGLockTimeoutSeconds, }, cli.IntFlag{ Name: "max_delivery_count, m", - Value: 10, - Usage: strMaxDeliveryCount, + Value: toolscommon.DefaultMaxDeliveryCount, + Usage: usageCGMaxDeliveryCount, }, cli.IntFlag{ Name: "skip_older_messages_in_seconds, k", - Value: intSkipOlderMessagesInSeconds, - Usage: strSkipOlderMessagesInSeconds, + Value: toolscommon.DefaultSkipOlderMessageSeconds, + Usage: usageCGSkipOlderMessagesInSeconds, }, cli.IntFlag{ Name: "delay_seconds, d", - Value: intDelaySeconds, - Usage: strDelaySeconds, + Value: toolscommon.DefaultDelayMessageSeconds, + Usage: usageCGDelaySeconds, }, cli.StringFlag{ Name: "owner_email, oe", Value: cliHelper.GetDefaultOwnerEmail(), - Usage: "The owner's email. Default is the $USER@uber.com", + Usage: usageCGOwnerEmail, }, cli.StringSliceFlag{ Name: "zone_config, zc", - Usage: "Zone configs for multi_zone consumer group. Format for each zone should be \"ZoneName,PreferedActiveZone\". For example: \"zone1,false\"", + Usage: usageCGZoneConfig, }, }, Action: func(c *cli.Context) { @@ -249,27 +248,22 @@ func main() { Flags: []cli.Flag{ cli.StringFlag{ Name: "status, s", - Value: "enabled", Usage: "status: enabled | disabled | sendonly | recvonly", }, cli.IntFlag{ Name: "consumed_messages_retention, cr", - Value: 3600, Usage: "Consumed messages retention period specified in seconds. Default is one hour.", }, cli.IntFlag{ Name: "unconsumed_messages_retention, ur", - Value: 7200, Usage: "Unconsumed messages retention period specified in seconds. Default is two hours.", }, cli.StringFlag{ Name: "checksum_option, co", - Value: "", Usage: "Checksum_options, can be one of the crcIEEE, md5", }, cli.StringFlag{ Name: "owner_email, oe", - Value: cliHelper.GetDefaultOwnerEmail(), Usage: "The updated owner's email", }, cli.StringSliceFlag{ @@ -288,37 +282,30 @@ func main() { Flags: []cli.Flag{ cli.StringFlag{ Name: "status, s", - Value: "enabled", Usage: "status: enabled | disabled", }, cli.IntFlag{ Name: "lock_timeout_seconds, l", - Value: 60, - Usage: strLockTimeoutSeconds, + Usage: usageCGLockTimeoutSeconds, }, cli.IntFlag{ Name: "max_delivery_count, m", - Value: 10, - Usage: strMaxDeliveryCount, + Usage: usageCGMaxDeliveryCount, }, cli.IntFlag{ Name: "skip_older_messages_in_seconds, k", - Value: intSkipOlderMessagesInSeconds, - Usage: strSkipOlderMessagesInSeconds, + Usage: usageCGSkipOlderMessagesInSeconds, }, cli.IntFlag{ Name: "delay_seconds, d", - Value: intDelaySeconds, - Usage: strDelaySeconds, + Usage: usageCGDelaySeconds, }, cli.StringFlag{ Name: "owner_email, oe", - Value: cliHelper.GetDefaultOwnerEmail(), - Usage: "The updated owner's email", + Usage: usageCGOwnerEmail, }, cli.StringFlag{ Name: "active_zone, az", - Value: "", Usage: "The updated active zone", }, cli.StringSliceFlag{ diff --git a/tools/common/lib.go b/tools/common/lib.go index 46e4c9d0..5b1072fc 100644 --- a/tools/common/lib.go +++ b/tools/common/lib.go @@ -71,6 +71,10 @@ const ( DestinationType = "DST" // ConsumerGroupType is the name for entity type for consumer group in listEntityOps ConsumerGroupType = "CG" + // DefaultUnconsumedMessagesRetention is the default value for unconsumed messages retention + DefaultUnconsumedMessagesRetention = 3 * 24 * 3600 // 3 days + // DefaultConsumedMessagesRetention is the default value for consumed messages retention + DefaultConsumedMessagesRetention = 1 * 24 * 3600 // 1 day // MinUnconsumedMessagesRetentionForMultiZoneDest is the minimum unconsumed retention allowed MinUnconsumedMessagesRetentionForMultiZoneDest = 3 * 24 * 3600 // MinConsumedMessagesRetention is the minimum consumed retention @@ -81,18 +85,26 @@ const ( MinUnconsumedMessagesRetention = 180 // MaxUnconsumedMessagesRetention is the maximum unconsumed retention MaxUnconsumedMessagesRetention = 7 * 24 * 3600 + // DefaultLockTimeoutSeconds is the default value for lock timeout seconds + DefaultLockTimeoutSeconds = 60 // MinLockTimeoutSeconds is the minimum lock timeout seconds MinLockTimeoutSeconds = 10 // MaxLockTimeoutSeconds is the maximum lock timeout seconds MaxLockTimeoutSeconds = 3600 + // DefaultMaxDeliveryCount is the default value for max delivery count + DefaultMaxDeliveryCount = 10 // MinMaxDeliveryCount is the minimum value for max delivery count MinMaxDeliveryCount = 1 // MaxMaxDeliveryCount is the maximum value for max delivery count MaxMaxDeliveryCount = 1000 + // DefaultSkipOlderMessageSeconds is the default value for skipping older message + DefaultSkipOlderMessageSeconds = 0 // MinSkipOlderMessageSeconds is the minimum value for skipping older message MinSkipOlderMessageSeconds = 1800 // MaxSkipOlderMessageSeconds is the maximum value for skipping older message MaxSkipOlderMessageSeconds = 2 * 24 * 3600 + // DefaultDelayMessageSeconds is the default value for delaying message + DefaultDelayMessageSeconds = 0 // MinDelayMessageSeconds is the minimum value for delaying message MinDelayMessageSeconds = 0 // MaxDelayMessageSeconds is the maximum value for delaying message