Skip to content

Commit

Permalink
Use new go-libipni/pcache package
Browse files Browse the repository at this point in the history
  • Loading branch information
gammazero committed Jul 10, 2023
1 parent a6344dd commit 8d52bcd
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 32 deletions.
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,15 @@ ipni find -i cid.contact --cid bafybeigvgzoolc3drupxhlevdp2ugqcrbcsqfmcek2zxiw5w
```sh
ipni provider --all -i dev.cid.contact -id | ipni provider -invert -i cid.contact -id
```
- Get combined information from multiple providers:
```
$ ipni provider --all -i alva.dev.cid.contact -i cora.dev.cid.contact --id-only | wc -l
405
$ ipni provider --all -i alva.dev.cid.contact --id-only | wc -l
209
> ipni provider --all -i cora.dev.cid.contact --id-only | wc -l
196
```

### `spaddr`
- Get p2p ID and multiaddrs of storage provider identified by storage provider ID "t01000":
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/ipfs/go-datastore v0.6.0
github.com/ipld/go-car/v2 v2.10.0
github.com/ipld/go-ipld-prime v0.20.0
github.com/ipni/go-libipni v0.2.8
github.com/ipni/go-libipni v0.2.9-0.20230710075659-3294e83aca2f
github.com/libp2p/go-libp2p v0.28.1
github.com/mattn/go-isatty v0.0.19
github.com/montanaflynn/stats v0.7.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,8 @@ github.com/ipld/go-ipld-prime v0.9.1-0.20210324083106-dc342a9917db/go.mod h1:KvB
github.com/ipld/go-ipld-prime v0.20.0 h1:Ud3VwE9ClxpO2LkCYP7vWPc0Fo+dYdYzgxUJZ3uRG4g=
github.com/ipld/go-ipld-prime v0.20.0/go.mod h1:PzqZ/ZR981eKbgdr3y2DJYeD/8bgMawdGVlJDE8kK+M=
github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20230102063945-1a409dc236dd h1:gMlw/MhNr2Wtp5RwGdsW23cs+yCuj9k2ON7i9MiJlRo=
github.com/ipni/go-libipni v0.2.8 h1:PNiMpE/b9QgDOIbrRsv1c5Y5kVvwFClUz6VwEx5P+Hk=
github.com/ipni/go-libipni v0.2.8/go.mod h1:dhBH9HwxT6HzQPRZ8ikWv+ccqF8ucMIoGiiTSrHA4tw=
github.com/ipni/go-libipni v0.2.9-0.20230710075659-3294e83aca2f h1:sSkioQPX8pa5PnPJHOL1u/Oq2v6TIe6MCidcWJk1HuE=
github.com/ipni/go-libipni v0.2.9-0.20230710075659-3294e83aca2f/go.mod h1:dhBH9HwxT6HzQPRZ8ikWv+ccqF8ucMIoGiiTSrHA4tw=
github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 h1:QG4CGBqCeuBo6aZlGAamSkxWdgWfZGeE49eUOWJPA4c=
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
Expand Down
16 changes: 9 additions & 7 deletions pkg/find/find.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,11 @@ var findFlags = []cli.Flag{
Usage: "Specify CID to use as indexer key, multiple OK",
Required: false,
},
&cli.StringFlag{
&cli.StringSliceFlag{
Name: "indexer",
Usage: "URL of indexer to query",
EnvVars: []string{"INDEXER"},
Usage: "URL of indexer to query. Multiple OK to specify providers info sources.",
Aliases: []string{"i"},
Value: "http://localhost:3000",
Value: cli.NewStringSlice("http://localhost:3000"),
},
&cli.StringFlag{
Name: "dhstore",
Expand Down Expand Up @@ -96,8 +95,11 @@ func findAction(cctx *cli.Context) error {
}

func dhFind(cctx *cli.Context, mhs []multihash.Multihash) error {
cl, err := client.NewDHashClient(cctx.String("indexer"),
client.WithDHStoreURL(cctx.String("dhstore")))
cl, err := client.NewDHashClient(
client.WithProvidersURL(cctx.StringSlice("indexer")...),
client.WithDHStoreURL(cctx.String("dhstore")),
client.WithPcacheTTL(0),
)
if err != nil {
return err
}
Expand Down Expand Up @@ -129,7 +131,7 @@ func dhFind(cctx *cli.Context, mhs []multihash.Multihash) error {
func clearFind(cctx *cli.Context, mhs []multihash.Multihash) error {
idxr := cctx.String("dhstore")
if idxr == "" {
idxr = cctx.String("indexer")
idxr = cctx.StringSlice("indexer")[0]
}
cl, err := client.New(idxr)
if err != nil {
Expand Down
54 changes: 32 additions & 22 deletions pkg/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import (

"github.com/ipfs/go-cid"
"github.com/ipni/go-libipni/apierror"
"github.com/ipni/go-libipni/find/client"
"github.com/ipni/go-libipni/find/model"
"github.com/ipni/go-libipni/pcache"
"github.com/ipni/ipni-cli/pkg/adpub"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/mattn/go-isatty"
Expand All @@ -34,12 +34,11 @@ Here is an example that shows using the output of one provider command to filter
}

var providerFlags = []cli.Flag{
&cli.StringFlag{
&cli.StringSliceFlag{
Name: "indexer",
Usage: "Indexer URL",
EnvVars: []string{"INDEXER"},
Aliases: []string{"i"},
Value: "http://localhost:3000",
Value: cli.NewStringSlice("http://localhost:3000"),
},
&cli.StringSliceFlag{
Name: "pid",
Expand Down Expand Up @@ -121,18 +120,24 @@ func providerAction(cctx *cli.Context) error {
peerIDs = append(peerIDs, peerID)
}

cl, err := client.New(cctx.String("indexer"))
if err != nil {
return err
}

if cctx.Bool("invert") {
return listProviders(cctx, peerIDs)
}

var pc *pcache.ProviderCache
var err error
if len(peerIDs) > 1 {
pc, err = pcache.New(pcache.WithSourceURL(cctx.StringSlice("indexer")...))
} else {
pc, err = pcache.New(pcache.WithPreload(false), pcache.WithSourceURL(cctx.StringSlice("indexer")...))
}
if err != nil {
return err
}

var errCount int
for _, peerID := range peerIDs {
err = getProvider(cctx, cl, peerID)
err = getProvider(cctx, pc, peerID)
if err != nil {
fmt.Fprintf(os.Stderr, "Error getting provider %s: %s\n", peerID, err)
errCount++
Expand All @@ -145,8 +150,8 @@ func providerAction(cctx *cli.Context) error {
return nil
}

func getProvider(cctx *cli.Context, cl *client.Client, peerID peer.ID) error {
prov, err := cl.GetProvider(cctx.Context, peerID)
func getProvider(cctx *cli.Context, pc *pcache.ProviderCache, peerID peer.ID) error {
prov, err := pc.Get(cctx.Context, peerID)
if err != nil {
var ae *apierror.Error
if errors.As(err, &ae) && ae.Status() == http.StatusNotFound {
Expand All @@ -168,27 +173,32 @@ func getProvider(cctx *cli.Context, cl *client.Client, peerID peer.ID) error {
}

func countProviders(cctx *cli.Context) error {
cl, err := client.New(cctx.String("indexer"))
if err != nil {
return err
}
provs, err := cl.ListProviders(cctx.Context)
pcache, err := pcache.New(pcache.WithSourceURL(cctx.StringSlice("indexer")...))
if err != nil {
return err
}
provs := pcache.List()
fmt.Println(len(provs))
return nil
}

func listProviders(cctx *cli.Context, peerIDs []peer.ID) error {
cl, err := client.New(cctx.String("indexer"))
if err != nil {
return err
}
provs, err := cl.ListProviders(cctx.Context)
pc, err := pcache.New(pcache.WithSourceURL(cctx.StringSlice("indexer")...))
if err != nil {
return err
}

/*
cl, err := client.New(cctx.String("indexer"))
if err != nil {
return err
}
provs, err := cl.ListProviders(cctx.Context)
if err != nil {
return err
}
*/
provs := pc.List()
if len(provs) == 0 {
fmt.Println("No providers registered with indexer")
return nil
Expand Down

0 comments on commit 8d52bcd

Please sign in to comment.