From e620c86cd4d5eff5a2e05b5e2aa033bf7808e797 Mon Sep 17 00:00:00 2001 From: Dmitri Dolguikh Date: Wed, 29 Jul 2026 18:32:51 +0200 Subject: [PATCH] added support for networkrouters Signed-off-by: Dmitri Dolguikh --- .../internals/network_map_db/db_store.go | 3 ++ .../network_map_db/pgsql/group_test.go | 22 ++++++++ .../network_map_db/pgsql/network_router.go | 52 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 management/internals/network_map_db/pgsql/network_router.go diff --git a/management/internals/network_map_db/db_store.go b/management/internals/network_map_db/db_store.go index 695db30f0..ff6f51655 100644 --- a/management/internals/network_map_db/db_store.go +++ b/management/internals/network_map_db/db_store.go @@ -22,6 +22,9 @@ type NetworkMapDBStore interface { GetPeers(ctx context.Context, accountId string) ([]nmdata.Peer, error) GetPolicies(ctx context.Context, accountId string) ([]nmdata.Policy, error) GetRoutes(ctx context.Context, accountId string) ([]nmdata.Route, error) + GetNameServerGroups(ctx context.Context, accountId string) ([]nmdata.NameServerGroup, error) + GetNetworkResources(ctx context.Context, accountId string) ([]nmdata.NetworkResource, error) + GetNetworkRouters(ctx context.Context, accountId string) ([]nmdata.NetworkRouter, error) } type NetworkMapDBStoreImpl struct { diff --git a/management/internals/network_map_db/pgsql/group_test.go b/management/internals/network_map_db/pgsql/group_test.go index 67cb5fb25..570cbbb5a 100644 --- a/management/internals/network_map_db/pgsql/group_test.go +++ b/management/internals/network_map_db/pgsql/group_test.go @@ -149,6 +149,28 @@ func TestGetNetworkResources(t *testing.T) { // ) } +func TestGetNetworkRouters(t *testing.T) { + ctx := context.TODO() + + s, err := NewPostgresqlStore(ctx, "postgresql://root:netbird@localhost:5432/netbird") + assert.NoError(t, err) + // err = loadSQL(ctx, s.pool, initDb) + //assert.NoError(t, err) + + res, err := s.GetNetworkRouters(ctx, "d29f99jl0ubs73cm8ce0") //"ckd7ee2fic3c73dtendg") + assert.NoError(t, err) + + fmt.Print(res) + // assert.Contains(t, + // groups, + // nmdata.Group{Name: "test-group-1", PublicID: "public-id-1", Resources: []nmdata.Resource{{ID: "cui7q2jl0ubs73d8qpi0", Type: "host"}}}, + // ) + // assert.Contains(t, + // groups, + // nmdata.Group{Name: "All", PublicID: "d9aejspvcsu517nkh4a0", Resources: []nmdata.Resource{{ID: "cui7olrl0ubs73d8qpe0", Type: "subnet"}, {ID: "cui7q2jl0ubs73d8qpi0", Type: "host"}}}, + // ) +} + func loadSQL(ctx context.Context, pool *pgxpool.Pool, initdb string) error { queries := strings.Split(string(initdb), ";") diff --git a/management/internals/network_map_db/pgsql/network_router.go b/management/internals/network_map_db/pgsql/network_router.go new file mode 100644 index 000000000..e7a88c46d --- /dev/null +++ b/management/internals/network_map_db/pgsql/network_router.go @@ -0,0 +1,52 @@ +package networkmap_pgsql + +import ( + "context" + "database/sql" + "encoding/json" + "reflect" + + "github.com/jackc/pgx/v5" + networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db" + "github.com/netbirdio/netbird/shared/management/networkmap/nmdata" +) + +const ( + GetNetworkRouterQuery = ` + select public_id, peer_groups, masquerade, metric, enabled + from network_routers + where account_id=$1 + ` +) + +func (pg *PgStore) GetNetworkRouters(ctx context.Context, accountId string) ([]nmdata.NetworkRouter, error) { + rows, err := pg.pool.Query(ctx, GetNetworkRouterQuery, accountId) + if err != nil { + return nil, err + } + + netrouters, err := pgx.CollectRows(rows, pgx.RowToStructByName[networkrouter]) + if err != nil { + return nil, err + } + + toret := make([]nmdata.NetworkRouter, 0, len(netrouters)) + for _, nrt := range netrouters { + router := nmdata.NetworkRouter{} + err := networkmapdb.FromSqlTypesToSharedTypes( + reflect.ValueOf(&nrt).Elem(), reflect.ValueOf(&router).Elem()) + if err != nil { + return nil, err + } + toret = append(toret, router) + } + return toret, nil +} + +type networkrouter struct { + PublicID sql.NullString + PeerGroups json.RawMessage + Masquerade sql.NullBool + Metric sql.NullInt64 + Enabled sql.NullBool +}