Skip to content

Commit d104c59

Browse files
author
Vladimir Smirnov
committed
Ask carbonsearch for metrics for render requests with target=CARBONSEARCH_PREFIX
New versions of carbonapi will start sending render requests as-is. carbonzipper should handle the case of virt requests for carbonsearch correctly
1 parent 0df1454 commit d104c59

File tree

1 file changed

+47
-18
lines changed

1 file changed

+47
-18
lines changed

main.go

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,17 @@ const (
299299
contentTypePickle = "application/pickle"
300300
)
301301

302+
func fetchCarbonsearchResponse(req *http.Request, rewrite *url.URL) []string {
303+
// Send query to SearchBackend. The result is []queries for StorageBackends
304+
searchResponse := multiGet([]string{Config.SearchBackend}, rewrite.RequestURI())
305+
m, _ := findUnpackPB(req, searchResponse)
306+
queries := make([]string, 0, len(m))
307+
for _, v := range m {
308+
queries = append(queries, v.Path)
309+
}
310+
return queries
311+
}
312+
302313
func findHandler(w http.ResponseWriter, req *http.Request) {
303314

304315
logger.Debugln("request: ", req.URL.RequestURI())
@@ -327,14 +338,7 @@ func findHandler(w http.ResponseWriter, req *http.Request) {
327338
encodeFindResponse(format, originalQuery, w, matches)
328339
return
329340
}
330-
331-
// Send query to SearchBackend. The result is []queries for StorageBackends
332-
searchResponse := multiGet([]string{Config.SearchBackend}, rewrite.RequestURI())
333-
m, _ := findUnpackPB(req, searchResponse)
334-
queries = make([]string, 0, len(m))
335-
for _, v := range m {
336-
queries = append(queries, v.Path)
337-
}
341+
queries = fetchCarbonsearchResponse(req, rewrite)
338342
}
339343

340344
var metrics []*pb3.GlobMatch
@@ -438,21 +442,46 @@ func renderHandler(w http.ResponseWriter, req *http.Request) {
438442
return
439443
}
440444

441-
var serverList []string
442-
var ok bool
443-
444-
// lookup the server list for this metric, or use all the servers if it's unknown
445-
if serverList, ok = Config.pathCache.get(target); !ok || serverList == nil || len(serverList) == 0 {
446-
serverList = Config.Backends
447-
}
448-
449445
format := req.FormValue("format")
446+
450447
rewrite, _ := url.ParseRequestURI(req.URL.RequestURI())
451448
v := rewrite.Query()
452449
v.Set("format", "protobuf3")
453-
rewrite.RawQuery = v.Encode()
454450

455-
responses := multiGet(serverList, rewrite.RequestURI())
451+
var serverList []string
452+
var ok bool
453+
var responses []serverResponse
454+
if searchConfigured && strings.HasPrefix(target, Config.SearchPrefix) {
455+
Metrics.SearchRequests.Add(1)
456+
457+
findUrl := &url.URL{Path: "/metrics/find/"}
458+
findValues := url.Values{}
459+
findValues.Set("format", "protobuf3")
460+
findValues.Set("query", target)
461+
findUrl.RawQuery = findValues.Encode()
462+
metrics := fetchCarbonsearchResponse(req, findUrl)
463+
464+
for _, target := range metrics {
465+
v.Set("target", target)
466+
rewrite.RawQuery = v.Encode()
467+
468+
// lookup the server list for this metric, or use all the servers if it's unknown
469+
if serverList, ok = Config.pathCache.get(target); !ok || serverList == nil || len(serverList) == 0 {
470+
serverList = Config.Backends
471+
}
472+
473+
responses = append(responses, multiGet(serverList, rewrite.RequestURI())...)
474+
}
475+
} else {
476+
rewrite.RawQuery = v.Encode()
477+
478+
// lookup the server list for this metric, or use all the servers if it's unknown
479+
if serverList, ok = Config.pathCache.get(target); !ok || serverList == nil || len(serverList) == 0 {
480+
serverList = Config.Backends
481+
}
482+
483+
responses = multiGet(serverList, rewrite.RequestURI())
484+
}
456485

457486
if len(responses) == 0 {
458487
logger.Logln("render: error querying backends for:", req.URL.RequestURI(), "backends:", serverList)

0 commit comments

Comments
 (0)