|
7 | 7 | "fmt"
|
8 | 8 | "io/ioutil"
|
9 | 9 | "math"
|
10 |
| - "net/http" |
11 | 10 | "net/url"
|
12 | 11 | "os"
|
13 | 12 | "path/filepath"
|
@@ -716,7 +715,7 @@ func parseFingerprint(url string) (string, error) {
|
716 | 715 | pairs := strings.Split(dsn, " ")
|
717 | 716 | kv := make(map[string]string, len(pairs))
|
718 | 717 | for _, pair := range pairs {
|
719 |
| - splitted := strings.Split(pair, "=") |
| 718 | + splitted := strings.SplitN(pair, "=", 2) |
720 | 719 | if len(splitted) != 2 {
|
721 | 720 | return "", fmt.Errorf("malformed dsn %q", dsn)
|
722 | 721 | }
|
@@ -1491,87 +1490,8 @@ func main() {
|
1491 | 1490 | exporter.servers.Close()
|
1492 | 1491 | }()
|
1493 | 1492 |
|
1494 |
| - psCollector := prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}) |
1495 |
| - goCollector := prometheus.NewGoCollector() |
| 1493 | + // process and go collector is registered in prometheus/registry init |
| 1494 | + prometheus.MustRegister(exporter) |
1496 | 1495 |
|
1497 |
| - exporter_shared.RunServer("PostgreSQL", *listenAddress, *metricPath, newHandler(map[string]prometheus.Collector{ |
1498 |
| - "exporter": exporter, |
1499 |
| - "standard.process": psCollector, |
1500 |
| - "standard.go": goCollector, |
1501 |
| - })) |
1502 |
| -} |
1503 |
| - |
1504 |
| -// handler wraps an unfiltered http.Handler but uses a filtered handler, |
1505 |
| -// created on the fly, if filtering is requested. Create instances with |
1506 |
| -// newHandler. It used for collectors filtering. |
1507 |
| -type handler struct { |
1508 |
| - unfilteredHandler http.Handler |
1509 |
| - collectors map[string]prometheus.Collector |
1510 |
| -} |
1511 |
| - |
1512 |
| -func newHandler(collectors map[string]prometheus.Collector) *handler { |
1513 |
| - h := &handler{collectors: collectors} |
1514 |
| - |
1515 |
| - innerHandler, err := h.innerHandler() |
1516 |
| - if err != nil { |
1517 |
| - log.Fatalf("Couldn't create metrics handler: %s", err) |
1518 |
| - } |
1519 |
| - |
1520 |
| - h.unfilteredHandler = innerHandler |
1521 |
| - return h |
1522 |
| -} |
1523 |
| - |
1524 |
| -// ServeHTTP implements http.Handler. |
1525 |
| -func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { |
1526 |
| - filters := r.URL.Query()["collect[]"] |
1527 |
| - log.Debugln("collect query:", filters) |
1528 |
| - |
1529 |
| - if len(filters) == 0 { |
1530 |
| - // No filters, use the prepared unfiltered handler. |
1531 |
| - h.unfilteredHandler.ServeHTTP(w, r) |
1532 |
| - return |
1533 |
| - } |
1534 |
| - |
1535 |
| - filteredHandler, err := h.innerHandler(filters...) |
1536 |
| - if err != nil { |
1537 |
| - log.Warnln("Couldn't create filtered metrics handler:", err) |
1538 |
| - w.WriteHeader(http.StatusBadRequest) |
1539 |
| - w.Write([]byte(fmt.Sprintf("Couldn't create filtered metrics handler: %s", err))) |
1540 |
| - return |
1541 |
| - } |
1542 |
| - filteredHandler.ServeHTTP(w, r) |
1543 |
| -} |
1544 |
| - |
1545 |
| -func (h *handler) innerHandler(filters ...string) (http.Handler, error) { |
1546 |
| - registry := prometheus.NewRegistry() |
1547 |
| - |
1548 |
| - // register all collectors by default. |
1549 |
| - if len(filters) == 0 { |
1550 |
| - for name, c := range h.collectors { |
1551 |
| - if err := registry.Register(c); err != nil { |
1552 |
| - return nil, err |
1553 |
| - } |
1554 |
| - log.Debugf("Collector %q was registered", name) |
1555 |
| - } |
1556 |
| - } |
1557 |
| - |
1558 |
| - // register only filtered collectors. |
1559 |
| - for _, name := range filters { |
1560 |
| - if c, ok := h.collectors[name]; ok { |
1561 |
| - if err := registry.Register(c); err != nil { |
1562 |
| - return nil, err |
1563 |
| - } |
1564 |
| - log.Debugf("Collector %q was registered", name) |
1565 |
| - } |
1566 |
| - } |
1567 |
| - |
1568 |
| - handler := promhttp.HandlerFor( |
1569 |
| - registry, |
1570 |
| - promhttp.HandlerOpts{ |
1571 |
| - ErrorLog: log.NewErrorLogger(), |
1572 |
| - ErrorHandling: promhttp.ContinueOnError, |
1573 |
| - }, |
1574 |
| - ) |
1575 |
| - |
1576 |
| - return handler, nil |
| 1496 | + exporter_shared.RunServer("PostgreSQL", *listenAddress, *metricPath, promhttp.ContinueOnError) |
1577 | 1497 | }
|
0 commit comments