-
Notifications
You must be signed in to change notification settings - Fork 5
/
reasons.go
82 lines (67 loc) · 2.17 KB
/
reasons.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package reports
import (
"fmt"
subspacestypes "github.com/desmos-labs/desmos/v6/x/subspaces/types"
"github.com/rs/zerolog/log"
parsecmdtypes "github.com/forbole/juno/v5/cmd/parse/types"
"github.com/forbole/juno/v5/node/remote"
"github.com/forbole/juno/v5/types/config"
"github.com/spf13/cobra"
"github.com/desmos-labs/athena/database"
"github.com/desmos-labs/athena/x/reports"
"github.com/desmos-labs/athena/x/subspaces"
)
// reasonsCmd returns a Cobra command that allows to refresh all the reporting reasons
func reasonsCmd(parseConfig *parsecmdtypes.Config) *cobra.Command {
return &cobra.Command{
Use: "reasons [[subspace-id]]",
Args: cobra.RangeArgs(0, 1),
Short: "Refresh all the reporting reasons data",
RunE: func(cmd *cobra.Command, args []string) error {
parseCtx, err := parsecmdtypes.GetParserContext(config.Cfg, parseConfig)
if err != nil {
return err
}
remoteCfg, ok := config.Cfg.Node.Details.(*remote.Details)
if !ok {
panic(fmt.Errorf("cannot run Athena on local node"))
}
// Get the database
db := database.Cast(parseCtx.Database)
grpcConnection := remote.MustCreateGrpcConnection(remoteCfg.GRPC)
subspacesModule := subspaces.NewModule(parseCtx.Node, grpcConnection, parseCtx.EncodingConfig.Codec, db)
reportsModule := reports.NewModule(parseCtx.Node, grpcConnection, parseCtx.EncodingConfig.Codec, db)
// Get the latest height
height, err := parseCtx.Node.LatestHeight()
if err != nil {
return err
}
// Get the subspaces
log.Info().Int64("height", height).Msg("refreshing reporting reasons")
var subspaceIDs []uint64
if len(args) > 0 {
subspaceID, err := subspacestypes.ParseSubspaceID(args[0])
if err != nil {
return err
}
subspaceIDs = []uint64{subspaceID}
} else {
subs, err := subspacesModule.QueryAllSubspaces(height)
if err != nil {
return err
}
subspaceIDs = make([]uint64, len(subs))
for i, subspace := range subs {
subspaceIDs[i] = subspace.ID
}
}
for _, subspaceID := range subspaceIDs {
err := reportsModule.RefreshReasonsData(height, subspaceID)
if err != nil {
return err
}
}
return nil
},
}
}