* feat(backend): try a new approach for logs formatting (http) * feat(backend): added logger module * feat(backend): added project/session info to /i endpoint * feat(backend): found a solution for correct caller information * feat(backend): finished logs for http handlers * feat(backend): finished logs for mobile http handlers * feat(backend): finished ender * feat(backend): finished assets * feat(backend): finished heuristics * feat(backend): finished image-storage * feat(backend): finished sink * feat(backend): finished storage * feat(backend): formatted logs in all services * feat(backend): finished foss part * feat(backend): added missed foss part * feat(backend): fixed panic in memory manager and sink service * feat(backend): connectors
40 lines
1,000 B
Go
40 lines
1,000 B
Go
package router
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
"time"
|
|
|
|
gzip "github.com/klauspost/pgzip"
|
|
)
|
|
|
|
func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topicName string) {
|
|
start := time.Now()
|
|
body := http.MaxBytesReader(w, r.Body, e.cfg.BeaconSizeLimit)
|
|
defer body.Close()
|
|
|
|
var reader io.ReadCloser
|
|
var err error
|
|
|
|
switch r.Header.Get("Content-Encoding") {
|
|
case "gzip":
|
|
reader, err = gzip.NewReader(body)
|
|
if err != nil {
|
|
e.ResponseWithError(r.Context(), w, http.StatusInternalServerError, err, start, r.URL.Path, 0)
|
|
return
|
|
}
|
|
defer reader.Close()
|
|
default:
|
|
reader = body
|
|
}
|
|
buf, err := io.ReadAll(reader)
|
|
if err != nil {
|
|
e.ResponseWithError(r.Context(), w, http.StatusInternalServerError, err, start, r.URL.Path, 0)
|
|
return
|
|
}
|
|
if err := e.services.Producer.Produce(topicName, sessionID, buf); err != nil {
|
|
e.ResponseWithError(r.Context(), w, http.StatusInternalServerError, err, start, r.URL.Path, 0)
|
|
return
|
|
}
|
|
w.WriteHeader(http.StatusOK)
|
|
}
|