github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/controller/cutil/router.go (about)

     1  // Package cutil - Content managed by Project Forge, see [projectforge.md] for details.
     2  package cutil
     3  
     4  import (
     5  	"net/http"
     6  	"net/url"
     7  	"slices"
     8  
     9  	"github.com/CAFxX/httpcompression"
    10  	"github.com/gorilla/mux"
    11  	"github.com/prometheus/client_golang/prometheus/promhttp"
    12  
    13  	"github.com/kyleu/dbaudit/app/lib/telemetry/httpmetrics"
    14  	"github.com/kyleu/dbaudit/app/util"
    15  )
    16  
    17  var AppRoutesList = map[string][]string{}
    18  
    19  func WireRouter(r *mux.Router, notFound http.HandlerFunc, logger util.Logger) (http.Handler, error) {
    20  	p := httpmetrics.NewMetrics(util.AppKey, logger)
    21  	r.Handle(p.MetricsPath, promhttp.Handler()).Methods(http.MethodGet)
    22  
    23  	r.PathPrefix("/").HandlerFunc(notFound)
    24  
    25  	var ret http.Handler = r
    26  	includeCompression := util.GetEnvBool("compression_enabled", false)
    27  	if includeCompression {
    28  		compress, _ := httpcompression.DefaultAdapter()
    29  		ret = compress(ret)
    30  	}
    31  	return p.WrapHandler(r), nil
    32  }
    33  
    34  func AddRoute(method string, path string) {
    35  	curr := AppRoutesList[method]
    36  	if !slices.Contains(curr, path) {
    37  		curr = append(curr, path)
    38  		slices.Sort(curr)
    39  		AppRoutesList[method] = curr
    40  	}
    41  }
    42  
    43  func URLAddQuery(u *url.URL, k string, v string) {
    44  	q := u.Query()
    45  	q.Set(k, v)
    46  	u.RawQuery = q.Encode()
    47  }