mirror of
https://github.com/netbirdio/netbird.git
synced 2024-11-27 02:24:30 +01:00
5c0b8a46f0
This PR adds system activity tracking. The management service records events like add/remove peer, group, rule, route, etc. The activity events are stored in the SQLite event store and can be queried by the HTTP API.
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package http
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/netbirdio/netbird/management/server"
|
|
"github.com/netbirdio/netbird/management/server/activity"
|
|
"github.com/netbirdio/netbird/management/server/http/api"
|
|
"github.com/netbirdio/netbird/management/server/http/util"
|
|
"github.com/netbirdio/netbird/management/server/jwtclaims"
|
|
log "github.com/sirupsen/logrus"
|
|
"net/http"
|
|
)
|
|
|
|
// Events HTTP handler
|
|
type Events struct {
|
|
accountManager server.AccountManager
|
|
authAudience string
|
|
jwtExtractor jwtclaims.ClaimsExtractor
|
|
}
|
|
|
|
// NewEvents creates a new Events HTTP handler
|
|
func NewEvents(accountManager server.AccountManager, authAudience string) *Events {
|
|
return &Events{
|
|
accountManager: accountManager,
|
|
authAudience: authAudience,
|
|
jwtExtractor: *jwtclaims.NewClaimsExtractor(nil),
|
|
}
|
|
}
|
|
|
|
// GetEvents list of the given account
|
|
func (h *Events) GetEvents(w http.ResponseWriter, r *http.Request) {
|
|
claims := h.jwtExtractor.ExtractClaimsFromRequestContext(r, h.authAudience)
|
|
account, user, err := h.accountManager.GetAccountFromToken(claims)
|
|
if err != nil {
|
|
log.Error(err)
|
|
http.Redirect(w, r, "/", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
accountEvents, err := h.accountManager.GetEvents(account.Id, user.Id)
|
|
if err != nil {
|
|
util.WriteError(err, w)
|
|
return
|
|
}
|
|
events := make([]*api.Event, 0)
|
|
for _, e := range accountEvents {
|
|
events = append(events, toEventResponse(e))
|
|
}
|
|
|
|
util.WriteJSONObject(w, events)
|
|
}
|
|
|
|
func toEventResponse(event *activity.Event) *api.Event {
|
|
meta := make(map[string]string)
|
|
if event.Meta != nil {
|
|
for s, a := range event.Meta {
|
|
meta[s] = fmt.Sprintf("%v", a)
|
|
}
|
|
}
|
|
return &api.Event{
|
|
Id: fmt.Sprint(event.ID),
|
|
InitiatorId: event.InitiatorID,
|
|
Activity: event.Activity.Message(),
|
|
ActivityCode: api.EventActivityCode(event.Activity.StringCode()),
|
|
TargetId: event.TargetID,
|
|
Timestamp: event.Timestamp,
|
|
Meta: meta,
|
|
}
|
|
}
|