models

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2023 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrAccountNotFound = errors.New("account not found")
View Source
var ErrNoEnoughAccountsAvailable = errors.New("no enough accounts available")

Functions

func CountAvailable

func CountAvailable[T AvailabilityMarker](resources []T) int

CountAvailable return the number of resources not in use

func CountOlder

func CountOlder(duration time.Duration, accounts []Resource) (int, error)

CountOlder returns the number of accounts in use for more than N day

func CountToCleanup

func CountToCleanup[T AvailabilityMarker](resources []T) int

CountToCleanup return the number of accounts to cleanup

func CountUsed

func CountUsed[T AvailabilityMarker](resources []T) int

CountUsed return the number of resources in use

func DeletePlacementByServiceUuid

func DeletePlacementByServiceUuid(dbpool *pgxpool.Pool, accountProvider AwsAccountProvider, serviceUuid string) error

DeletePlacementByServiceUuid deletes a placement by ServiceUuid

func Sort

func Sort[T Sortable](accounts []T, by string) []T

func Used

func Used[T AvailabilityMarker](resources []T) []T

Used return the resources in use

Types

type Account

type Account struct {
	Resource
}

type AvailabilityMarker

type AvailabilityMarker interface {
	// contains filtered or unexported methods
}

type AwsAccount

type AwsAccount struct {
	Account
	Kind string `json:"kind"` // "aws_account"

	Name         string `json:"name"`
	AccountID    string `json:"account_id"`
	Zone         string `json:"zone"`
	HostedZoneID string `json:"hosted_zone_id"`

	ConanStatus    string    `json:"conan_status,omitempty"`
	ConanTimestamp time.Time `json:"conan_timestamp,omitempty"`
	ConanHostname  string    `json:"conan_hostname,omitempty"`
}

func (AwsAccount) GetUpdatedAt

func (a AwsAccount) GetUpdatedAt() time.Time

func (AwsAccount) NameInt

func (a AwsAccount) NameInt() int

type AwsAccountProvider

type AwsAccountProvider interface {
	FetchByName(name string) (AwsAccount, error)
	FetchAll() ([]AwsAccount, error)
	FetchAllToCleanup() ([]AwsAccount, error)
	FetchAllSorted(by string) ([]AwsAccount, error)
	FetchAllByServiceUuid(serviceUuid string) ([]AwsAccount, error)
	Request(service_uuid string, count int, annotations map[string]string) ([]AwsAccountWithCreds, error)
	MarkForCleanup(name string) error
	MarkForCleanupByServiceUuid(serviceUuid string) error
	DecryptSecret(encrypted string) (string, error)
}

AwsAccountProvider interface to interact with different databases: dynamodb and postgresql

type AwsAccountWithCreds

type AwsAccountWithCreds struct {
	AwsAccount

	Credentials []any `json:"credentials"`
}

type AwsIamKey

type AwsIamKey struct {
	Kind               string `json:"kind"` // "aws_iam_key"
	Name               string `json:"name"`
	AwsAccessKeyID     string `json:"aws_access_key_id"`
	AwsSecretAccessKey string `json:"aws_secret_access_key"`
}

type Model

type Model struct {
	ID        int       `json:"id"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

type Placement

type Placement struct {
	Model

	ServiceUuid string            `json:"service_uuid"`
	Resources   []any             `json:"resources,omitempty"`
	Annotations map[string]string `json:"annotations"`
	Request     any               `json:"request"`
}

func GetPlacement

func GetPlacement(dbpool *pgxpool.Pool, id int) (*Placement, error)

GetPlacement returns a placement by ID

func GetPlacementByServiceUuid

func GetPlacementByServiceUuid(dbpool *pgxpool.Pool, serviceUuid string) (*Placement, error)

GetPlacementByServiceUuid returns a placement by service_uuid

func (*Placement) Delete

func (p *Placement) Delete(dbpool *pgxpool.Pool, accountProvider AwsAccountProvider) error

func (*Placement) LoadResources

func (p *Placement) LoadResources(accountProvider AwsAccountProvider) error

func (*Placement) Render

func (p *Placement) Render(w http.ResponseWriter, r *http.Request) error

func (*Placement) Save

func (p *Placement) Save(dbpool *pgxpool.Pool) error

type PlacementWithCreds

type PlacementWithCreds struct {
	Placement

	Resources []any `json:"resources"`
}

type Placements

type Placements []Placement

func GetAllPlacements

func GetAllPlacements(dbpool *pgxpool.Pool) (Placements, error)

func (Placements) Render

func (p Placements) Render(w http.ResponseWriter, r *http.Request) error

type Resource

type Resource struct {
	Model

	ServiceUuid string `json:"service_uuid"`
	Available   bool   `json:"available"`
	ToCleanup   bool   `json:"to_cleanup"`

	Annotations map[string]string `json:"annotations"`
}

type ResourceWithCreds

type ResourceWithCreds struct {
	Resource

	Credentials []any `json:"credentials"`
}

type Sortable

type Sortable interface {
	NameInt() int
	GetUpdatedAt() time.Time
}

type Token

type Token struct {
	Model

	Kind       string    `json:"kind"`
	Name       string    `json:"name"`
	Role       string    `json:"role"`
	Iat        int64     `json:"iat"`
	Exp        int64     `json:"exp"`
	Expiration time.Time `json:"expiration"`
	Valid      bool      `json:"valid"`
}

func CreateToken

func CreateToken(claims map[string]any) (Token, error)

func FetchTokenById

func FetchTokenById(dbpool *pgxpool.Pool, id int) (Token, error)

func (Token) Invalidate

func (t Token) Invalidate(dbpool *pgxpool.Pool) error

Invalidate the token

func (Token) Save

func (t Token) Save(dbpool *pgxpool.Pool) (id int, err error)

type Tokens

type Tokens []Token

func FetchAllTokens

func FetchAllTokens(dbpool *pgxpool.Pool) (Tokens, error)

func (*Tokens) Render

func (t *Tokens) Render(w http.ResponseWriter, r *http.Request) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL