123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- package controllers
- import (
- "net/http"
- "strconv"
- "time"
- "github.com/gorilla/mux"
- "github.com/gravitl/netmaker/db"
- "github.com/gravitl/netmaker/logic"
- "github.com/gravitl/netmaker/models"
- "github.com/gravitl/netmaker/schema"
- )
- func EventHandlers(r *mux.Router) {
- r.HandleFunc("/api/v1/network/activity", logic.SecurityCheck(true, http.HandlerFunc(listNetworkActivity))).Methods(http.MethodGet)
- r.HandleFunc("/api/v1/user/activity", logic.SecurityCheck(true, http.HandlerFunc(listUserActivity))).Methods(http.MethodGet)
- 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 "network_id required to get the network events"
- // @Success 200 {object} models.ReturnSuccessResponseWithJson
- // @Failure 500 {object} models.ErrorResponse
- func listNetworkActivity(w http.ResponseWriter, r *http.Request) {
- netID := r.URL.Query().Get("network_id")
- // Parse query parameters with defaults
- if netID == "" {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusBadRequest,
- Message: "network_id param is missing",
- })
- return
- }
- fromDateStr := r.URL.Query().Get("from_date")
- toDateStr := r.URL.Query().Get("to_date")
- var err error
- var fromDate, toDate time.Time
- if fromDateStr != "" && toDateStr != "" {
- fromDate, err = time.Parse(time.RFC3339, fromDateStr)
- if err != nil {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusBadRequest,
- Message: err.Error(),
- })
- return
- }
- toDate, err = time.Parse(time.RFC3339, toDateStr)
- if err != nil {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusBadRequest,
- Message: err.Error(),
- })
- return
- }
- }
- page, _ := strconv.Atoi(r.URL.Query().Get("page"))
- pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))
- ctx := db.WithContext(r.Context())
- netActivity, err := (&schema.Event{NetworkID: models.NetworkID(netID)}).ListByNetwork(db.SetPagination(ctx, page, pageSize), fromDate, toDate)
- 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")
- }
- // @Summary list activity.
- // @Router /api/v1/activity [get]
- // @Tags Activity
- // @Param network_id query string true "network_id required to get the network events"
- // @Success 200 {object} models.ReturnSuccessResponseWithJson
- // @Failure 500 {object} models.ErrorResponse
- func listUserActivity(w http.ResponseWriter, r *http.Request) {
- username := r.URL.Query().Get("username")
- // Parse query parameters with defaults
- if username == "" {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusBadRequest,
- Message: "username param is missing",
- })
- return
- }
- fromDateStr := r.URL.Query().Get("from_date")
- toDateStr := r.URL.Query().Get("to_date")
- var err error
- var fromDate, toDate time.Time
- if fromDateStr != "" && toDateStr != "" {
- fromDate, err = time.Parse(time.RFC3339, fromDateStr)
- if err != nil {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusBadRequest,
- Message: err.Error(),
- })
- return
- }
- toDate, err = time.Parse(time.RFC3339, toDateStr)
- if err != nil {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusBadRequest,
- Message: err.Error(),
- })
- return
- }
- }
- page, _ := strconv.Atoi(r.URL.Query().Get("page"))
- pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))
- ctx := db.WithContext(r.Context())
- userActivity, err := (&schema.Event{TriggeredBy: username}).ListByUser(db.SetPagination(ctx, page, pageSize), fromDate, toDate)
- if err != nil {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusInternalServerError,
- Message: err.Error(),
- })
- return
- }
- logic.ReturnSuccessResponseWithJson(w, r, userActivity, "successfully fetched user activity "+username)
- }
- // @Summary list activity.
- // @Router /api/v1/activity [get]
- // @Tags Activity
- // @Success 200 {object} models.ReturnSuccessResponseWithJson
- // @Failure 500 {object} models.ErrorResponse
- func listActivity(w http.ResponseWriter, r *http.Request) {
- username := r.URL.Query().Get("username")
- network := r.URL.Query().Get("network_id")
- page, _ := strconv.Atoi(r.URL.Query().Get("page"))
- pageSize, _ := strconv.Atoi(r.URL.Query().Get("per_page"))
- ctx := db.WithContext(r.Context())
- var err error
- fromDateStr := r.URL.Query().Get("from_date")
- toDateStr := r.URL.Query().Get("to_date")
- var fromDate, toDate time.Time
- if fromDateStr != "" && toDateStr != "" {
- fromDate, err = time.Parse(time.RFC3339, fromDateStr)
- if err != nil {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusBadRequest,
- Message: err.Error(),
- })
- return
- }
- toDate, err = time.Parse(time.RFC3339, toDateStr)
- if err != nil {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusBadRequest,
- Message: err.Error(),
- })
- return
- }
- }
- var events []schema.Event
- e := &schema.Event{TriggeredBy: username, NetworkID: models.NetworkID(network)}
- if username != "" && network != "" {
- events, err = e.ListByUserAndNetwork(db.SetPagination(ctx, page, pageSize), fromDate, toDate)
- } else if username != "" && network == "" {
- events, err = e.ListByUser(db.SetPagination(ctx, page, pageSize), fromDate, toDate)
- } else if username == "" && network != "" {
- events, err = e.ListByNetwork(db.SetPagination(ctx, page, pageSize), fromDate, toDate)
- } else {
- events, err = e.List(db.SetPagination(ctx, page, pageSize), fromDate, toDate)
- }
- if err != nil {
- logic.ReturnErrorResponse(w, r, models.ErrorResponse{
- Code: http.StatusInternalServerError,
- Message: err.Error(),
- })
- return
- }
- logic.ReturnSuccessResponseWithJson(w, r, events, "successfully fetched all events ")
- }
|