41 lines
1 KiB
Go
41 lines
1 KiB
Go
package main
|
|
|
|
import (
|
|
"io"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
|
|
gzip "github.com/klauspost/pgzip"
|
|
)
|
|
|
|
const JSON_SIZE_LIMIT int64 = 1e3 // 1Kb
|
|
|
|
func pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topicName string) {
|
|
body := http.MaxBytesReader(w, r.Body, BEACON_SIZE_LIMIT)
|
|
//defer body.Close()
|
|
var reader io.ReadCloser
|
|
var err error
|
|
switch r.Header.Get("Content-Encoding") {
|
|
case "gzip":
|
|
log.Println("Gzip", reader)
|
|
|
|
reader, err = gzip.NewReader(body)
|
|
if err != nil {
|
|
responseWithError(w, http.StatusInternalServerError, err) // TODO: stage-dependent responce
|
|
return
|
|
}
|
|
log.Println("Gzip reader init", reader)
|
|
defer reader.Close()
|
|
default:
|
|
reader = body
|
|
}
|
|
log.Println("Reader after switch:", reader)
|
|
buf, err := ioutil.ReadAll(reader)
|
|
if err != nil {
|
|
responseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging
|
|
return
|
|
}
|
|
producer.Produce(topicName, sessionID, buf) // What if not able to send?
|
|
w.WriteHeader(http.StatusOK)
|
|
}
|