blob: 8f2911008c6ad83254118204f5f29a27db1fcb09 [file] [log] [blame]
Sergiusz Bazanski1fad2e52019-08-01 20:16:27 +02001package main
2
3import (
4 "context"
5 "fmt"
6 "time"
7
8 "code.hackerspace.pl/hscloud/go/pki"
9 "google.golang.org/grpc"
10
11 pb "code.hackerspace.pl/hscloud/bgpwtf/cccampix/proto"
12 "code.hackerspace.pl/hscloud/bgpwtf/cccampix/verifier/model"
13)
14
15type peeringDB struct {
16 pdb pb.PeeringDBProxyClient
17}
18
19func newPeeringDB(addr string) (processor, error) {
20 conn, err := grpc.Dial(addr, pki.WithClientHSPKI())
21 if err != nil {
22 return nil, fmt.Errorf("could not connect to peeringdb service: %v", err)
23 }
24
25 return &peeringDB{
26 pdb: pb.NewPeeringDBProxyClient(conn),
27 }, nil
28}
29
30func (p *peeringDB) Name() string {
31 return "PeeringDB"
32}
33
34func (p *peeringDB) NextRun(now time.Time) time.Time {
35 return now.Add(5 * time.Minute)
36}
37
38func (p *peeringDB) RunAll(ctx context.Context, m model.Model) error {
39 id := int64(2641)
40 req := &pb.GetIXMembersRequest{
41 Id: id,
42 }
43
44 res, err := p.pdb.GetIXMembers(ctx, req)
45 if err != nil {
46 return fmt.Errorf("GetIXMembers(%d): %v", id, err)
47 }
48
49 err = m.RecordPeeringDBPeers(ctx, res.Members)
50 if err != nil {
51 return fmt.Errorf("RecordPeeringDBPeers: %v", err)
52 }
53 err = m.RecordPeeringDBPeerRouters(ctx, res.Members)
54 if err != nil {
55 return fmt.Errorf("RecordPeeringDBPeerRouters: %v", err)
56 }
57 return nil
58}