forked from iotaledger/goshimmer
/
percentile.go
68 lines (62 loc) · 2.11 KB
/
percentile.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package mana
import (
"net/http"
"time"
"github.com/cockroachdb/errors"
"github.com/labstack/echo"
"github.com/mr-tron/base58"
"github.com/izuc/zipp/packages/app/jsonmodels"
"github.com/izuc/zipp/packages/core/mana"
manaPlugin "github.com/izuc/zipp/plugins/blocklayer"
)
// getPercentileHandler handles the request.
func getPercentileHandler(c echo.Context) error {
var request jsonmodels.GetPercentileRequest
if err := c.Bind(&request); err != nil {
return c.JSON(http.StatusBadRequest, jsonmodels.GetPercentileResponse{Error: err.Error()})
}
ID, err := mana.IDFromStr(request.NodeID)
if err != nil {
return c.JSON(http.StatusBadRequest, jsonmodels.GetPercentileResponse{Error: err.Error()})
}
if request.NodeID == "" {
ID = deps.Local.ID()
}
t := time.Now()
access, tAccess, err := manaPlugin.GetManaMap(mana.AccessMana, t)
if err != nil {
return c.JSON(http.StatusBadRequest, jsonmodels.GetPercentileResponse{Error: err.Error()})
}
accessPercentile, err := access.GetPercentile(ID)
if err != nil {
if errors.Is(err, mana.ErrNodeNotFoundInBaseManaVector) {
accessPercentile = 0
} else {
return c.JSON(http.StatusBadRequest, jsonmodels.GetManaResponse{Error: err.Error()})
}
}
consensus, tConsensus, err := manaPlugin.GetManaMap(mana.ConsensusMana, t)
if err != nil {
return c.JSON(http.StatusBadRequest, jsonmodels.GetPercentileResponse{Error: err.Error()})
}
consensusPercentile, err := consensus.GetPercentile(ID)
if err != nil {
if errors.Is(err, mana.ErrNodeNotFoundInBaseManaVector) {
consensusPercentile = 0
} else {
return c.JSON(http.StatusBadRequest, jsonmodels.GetManaResponse{Error: err.Error()})
}
}
bytes, err := ID.Bytes()
if err != nil {
return c.JSON(http.StatusInternalServerError, jsonmodels.ErrorResponse{Error: "Failed to get bytes for identity"})
}
return c.JSON(http.StatusOK, jsonmodels.GetPercentileResponse{
ShortNodeID: ID.String(),
NodeID: base58.Encode(bytes),
Access: accessPercentile,
AccessTimestamp: tAccess.Unix(),
Consensus: consensusPercentile,
ConsensusTimestamp: tConsensus.Unix(),
})
}