persistence

package
v0.6.2 Latest Latest
Warning

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

Go to latest
Published: Feb 25, 2019 License: MIT Imports: 19 Imported by: 0

Documentation

Overview

Package persistence provides an implementation of datalayer.go DataLayer interface. This particular implementation is for Postgres and uses the models in pkg/models/models.go. The migrations are in migrations/[0-9]_create_acyl_models_up.sql.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func PGClient

func PGClient(config *config.PGConfig) (*sqlx.DB, error)

PGClient returns a Postgres DB client.

Types

type AWSConfig

type AWSConfig = config.AWSConfig

type AWSCreds

type AWSCreds = config.AWSCreds

type Cleaner

type Cleaner struct {
	// DB must be an initialized SQL client
	DB *sqlx.DB
	// Maximum ages for old DB records
	DestroyedEnvRecordsMaxAge, EventLogsMaxAge time.Duration
	// LogFunc is a function that logs a formatted string somewhere
	LogFunc func(string, ...interface{})
}

Cleaner is an object that performs data model clean up operations

func (*Cleaner) Clean

func (c *Cleaner) Clean()

Clean runs all data cleanup operations

func (*Cleaner) PruneDestroyedEnvRecords

func (c *Cleaner) PruneDestroyedEnvRecords(olderThan time.Duration) (err error)

PruneDestroyedEnvRecords deletes all QAEnvironment records with status Destroyed or Failed with a Created timestamp earlier than time.Now() - olderThan. olderThan must be > 0

func (*Cleaner) PruneEventLogs

func (c *Cleaner) PruneEventLogs(olderThan time.Duration) error

PruneEventLogs deletes all EventLog records with a Created timestamp earlier than time.Now() - olderThan. olderThan must be > 0

type DataLayer

type DataLayer interface {
	CreateQAEnvironment(*QAEnvironment) error
	GetQAEnvironment(string) (*QAEnvironment, error)
	GetQAEnvironmentConsistently(string) (*QAEnvironment, error)
	GetQAEnvironments() ([]QAEnvironment, error)
	DeleteQAEnvironment(string) error
	GetQAEnvironmentsByStatus(status string) ([]QAEnvironment, error)
	GetRunningQAEnvironments() ([]QAEnvironment, error)
	GetQAEnvironmentsByRepoAndPR(string, uint) ([]QAEnvironment, error)
	GetQAEnvironmentsByRepo(repo string) ([]QAEnvironment, error)
	GetQAEnvironmentBySourceSHA(sourceSHA string) (*QAEnvironment, error)
	GetQAEnvironmentsBySourceBranch(sourceBranch string) ([]QAEnvironment, error)
	GetQAEnvironmentsByUser(user string) ([]QAEnvironment, error)
	SetQAEnvironmentStatus(string, EnvironmentStatus) error
	SetQAEnvironmentRepoData(string, *RepoRevisionData) error
	SetQAEnvironmentRefMap(string, RefMap) error
	SetQAEnvironmentCommitSHAMap(string, RefMap) error
	SetQAEnvironmentCreated(string, time.Time) error
	GetExtantQAEnvironments(string, uint) ([]QAEnvironment, error)
	SetAminoEnvironmentID(name string, did int) error
	SetAminoServiceToPort(name string, serviceToPort map[string]int64) error
	SetAminoKubernetesNamespace(name, namespace string) error
	AddEvent(string, string) error
	Search(opts models.EnvSearchParameters) ([]QAEnvironment, error)
	GetMostRecent(n uint) ([]QAEnvironment, error)
	Close() error
	HelmDataLayer
	K8sEnvDataLayer
	EventLoggerDataLayer
}

DataLayer describes an object that interacts with the persistant data store

type EnvironmentStatus

type EnvironmentStatus = models.EnvironmentStatus

type EventLoggerDataLayer

type EventLoggerDataLayer interface {
	GetEventLogByID(id uuid.UUID) (*models.EventLog, error)
	GetEventLogsByEnvName(name string) ([]models.EventLog, error)
	GetEventLogsByRepoAndPR(repo string, pr uint) ([]models.EventLog, error)
	CreateEventLog(elog *models.EventLog) error
	SetEventLogEnvName(id uuid.UUID, name string) error
	AppendToEventLog(id uuid.UUID, msg string) error
	DeleteEventLog(id uuid.UUID) error
	DeleteEventLogsByEnvName(name string) (uint, error)
	DeleteEventLogsByRepoAndPR(repo string, pr uint) (uint, error)
}

EventLoggerDataLayer desribes an object that stores event log data

type FakeDataLayer

type FakeDataLayer struct {
	// contains filtered or unexported fields
}

FakeDataLayer is a fake implementation of DataLayer that persists data in-memory, for testing purposes

func NewFakeDataLayer

func NewFakeDataLayer() *FakeDataLayer

func NewPopulatedFakeDataLayer

func NewPopulatedFakeDataLayer(qaenvs []models.QAEnvironment, k8senvs []models.KubernetesEnvironment, helmreleases []models.HelmRelease) *FakeDataLayer

NewPopulatedFakeDataLayer returns a FakeDataLayer populated with the supplied data. Input data is not checked for consistency.

func (*FakeDataLayer) AddEvent

func (fdl *FakeDataLayer) AddEvent(name string, msg string) error

func (*FakeDataLayer) AppendToEventLog

func (fdl *FakeDataLayer) AppendToEventLog(id uuid.UUID, msg string) error

func (*FakeDataLayer) Close

func (fdl *FakeDataLayer) Close() error

func (*FakeDataLayer) CreateEventLog

func (fdl *FakeDataLayer) CreateEventLog(elog *models.EventLog) error

func (*FakeDataLayer) CreateHelmReleasesForEnv

func (fdl *FakeDataLayer) CreateHelmReleasesForEnv(releases []models.HelmRelease) error

func (*FakeDataLayer) CreateK8sEnv

func (fdl *FakeDataLayer) CreateK8sEnv(env *models.KubernetesEnvironment) error

func (*FakeDataLayer) CreateQAEnvironment

func (fdl *FakeDataLayer) CreateQAEnvironment(qa *QAEnvironment) error

func (*FakeDataLayer) DeleteEventLog

func (fdl *FakeDataLayer) DeleteEventLog(id uuid.UUID) error

func (*FakeDataLayer) DeleteEventLogsByEnvName

func (fdl *FakeDataLayer) DeleteEventLogsByEnvName(name string) (uint, error)

func (*FakeDataLayer) DeleteEventLogsByRepoAndPR

func (fdl *FakeDataLayer) DeleteEventLogsByRepoAndPR(repo string, pr uint) (uint, error)

func (*FakeDataLayer) DeleteHelmReleasesForEnv

func (fdl *FakeDataLayer) DeleteHelmReleasesForEnv(name string) (uint, error)

func (*FakeDataLayer) DeleteK8sEnv

func (fdl *FakeDataLayer) DeleteK8sEnv(name string) error

func (*FakeDataLayer) DeleteQAEnvironment

func (fdl *FakeDataLayer) DeleteQAEnvironment(name string) error

func (*FakeDataLayer) GetEventLogByID

func (fdl *FakeDataLayer) GetEventLogByID(id uuid.UUID) (*models.EventLog, error)

func (*FakeDataLayer) GetEventLogsByEnvName

func (fdl *FakeDataLayer) GetEventLogsByEnvName(name string) ([]models.EventLog, error)

func (*FakeDataLayer) GetEventLogsByRepoAndPR

func (fdl *FakeDataLayer) GetEventLogsByRepoAndPR(repo string, pr uint) ([]models.EventLog, error)

func (*FakeDataLayer) GetExtantQAEnvironments

func (fdl *FakeDataLayer) GetExtantQAEnvironments(repo string, pr uint) ([]QAEnvironment, error)

func (*FakeDataLayer) GetHelmReleasesForEnv

func (fdl *FakeDataLayer) GetHelmReleasesForEnv(name string) ([]models.HelmRelease, error)

func (*FakeDataLayer) GetK8sEnv

func (fdl *FakeDataLayer) GetK8sEnv(name string) (*models.KubernetesEnvironment, error)

func (*FakeDataLayer) GetK8sEnvsByNamespace

func (fdl *FakeDataLayer) GetK8sEnvsByNamespace(ns string) ([]models.KubernetesEnvironment, error)

func (*FakeDataLayer) GetMostRecent

func (fdl *FakeDataLayer) GetMostRecent(n uint) ([]QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironment

func (fdl *FakeDataLayer) GetQAEnvironment(name string) (*QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironmentBySourceSHA

func (fdl *FakeDataLayer) GetQAEnvironmentBySourceSHA(sourceSHA string) (*QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironmentConsistently

func (fdl *FakeDataLayer) GetQAEnvironmentConsistently(name string) (*QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironments

func (fdl *FakeDataLayer) GetQAEnvironments() ([]QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironmentsByRepo

func (fdl *FakeDataLayer) GetQAEnvironmentsByRepo(repo string) ([]QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironmentsByRepoAndPR

func (fdl *FakeDataLayer) GetQAEnvironmentsByRepoAndPR(repo string, pr uint) ([]QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironmentsBySourceBranch

func (fdl *FakeDataLayer) GetQAEnvironmentsBySourceBranch(sourceBranch string) ([]QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironmentsByStatus

func (fdl *FakeDataLayer) GetQAEnvironmentsByStatus(status string) ([]QAEnvironment, error)

func (*FakeDataLayer) GetQAEnvironmentsByUser

func (fdl *FakeDataLayer) GetQAEnvironmentsByUser(user string) ([]QAEnvironment, error)

func (*FakeDataLayer) GetRunningQAEnvironments

func (fdl *FakeDataLayer) GetRunningQAEnvironments() ([]QAEnvironment, error)

func (*FakeDataLayer) Load

func (fdl *FakeDataLayer) Load(dir string) error

Load reads JSON files in dir and loads them, overwriting any existing data

func (*FakeDataLayer) Save

func (fdl *FakeDataLayer) Save(dir string) ([]string, error)

Save writes all data to files in dir and returns the filenames, or error

func (*FakeDataLayer) Search

func (*FakeDataLayer) SetAminoEnvironmentID

func (fdl *FakeDataLayer) SetAminoEnvironmentID(name string, did int) error

func (*FakeDataLayer) SetAminoKubernetesNamespace

func (fdl *FakeDataLayer) SetAminoKubernetesNamespace(name, namespace string) error

func (*FakeDataLayer) SetAminoServiceToPort

func (fdl *FakeDataLayer) SetAminoServiceToPort(name string, serviceToPort map[string]int64) error

func (*FakeDataLayer) SetEventLogEnvName

func (fdl *FakeDataLayer) SetEventLogEnvName(id uuid.UUID, name string) error

func (*FakeDataLayer) SetQAEnvironmentCommitSHAMap

func (fdl *FakeDataLayer) SetQAEnvironmentCommitSHAMap(name string, csm RefMap) error

func (*FakeDataLayer) SetQAEnvironmentCreated

func (fdl *FakeDataLayer) SetQAEnvironmentCreated(name string, ts time.Time) error

func (*FakeDataLayer) SetQAEnvironmentRefMap

func (fdl *FakeDataLayer) SetQAEnvironmentRefMap(name string, rm RefMap) error

func (*FakeDataLayer) SetQAEnvironmentRepoData

func (fdl *FakeDataLayer) SetQAEnvironmentRepoData(name string, rrd *RepoRevisionData) error

func (*FakeDataLayer) SetQAEnvironmentStatus

func (fdl *FakeDataLayer) SetQAEnvironmentStatus(name string, status EnvironmentStatus) error

func (*FakeDataLayer) UpdateHelmReleaseRevision

func (fdl *FakeDataLayer) UpdateHelmReleaseRevision(envname, release, revision string) error

func (*FakeDataLayer) UpdateK8sEnvTillerAddr

func (fdl *FakeDataLayer) UpdateK8sEnvTillerAddr(envname, taddr string) error

type HelmDataLayer

type HelmDataLayer interface {
	GetHelmReleasesForEnv(name string) ([]models.HelmRelease, error)
	UpdateHelmReleaseRevision(envname, release, revision string) error
	CreateHelmReleasesForEnv(releases []models.HelmRelease) error
	DeleteHelmReleasesForEnv(name string) (uint, error)
}

HelmDataLayer describes an object that stores data about Helm

type K8sEnvDataLayer

type K8sEnvDataLayer interface {
	GetK8sEnv(name string) (*models.KubernetesEnvironment, error)
	GetK8sEnvsByNamespace(ns string) ([]models.KubernetesEnvironment, error)
	CreateK8sEnv(env *models.KubernetesEnvironment) error
	DeleteK8sEnv(name string) error
	UpdateK8sEnvTillerAddr(envname, taddr string) error
}

K8sEnvDataLayer describes an object that stores data about the K8s environment details

type LogFunc

type LogFunc func(string, ...interface{})

LogFunc is a function that logs a formatted string somewhere

type MetricsCollector

type MetricsCollector = metrics.Collector

type PGLayer

type PGLayer struct {
	// contains filtered or unexported fields
}

PGLayer contains the data layer implementation for a Postgres database.

func NewPGLayer

func NewPGLayer(cfg *config.PGConfig, logger *log.Logger) (*PGLayer, error)

NewPGLayer instantiates a new PGLayer.

func (*PGLayer) AddEvent

func (p *PGLayer) AddEvent(name string, msg string) error

AddEvent adds an event a particular QAEnvironment.

func (*PGLayer) AppendToEventLog

func (pg *PGLayer) AppendToEventLog(id uuid.UUID, msg string) error

AppendToEventLog appends a new log line to an EventLog

func (*PGLayer) Close

func (p *PGLayer) Close() error

Close closes the database and any open connections

func (*PGLayer) CreateEventLog

func (pg *PGLayer) CreateEventLog(elog *models.EventLog) error

CreateEventLog creates a new EventLog

func (*PGLayer) CreateHelmReleasesForEnv

func (pg *PGLayer) CreateHelmReleasesForEnv(releases []models.HelmRelease) error

func (*PGLayer) CreateK8sEnv

func (pg *PGLayer) CreateK8sEnv(env *models.KubernetesEnvironment) error

CreateK8sEnv inserts a new k8s environment into the DB

func (*PGLayer) CreateQAEnvironment

func (p *PGLayer) CreateQAEnvironment(qae *QAEnvironment) error

CreateQAEnvironment persists a new QA record.

func (*PGLayer) DB

func (p *PGLayer) DB() *sqlx.DB

DB returns the raw sqlx DB client

func (*PGLayer) DeleteEventLog

func (pg *PGLayer) DeleteEventLog(id uuid.UUID) error

DeleteEventLog deletes an EventLog

func (*PGLayer) DeleteEventLogsByEnvName

func (pg *PGLayer) DeleteEventLogsByEnvName(name string) (uint, error)

DeleteEventLogsByEnvName deletes all EventLogs associated with an environment and returns the number of EventLogs deleted, or error

func (*PGLayer) DeleteEventLogsByRepoAndPR

func (pg *PGLayer) DeleteEventLogsByRepoAndPR(repo string, pr uint) (uint, error)

DeleteEventLogsByRepoAndPR deletes all EventLogs associated with a repo and PR and returns the number of EventLogs deleted, or error

func (*PGLayer) DeleteHelmReleasesForEnv

func (pg *PGLayer) DeleteHelmReleasesForEnv(name string) (uint, error)

func (*PGLayer) DeleteK8sEnv

func (pg *PGLayer) DeleteK8sEnv(name string) error

DeleteK8sEnv deletes a k8s environment from the DB

func (*PGLayer) DeleteQAEnvironment

func (p *PGLayer) DeleteQAEnvironment(name string) (err error)

DeleteQAEnvironment deletes a QA environment record. The environment must have status Destroyed. Callers must ensure that the underlying k8s environment has been deleted prior to calling this, otherwise potentially orphan k8s resources will be left running.

func (*PGLayer) GetEventLogByID

func (pg *PGLayer) GetEventLogByID(id uuid.UUID) (*models.EventLog, error)

GetEventLogByID returns a single EventLog by id, or nil or error

func (*PGLayer) GetEventLogsByEnvName

func (pg *PGLayer) GetEventLogsByEnvName(name string) ([]models.EventLog, error)

GetEventLogsByEnvName gets all EventLogs associated with an environment

func (*PGLayer) GetEventLogsByRepoAndPR

func (pg *PGLayer) GetEventLogsByRepoAndPR(repo string, pr uint) ([]models.EventLog, error)

GetEventLogsByRepoAndPR gets all EventLogs associated with a repo and PR, sorted in reverse created order (newest first)

func (*PGLayer) GetExtantQAEnvironments

func (p *PGLayer) GetExtantQAEnvironments(repo string, pr uint) ([]QAEnvironment, error)

GetExtantQAEnvironments finds any environments for the given repo/PR combination that are not status Destroyed

func (*PGLayer) GetHelmReleasesForEnv

func (pg *PGLayer) GetHelmReleasesForEnv(name string) ([]models.HelmRelease, error)

func (*PGLayer) GetK8sEnv

func (pg *PGLayer) GetK8sEnv(name string) (*models.KubernetesEnvironment, error)

GetK8sEnv gets a k8s environment by environment name

func (*PGLayer) GetK8sEnvsByNamespace

func (pg *PGLayer) GetK8sEnvsByNamespace(ns string) ([]models.KubernetesEnvironment, error)

GetK8sEnvsByNamespace returns any KubernetesEnvironments associated with a specific namespace name

func (*PGLayer) GetMostRecent

func (p *PGLayer) GetMostRecent(n uint) ([]QAEnvironment, error)

GetMostRecent finds the most recent environments from the last n days. Recency is defined by created/updated timestamps. The returned slice is in descending order of recency.

func (*PGLayer) GetQAEnvironment

func (p *PGLayer) GetQAEnvironment(name string) (*QAEnvironment, error)

GetQAEnvironment finds a QAEnvironment by the name field.

func (*PGLayer) GetQAEnvironmentBySourceSHA

func (p *PGLayer) GetQAEnvironmentBySourceSHA(sourceSHA string) (*QAEnvironment, error)

GetQAEnvironmentBySourceSHA returns an environment with a matching sourceSHA.

func (*PGLayer) GetQAEnvironmentConsistently

func (p *PGLayer) GetQAEnvironmentConsistently(name string) (*QAEnvironment, error)

GetQAEnvironmentConsistently finds a QAEnvironment by the name field consistently.

func (*PGLayer) GetQAEnvironments

func (p *PGLayer) GetQAEnvironments() ([]QAEnvironment, error)

GetQAEnvironments returns all QA records

func (*PGLayer) GetQAEnvironmentsByRepo

func (p *PGLayer) GetQAEnvironmentsByRepo(repo string) ([]QAEnvironment, error)

GetQAEnvironmentsByRepo returns all environments which have matching repo.

func (*PGLayer) GetQAEnvironmentsByRepoAndPR

func (p *PGLayer) GetQAEnvironmentsByRepoAndPR(repo string, pr uint) ([]QAEnvironment, error)

GetQAEnvironmentsByRepoAndPR teturns all environments which have matching repo AND pull request.

func (*PGLayer) GetQAEnvironmentsBySourceBranch

func (p *PGLayer) GetQAEnvironmentsBySourceBranch(sourceBranch string) ([]QAEnvironment, error)

GetQAEnvironmentsBySourceBranch returns all environments which have matching sourceBranch.

func (*PGLayer) GetQAEnvironmentsByStatus

func (p *PGLayer) GetQAEnvironmentsByStatus(status string) ([]QAEnvironment, error)

GetQAEnvironmentsByStatus gets all environmens matching status. TODO(geoffrey): Revisit raw_status with @benjamen

func (*PGLayer) GetQAEnvironmentsByUser

func (p *PGLayer) GetQAEnvironmentsByUser(user string) ([]QAEnvironment, error)

GetQAEnvironmentsByUser retrieve all QAEnvironment by user (User is username in the DB see models/models.go).

func (*PGLayer) GetRunningQAEnvironments

func (p *PGLayer) GetRunningQAEnvironments() ([]QAEnvironment, error)

GetRunningQAEnvironments returns all environments with status "success", "updating" or "spawned".

func (*PGLayer) Search

func (p *PGLayer) Search(opts models.EnvSearchParameters) ([]QAEnvironment, error)

Search finds environments that satsify the parameters given. Multiple parameters are combined with implicit AND.

func (*PGLayer) SetAminoEnvironmentID

func (p *PGLayer) SetAminoEnvironmentID(name string, did int) error

SetAminoEnvironmentID sets the Amino environment ID for an environment.

func (*PGLayer) SetAminoKubernetesNamespace

func (p *PGLayer) SetAminoKubernetesNamespace(name string, namespace string) error

SetAminoKubernetesNamespace sets the Kubernetes namespace for an environment.

func (*PGLayer) SetAminoServiceToPort

func (p *PGLayer) SetAminoServiceToPort(name string, serviceToPort map[string]int64) error

SetAminoServiceToPort sets the Amino service port metadata for an environment.

func (*PGLayer) SetEventLogEnvName

func (pg *PGLayer) SetEventLogEnvName(id uuid.UUID, name string) error

SetEventLogEnvName sets the env name for an EventLog

func (*PGLayer) SetQAEnvironmentCommitSHAMap

func (p *PGLayer) SetQAEnvironmentCommitSHAMap(name string, commitSHAMap RefMap) error

SetQAEnvironmentCommitSHAMap sets a specific QAEnvironment's commitSHAMap.

func (*PGLayer) SetQAEnvironmentCreated

func (p *PGLayer) SetQAEnvironmentCreated(name string, created time.Time) error

SetQAEnvironmentCreated sets a specific QAEnvironment's created time.

func (*PGLayer) SetQAEnvironmentRefMap

func (p *PGLayer) SetQAEnvironmentRefMap(name string, refMap RefMap) error

SetQAEnvironmentRefMap sets a specific QAEnvironment's RefMap.

func (*PGLayer) SetQAEnvironmentRepoData

func (p *PGLayer) SetQAEnvironmentRepoData(name string, repo *RepoRevisionData) error

SetQAEnvironmentRepoData sets a specific QAEnvironment's RepoRevisionData.

func (*PGLayer) SetQAEnvironmentStatus

func (p *PGLayer) SetQAEnvironmentStatus(name string, status EnvironmentStatus) error

SetQAEnvironmentStatus sets a specific QAEnvironment's status

func (*PGLayer) UpdateHelmReleaseRevision

func (pg *PGLayer) UpdateHelmReleaseRevision(envname, release, revision string) error

func (*PGLayer) UpdateK8sEnvTillerAddr

func (pg *PGLayer) UpdateK8sEnvTillerAddr(envname, taddr string) error

UpdateK8sEnvTillerAddr updates an existing k8s environment with the provided tiller address

type QADestroyReason

type QADestroyReason = models.QADestroyReason

type QAEnvironment

type QAEnvironment = models.QAEnvironment

type QAEnvironmentEvent

type QAEnvironmentEvent = models.QAEnvironmentEvent

type QAEnvironments

type QAEnvironments = models.QAEnvironments

type QAType

type QAType = models.QAType

type RefMap

type RefMap = models.RefMap

type RepoRevisionData

type RepoRevisionData = models.RepoRevisionData

type ServerConfig

type ServerConfig = config.ServerConfig

Jump to

Keyboard shortcuts

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