feat(bridges): next generation bridge management
This commit is contained in:
parent
20fad30a06
commit
05285a4ae6
12 changed files with 329 additions and 89 deletions
|
@ -1,3 +1,4 @@
|
|||
import enum
|
||||
from datetime import datetime
|
||||
from typing import List
|
||||
|
||||
|
@ -6,13 +7,20 @@ from app.extensions import db
|
|||
from app.models import AbstractConfiguration, AbstractResource
|
||||
|
||||
|
||||
class BridgeConf(AbstractConfiguration):
|
||||
group_id = db.Column(db.Integer, db.ForeignKey("group.id"), nullable=False)
|
||||
provider = db.Column(db.String(20), nullable=False)
|
||||
method = db.Column(db.String(20), nullable=False)
|
||||
number = db.Column(db.Integer())
|
||||
class ProviderAllocation(enum.Enum):
|
||||
RANDOM = "random"
|
||||
COST = "cost"
|
||||
|
||||
group = db.relationship("Group", back_populates="bridgeconfs")
|
||||
|
||||
class BridgeConf(AbstractConfiguration):
|
||||
pool_id = db.Column(db.Integer, db.ForeignKey("pool.id"), nullable=False)
|
||||
method = db.Column(db.String(20), nullable=False)
|
||||
target_number = db.Column(db.Integer())
|
||||
max_number = db.Column(db.Integer())
|
||||
expiry_hours = db.Column(db.Integer())
|
||||
provider_allocation = db.Column(db.Enum(ProviderAllocation))
|
||||
|
||||
pool = db.relationship("Pool", back_populates="bridgeconfs")
|
||||
bridges = db.relationship("Bridge", back_populates="conf")
|
||||
|
||||
@property
|
||||
|
@ -36,12 +44,13 @@ class BridgeConf(AbstractConfiguration):
|
|||
@classmethod
|
||||
def csv_header(cls) -> List[str]:
|
||||
return super().csv_header() + [
|
||||
"group_id", "provider", "method", "description", "number"
|
||||
"pool_id", "provider", "method", "description", "target_number", "max_number", "expiry_hours"
|
||||
]
|
||||
|
||||
|
||||
class Bridge(AbstractResource):
|
||||
conf_id = db.Column(db.Integer, db.ForeignKey("bridge_conf.id"), nullable=False)
|
||||
provider = db.Column(db.String(), nullable=False)
|
||||
terraform_updated = db.Column(db.DateTime(), nullable=True)
|
||||
nickname = db.Column(db.String(255), nullable=True)
|
||||
fingerprint = db.Column(db.String(255), nullable=True)
|
||||
|
@ -53,9 +62,9 @@ class Bridge(AbstractResource):
|
|||
@property
|
||||
def brn(self) -> BRN:
|
||||
return BRN(
|
||||
group_id=self.conf.group_id,
|
||||
group_id=0,
|
||||
product="bridge",
|
||||
provider=self.conf.provider,
|
||||
provider=self.provider,
|
||||
resource_type="bridge",
|
||||
resource_id=str(self.id)
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue