github.com/xiaqingdoc/fabric@v2.1.1+incompatible/core/operations/version.go (about) 1 /* 2 Copyright IBM Corp All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package operations 8 9 import ( 10 "encoding/json" 11 "fmt" 12 "net/http" 13 14 "github.com/hyperledger/fabric/common/flogging" 15 ) 16 17 type VersionInfoHandler struct { 18 CommitSHA string `json:"CommitSHA,omitempty"` 19 Version string `json:"Version,omitempty"` 20 } 21 22 func (m *VersionInfoHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { 23 switch req.Method { 24 case http.MethodGet: 25 m.sendResponse(resp, http.StatusOK, m) 26 default: 27 err := fmt.Errorf("invalid request method: %s", req.Method) 28 m.sendResponse(resp, http.StatusBadRequest, err) 29 } 30 } 31 32 type errorResponse struct { 33 Error string `json:"Error"` 34 } 35 36 func (m *VersionInfoHandler) sendResponse(resp http.ResponseWriter, code int, payload interface{}) { 37 if err, ok := payload.(error); ok { 38 payload = &errorResponse{Error: err.Error()} 39 } 40 js, err := json.Marshal(payload) 41 if err != nil { 42 logger := flogging.MustGetLogger("operations.runner") 43 logger.Errorw("failed to encode payload", "error", err) 44 resp.WriteHeader(http.StatusInternalServerError) 45 } else { 46 resp.WriteHeader(code) 47 resp.Header().Set("Content-Type", "application/json") 48 resp.Write(js) 49 } 50 }