Files
zrok/controller/listLimitClasses.go

71 lines
2.1 KiB
Go

package controller
import (
"github.com/go-openapi/runtime/middleware"
"github.com/michaelquigley/df/dl"
"github.com/openziti/zrok/v2/controller/store"
"github.com/openziti/zrok/v2/rest_model_zrok"
"github.com/openziti/zrok/v2/rest_server_zrok/operations/admin"
)
type listLimitClassesHandler struct{}
func newListLimitClassesHandler() *listLimitClassesHandler {
return &listLimitClassesHandler{}
}
func (h *listLimitClassesHandler) Handle(params admin.ListLimitClassesParams, principal *rest_model_zrok.Principal) middleware.Responder {
if !principal.Admin {
dl.Error("invalid admin principal")
return admin.NewListLimitClassesUnauthorized()
}
trx, err := str.Begin()
if err != nil {
dl.Errorf("error starting transaction: %v", err)
return admin.NewListLimitClassesInternalServerError()
}
defer func() { _ = trx.Rollback() }()
lcs, err := str.FindLimitClassesByLabel(params.Body.Label, trx)
if err != nil {
dl.Errorf("error finding limit classes by label '%v': %v", params.Body.Label, err)
return admin.NewListLimitClassesInternalServerError()
}
return admin.NewListLimitClassesOK().WithPayload(limitClassesToApi(lcs))
}
func limitClassToApi(lc *store.LimitClass) *rest_model_zrok.LimitClass {
out := &rest_model_zrok.LimitClass{
ID: int64(lc.Id),
Environments: int64(lc.Environments),
Shares: int64(lc.Shares),
ReservedShares: int64(lc.ReservedShares),
UniqueNames: int64(lc.UniqueNames),
ShareFrontends: int64(lc.ShareFrontends),
PeriodMinutes: int64(lc.PeriodMinutes),
RxBytes: lc.RxBytes,
TxBytes: lc.TxBytes,
TotalBytes: lc.TotalBytes,
LimitAction: string(lc.LimitAction),
CreatedAt: lc.CreatedAt.UnixMilli(),
UpdatedAt: lc.UpdatedAt.UnixMilli(),
}
if lc.Label != nil {
out.Label = *lc.Label
}
if lc.BackendMode != nil {
out.BackendMode = string(*lc.BackendMode)
}
return out
}
func limitClassesToApi(lcs []*store.LimitClass) []*rest_model_zrok.LimitClass {
var out []*rest_model_zrok.LimitClass
for _, lc := range lcs {
out = append(out, limitClassToApi(lc))
}
return out
}