Skip to content

Commit

Permalink
Argu 6.2
Browse files Browse the repository at this point in the history
  • Loading branch information
bartelink committed Feb 19, 2024
1 parent ab988a2 commit 882dcbf
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 29 deletions.
4 changes: 2 additions & 2 deletions tools/Propulsion.Tool/Args.fs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ module Cosmos =
let containerId = p.GetResult(Container, fun () -> c.CosmosContainer)
let leasesContainerName = p.GetResult(LeaseContainer, fun () -> containerId + p.GetResult(Suffix, "-aux"))
let checkpointInterval = TimeSpan.hours 1.
member val MaybeLogLagInterval = p.TryPostProcessResult(LagFreqM, TimeSpan.minutes)
member val MaybeLogLagInterval = p.TryGetResult(LagFreqM, TimeSpan.minutes)
member _.CreateLeasesContainer() = connector.CreateLeasesContainer(databaseId, leasesContainerName)
member _.ConnectFeed() = connector.ConnectFeed(databaseId, containerId, leasesContainerName)
member x.CreateCheckpointStore(group, cache, storeLog) = async {
Expand Down Expand Up @@ -270,7 +270,7 @@ module Dynamo =
type IndexerArguments(c, p: ParseResults<IndexParameters>) =
member val GapsLimit = p.GetResult(IndexParameters.GapsLimit, 10)
member val ImportJsonFiles = p.GetResults IndexParameters.DynamoDbJson
member val TrancheId = p.TryPostProcessResult(IndexParameters.IndexPartitionId, string >> AppendsPartitionId.parse)
member val TrancheId = p.TryGetResult(IndexParameters.IndexPartitionId, string >> AppendsPartitionId.parse)
// Larger optimizes for not needing to use TransactWriteItems as frequently
// Smaller will trigger more items and reduce read costs for Sources reading from the tail
member val MinItemSize = p.GetResult(IndexParameters.MinSizeK, 48)
Expand Down
48 changes: 22 additions & 26 deletions tools/Propulsion.Tool/Program.fs
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@ and [<NoEquality; NoComparison; RequireSubcommand>] ProjectParameters =
| [<AltCommandLine "-Z"; Unique>] FromTail
| [<AltCommandLine "-F"; Unique>] Follow
| [<AltCommandLine "-b"; Unique>] MaxItems of int
| [<CliPrefix(CliPrefix.None); Last>] Stats of ParseResults<StatsParameters>
| [<CliPrefix(CliPrefix.None); Last>] Stats of ParseResults<SourceParameters>
| [<CliPrefix(CliPrefix.None); Last>] Kafka of ParseResults<KafkaParameters>
| [<CliPrefix(CliPrefix.None); Last>] SyncCosmos of ParseResults<SyncCosmosParameters>
interface IArgParserTemplate with
member a.Usage = a |> function
| ConsumerGroupName _ -> "Projector instance context name."
Expand All @@ -56,20 +57,22 @@ and [<NoEquality; NoComparison; RequireSubcommand>] ProjectParameters =
| MaxItems _ -> "Controls checkpointing granularity by adjusting the batch size being loaded from the feed. Default: Unlimited"
| Stats _ -> "Do not emit events, only stats."
| Kafka _ -> "Project to Kafka."
| SyncCosmos _ -> "Feed Events into specified Store."
and [<NoEquality; NoComparison; RequireSubcommand>] KafkaParameters =
| [<AltCommandLine "-t"; Unique; MainCommand>] Topic of string
| [<AltCommandLine "-b"; Unique>] Broker of string
| [<CliPrefix(CliPrefix.None); Last>] Cosmos of ParseResults<Args.Cosmos.Parameters>
| [<CliPrefix(CliPrefix.None); Last>] Dynamo of ParseResults<Args.Dynamo.Parameters>
| [<CliPrefix(CliPrefix.None); Last>] Mdb of ParseResults<Args.Mdb.Parameters>
| [<CliPrefix(CliPrefix.None); Last>] Source of ParseResults<SourceParameters>
interface IArgParserTemplate with
member a.Usage = a |> function
| Topic _ -> "Specify target topic. Default: Use $env:PROPULSION_KAFKA_TOPIC"
| Broker _ -> "Specify target broker. Default: Use $env:PROPULSION_KAFKA_BROKER"
| Cosmos _ -> "Specify CosmosDB parameters."
| Dynamo _ -> "Specify DynamoDB parameters."
| Mdb _ -> "Specify MessageDb parameters."
and [<NoEquality; NoComparison; RequireSubcommand>] StatsParameters =
| Source _ -> "Specify Source."
and [<NoEquality; NoComparison; RequireSubcommand>] SyncCosmosParameters =
| [<CliPrefix(CliPrefix.None); Last>] Source of ParseResults<SourceParameters>
interface IArgParserTemplate with
member a.Usage = a |> function
| Source _ -> "Specify Source."
and [<NoEquality; NoComparison; RequireSubcommand>] SourceParameters =
| [<CliPrefix(CliPrefix.None); Last; Unique>] Cosmos of ParseResults<Args.Cosmos.Parameters>
| [<CliPrefix(CliPrefix.None); Last; Unique>] Dynamo of ParseResults<Args.Dynamo.Parameters>
| [<CliPrefix(CliPrefix.None); Last; Unique>] Mdb of ParseResults<Args.Mdb.Parameters>
Expand All @@ -88,12 +91,12 @@ module Checkpoints =
match p.GetSubCommand() with
| CheckpointParameters.Cosmos p -> Choice1Of3 (Args.Cosmos.Arguments (c, p))
| CheckpointParameters.Dynamo p -> Choice2Of3 (Args.Dynamo.Arguments (c, p))
| CheckpointParameters.Mdb p -> Choice3Of3 (Args.Mdb.Arguments (c, p))
| CheckpointParameters.Mdb p -> Choice3Of3 (Args.Mdb.Arguments (c, p))
| x -> p.Raise $"unexpected subcommand %A{x}"

let readOrOverride (c, p: ParseResults<CheckpointParameters>, ct) = task {
let a = Arguments(c, p)
let source, tranche, group = p.GetResult Source, p.GetResult Tranche, p.GetResult Group
let source, tranche, group = p.GetResult CheckpointParameters.Source, p.GetResult Tranche, p.GetResult Group
let! store, storeSpecFragment, overridePosition = task {
let cache = Equinox.Cache (AppName, sizeMb = 1)
match a.StoreArgs with
Expand Down Expand Up @@ -123,28 +126,22 @@ module Project =

type [<NoEquality; NoComparison>] SourceArgs = Cosmos of Args.Cosmos.Arguments | Dynamo of Args.Dynamo.Arguments | Mdb of Args.Mdb.Arguments
type KafkaArguments(c: Args.Configuration, p: ParseResults<KafkaParameters>) =
member val Broker = p.GetResult(Broker, fun () -> c.KafkaBroker)
member val Topic = p.GetResult(Topic, fun () -> c.KafkaTopic)
member val StoreArgs =
match p.GetSubCommand() with
| KafkaParameters.Cosmos p -> Cosmos (Args.Cosmos.Arguments (c, p))
| KafkaParameters.Dynamo p -> Dynamo (Args.Dynamo.Arguments (c, p))
| KafkaParameters.Mdb p -> Mdb (Args.Mdb.Arguments (c, p))
| x -> p.Raise $"unexpected subcommand %A{x}"

type StatsArguments(c, p: ParseResults<StatsParameters>) =
member val Broker = p.GetResult(Broker, fun () -> c.KafkaBroker)
member val Topic = p.GetResult(Topic, fun () -> c.KafkaTopic)
member val Source = SourceArguments(c, p.GetResult KafkaParameters.Source)
and SourceArguments(c, p: ParseResults<SourceParameters>) =
member val StoreArgs =
match p.GetSubCommand() with
| StatsParameters.Cosmos p -> Cosmos (Args.Cosmos.Arguments (c, p))
| StatsParameters.Dynamo p -> Dynamo (Args.Dynamo.Arguments (c, p))
| StatsParameters.Mdb p -> Mdb (Args.Mdb.Arguments (c, p))
| SourceParameters.Cosmos p -> Cosmos (Args.Cosmos.Arguments (c, p))
| SourceParameters.Dynamo p -> Dynamo (Args.Dynamo.Arguments (c, p))
| SourceParameters.Mdb p -> Mdb (Args.Mdb.Arguments (c, p))

type Arguments(c, p: ParseResults<ProjectParameters>) =
member val IdleDelay = TimeSpan.ms 10.
member val StoreArgs =
match p.GetSubCommand() with
| Kafka a -> KafkaArguments(c, a).StoreArgs
| Stats a -> StatsArguments(c, a).StoreArgs
| Kafka a -> KafkaArguments(c, a).Source.StoreArgs
| Stats a -> SourceArguments(c, a).StoreArgs
| x -> p.Raise $"unexpected subcommand %A{x}"

type Stats(statsInterval, statesInterval, logExternalStats) =
Expand Down Expand Up @@ -239,7 +236,6 @@ type Arguments(c: Args.Configuration, p: ParseResults<Parameters>) =
| Index a -> do! Args.Dynamo.index (c, a)
| Project a -> do! Project.run (c, a)
| x -> p.Raise $"unexpected subcommand %A{x}" }
/// Parse the commandline; Throws ArguParseException for `-h`/`--help` args and/or malformed arguments
static member Parse argv =
let parseResults = ArgumentParser.Create().ParseCommandLine argv
Arguments(Args.Configuration(EnvVar.tryGet, EnvVar.getOr parseResults.Raise), parseResults)
Expand Down
2 changes: 1 addition & 1 deletion tools/Propulsion.Tool/Propulsion.Tool.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<ItemGroup>
<PackageReference Include="MinVer" Version="4.2.0" PrivateAssets="All" />

<PackageReference Include="Argu" Version="6.1.4" />
<PackageReference Include="Argu" Version="6.2.0" />
<!-- Required or there'll be an exception at runtime re missing support DLLs when using RBAC -->
<PackageReference Include="AWSSDK.SecurityToken" Version="3.7.1.177" />
<!-- Required for AWS SSO resolution -->
Expand Down

0 comments on commit 882dcbf

Please sign in to comment.