github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/core/operations/version.go (about)

     1  /*
     2  Copyright hechain 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/hechain20/hechain/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  		return
    46  	}
    47  	resp.Header().Set("Content-Type", "application/json")
    48  	resp.WriteHeader(code)
    49  	resp.Write(js)
    50  }