make project build

This commit is contained in:
Pascal Fischer
2025-06-10 13:02:08 +02:00
parent 4f325a0036
commit 2a030a91f0
35 changed files with 215 additions and 204 deletions
+6
View File
@@ -0,0 +1,6 @@
log_levels:
default: debug
github.com/netbirdio/management-refactor/internals/shared/activity: error
github.com/netbirdio/management-refactor/internals/shared/db: debug
github.com/netbirdio/management-refactor/internals/shared/permissions: debug
github.com/netbirdio/management-refactor/internals/modules/peers/manager: warn
+2 -2
View File
@@ -17,10 +17,10 @@ var log = logging.LoggerForThisPackage()
var mgmtCmd = &cobra.Command{
Use: "management",
Short: "start NetBird Management Server",
PreRunE: func(cmd *cobra.Command, args []string) error {
RunE: func(cmd *cobra.Command, args []string) error {
err := logging.Init("logging.yaml")
if err != nil {
log.Fatalf("Failed to init logging: %v", err)
log.Debugf("Failed to init logging: %v", err)
}
srv := server.NewServer()
+1 -1
View File
@@ -2,7 +2,7 @@ module github.com/netbirdio/management-refactor
go 1.23.0
toolchain go1.23.8
toolchain go1.23.1
require (
github.com/c-robinson/iplib v1.0.3
@@ -10,6 +10,8 @@ import (
"github.com/netbirdio/netbird/management/server/activity"
nbpeer "github.com/netbirdio/netbird/management/server/peer"
"github.com/netbirdio/netbird/management/server/store"
"github.com/netbirdio/management-refactor/internals/modules/peers"
)
const (
@@ -33,7 +35,7 @@ type ephemeralPeer struct {
// Controller keep a list of ephemeral peers. After ephemeralLifeTime inactivity the peer will be deleted
// automatically. Inactivity means the peer disconnected from the Management server.
type Controller struct {
store store.Store
peersManager peers.Manager
headPeer *ephemeralPeer
tailPeer *ephemeralPeer
@@ -42,9 +44,9 @@ type Controller struct {
}
// NewEphemeralManager instantiate new Controller
func NewEphemeralManager(peersManager) *Controller {
func NewEphemeralManager(peersManager peers.Manager) *Controller {
return &Controller{
store: store,
peersManager: peersManager,
}
}
@@ -119,7 +121,7 @@ func (e *Controller) OnPeerDisconnected(ctx context.Context, peer *nbpeer.Peer)
}
func (e *Controller) loadEphemeralPeers(ctx context.Context) {
peers, err := e.store.GetAllEphemeralPeers(ctx, store.LockingStrengthShare)
peers, err := e.peersManager.GetAllEphemeralPeers(ctx, store.LockingStrengthShare)
if err != nil {
log.WithContext(ctx).Debugf("failed to load ephemeral peers: %s", err)
return
@@ -163,7 +165,7 @@ func (e *Controller) cleanup(ctx context.Context) {
for id, p := range deletePeers {
log.WithContext(ctx).Debugf("delete ephemeral peer: %s", id)
err := e.accountManager.DeletePeer(ctx, p.accountID, id, activity.SystemInitiator)
err := e.peersManager.DeletePeer(ctx, p.accountID, id, activity.SystemInitiator)
if err != nil {
log.WithContext(ctx).Errorf("failed to delete ephemeral peer: %s", err)
}
@@ -26,7 +26,7 @@ func NewController(store *db.Store, metrics *appmetrics.AppMetrics) *Controller
}
func (c *Controller) UpdatePeers(accountID string) error {
data, err := c.repo.GetNetworkMapData(accountID)
_, err := c.repo.GetNetworkMapData(accountID)
if err != nil {
return fmt.Errorf("get network map data: %w", err)
}
@@ -55,9 +55,9 @@ func (r *repository) GetNetworkMapData(accountID string) (*NetworkMapData, error
return nil, err
}
if err := r.store.Load(&networkMapData, "Peers", "Groups", "Policies", "Networks", "NetworkRouters", "NetworkResources"); err != nil {
return nil, err
}
// if err := r.store.Load(&networkMapData, "Peers", "Groups", "Policies", "Networks", "NetworkRouters", "NetworkResources"); err != nil {
// return nil, err
// }
r.metrics.RecordDBAccessDuration(time.Since(start))
@@ -5,11 +5,15 @@ import (
"sync"
"time"
"github.com/netbirdio/netbird/management/server/groups"
log "github.com/sirupsen/logrus"
"github.com/netbirdio/netbird/management/proto"
"github.com/netbirdio/netbird/management/server/telemetry"
"github.com/netbirdio/netbird/management/server/types"
"github.com/netbirdio/management-refactor/internals/modules/peers"
"github.com/netbirdio/management-refactor/internals/modules/policies"
)
const channelBufferSize = 100
@@ -17,9 +21,9 @@ const channelBufferSize = 100
type UpdateMessage struct {
Update *proto.SyncResponse
NetworkMap *types.NetworkMap
PeerManager *nbpeer.Manager
PolicyManager *nbpeer.PolicyManager
GroupManager *nbpeer.GroupManager
PeerManager *peers.Manager
PolicyManager *policies.Manager
GroupManager *groups.Manager
}
type UpdateChannel struct {
+18
View File
@@ -0,0 +1,18 @@
package accounts
import (
"context"
"github.com/netbirdio/netbird/management/server/integrations/extra_settings"
"github.com/netbirdio/netbird/management/server/types"
"github.com/netbirdio/management-refactor/internals/shared/db"
)
type Manager interface {
GetExtraSettingsManager() extra_settings.Manager
GetSettings(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID string) (*types.Settings, error)
GetExtraSettings(ctx context.Context, tx db.Transaction, accountID string) (*types.ExtraSettings, error)
UpdateExtraSettings(ctx context.Context, accountID, userID string, extraSettings *types.ExtraSettings) (bool, error)
UpdateSettings(ctx context.Context, tx db.Transaction, settings *types.Settings) (*types.Settings, error)
}
-1
View File
@@ -1 +0,0 @@
package accounts
@@ -8,7 +8,6 @@ import (
"github.com/netbirdio/netbird/management/server/integrations/extra_settings"
types2 "github.com/netbirdio/netbird/management/server/types"
"github.com/netbirdio/management-refactor/internals/modules/accounts/settings/types"
"github.com/netbirdio/management-refactor/internals/modules/users"
"github.com/netbirdio/management-refactor/internals/shared/activity"
"github.com/netbirdio/management-refactor/internals/shared/db"
@@ -1,14 +1,14 @@
package manager
import (
"github.com/netbirdio/management-refactor/internals/modules/accounts/settings/types"
"github.com/netbirdio/management-refactor/internals/modules/accounts/settings"
"github.com/netbirdio/management-refactor/internals/shared/db"
)
type Repository interface {
RunInTx(fn func(tx db.Transaction) error) error
GetAccountSettings(tx db.Transaction, strength db.LockingStrength, accountID string) (*types.Settings, error)
UpdateSettings(tx db.Transaction, settings *types.Settings) (*types.Settings, error)
GetAccountSettings(tx db.Transaction, strength db.LockingStrength, accountID string) (*settings.Settings, error)
UpdateSettings(tx db.Transaction, settings *settings.Settings) (*settings.Settings, error)
}
type repository struct {
@@ -23,13 +23,13 @@ func (r *repository) RunInTx(fn func(tx db.Transaction) error) error {
return r.store.RunInTx(fn)
}
func (r *repository) GetAccountSettings(tx db.Transaction, strength db.LockingStrength, accountID string) (*types.Settings, error) {
var settings types.Settings
func (r *repository) GetAccountSettings(tx db.Transaction, strength db.LockingStrength, accountID string) (*settings.Settings, error) {
var settings settings.Settings
err := r.store.GetOne(tx, strength, &settings, "account_id = ?", accountID)
return &settings, err
}
func (r *repository) UpdateSettings(tx db.Transaction, settings *types.Settings) (*types.Settings, error) {
func (r *repository) UpdateSettings(tx db.Transaction, settings *settings.Settings) (*settings.Settings, error) {
err := r.store.Update(tx, settings)
if err != nil {
return nil, err
-94
View File
@@ -1,94 +0,0 @@
package peers
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
nbcontext "github.com/netbirdio/netbird/management/server/context"
"github.com/netbirdio/netbird/management/server/groups"
"github.com/netbirdio/netbird/management/server/http/api"
"github.com/netbirdio/netbird/management/server/http/util"
"github.com/netbirdio/management-refactor/internals/shared/db"
"github.com/netbirdio/management-refactor/internals/shared/permissions"
)
type handler struct {
manager *Manager
permissionsManager permissions.Manager
}
func newHandler(manager *Manager, permissionsManager permissions.Manager) *handler {
return &handler{
manager: manager,
permissionsManager: permissionsManager,
}
}
func (h *handler) RegisterEndpoints(router *mux.Router) {
router.HandleFunc("/peers", h.getAllPeers).Methods("GET", "OPTIONS")
router.HandleFunc("/peers/{peerId}", h.getPeer).Methods("GET", "OPTIONS")
router.HandleFunc("/peers/{peerId}", h.updatePeer).Methods("PUT", "OPTIONS")
router.HandleFunc("/peers/{peerId}", h.deletePeer).Methods("DELETE", "OPTIONS")
router.HandleFunc("/peers/{peerId}/accessible-peers", h.getAccessiblePeers).Methods("GET", "OPTIONS")
}
func (h *handler) getAllPeers(w http.ResponseWriter, r *http.Request) {
userAuth, err := nbcontext.GetUserAuthFromContext(r.Context())
if err != nil {
util.WriteError(r.Context(), err, w)
return
}
nameFilter := r.URL.Query().Get("name")
ipFilter := r.URL.Query().Get("ip")
peers, err := h.manager.GetFilteredPeers(r.Context(), nil, db.LockingStrengthShare, userAuth.AccountId, nameFilter, ipFilter)
if err != nil {
util.WriteError(r.Context(), err, w)
return
}
dnsDomain := h.accountManager.GetDNSDomain()
grps, _ := h.accountManager.GetAllGroups(r.Context(), accountID, userID)
grpsInfoMap := groups.ToGroupsInfoMap(grps, len(peers))
respBody := make([]*api.PeerBatch, 0, len(peers))
for _, peer := range peers {
peerToReturn, err := h.checkPeerStatus(peer)
if err != nil {
util.WriteError(r.Context(), err, w)
return
}
respBody = append(respBody, toPeerListItemResponse(peerToReturn, grpsInfoMap[peer.ID], dnsDomain, 0))
}
validPeersMap, err := h.accountManager.GetValidatedPeers(r.Context(), accountID)
if err != nil {
log.WithContext(r.Context()).Errorf("failed to list appreoved peers: %v", err)
util.WriteError(r.Context(), fmt.Errorf("internal error"), w)
return
}
h.setApprovalRequiredFlag(respBody, validPeersMap)
util.WriteJSONObject(r.Context(), w, respBody)
}
func (h *handler) getPeer(w http.ResponseWriter, r *http.Request) {
}
func (h *handler) updatePeer(w http.ResponseWriter, r *http.Request) {
}
func (h *handler) deletePeer(w http.ResponseWriter, r *http.Request) {
}
func (h *handler) getAccessiblePeers(w http.ResponseWriter, r *http.Request) {
}
+14
View File
@@ -0,0 +1,14 @@
package peers
import (
"context"
"github.com/netbirdio/management-refactor/internals/shared/db"
)
type Manager interface {
GetPeer(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID, peerID string) (*Peer, error)
GetPeers(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID string) ([]*Peer, error)
GetFilteredPeers(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID, nameFilter, ipFilter string) ([]*Peer, error)
UpdatePeer(ctx context.Context, tx db.Transaction, peer *Peer) error
}
+47
View File
@@ -0,0 +1,47 @@
package manager
import (
"net/http"
"github.com/gorilla/mux"
"github.com/netbirdio/management-refactor/internals/shared/permissions"
)
type handler struct {
manager *Manager
permissionsManager permissions.Manager
}
func newHandler(manager *Manager, permissionsManager permissions.Manager) *handler {
return &handler{
manager: manager,
permissionsManager: permissionsManager,
}
}
func (h *handler) RegisterEndpoints(router *mux.Router) {
router.HandleFunc("/peers", h.getAllPeers).Methods("GET", "OPTIONS")
router.HandleFunc("/peers/{peerId}", h.getPeer).Methods("GET", "OPTIONS")
router.HandleFunc("/peers/{peerId}", h.updatePeer).Methods("PUT", "OPTIONS")
router.HandleFunc("/peers/{peerId}", h.deletePeer).Methods("DELETE", "OPTIONS")
router.HandleFunc("/peers/{peerId}/accessible-peers", h.getAccessiblePeers).Methods("GET", "OPTIONS")
}
func (h *handler) getAllPeers(w http.ResponseWriter, r *http.Request) {}
func (h *handler) getPeer(w http.ResponseWriter, r *http.Request) {
}
func (h *handler) updatePeer(w http.ResponseWriter, r *http.Request) {
}
func (h *handler) deletePeer(w http.ResponseWriter, r *http.Request) {
}
func (h *handler) getAccessiblePeers(w http.ResponseWriter, r *http.Request) {
}
@@ -1,11 +1,11 @@
package peers
package manager
import (
"context"
"github.com/gorilla/mux"
"github.com/netbirdio/management-refactor/internals/modules/peers/types"
"github.com/netbirdio/management-refactor/internals/modules/peers"
"github.com/netbirdio/management-refactor/internals/shared/activity"
"github.com/netbirdio/management-refactor/internals/shared/db"
"github.com/netbirdio/management-refactor/internals/shared/permissions"
@@ -14,6 +14,8 @@ import (
var log = logging.LoggerForThisPackage()
var _ peers.Manager = (*Manager)(nil)
type Manager struct {
repo Repository
eventManager *activity.Manager
@@ -27,33 +29,18 @@ func NewManager(store *db.Store, router *mux.Router, permissionsManager permissi
return m
}
func (m *Manager) GetPeer(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID, peerID string) (*types.Peer, error) {
func (m *Manager) GetPeer(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID, peerID string) (*peers.Peer, error) {
return m.repo.GetPeerByID(tx, strength, accountID, peerID)
}
func (m *Manager) GetPeers(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID string) ([]*types.Peer, error) {
func (m *Manager) GetPeers(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID string) ([]*peers.Peer, error) {
return m.repo.GetPeers(tx, strength, accountID)
}
func (m *Manager) GetFilteredPeers(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID, nameFilter, ipFilter string) ([]*types.Peer, error) {
func (m *Manager) GetFilteredPeers(ctx context.Context, tx db.Transaction, strength db.LockingStrength, accountID, nameFilter, ipFilter string) ([]*peers.Peer, error) {
return m.repo.GetFilteredPeers(tx, strength, accountID, nameFilter, ipFilter)
}
func (m *Manager) UpdatePeer(ctx context.Context, tx db.Transaction, peer *types.Peer) error {
validateInput
validatePermissions
err := m.repo.RunInTx(func(tx db.Transaction) error {
othermanager.UpdatePeers
ourmanager.UpdateGroup
})
if err != nil {
return err
}
err := sendPeerUpdateEvent(tx, peer) // -> goes to peerUpdtaeChannel
if err != nil {
log.Errorf("Failed to send peer update event: %v", err)
}
func (m *Manager) UpdatePeer(ctx context.Context, tx db.Transaction, peer *peers.Peer) error {
return m.repo.UpdatePeer(tx, peer)
}
@@ -1,16 +1,16 @@
package peers
package manager
import (
"github.com/netbirdio/management-refactor/internals/modules/peers/types"
"github.com/netbirdio/management-refactor/internals/modules/peers"
"github.com/netbirdio/management-refactor/internals/shared/db"
)
type Repository interface {
RunInTx(fn func(tx db.Transaction) error) error
GetPeerByID(tx db.Transaction, strength db.LockingStrength, accountID, peerId string) (*types.Peer, error)
GetPeers(tx db.Transaction, strength db.LockingStrength, accountID string) ([]*types.Peer, error)
GetFilteredPeers(tx db.Transaction, strength db.LockingStrength, accountID string, nameFilter, ipFilter string) ([]*types.Peer, error)
UpdatePeer(tx db.Transaction, peer *types.Peer) error
GetPeerByID(tx db.Transaction, strength db.LockingStrength, accountID, peerId string) (*peers.Peer, error)
GetPeers(tx db.Transaction, strength db.LockingStrength, accountID string) ([]*peers.Peer, error)
GetFilteredPeers(tx db.Transaction, strength db.LockingStrength, accountID string, nameFilter, ipFilter string) ([]*peers.Peer, error)
UpdatePeer(tx db.Transaction, peer *peers.Peer) error
}
type repository struct {
@@ -25,8 +25,8 @@ func (r *repository) RunInTx(fn func(tx db.Transaction) error) error {
return r.store.RunInTx(fn)
}
func (r *repository) GetPeerByID(tx db.Transaction, strength db.LockingStrength, accountID, peerId string) (*types.Peer, error) {
var peer types.Peer
func (r *repository) GetPeerByID(tx db.Transaction, strength db.LockingStrength, accountID, peerId string) (*peers.Peer, error) {
var peer peers.Peer
err := r.store.GetOne(tx, strength, &peer, "account_id = ? AND id = ?", accountID, peerId)
if err != nil {
return nil, err
@@ -34,8 +34,8 @@ func (r *repository) GetPeerByID(tx db.Transaction, strength db.LockingStrength,
return &peer, nil
}
func (r *repository) GetPeers(tx db.Transaction, strength db.LockingStrength, accountID string) ([]*types.Peer, error) {
var peers []*types.Peer
func (r *repository) GetPeers(tx db.Transaction, strength db.LockingStrength, accountID string) ([]*peers.Peer, error) {
var peers []*peers.Peer
err := r.store.GetMany(tx, strength, &peers, "account_id = ?", accountID)
if err != nil {
return nil, err
@@ -43,7 +43,7 @@ func (r *repository) GetPeers(tx db.Transaction, strength db.LockingStrength, ac
return peers, nil
}
func (r *repository) GetFilteredPeers(tx db.Transaction, strength db.LockingStrength, accountID string, nameFilter, ipFilter string) ([]*types.Peer, error) {
func (r *repository) GetFilteredPeers(tx db.Transaction, strength db.LockingStrength, accountID string, nameFilter, ipFilter string) ([]*peers.Peer, error) {
query := "account_id = ?"
args := []interface{}{accountID}
@@ -57,7 +57,7 @@ func (r *repository) GetFilteredPeers(tx db.Transaction, strength db.LockingStre
args = append(args, ipFilter)
}
var peers []*types.Peer
var peers []*peers.Peer
err := r.store.GetMany(tx, strength, &peers, query, args)
if err != nil {
return nil, err
@@ -65,6 +65,6 @@ func (r *repository) GetFilteredPeers(tx db.Transaction, strength db.LockingStre
return peers, nil
}
func (r *repository) UpdatePeer(tx db.Transaction, peer *types.Peer) error {
func (r *repository) UpdatePeer(tx db.Transaction, peer *peers.Peer) error {
return r.store.Update(tx, peer)
}
@@ -1,4 +1,4 @@
package types
package peers
import (
"net"
@@ -1,4 +1,4 @@
package types
package peers
import (
"fmt"
+4
View File
@@ -0,0 +1,4 @@
package policies
type Manager interface {
}
-1
View File
@@ -1 +0,0 @@
package setup_keys

Some files were not shown because too many files have changed in this diff Show More