2
0
Эх сурвалжийг харах

define schema for activity, add api handler to list network activity

abhishek9686 4 сар өмнө
parent
commit
83b48f6be6

+ 36 - 0
pro/controllers/activity.go

@@ -0,0 +1,36 @@
+package controllers
+
+import (
+	"net/http"
+
+	"github.com/gorilla/mux"
+	"github.com/gravitl/netmaker/logic"
+	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/schema"
+)
+
+func ActivityHandlers(r *mux.Router) {
+
+	r.HandleFunc("/api/v1/activity", logic.SecurityCheck(true, http.HandlerFunc(listActivity))).Methods(http.MethodGet)
+}
+
+// @Summary     list activity.
+// @Router      /api/v1/activity [get]
+// @Tags        Activity
+// @Param       network_id query string true "roleid required to get the role details"
+// @Success     200 {object}  models.ReturnSuccessResponseWithJson
+// @Failure     500 {object} models.ErrorResponse
+func listActivity(w http.ResponseWriter, r *http.Request) {
+	netID := r.URL.Query().Get("network_id")
+	var err error
+	netActivity, err := (&schema.Activity{NetworkID: models.NetworkID(netID)}).List(r.Context())
+	if err != nil {
+		logic.ReturnErrorResponse(w, r, models.ErrorResponse{
+			Code:    http.StatusInternalServerError,
+			Message: err.Error(),
+		})
+		return
+	}
+
+	logic.ReturnSuccessResponseWithJson(w, r, netActivity, "successfully fetched network activity")
+}

+ 1 - 0
pro/initialize.go

@@ -34,6 +34,7 @@ func InitPro() {
 		proControllers.FailOverHandlers,
 		proControllers.InetHandlers,
 		proControllers.RacHandlers,
+		proControllers.ActivityHandlers,
 	)
 	controller.ListRoles = proControllers.ListRoles
 	logic.EnterpriseCheckFuncs = append(logic.EnterpriseCheckFuncs, func() {

+ 68 - 0
schema/activity.go

@@ -1,4 +1,72 @@
 package schema
 
+import (
+	"context"
+	"time"
+
+	"github.com/gravitl/netmaker/db"
+	"github.com/gravitl/netmaker/models"
+	"gorm.io/datatypes"
+)
+
+type Action string
+
+const (
+	Create Action = "CREATE"
+	Update Action = "UPDATE"
+	Delete Action = "DELETE"
+)
+
+type SubjectType string
+
+const (
+	UserSub    SubjectType = "USER"
+	DeviceSub  SubjectType = "DEVICE"
+	NodeSub    SubjectType = "NODE"
+	SettingSub SubjectType = "SETTING"
+	AclSub     SubjectType = "ACLs"
+	EgressSub  SubjectType = "EGRESS"
+	NetworkSub SubjectType = "NETWORK"
+)
+
+type Origin string
+
+const (
+	Dashboard Origin = "DASHBOARD"
+	Api       Origin = "API"
+	NMCTL     Origin = "NMCTL"
+	ClientApp Origin = "CLIENT-APP"
+)
+
+type Subject struct {
+	ID   string      `json:"id"`
+	Name string      `json:"name"`
+	Type SubjectType `json:"subject_type"`
+}
+
 type Activity struct {
+	ID        string           `gorm:"primaryKey" json:"id"`
+	Action    Action           `gorm:"action" json:"action"`
+	Source    datatypes.JSON   `gorm:"source" json:"source"`
+	Origin    string           `gorm:"origin" json:"origin"`
+	Target    datatypes.JSON   `gorm:"target" json:"target"`
+	NetworkID models.NetworkID `gorm:"network_id" json:"network_id"`
+	TimeStamp time.Time        `gorm:"time_stamp" json:"time_stamp"`
+}
+
+func (a *Activity) Get(ctx context.Context) error {
+	return db.FromContext(ctx).Model(&Activity{}).First(&a).Where("id = ?", a.ID).Error
+}
+
+func (a *Activity) Update(ctx context.Context) error {
+	return db.FromContext(ctx).Model(&Activity{}).Where("id = ?", a.ID).Updates(&a).Error
+}
+
+func (a *Activity) Create(ctx context.Context) error {
+	return db.FromContext(ctx).Model(&Activity{}).Create(&a).Error
+}
+
+func (a *Activity) List(ctx context.Context) (ats []Activity, err error) {
+	err = db.FromContext(ctx).Model(&Activity{}).Find(&ats).Error
+	return
 }

+ 1 - 0
schema/models.go

@@ -6,5 +6,6 @@ func ListModels() []interface{} {
 		&Job{},
 		&Egress{},
 		&UserAccessToken{},
+		&Activity{},
 	}
 }