basic vmalert backbone (#317)

* basic vmalert backbone

* Resolve code review comments for vmalert backbone

* Second review fixes for vmalert backbone
This commit is contained in:
kreedom 2020-02-16 20:59:02 +02:00 committed by GitHub
parent 71a52f5f90
commit 3c06179184
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 125 additions and 0 deletions

View file

@ -0,0 +1,34 @@
package config
import "time"
// Labels basic struct of different labels
type Labels struct {
Severity string
}
// Annotations basic annotation for alert rule
type Annotations struct {
Summary string
Description string
}
// Alert basic alert entity rule
type Alert struct {
Name string
Expr string
For time.Duration
Labels Labels
Annotations Annotations
}
// Group grouping array of alert
type Group struct {
Name string
Rules []Alert
}
// Parse parses config from given file
func Parse(filepath string) ([]Group, error) {
return []Group{}, nil
}

View file

@ -0,0 +1,14 @@
package datasource
import "context"
// Metrics the data returns from storage
type Metrics struct{}
// VMStorage represents vmstorage entity with ability to read and write metrics
type VMStorage struct{}
//Query basic query to the datasource
func (s *VMStorage) Query(ctx context.Context, query string) ([]Metrics, error) {
return nil, nil
}

58
app/vmalert/main.go Normal file
View file

@ -0,0 +1,58 @@
package main
import (
"flag"
"net/http"
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/config"
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/datasource"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/buildinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/envflag"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/procutil"
)
var (
configPath = flag.String("config", "config.yaml", "Path to alert configuration file")
httpListenAddr = flag.String("httpListenAddr", ":8880", "Address to listen for http connections")
)
func main() {
envflag.Parse()
buildinfo.Init()
logger.Init()
logger.Infof("reading alert rules configuration file from %s", *configPath)
alertGroups, err := config.Parse(*configPath)
if err != nil {
logger.Fatalf("Cannot parse configuration file %s", err)
}
w := &watchdog{storage: &datasource.VMStorage{}}
for id := range alertGroups {
go func(group config.Group) {
w.run(group)
}(alertGroups[id])
}
go func() {
httpserver.Serve(*httpListenAddr, func(w http.ResponseWriter, r *http.Request) bool {
panic("not implemented")
})
}()
sig := procutil.WaitForSigterm()
logger.Infof("service received signal %s", sig)
httpserver.Stop(*httpListenAddr)
w.stop()
}
type watchdog struct {
storage *datasource.VMStorage
}
func (w *watchdog) run(a config.Group) {
}
func (w *watchdog) stop() {
panic("not implemented")
}

View file

@ -0,0 +1,11 @@
package provider
import "github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/config"
// AlertManager represents integration provider with Prometheus alert manager
type AlertManager struct{}
// Send an alert or resolve message
func (a *AlertManager) Send(rule config.Alert) error {
return nil
}

View file

@ -0,0 +1,8 @@
package provider
import "github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/config"
// AlertProvider is common interface for alert manager provider
type AlertProvider interface {
Send(rule config.Alert) error
}