Improve error handling

This commit is contained in:
Maurizio Porrato 2021-05-16 13:51:39 +01:00
parent 956a5dc355
commit 664c6fd4fa
Signed by: guru
GPG Key ID: C622977DF024AC24
1 changed files with 22 additions and 19 deletions

View File

@ -41,27 +41,30 @@ type GetSyncVerResp struct {
Version string `json:"version"`
}
func sendJSON(w http.ResponseWriter, status int, data interface{}) error {
func sendJSON(w http.ResponseWriter, status int, data interface{}) {
body, err := json.Marshal(data)
if err != nil {
return err
log.Printf("sendJSON(%v): json.Marshal() failed: %v", data, err)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
_, err = w.Write(body)
return err
if err != nil {
log.Println("sendJSON() failed:", err)
}
}
func sendJSONOk(w http.ResponseWriter, data interface{}) error {
return sendJSON(w, http.StatusOK, data)
func sendJSONOk(w http.ResponseWriter, data interface{}) {
sendJSON(w, http.StatusOK, data)
}
func sendJSONError(w http.ResponseWriter, err error) error {
func sendJSONError(w http.ResponseWriter, err error) {
switch e := err.(type) {
case syncstore.SyncError:
return sendJSON(w, e.StatusCode, e.Payload)
sendJSON(w, e.StatusCode, e.Payload)
default:
return sendJSON(w, http.StatusInternalServerError,
sendJSON(w, http.StatusInternalServerError,
syncstore.ErrorPayload{
Code: "Internal server error",
Message: e.Error()})
@ -75,7 +78,7 @@ func info(w http.ResponseWriter, req *http.Request) {
log.Println("info()")
sendJSONOk(w, serviceInfoResp{
Version: "1.1.13",
Message: "Powered by browsersync",
Message: "Powered by uBrowserSync",
MaxSyncSize: 2 * 1024 * 1024,
Status: 1})
}
@ -103,7 +106,7 @@ func createSync(w http.ResponseWriter, req *http.Request) {
sendJSONOk(w, resp)
}
func getSync(syncId string, w http.ResponseWriter, req *http.Request) {
func getSync(syncId string, w http.ResponseWriter, _ *http.Request) {
resp, err := store.Get(syncId)
if err != nil {
sendJSONError(w, err)
@ -112,7 +115,7 @@ func getSync(syncId string, w http.ResponseWriter, req *http.Request) {
sendJSONOk(w, resp)
}
func getLastUpdated(syncId string, w http.ResponseWriter, req *http.Request) {
func getLastUpdated(syncId string, w http.ResponseWriter, _ *http.Request) {
resp, err := store.GetLastUpdated(syncId)
if err != nil {
sendJSONError(w, err)
@ -121,7 +124,7 @@ func getLastUpdated(syncId string, w http.ResponseWriter, req *http.Request) {
sendJSONOk(w, LastUpdatedResp{LastUpdated: resp})
}
func getVersion(syncId string, w http.ResponseWriter, req *http.Request) {
func getVersion(syncId string, w http.ResponseWriter, _ *http.Request) {
resp, err := store.GetVersion(syncId)
if err != nil {
sendJSONError(w, err)
@ -203,26 +206,26 @@ var listen string
func init() {
var err error
var storeflag string
var storeFlag string
var storeDrv syncstore.StoreDriver
flag.StringVar(&listen, "listen", ":8090", "listen address and port")
flag.StringVar(&storeflag, "store", "fs:data", "blob store driver")
flag.StringVar(&storeFlag, "store", "fs:data", "blob store driver")
flag.Parse()
lstore := strings.Split(storeflag, ":")
storeFlagTokens := strings.Split(storeFlag, ":")
switch lstore[0] {
switch storeFlagTokens[0] {
case "fs":
if len(lstore) != 2 {
if len(storeFlagTokens) != 2 {
err = fmt.Errorf("argument required for fs store driver")
} else {
storeDrv, err = syncstore.NewFSStore(lstore[1])
storeDrv, err = syncstore.NewFSStore(storeFlagTokens[1])
}
case "mem":
storeDrv, err = syncstore.NewMemStore()
default:
err = fmt.Errorf("Invalid store driver: "+lstore[0])
err = fmt.Errorf("Invalid store driver: "+ storeFlagTokens[0])
}
if err != nil {
log.Fatalf("store initialization failed: %v", err)