Files
weave-scope/app/api_report.go
Bryan Boreham 5032cca5c0 Multitenant mode: fetch live data from collectors
Collectors hold recent reports in memory.
When querier needs 'live' data, fetch it from collectors instead
of from the long-term store.

Send reports from collector to querier in msgpack; disable compression
on REST call, otherwise Go silently decompresses, which takes longer.
2021-04-18 19:25:13 +00:00

66 lines
1.7 KiB
Go

package app
import (
"net/http"
"time"
"context"
"github.com/weaveworks/scope/report"
)
// Raw report handler
func makeRawReportHandler(rep Reporter) CtxHandlerFunc {
return func(ctx context.Context, w http.ResponseWriter, r *http.Request) {
timestamp := deserializeTimestamp(r.URL.Query().Get("timestamp"))
rawReport, err := rep.Report(ctx, timestamp)
if err != nil {
respondWith(ctx, w, http.StatusInternalServerError, err)
return
}
censorCfg := report.GetCensorConfigFromRequest(r)
respondWithReport(ctx, w, r, report.CensorRawReport(rawReport, censorCfg))
}
}
type probeDesc struct {
ID string `json:"id"`
Hostname string `json:"hostname"`
Version string `json:"version"`
LastSeen time.Time `json:"lastSeen"`
}
// Probe handler
func makeProbeHandler(rep Reporter) CtxHandlerFunc {
return func(ctx context.Context, w http.ResponseWriter, r *http.Request) {
r.ParseForm()
if _, sparse := r.Form["sparse"]; sparse {
// if we have reports, we must have connected probes
hasProbes, err := rep.HasReports(ctx, time.Now())
if err != nil {
respondWith(ctx, w, http.StatusInternalServerError, err)
}
respondWith(ctx, w, http.StatusOK, hasProbes)
return
}
rpt, err := rep.Report(ctx, time.Now())
if err != nil {
respondWith(ctx, w, http.StatusInternalServerError, err)
return
}
result := []probeDesc{}
for _, n := range rpt.Host.Nodes {
id, _ := n.Latest.Lookup(report.ControlProbeID)
hostname, _ := n.Latest.Lookup(report.HostName)
version, dt, _ := n.Latest.LookupEntry(report.ScopeVersion)
result = append(result, probeDesc{
ID: id,
Hostname: hostname,
Version: version,
LastSeen: dt,
})
}
respondWith(ctx, w, http.StatusOK, result)
}
}