-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathflags.go
103 lines (93 loc) · 2.5 KB
/
flags.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package command
import (
"fmt"
"github.com/ipni/storetheindex/config"
"github.com/multiformats/go-multiaddr"
"github.com/urfave/cli/v2"
)
var indexerHostFlag = &cli.StringFlag{
Name: "indexer",
Usage: "Host or host:port of indexer to use",
EnvVars: []string{"INDEXER"},
Aliases: []string{"i"},
Required: false,
}
var cacheSizeFlag = &cli.Int64Flag{
Name: "cachesize",
Usage: "Maximum number of multihashes that result cache can hold, -1 to disable cache",
Required: false,
}
var listenAdminFlag = &cli.StringFlag{
Name: "listen-admin",
Usage: "Admin HTTP API listen address or 'none' to disable, overrides config",
EnvVars: []string{"STORETHEINDEX_LISTEN_ADMIN"},
Required: false,
}
var listenFindFlag = &cli.StringFlag{
Name: "listen-finder",
Usage: "HTTP listen address or 'none' to disable, overrides config",
EnvVars: []string{"STORETHEINDEX_LISTEN_FINDER"},
Required: false,
}
var listenIngestFlag = &cli.StringFlag{
Name: "listen-ingest",
Usage: "Ingestion HTTP API listen address or 'none' to disable, overrides config",
EnvVars: []string{"STORETHEINDEX_LISTEN_INGEST"},
Required: false,
}
var listenP2PFlag = &cli.StringFlag{
Name: "listen-p2p",
Usage: "P2P listen address or 'none' to disable, overrides config",
EnvVars: []string{"STORETHEINDEX_LISTEN_P2P"},
Required: false,
}
// cliIndexer reads the indexer host from CLI flag or from config.
func cliIndexer(cctx *cli.Context, addrType string) string {
idxr := cctx.String("indexer")
if idxr != "" {
return idxr
}
idxr = indexerHost(addrType)
if idxr != "" {
return idxr
}
return "localhost"
}
func indexerHost(addrType string) string {
// No indexer given on command line, get from config.
cfg, err := config.Load("")
if err != nil {
return ""
}
if cfg.Addresses.Finder == "" {
return ""
}
var maddr multiaddr.Multiaddr
switch addrType {
case "find":
maddr, err = multiaddr.NewMultiaddr(cfg.Addresses.Finder)
case "admin":
maddr, err = multiaddr.NewMultiaddr(cfg.Addresses.Admin)
case "ingest":
maddr, err = multiaddr.NewMultiaddr(cfg.Addresses.Ingest)
default:
return ""
}
if err != nil {
return ""
}
return multiaddrHost(maddr)
}
func multiaddrHost(maddr multiaddr.Multiaddr) string {
for _, proto := range []int{multiaddr.P_IP4, multiaddr.P_IP6} {
addr, err := maddr.ValueForProtocol(proto)
if err == nil {
port, err := maddr.ValueForProtocol(multiaddr.P_TCP)
if err == nil {
addr = fmt.Sprint(addr, ":", port)
}
return addr
}
}
return ""
}