blob: 2d3c92d1cdd366bd8c7b317ffe33292320026245 [file] [log] [blame]
package main
import (
"context"
"fmt"
"time"
pb "code.hackerspace.pl/hscloud/bgpwtf/cccampix/proto"
"code.hackerspace.pl/hscloud/bgpwtf/cccampix/verifier/model"
"code.hackerspace.pl/hscloud/go/pki"
"google.golang.org/grpc"
)
type peeringDB struct {
pdb pb.PeeringDBProxyClient
}
func newPeeringDB(addr string) (processor, error) {
conn, err := grpc.Dial(addr, pki.WithClientHSPKI())
if err != nil {
return nil, fmt.Errorf("could not connect to peeringdb service: %v", err)
}
return &peeringDB{
pdb: pb.NewPeeringDBProxyClient(conn),
}, nil
}
func (p *peeringDB) Name() string {
return "PeeringDB"
}
func (p *peeringDB) NextRun(now time.Time, lastFailed bool) time.Time {
if lastFailed {
return now.Add(1 * time.Minute)
}
return now.Add(5 * time.Minute)
}
func (p *peeringDB) RunAll(ctx context.Context, m model.Model) error {
id := int64(2641)
req := &pb.GetIXMembersRequest{
Id: id,
}
res, err := p.pdb.GetIXMembers(ctx, req)
if err != nil {
return fmt.Errorf("GetIXMembers(%d): %v", id, err)
}
err = m.RecordPeeringDBPeers(ctx, res.Members)
if err != nil {
return fmt.Errorf("RecordPeeringDBPeers: %v", err)
}
err = m.RecordPeeringDBPeerRouters(ctx, res.Members)
if err != nil {
return fmt.Errorf("RecordPeeringDBPeerRouters: %v", err)
}
return nil
}