github.com/RobustRoundRobin/quorum@v20.10.0+incompatible/private/engine/tessera/tessera_version_reader.go (about) 1 package tessera 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 "github.com/ethereum/go-ethereum/log" 8 "github.com/ethereum/go-ethereum/private/engine" 9 ) 10 11 const apiVersion1 = "1.0" 12 13 // this method will be removed once quorum will implement a versioned tessera client (in line with tessera API versioning) 14 func RetrieveTesseraAPIVersion(client *engine.Client) string { 15 res, err := client.Get("/version/api") 16 if err != nil { 17 log.Error("Error invoking the tessera /version/api API: %v.", err) 18 return apiVersion1 19 } 20 defer res.Body.Close() 21 if res.StatusCode != http.StatusOK { 22 log.Error("Invalid status code returned by the tessera /version/api API: %d.", res.StatusCode) 23 return apiVersion1 24 } 25 var versions []string 26 if err := json.NewDecoder(res.Body).Decode(&versions); err != nil { 27 log.Error("Unable to deserialize the tessera response for /version/api API: %v.", err) 28 return apiVersion1 29 } 30 if len(versions) == 0 { 31 log.Error("Expecting at least one API version to be returned by the tessera /version/api API.") 32 return apiVersion1 33 } 34 // pick the latest version from the versions array 35 latestVersion := apiVersion1 36 latestParsedVersion, _ := parseVersion([]byte(latestVersion)) 37 for _, ver := range versions { 38 if len(ver) == 0 { 39 log.Error("Invalid (empty) version returned by the tessera /version/api API. Skipping value.") 40 continue 41 } 42 parsedVer, err := parseVersion([]byte(ver)) 43 if err != nil { 44 log.Error("Unable to parse version returned by the tessera /version/api API: %s. Skipping value.", ver) 45 continue 46 } 47 if compareVersions(parsedVer, latestParsedVersion) > 0 { 48 latestVersion = ver 49 latestParsedVersion = parsedVer 50 } 51 } 52 log.Info("Tessera API version: %s", latestVersion) 53 return latestVersion 54 }