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)
}