Skip to content

Commit 860d2fb

Browse files
authored
Revert "New ruler endpoints (#620)" (#648)
This reverts commit 108f77f.
1 parent 108f77f commit 860d2fb

File tree

15 files changed

+77
-952
lines changed

15 files changed

+77
-952
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ shell: build-image/$(UPTODATE)
106106
bash
107107

108108
configs-integration-test:
109-
/bin/bash -c "go test -tags 'netgo integration' -timeout 30s ./pkg/configs/... ./pkg/ruler/..."
109+
/bin/bash -c "go test -tags 'netgo integration' -timeout 30s ./pkg/configs/..."
110110

111111
endif
112112

cmd/lite/main.go

+3-21
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ func main() {
4242
chunkStoreConfig chunk.StoreConfig
4343
distributorConfig distributor.Config
4444
ingesterConfig ingester.Config
45-
configStoreConfig ruler.ConfigStoreConfig
4645
rulerConfig ruler.Config
4746
schemaConfig chunk.SchemaConfig
4847
storageConfig storage.Config
@@ -53,7 +52,7 @@ func main() {
5352
// Ingester needs to know our gRPC listen port.
5453
ingesterConfig.ListenPort = &serverConfig.GRPCListenPort
5554
util.RegisterFlags(&serverConfig, &chunkStoreConfig, &distributorConfig,
56-
&ingesterConfig, &configStoreConfig, &rulerConfig, &storageConfig, &schemaConfig, &logLevel)
55+
&ingesterConfig, &rulerConfig, &storageConfig, &schemaConfig, &logLevel)
5756
flag.BoolVar(&unauthenticated, "unauthenticated", false, "Set to true to disable multitenancy.")
5857
flag.Parse()
5958
schemaConfig.MaxChunkAge = ingesterConfig.MaxChunkAge
@@ -123,20 +122,15 @@ func main() {
123122
tableManager.Start()
124123
defer tableManager.Stop()
125124

126-
if configStoreConfig.ConfigsAPIURL.String() != "" || configStoreConfig.DBConfig.URI != "" {
127-
rulesAPI, err := ruler.NewRulesAPI(configStoreConfig)
128-
if err != nil {
129-
level.Error(util.Logger).Log("msg", "error initializing ruler config store", "err", err)
130-
os.Exit(1)
131-
}
125+
if rulerConfig.ConfigsAPIURL.String() != "" {
132126
rlr, err := ruler.NewRuler(rulerConfig, dist, chunkStore)
133127
if err != nil {
134128
level.Error(util.Logger).Log("msg", "error initializing ruler", "err", err)
135129
os.Exit(1)
136130
}
137131
defer rlr.Stop()
138132

139-
rulerServer, err := ruler.NewServer(rulerConfig, rlr, rulesAPI)
133+
rulerServer, err := ruler.NewServer(rulerConfig, rlr)
140134
if err != nil {
141135
level.Error(util.Logger).Log("msg", "error initializing ruler server", "err", err)
142136
os.Exit(1)
@@ -169,18 +163,6 @@ func main() {
169163
})
170164
}
171165

172-
// Only serve the API for setting & getting rules configs if the database
173-
// was provided. Allows for smoother migration. See
174-
// https://github.com/weaveworks/cortex/issues/619
175-
if configStoreConfig.DBConfig.URI != "" {
176-
a, err := ruler.NewAPIFromConfig(configStoreConfig.DBConfig)
177-
if err != nil {
178-
level.Error(util.Logger).Log("msg", "error initializing public rules API", "err", err)
179-
os.Exit(1)
180-
}
181-
a.RegisterRoutes(server.HTTP)
182-
}
183-
184166
subrouter := server.HTTP.PathPrefix("/api/prom").Subrouter()
185167
subrouter.PathPrefix("/api/v1").Handler(activeMiddleware.Wrap(promRouter))
186168
subrouter.Path("/read").Handler(activeMiddleware.Wrap(http.HandlerFunc(sampleQueryable.RemoteReadHandler)))

cmd/ruler/main.go

+2-21
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,10 @@ func main() {
3232
chunkStoreConfig chunk.StoreConfig
3333
schemaConfig chunk.SchemaConfig
3434
storageConfig storage.Config
35-
configStoreConfig ruler.ConfigStoreConfig
3635
logLevel util.LogLevel
3736
)
3837
util.RegisterFlags(&serverConfig, &ringConfig, &distributorConfig,
39-
&rulerConfig, &chunkStoreConfig, &storageConfig, &schemaConfig, &configStoreConfig, &logLevel)
38+
&rulerConfig, &chunkStoreConfig, &storageConfig, &schemaConfig, &logLevel)
4039
flag.Parse()
4140

4241
util.InitLogger(logLevel.AllowedLevel)
@@ -76,13 +75,7 @@ func main() {
7675
}
7776
defer rlr.Stop()
7877

79-
rulesAPI, err := ruler.NewRulesAPI(configStoreConfig)
80-
if err != nil {
81-
level.Error(util.Logger).Log("msg", "error initializing rules API", "err", err)
82-
os.Exit(1)
83-
}
84-
85-
rulerServer, err := ruler.NewServer(rulerConfig, rlr, rulesAPI)
78+
rulerServer, err := ruler.NewServer(rulerConfig, rlr)
8679
if err != nil {
8780
level.Error(util.Logger).Log("msg", "error initializing ruler server: %v", err)
8881
os.Exit(1)
@@ -96,18 +89,6 @@ func main() {
9689
}
9790
defer server.Shutdown()
9891

99-
// Only serve the API for setting & getting rules configs if the database
100-
// was provided. Allows for smoother migration. See
101-
// https://github.com/weaveworks/cortex/issues/619
102-
if configStoreConfig.DBConfig.URI != "" {
103-
a, err := ruler.NewAPIFromConfig(configStoreConfig.DBConfig)
104-
if err != nil {
105-
level.Error(util.Logger).Log("msg", "error initializing public rules API", "err", err)
106-
os.Exit(1)
107-
}
108-
a.RegisterRoutes(server.HTTP)
109-
}
110-
11192
server.HTTP.Handle("/ring", r)
11293
server.Run()
11394
}

pkg/configs/client/configs.go

+19-3
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,7 @@ func AlertmanagerConfigFromConfig(c configs.Config) (*config.Config, error) {
8585
return cfg, nil
8686
}
8787

88-
// GetConfigs gets configurations from the configs server.
89-
func GetConfigs(endpoint string, timeout time.Duration, since configs.ID) (*ConfigsResponse, error) {
88+
func getConfigs(endpoint string, timeout time.Duration, since configs.ID) (*ConfigsResponse, error) {
9089
req, err := http.NewRequest("GET", endpoint, nil)
9190
if err != nil {
9291
return nil, err
@@ -121,5 +120,22 @@ func (c *AlertManagerConfigsAPI) GetConfigs(since configs.ID) (*ConfigsResponse,
121120
suffix = fmt.Sprintf("?since=%d", since)
122121
}
123122
endpoint := fmt.Sprintf("%s/private/api/prom/configs/alertmanager%s", c.URL.String(), suffix)
124-
return GetConfigs(endpoint, c.Timeout, since)
123+
return getConfigs(endpoint, c.Timeout, since)
124+
}
125+
126+
// RulesAPI allows retrieving recording and alerting rules.
127+
type RulesAPI struct {
128+
URL *url.URL
129+
Timeout time.Duration
130+
}
131+
132+
// GetConfigs returns all Cortex configurations from a configs API server
133+
// that have been updated after the given configs.ID was last updated.
134+
func (c *RulesAPI) GetConfigs(since configs.ID) (*ConfigsResponse, error) {
135+
suffix := ""
136+
if since != 0 {
137+
suffix = fmt.Sprintf("?since=%d", since)
138+
}
139+
endpoint := fmt.Sprintf("%s/private/api/prom/configs/rules%s", c.URL.String(), suffix)
140+
return getConfigs(endpoint, c.Timeout, since)
125141
}

pkg/configs/configs.go

+2-77
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,14 @@
11
package configs
22

3-
import (
4-
"fmt"
5-
6-
"github.com/prometheus/prometheus/promql"
7-
"github.com/prometheus/prometheus/rules"
8-
"github.com/weaveworks/cortex/pkg/util"
9-
)
10-
113
// An ID is the ID of a single users's Cortex configuration. When a
124
// configuration changes, it gets a new ID.
135
type ID int
146

157
// A Config is a Cortex configuration for a single user.
168
type Config struct {
179
// RulesFiles maps from a rules filename to file contents.
18-
RulesFiles RulesConfig `json:"rules_files"`
19-
AlertmanagerConfig string `json:"alertmanager_config"`
10+
RulesFiles map[string]string `json:"rules_files"`
11+
AlertmanagerConfig string `json:"alertmanager_config"`
2012
}
2113

2214
// View is what's returned from the Weave Cloud configs service
@@ -29,70 +21,3 @@ type View struct {
2921
ID ID `json:"id"`
3022
Config Config `json:"config"`
3123
}
32-
33-
// GetVersionedRulesConfig specializes the view to just the rules config.
34-
func (v View) GetVersionedRulesConfig() *VersionedRulesConfig {
35-
if v.Config.RulesFiles == nil {
36-
return nil
37-
}
38-
return &VersionedRulesConfig{
39-
ID: v.ID,
40-
Config: v.Config.RulesFiles,
41-
}
42-
}
43-
44-
// RulesConfig are the set of rules files for a particular organization.
45-
type RulesConfig map[string]string
46-
47-
// Equal compares two RulesConfigs for equality.
48-
//
49-
// instance Eq RulesConfig
50-
func (c RulesConfig) Equal(o RulesConfig) bool {
51-
if len(o) != len(c) {
52-
return false
53-
}
54-
for k, v1 := range c {
55-
v2, ok := o[k]
56-
if !ok || v1 != v2 {
57-
return false
58-
}
59-
}
60-
return true
61-
}
62-
63-
// Parse rules from the Cortex configuration.
64-
//
65-
// Strongly inspired by `loadGroups` in Prometheus.
66-
func (c RulesConfig) Parse() ([]rules.Rule, error) {
67-
result := []rules.Rule{}
68-
for fn, content := range c {
69-
stmts, err := promql.ParseStmts(content)
70-
if err != nil {
71-
return nil, fmt.Errorf("error parsing %s: %s", fn, err)
72-
}
73-
74-
for _, stmt := range stmts {
75-
var rule rules.Rule
76-
77-
switch r := stmt.(type) {
78-
case *promql.AlertStmt:
79-
rule = rules.NewAlertingRule(r.Name, r.Expr, r.Duration, r.Labels, r.Annotations, util.Logger)
80-
81-
case *promql.RecordStmt:
82-
rule = rules.NewRecordingRule(r.Name, r.Expr, r.Labels)
83-
84-
default:
85-
return nil, fmt.Errorf("ruler.GetRules: unknown statement type")
86-
}
87-
result = append(result, rule)
88-
}
89-
}
90-
return result, nil
91-
}
92-
93-
// VersionedRulesConfig is a RulesConfig together with a version.
94-
// `data Versioned a = Versioned { id :: ID , config :: a }`
95-
type VersionedRulesConfig struct {
96-
ID ID `json:"id"`
97-
Config RulesConfig `json:"config"`
98-
}

pkg/configs/db/db.go

-27
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,8 @@ func (cfg *Config) RegisterFlags(f *flag.FlagSet) {
2222
flag.StringVar(&cfg.MigrationsDir, "database.migrations", "", "Path where the database migration files can be found")
2323
}
2424

25-
// RulesDB has ruler-specific DB interfaces.
26-
type RulesDB interface {
27-
// GetRulesConfig gets the user's ruler config
28-
GetRulesConfig(userID string) (configs.VersionedRulesConfig, error)
29-
// SetRulesConfig does a compare-and-swap (CAS) on the user's rules config.
30-
// `oldConfig` must precisely match the current config in order to change the config to `newConfig`.
31-
// Will return `true` if the config was updated, `false` otherwise.
32-
SetRulesConfig(userID string, oldConfig, newConfig configs.RulesConfig) (bool, error)
33-
34-
// GetAllRulesConfigs gets all of the ruler configs
35-
GetAllRulesConfigs() (map[string]configs.VersionedRulesConfig, error)
36-
// GetRulesConfigs gets all of the configs that have been added or have
37-
// changed since the provided config.
38-
GetRulesConfigs(since configs.ID) (map[string]configs.VersionedRulesConfig, error)
39-
}
40-
4125
// DB is the interface for the database.
4226
type DB interface {
43-
RulesDB
44-
4527
GetConfig(userID string) (configs.View, error)
4628
SetConfig(userID string, cfg configs.Config) error
4729

@@ -71,12 +53,3 @@ func New(cfg Config) (DB, error) {
7153
}
7254
return traced{timed{d}}, nil
7355
}
74-
75-
// NewRulesDB creates a new rules config database.
76-
func NewRulesDB(cfg Config) (RulesDB, error) {
77-
db, err := New(cfg)
78-
if err != nil {
79-
return nil, err
80-
}
81-
return db, err
82-
}

0 commit comments

Comments
 (0)