Skip to content

Commit

Permalink
reset deployments and quota endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
rawdaGastan committed Dec 13, 2023
1 parent aab9a04 commit b9490ba
Show file tree
Hide file tree
Showing 2 changed files with 148 additions and 0 deletions.
144 changes: 144 additions & 0 deletions server/app/admin_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"net/http"
"strings"
"time"

"github.com/codescalers/cloud4students/internal"
Expand Down Expand Up @@ -87,6 +88,149 @@ func (a *App) GetBalanceHandler(req *http.Request) (interface{}, Response) {
}, Ok()
}

func (a *App) ResetUsersQuota(req *http.Request) (interface{}, Response) {
users, err := a.db.ListAllUsers()
if err == gorm.ErrRecordNotFound || len(users) == 0 {
return ResponseMsg{
Message: "Users are not found",
}, Ok()
}

for _, user := range users {
err = a.db.UpdateUserQuota(user.UserID, 0, 0)
if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}
}

return ResponseMsg{
Message: "Quota is reset successfully",
}, Ok()
}

// DeleteAllDeployments deletes all deployments
func (a *App) DeleteAllDeployments(req *http.Request) (interface{}, Response) {
users, err := a.db.ListAllUsers()
if err == gorm.ErrRecordNotFound || len(users) == 0 {
return ResponseMsg{
Message: "Users are not found",
}, Ok()
}

if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}

for _, user := range users {
// vms
vms, err := a.db.GetAllVms(user.UserID)
if err == gorm.ErrRecordNotFound || len(vms) == 0 {
log.Error().Err(err).Str("userID", user.UserID).Msg("Virtual machines are not found")
continue
}
if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}

for _, vm := range vms {
err = a.deployer.CancelDeployment(vm.ContractID, vm.NetworkContractID, "vm", vm.Name)
if err != nil && !strings.Contains(err.Error(), "ContractNotExists") {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}
}

err = a.db.DeleteAllVms(user.UserID)
if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}

// k8s clusters
clusters, err := a.db.GetAllK8s(user.UserID)
if err == gorm.ErrRecordNotFound || len(clusters) == 0 {
log.Error().Err(err).Str("userID", user.UserID).Msg("Kubernetes clusters are not found")
continue
}
if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}

for _, cluster := range clusters {
err = a.deployer.CancelDeployment(uint64(cluster.ClusterContract), uint64(cluster.NetworkContract), "k8s", cluster.Master.Name)
if err != nil && !strings.Contains(err.Error(), "ContractNotExists") {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}
}

err = a.db.DeleteAllK8s(user.UserID)
if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}
}

return ResponseMsg{
Message: "Deployments are deleted successfully",
}, Ok()
}

// ListDeployments lists all deployments
func (a *App) ListDeployments(req *http.Request) (interface{}, Response) {
users, err := a.db.ListAllUsers()
if err == gorm.ErrRecordNotFound || len(users) == 0 {
return ResponseMsg{
Message: "Users are not found",
}, Ok()
}

if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}

var allVMs []models.VM
var allClusters []models.K8sCluster

for _, user := range users {
// vms
vms, err := a.db.GetAllVms(user.UserID)
if err == gorm.ErrRecordNotFound || len(vms) == 0 {
log.Error().Err(err).Str("userID", user.UserID).Msg("Virtual machines are not found")
continue
}
if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}

allVMs = append(allVMs, vms...)

// k8s clusters
clusters, err := a.db.GetAllK8s(user.UserID)
if err == gorm.ErrRecordNotFound || len(clusters) == 0 {
log.Error().Err(err).Str("userID", user.UserID).Msg("Kubernetes clusters are not found")
continue
}
if err != nil {
log.Error().Err(err).Send()
return nil, InternalServerError(errors.New(internalServerErrorMsg))
}

allClusters = append(allClusters, clusters...)
}

return ResponseMsg{
Message: "Deployments are deleted successfully",
Data: map[string]interface{}{"vms": allVMs, "k8s": allClusters},
}, Ok()
}

// UpdateMaintenanceHandler updates maintenance flag
func (a *App) UpdateMaintenanceHandler(req *http.Request) (interface{}, Response) {
var input UpdateMaintenanceInput
Expand Down
4 changes: 4 additions & 0 deletions server/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ func (a *App) registerHandlers() {
voucherRouter := adminRouter.PathPrefix("/voucher").Subrouter()
maintenanceRouter := adminRouter.PathPrefix("/maintenance").Subrouter()
balanceRouter := adminRouter.PathPrefix("/balance").Subrouter()
deploymentsRouter := adminRouter.PathPrefix("/deployments").Subrouter()

unAuthUserRouter.HandleFunc("/signup", WrapFunc(a.SignUpHandler)).Methods("POST", "OPTIONS")
unAuthUserRouter.HandleFunc("/signup/verify_email", WrapFunc(a.VerifySignUpCodeHandler)).Methods("POST", "OPTIONS")
Expand Down Expand Up @@ -152,11 +153,14 @@ func (a *App) registerHandlers() {

// ADMIN ACCESS
adminRouter.HandleFunc("/user/all", WrapFunc(a.GetAllUsersHandler)).Methods("GET", "OPTIONS")
adminRouter.HandleFunc("/quota/reset", WrapFunc(a.ResetUsersQuota)).Methods("PUT", "OPTIONS")
adminRouter.HandleFunc("/deployment/count", WrapFunc(a.GetDlsCountHandler)).Methods("GET", "OPTIONS")
adminRouter.HandleFunc("/announcement", WrapFunc(a.CreateNewAnnouncement)).Methods("POST", "OPTIONS")
adminRouter.HandleFunc("/set_admin", WrapFunc(a.SetAdmin)).Methods("PUT", "OPTIONS")
balanceRouter.HandleFunc("", WrapFunc(a.GetBalanceHandler)).Methods("GET", "OPTIONS")
maintenanceRouter.HandleFunc("", WrapFunc(a.UpdateMaintenanceHandler)).Methods("PUT", "OPTIONS")
deploymentsRouter.HandleFunc("", WrapFunc(a.DeleteAllDeployments)).Methods("DELETE", "OPTIONS")
deploymentsRouter.HandleFunc("", WrapFunc(a.ListDeployments)).Methods("GET", "OPTIONS")

voucherRouter.HandleFunc("", WrapFunc(a.GenerateVoucherHandler)).Methods("POST", "OPTIONS")
voucherRouter.HandleFunc("", WrapFunc(a.ListVouchersHandler)).Methods("GET", "OPTIONS")
Expand Down

0 comments on commit b9490ba

Please sign in to comment.