OSDN Git Service

Dex database logic implementation (#404)
[bytom/vapor.git] / toolbar / precognitive / database / orm / node.go
1 package orm
2
3 import (
4         "database/sql"
5         "encoding/json"
6         "errors"
7         "fmt"
8         "time"
9
10         "github.com/vapor/toolbar/common"
11         precogCommon "github.com/vapor/toolbar/precognitive/common"
12 )
13
14 type Node struct {
15         ID                       uint16 `gorm:"primary_key"`
16         Alias                    string
17         Xpub                     string
18         PublicKey                string
19         IP                       string
20         Port                     uint16
21         BestHeight               uint64
22         AvgRttMS                 sql.NullInt64
23         LatestDailyUptimeMinutes uint64
24         Status                   uint8
25         CreatedAt                time.Time
26         UpdatedAt                time.Time
27 }
28
29 func (n *Node) MarshalJSON() ([]byte, error) {
30         status, ok := precogCommon.StatusLookupTable[n.Status]
31         if !ok {
32                 return nil, errors.New("fail to look up status")
33         }
34
35         avgRttMS := uint64(0)
36         if n.AvgRttMS.Valid {
37                 avgRttMS = uint64(n.AvgRttMS.Int64)
38         }
39
40         return json.Marshal(&struct {
41                 Alias                    string           `json:"alias"`
42                 PublicKey                string           `json:"publickey"`
43                 Address                  string           `json:"address"`
44                 BestHeight               uint64           `json:"best_height"`
45                 AvgRttMS                 uint64           `json:"avg_rtt_ms"`
46                 LatestDailyUptimeMinutes uint64           `json:"latest_daily_uptime_minutes"`
47                 Status                   string           `json:"status"`
48                 UpdatedAt                common.Timestamp `json:"updated_at"`
49         }{
50                 Alias:                    n.Alias,
51                 PublicKey:                n.PublicKey,
52                 Address:                  fmt.Sprintf("%s:%d", n.IP, n.Port),
53                 BestHeight:               n.BestHeight,
54                 AvgRttMS:                 avgRttMS,
55                 LatestDailyUptimeMinutes: n.LatestDailyUptimeMinutes,
56                 Status:    status,
57                 UpdatedAt: common.Timestamp(n.UpdatedAt),
58         })
59 }