...
1 package promassert
2
3 import (
4 "bytes"
5 "fmt"
6 "io"
7 "net/http"
8 "strings"
9
10 "github.com/prometheus/client_golang/prometheus/promhttp"
11 )
12
13
14 type responseWriter struct {
15
16
17 bytes.Buffer
18 header http.Header
19 Code int
20 }
21
22
23 func (rw *responseWriter) Header() http.Header {
24 if rw.header == nil {
25 rw.header = make(http.Header)
26 }
27 return rw.header
28 }
29
30
31 func (rw *responseWriter) WriteHeader(statusCode int) {
32 rw.Code = statusCode
33 }
34
35
36
37
38 var promhandler = promhttp.Handler()
39
40
41 var ScrapePrometheusMetrics = ScrapePromhttpHandler
42
43
44
45
46 func ScrapePromhttpHandler() (io.Reader, error) {
47 req, err := http.NewRequest("GET", "http://localhost/", strings.NewReader(""))
48 if err != nil {
49 return nil, err
50 }
51 var rw responseWriter
52 promhandler.ServeHTTP(&rw, req)
53 if rw.Code != http.StatusOK {
54
55 return nil, fmt.Errorf("prometheus metrics HTTP handler did not return 200 OK, got HTTP status code %d", rw.Code)
56 }
57 return &rw, nil
58 }
59
60
61 func ScrapeHTTP(addr string) func() (io.Reader, error) {
62 return func() (io.Reader, error) {
63 resp, err := http.Get(addr)
64 if err != nil {
65 return nil, err
66 }
67 defer resp.Body.Close()
68 var buf bytes.Buffer
69 if _, err := io.Copy(&buf, resp.Body); err != nil {
70 return nil, err
71 }
72 return &buf, nil
73 }
74 }
75
View as plain text