From 55e6217b71ff3e3733cc863145fccbcc8b1af6a1 Mon Sep 17 00:00:00 2001 From: Brooke Bryan Date: Wed, 15 Apr 2020 21:40:11 +0100 Subject: [PATCH] Support for pool select mode --- docs/connectors/pool.md | 2 ++ v1/connector/pool.go | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/docs/connectors/pool.md b/docs/connectors/pool.md index 43672d6..849fdc7 100644 --- a/docs/connectors/pool.md +++ b/docs/connectors/pool.md @@ -14,6 +14,7 @@ As with all configs, the standard wrapper is used. "specVersion": "v1", // Must be set to the correct version "selector": {}, // May be used to apply this to a subset of charges "spec": { + "selectMode": "default", // Can be set to: "default" or "priorityMerge" "restriction": "unrestricted", // Can be set to: "unrestricted", "noRepeat" or "lowestUsage" "connectors": [ // Connectors contains the list of connectors in the pool { @@ -29,6 +30,7 @@ As with all configs, the standard wrapper is used. ## Spec Definition FieldName | Required | Definition ---:|---|:--- +selectMode | false | "default" or "priorityMerge" restriction | false | "unrestricted" (Default) , "noRepeat" or "lowestUsage" [connectors](#connector-definition) | false | Non-empty list of the connectors in the pool diff --git a/v1/connector/pool.go b/v1/connector/pool.go index ed61506..125a5f7 100644 --- a/v1/connector/pool.go +++ b/v1/connector/pool.go @@ -23,8 +23,19 @@ const ( RestrictionLowestUsage Restriction = "lowestUsage" ) +type SelectMode string + +const ( + // SelectModeDefault groups all connectors in the pool, and orders by priority + SelectModeDefault SelectMode = "default" + + // SelectModePriorityMerge selects a single connector from each priority (after weighting shuffle) + SelectModePriorityMerge SelectMode = "priorityMerge" +) + // Pool is used to select a group of connectors and the order that they should be used in type Pool struct { + SelectMode SelectMode `json:"selectMode" yaml:"selectMode" validate:"oneof=default priorityMerge"` Restriction Restriction `json:"restriction" yaml:"restriction" validate:"oneof=unrestricted noRepeat lowestUsage"` Connectors []PoolItem `json:"connectors" yaml:"connectors" validate:"gt=0,dive"` }