Documentation ¶
Overview ¶
Package database implements all persistent data access for bosun. Internally it runs ledisdb locally, but uses a redis client to access all data. Thus it should be able to migrate to a remote redis instance with minimal effort.
Index ¶
- Constants
- Variables
- func IsRedisNil(err error) bool
- func StartLedis(dataDir string, bind string) (stop func(), err error)
- type ConfigDataAccess
- type DataAccess
- type ErrorDataAccess
- type LastInfo
- type MetadataDataAccess
- type MetricMetadata
- type Migration
- type NotificationDataAccess
- type RedisConnector
- type SearchDataAccess
- type SilenceDataAccess
- type StateDataAccess
- type TagMetadata
Constants ¶
const Search_All = "__all__"
Variables ¶
var SchemaVersion = int64(2)
Functions ¶
func IsRedisNil ¶
func StartLedis ¶
Start in-process ledis server. Data will go in the specified directory and it will bind to the given port. Return value is a function you can call to stop the server.
Types ¶
type ConfigDataAccess ¶
type DataAccess ¶
type DataAccess interface { RedisConnector Metadata() MetadataDataAccess Configs() ConfigDataAccess Search() SearchDataAccess Errors() ErrorDataAccess State() StateDataAccess Silence() SilenceDataAccess Notifications() NotificationDataAccess Migrate() error }
Core data access interface for everything sched needs
func NewDataAccess ¶
func NewDataAccess(addr []string, isRedis bool, masterName string, redisDb int, redisPass string) DataAccess
Create a new data access object pointed at the specified address. isRedis parameter used to distinguish true redis from ledis in-proc.
type ErrorDataAccess ¶
type ErrorDataAccess interface { MarkAlertSuccess(name string) error MarkAlertFailure(name string, msg string) error GetFailingAlertCounts() (int, int, error) GetFailingAlerts() (map[string]bool, error) IsAlertFailing(name string) (bool, error) GetFullErrorHistory() (map[string][]*models.AlertError, error) ClearAlert(name string) error ClearAll() error }
type MetadataDataAccess ¶
type MetadataDataAccess interface { // Insert Metric Metadata. Field must be one of "desc", "rate", or "unit". PutMetricMetadata(metric string, field string, value string) error // Get Metric Metadata for given metric. GetMetricMetadata(metric string) (*MetricMetadata, error) PutTagMetadata(tags opentsdb.TagSet, name string, value string, updated time.Time) error GetTagMetadata(tags opentsdb.TagSet, name string) ([]*TagMetadata, error) DeleteTagMetadata(tags opentsdb.TagSet, name string) error }
type MetricMetadata ¶
type NotificationDataAccess ¶
type NotificationDataAccess interface { InsertNotification(ak models.AlertKey, notification string, dueAt time.Time) error //Get notifications that are currently due or past due. Does not delete. GetDueNotifications() (map[models.AlertKey]map[string]time.Time, error) //Clear all notifications due on or before a given timestamp. Intended is to use the max returned from GetDueNotifications once you have processed them. ClearNotificationsBefore(time.Time) error ClearNotifications(ak models.AlertKey) error GetNextNotificationTime() (time.Time, error) }
type RedisConnector ¶
RedisConnector is a simple interface so things can get a raw connection (mostly tests), but still discourage it. makes dataAccess interchangable with redis.Pool
type SearchDataAccess ¶
type SearchDataAccess interface { AddMetricForTag(tagK, tagV, metric string, time int64) error GetMetricsForTag(tagK, tagV string) (map[string]int64, error) AddTagKeyForMetric(metric, tagK string, time int64) error GetTagKeysForMetric(metric string) (map[string]int64, error) AddMetric(metric string, time int64) error GetAllMetrics() (map[string]int64, error) AddTagValue(metric, tagK, tagV string, time int64) error GetTagValues(metric, tagK string) (map[string]int64, error) AddMetricTagSet(metric, tagSet string, time int64) error GetMetricTagSets(metric string, tags opentsdb.TagSet) (map[string]int64, error) BackupLastInfos(map[string]map[string]*LastInfo) error LoadLastInfos() (map[string]map[string]*LastInfo, error) }
type SilenceDataAccess ¶
type StateDataAccess ¶
type StateDataAccess interface { TouchAlertKey(ak models.AlertKey, t time.Time) error GetUntouchedSince(alert string, time int64) ([]models.AlertKey, error) GetOpenIncident(ak models.AlertKey) (*models.IncidentState, error) GetLatestIncident(ak models.AlertKey) (*models.IncidentState, error) GetAllOpenIncidents() ([]*models.IncidentState, error) GetIncidentState(incidentId int64) (*models.IncidentState, error) GetAllIncidentsByAlertKey(ak models.AlertKey) ([]*models.IncidentState, error) GetAllIncidentIdsByAlertKey(ak models.AlertKey) ([]int64, error) UpdateIncidentState(s *models.IncidentState) (int64, error) ImportIncidentState(s *models.IncidentState) error // SetIncidentNext gets the incident for previousIncidentId, and sets its NextId field to be nextIncidentId and then saves the incident SetIncidentNext(incidentId, nextIncidentId int64) error SetRenderedTemplates(incidentId int64, rt *models.RenderedTemplates) error GetRenderedTemplates(incidentId int64) (*models.RenderedTemplates, error) GetRenderedTemplateKeys() ([]string, error) CleanupOldRenderedTemplates(olderThan time.Duration) DeleteRenderedTemplates(incidentIds []int64) error Forget(ak models.AlertKey) error SetUnevaluated(ak models.AlertKey, uneval bool) error GetUnknownAndUnevalAlertKeys(alert string) ([]models.AlertKey, []models.AlertKey, error) }