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