| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260 |
- // Copyright 2019 Yunion
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package usages
- import (
- "context"
- "fmt"
- "net/http"
- "time"
- json "yunion.io/x/jsonutils"
- "yunion.io/x/log"
- "yunion.io/x/pkg/appctx"
- "yunion.io/x/pkg/errors"
- "yunion.io/x/pkg/gotypes"
- "yunion.io/x/pkg/tristate"
- "yunion.io/x/pkg/util/rbacscope"
- "yunion.io/x/pkg/util/sets"
- "yunion.io/x/pkg/utils"
- "yunion.io/x/onecloud/pkg/apis"
- api "yunion.io/x/onecloud/pkg/apis/compute"
- "yunion.io/x/onecloud/pkg/appsrv"
- "yunion.io/x/onecloud/pkg/cloudcommon/db"
- "yunion.io/x/onecloud/pkg/cloudcommon/policy"
- "yunion.io/x/onecloud/pkg/compute/models"
- "yunion.io/x/onecloud/pkg/httperrors"
- "yunion.io/x/onecloud/pkg/mcclient"
- "yunion.io/x/onecloud/pkg/mcclient/auth"
- "yunion.io/x/onecloud/pkg/util/rbacutils"
- )
- type Usage map[string]interface{}
- func (u Usage) update(nu Usage) Usage {
- for k, v := range nu {
- u[k] = v
- }
- return u
- }
- func (u Usage) Add(key string, value interface{}) Usage {
- u[key] = value
- return u
- }
- func (u Usage) Get(key string) interface{} {
- return u[key]
- }
- func (u Usage) Include(nus ...Usage) Usage {
- for _, nu := range nus {
- u.update(nu)
- }
- return u
- }
- type objUsageFunc func(context.Context, mcclient.TokenCredential, rbacscope.TRbacScope, mcclient.IIdentityProvider, bool, []db.IStandaloneModel, []string, []string, []string, string, bool, rbacutils.SPolicyResult) (Usage, error)
- func getRangeObjId(ctx context.Context) (string, error) {
- params := appctx.AppContextParams(ctx)
- objId := params["<id>"]
- if len(objId) == 0 {
- return "", fmt.Errorf("Object %q id must specified", objId)
- }
- return objId, nil
- }
- func getRangeObj(ctx context.Context, man db.IStandaloneModelManager, userCred mcclient.TokenCredential) (db.IStandaloneModel, error) {
- if man == nil {
- return nil, nil
- }
- id, err := getRangeObjId(ctx)
- if err != nil {
- return nil, errors.Wrap(err, "getRangeObjId")
- }
- m, err := man.FetchByIdOrName(ctx, userCred, id)
- if err != nil {
- return nil, errors.Wrap(err, "man.FetchByIdOrName")
- }
- return m.(db.IStandaloneModel), nil
- }
- func rangeObjHandler(
- manager db.IStandaloneModelManager,
- reporter objUsageFunc,
- ) appsrv.FilterHandler {
- return func(ctx context.Context, w http.ResponseWriter, r *http.Request) {
- userCred := auth.FetchUserCredential(ctx, policy.FilterPolicyCredential)
- obj, err := getRangeObj(ctx, manager, userCred)
- if err != nil {
- httperrors.NotFoundError(ctx, w, "%v", err)
- return
- }
- ownerId, scope, err, result := db.FetchUsageOwnerScope(ctx, userCred, getQuery(r))
- if err != nil {
- httperrors.GeneralServerError(ctx, w, err)
- return
- }
- query := getQuery(r)
- tags := rbacutils.SPolicyResult{Result: rbacutils.Allow}
- query.Unmarshal(&tags)
- result = result.Merge(tags)
- isOwner := false
- if scope == rbacscope.ScopeDomain && obj != nil && db.IsObjectRbacAllowed(ctx, obj, userCred, policy.PolicyActionGet, "usage") == nil {
- isOwner = true
- }
- log.Debugf("ownerId: %s isOwner: %v scope: %s result: %s", ownerId, isOwner, scope, result.String())
- hostTypes := json.GetQueryStringArray(query, "host_type")
- // resourceTypes := json.GetQueryStringArray(query, "resource_type")
- providers := json.GetQueryStringArray(query, "provider")
- brands := json.GetQueryStringArray(query, "brand")
- cloudEnv, _ := query.GetString("cloud_env")
- includeSystem := json.QueryBoolean(query, "system", false)
- var rangeObjs []db.IStandaloneModel
- if obj != nil {
- rangeObjs = []db.IStandaloneModel{obj}
- }
- refresh := json.QueryBoolean(query, "refresh", false)
- key := getCacheKey(scope, ownerId, isOwner, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem, result)
- if !refresh {
- cached := usageCache.Get(key)
- if cached != nil {
- response(w, "usage", cached)
- return
- }
- }
- usage, err := reporter(ctx, userCred, scope, ownerId, isOwner, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem, result)
- if err != nil {
- httperrors.GeneralServerError(ctx, w, err)
- return
- }
- usageCache.AtomicSet(key, usage)
- response(w, "usage", usage)
- }
- }
- func addHandler(prefix, rangeObjKey string, hf appsrv.FilterHandler, app *appsrv.Application) {
- ahf := auth.Authenticate(hf)
- name := "get_usage"
- if len(rangeObjKey) != 0 {
- prefix = fmt.Sprintf("%s/%ss/<id>", prefix, rangeObjKey)
- name = fmt.Sprintf("get_%s_usage", rangeObjKey)
- }
- app.AddHandler2("GET", prefix, ahf, nil, name, nil)
- }
- func AddUsageHandler(prefix string, app *appsrv.Application) {
- prefix = fmt.Sprintf("%s/usages", prefix)
- for key, f := range map[string]appsrv.FilterHandler{
- "": rangeObjHandler(nil, ReportGeneralUsage),
- "zone": rangeObjHandler(models.ZoneManager, ReportZoneUsage),
- "wire": rangeObjHandler(models.WireManager, ReportWireUsage),
- "schedtag": rangeObjHandler(models.SchedtagManager, ReportSchedtagUsage),
- "host": rangeObjHandler(models.HostManager, ReportHostUsage),
- "cloudaccount": rangeObjHandler(models.CloudaccountManager, ReportCloudAccountUsage),
- "cloudprovider": rangeObjHandler(models.CloudproviderManager, ReportCloudProviderUsage),
- "cloudregion": rangeObjHandler(models.CloudregionManager, ReportCloudRegionUsage),
- } {
- addHandler(prefix, key, f, app)
- }
- }
- func response(w http.ResponseWriter, key string, obj interface{}) {
- body := map[string]interface{}{
- key: obj,
- }
- appsrv.SendStruct(w, body)
- }
- func getQuery(r *http.Request) json.JSONObject {
- query, e := json.ParseQueryString(r.URL.RawQuery)
- if e != nil {
- log.Errorf("Parse query string %q: %v", r.URL.RawQuery, e)
- }
- return query
- }
- func ReportHostUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, hosts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) {
- return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, hosts, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult)
- }
- func ReportWireUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, wires []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) {
- return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, wires, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult)
- }
- func ReportCloudAccountUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, accounts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) {
- return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, accounts, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult)
- }
- func ReportCloudProviderUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, managers []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) {
- return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, managers, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult)
- }
- func ReportSchedtagUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, schedtags []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) {
- return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, schedtags, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult)
- }
- func ReportZoneUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, zones []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) {
- return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, zones, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult)
- }
- func ReportCloudRegionUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, cloudRegions []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) {
- return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, cloudRegions, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult)
- }
- func getSystemGeneralUsage(
- ctx context.Context,
- userToken mcclient.TokenCredential,
- userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string,
- providers []string, brands []string, cloudEnv string, includeSystem bool,
- policyResult rbacutils.SPolicyResult,
- ) (Usage, error) {
- count := RegionUsage(rangeObjs, providers, brands, cloudEnv)
- zone := ZoneUsage(rangeObjs, providers, brands, cloudEnv)
- count.Include(zone)
- var pmemTotal float64
- var pcpuTotal float64
- hostEnabledUsage := HostEnabledUsage(ctx, userToken, "", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult)
- if !gotypes.IsNil(hostEnabledUsage.Get("enabled_hosts.memory")) {
- pmemTotal = float64(hostEnabledUsage.Get("enabled_hosts.memory").(int64))
- }
- if !gotypes.IsNil(hostEnabledUsage.Get("enabled_hosts.cpu")) {
- pcpuTotal = float64(hostEnabledUsage.Get("enabled_hosts.cpu").(int64))
- }
- if len(rangeObjs) > 0 && rangeObjs[0].Keyword() == "host" {
- host := rangeObjs[0].(*models.SHost)
- pmemTotal = float64(host.MemSize)
- pcpuTotal = float64(host.CpuCount)
- count.Add("memory", host.MemSize)
- count.Add("cpu", host.CpuCount)
- count.Add("memory.virtual", int64(host.GetVirtualMemorySize()))
- count.Add("cpu.virtual", int64(host.GetVirtualCPUCount()))
- }
- guestRunningUsage := GuestRunningUsage(ctx, userToken, "all.running_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, policyResult)
- var runningMem int
- var runningCpu int
- if !gotypes.IsNil(guestRunningUsage.Get("all.running_servers.memory")) {
- runningMem = guestRunningUsage.Get("all.running_servers.memory").(int)
- }
- if !gotypes.IsNil(guestRunningUsage.Get("all.running_servers.cpu")) {
- runningCpu = guestRunningUsage.Get("all.running_servers.cpu").(int)
- }
- runningCpuCmtRate := 0.0
- runningMemCmtRate := 0.0
- if pmemTotal > 0 {
- runningMemCmtRate = utils.FloatRound(float64(runningMem)/pmemTotal, 2)
- }
- if pcpuTotal > 0 {
- runningCpuCmtRate = utils.FloatRound(float64(runningCpu)/pcpuTotal, 2)
- }
- count.Add("all.memory_commit_rate.running", runningMemCmtRate)
- count.Add("all.cpu_commit_rate.running", runningCpuCmtRate)
- containerRunningUsage := ContainerRunningUsage(ctx, userToken, "all.running_containers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, policyResult)
- lastWeek := time.Now().Add(-7 * 24 * time.Hour)
- lastMonth := time.Now().Add(-30 * 24 * time.Hour)
- count.Include(
- VpcUsage(ctx, userToken, "all", providers, brands, cloudEnv, nil, rbacscope.ScopeSystem, rangeObjs, policyResult),
- DnsZoneUsage(ctx, userToken, "", nil, rbacscope.ScopeSystem, policyResult),
- HostAllUsage(ctx, userToken, "", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult),
- hostEnabledUsage,
- BaremetalUsage(ctx, userToken, userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult),
- StorageUsage(ctx, userToken, "", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, includeSystem, rbacscope.ScopeSystem, nil, policyResult),
- StorageUsage(ctx, userToken, "system", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, true, rbacscope.ScopeSystem, nil, policyResult),
- GuestNormalUsage(ctx, userToken, "all.servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, nil, policyResult),
- GuestNormalUsage(ctx, userToken, "all.servers.last_week", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastWeek, policyResult),
- GuestNormalUsage(ctx, userToken, "all.servers.last_month", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastMonth, policyResult),
- ContainerNormalUsage(ctx, userToken, "all.containers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, nil, policyResult),
- ContainerNormalUsage(ctx, userToken, "all.containers.last_week", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastWeek, policyResult),
- ContainerNormalUsage(ctx, userToken, "all.containers.last_month", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastMonth, policyResult),
- GuestPendingDeleteUsage(ctx, userToken, "all.pending_delete_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, nil, policyResult),
- GuestPendingDeleteUsage(ctx, userToken, "all.pending_delete_servers.last_week", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastWeek, policyResult),
- GuestPendingDeleteUsage(ctx, userToken, "all.pending_delete_servers.last_month", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastMonth, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, "all.pending_delete_containers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, nil, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, "all.pending_delete_containers.last_week", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastWeek, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, "all.pending_delete_containers.last_month", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastMonth, policyResult),
- GuestReadyUsage(ctx, userToken, "all.ready_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, policyResult),
- ContainerReadyUsage(ctx, userToken, "all.ready_containers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, policyResult),
- guestRunningUsage,
- containerRunningUsage,
- IsolatedDeviceUsage(ctx, userToken, "", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult),
- WireUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult),
- NetworkUsage(ctx, userToken, "all", rbacscope.ScopeSystem, nil, providers, brands, cloudEnv, rangeObjs, policyResult),
- EipUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- BucketUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- SnapshotUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- InstanceSnapshotUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- LoadbalancerUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- DBInstanceUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- MongoDBUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- ElasticSearchUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- KafkaUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- ElasticCacheUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult),
- )
- return count, nil
- }
- func getDomainGeneralUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (Usage, error) {
- lastWeek := time.Now().Add(-7 * 24 * time.Hour)
- lastMonth := time.Now().Add(-30 * 24 * time.Hour)
- count := GuestNormalUsage(ctx, userToken, getKey(scope, "servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult)
- var pmemTotal float64
- var pcpuTotal float64
- hostEnabledUsage := HostEnabledUsage(ctx, userToken, "", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult)
- if !gotypes.IsNil(hostEnabledUsage.Get("domain.enabled_hosts.memory")) {
- pmemTotal = float64(hostEnabledUsage.Get("domain.enabled_hosts.memory").(int64))
- }
- if !gotypes.IsNil(hostEnabledUsage.Get("domain.enabled_hosts.cpu")) {
- pcpuTotal = float64(hostEnabledUsage.Get("domain.enabled_hosts.cpu").(int64))
- }
- guestRunningUsage := GuestRunningUsage(ctx, userToken, "domain.running_servers", rbacscope.ScopeDomain, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult)
- var runningMem int
- var runningCpu int
- if !gotypes.IsNil(guestRunningUsage.Get("domain.running_servers.memory")) {
- runningMem = guestRunningUsage.Get("domain.running_servers.memory").(int)
- }
- if !gotypes.IsNil(guestRunningUsage.Get("domain.running_servers.cpu")) {
- runningCpu = guestRunningUsage.Get("domain.running_servers.cpu").(int)
- }
- runningCpuCmtRate := 0.0
- runningMemCmtRate := 0.0
- if pmemTotal > 0 {
- runningMemCmtRate = utils.FloatRound(float64(runningMem)/pmemTotal, 2)
- }
- if pcpuTotal > 0 {
- runningCpuCmtRate = utils.FloatRound(float64(runningCpu)/pcpuTotal, 2)
- }
- count.Add("domain.memory_commit_rate.running", runningMemCmtRate)
- count.Add("domain.cpu_commit_rate.running", runningCpuCmtRate)
- containerRunningUsage := ContainerRunningUsage(ctx, userToken, "domain.running_containers", rbacscope.ScopeDomain, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult)
- var containerRunningMem int
- var containerRunningCpu int
- if !gotypes.IsNil(containerRunningUsage.Get("domain.running_containers.memory")) {
- containerRunningMem = containerRunningUsage.Get("domain.running_containers.memory").(int)
- }
- if !gotypes.IsNil(containerRunningUsage.Get("domain.running_containers.cpu")) {
- containerRunningCpu = containerRunningUsage.Get("domain.running_containers.cpu").(int)
- }
- count.Add("domain.memory_commit_rate.running_containers", utils.FloatRound(float64(containerRunningMem)/pmemTotal, 2))
- count.Add("domain.cpu_commit_rate.running_containers", utils.FloatRound(float64(containerRunningCpu)/pcpuTotal, 2))
- count.Include(
- ContainerNormalUsage(ctx, userToken, getKey(scope, "containers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult),
- VpcUsage(ctx, userToken, "domain", providers, brands, cloudEnv, cred, rbacscope.ScopeDomain, rangeObjs, policyResult),
- DnsZoneUsage(ctx, userToken, "domain", cred, rbacscope.ScopeDomain, policyResult),
- HostAllUsage(ctx, userToken, "", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult),
- hostEnabledUsage,
- BaremetalUsage(ctx, userToken, cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult),
- StorageUsage(ctx, userToken, "", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, false, rbacscope.ScopeDomain, cred, policyResult),
- StorageUsage(ctx, userToken, "system", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, true, rbacscope.ScopeDomain, cred, policyResult),
- GuestNormalUsage(ctx, userToken, getKey(scope, "servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult),
- GuestNormalUsage(ctx, userToken, getKey(scope, "servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult),
- ContainerNormalUsage(ctx, userToken, getKey(scope, "containers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult),
- ContainerNormalUsage(ctx, userToken, getKey(scope, "containers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult),
- guestRunningUsage,
- containerRunningUsage,
- GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult),
- GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult),
- GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_containers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_containers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_containers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult),
- GuestReadyUsage(ctx, userToken, getKey(scope, "ready_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult),
- ContainerReadyUsage(ctx, userToken, getKey(scope, "ready_containers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult),
- WireUsage(ctx, userToken, scope, cred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult),
- NetworkUsage(ctx, userToken, getKey(scope, ""), scope, cred, providers, brands, cloudEnv, rangeObjs, policyResult),
- IsolatedDeviceUsage(ctx, userToken, "", scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult),
- EipUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- BucketUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- SnapshotUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- InstanceSnapshotUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- LoadbalancerUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- DBInstanceUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- MongoDBUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- ElasticSearchUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- KafkaUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- ElasticCacheUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- )
- return count, nil
- }
- func getProjectGeneralUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (Usage, error) {
- lastWeek := time.Now().Add(-7 * 24 * time.Hour)
- lastMonth := time.Now().Add(-30 * 24 * time.Hour)
- count := GuestNormalUsage(ctx, userToken, getKey(scope, "servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult)
- count.Include(
- ContainerNormalUsage(ctx, userToken, getKey(scope, "containers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult),
- GuestNormalUsage(ctx, userToken, getKey(scope, "servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult),
- GuestNormalUsage(ctx, userToken, getKey(scope, "servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult),
- ContainerNormalUsage(ctx, userToken, getKey(scope, "containers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult),
- ContainerNormalUsage(ctx, userToken, getKey(scope, "containers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult),
- GuestRunningUsage(ctx, userToken, getKey(scope, "running_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult),
- ContainerRunningUsage(ctx, userToken, getKey(scope, "running_containers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult),
- GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult),
- GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult),
- GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_containers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_containers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult),
- ContainerPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_containers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult),
- GuestReadyUsage(ctx, userToken, getKey(scope, "ready_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult),
- ContainerReadyUsage(ctx, userToken, getKey(scope, "ready_containers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult),
- WireUsage(ctx, userToken, scope, cred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult),
- NetworkUsage(ctx, userToken, getKey(scope, ""), scope, cred, providers, brands, cloudEnv, rangeObjs, policyResult),
- EipUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- BucketUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- DisksUsage(ctx, userToken, getKey(scope, "disks"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, false, false, policyResult),
- DisksUsage(ctx, userToken, getKey(scope, "disks.system"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, false, true, policyResult),
- DisksUsage(ctx, userToken, getKey(scope, "pending_delete_disks"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, true, false, policyResult),
- DisksUsage(ctx, userToken, getKey(scope, "pending_delete_disks.system"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, true, true, policyResult),
- SnapshotUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- InstanceSnapshotUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- LoadbalancerUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- DBInstanceUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- MongoDBUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- ElasticSearchUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- KafkaUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- ElasticCacheUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult),
- )
- return count, nil
- }
- func ReportGeneralUsage(
- ctx context.Context,
- userToken mcclient.TokenCredential,
- scope rbacscope.TRbacScope,
- userCred mcclient.IIdentityProvider,
- isOwner bool,
- rangeObjs []db.IStandaloneModel,
- hostTypes []string,
- providers []string,
- brands []string,
- cloudEnv string,
- includeSystem bool,
- policyResult rbacutils.SPolicyResult,
- ) (count Usage, err error) {
- count = make(map[string]interface{})
- // if scope == rbacscope.ScopeSystem || isOwner {
- if scope == rbacscope.ScopeSystem {
- count, err = getSystemGeneralUsage(ctx, userToken, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult)
- if err != nil {
- return
- }
- }
- // if scope.HigherEqual(rbacscope.ScopeDomain) && len(userCred.GetProjectDomainId()) > 0 {
- if scope == rbacscope.ScopeDomain && len(userCred.GetProjectDomainId()) > 0 {
- commonUsage, err := getDomainGeneralUsage(ctx, userToken, rbacscope.ScopeDomain, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult)
- if err == nil {
- count.Include(commonUsage)
- }
- }
- // if scope.HigherEqual(rbacscope.ScopeProject) && len(userCred.GetProjectId()) > 0 {
- if scope == rbacscope.ScopeProject && len(userCred.GetProjectId()) > 0 {
- commonUsage, err := getProjectGeneralUsage(ctx, userToken, rbacscope.ScopeProject, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult)
- if err == nil {
- count.Include(commonUsage)
- }
- }
- return
- }
- func RegionUsage(rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string) Usage {
- q := models.CloudregionManager.Query()
- if len(rangeObjs) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
- subq := models.VpcManager.Query("cloudregion_id")
- subq = models.CloudProviderFilter(subq, subq.Field("manager_id"), providers, brands, cloudEnv)
- subq = models.RangeObjectsFilter(subq, rangeObjs, nil, nil, subq.Field("manager_id"), nil, nil)
- q = q.In("id", subq.SubQuery())
- }
- count := make(map[string]interface{})
- count["regions"], _ = q.CountWithError()
- return count
- }
- func ZoneUsage(rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string) Usage {
- q := models.ZoneManager.Query()
- if len(rangeObjs) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
- subq := models.HostManager.Query("zone_id")
- subq = models.CloudProviderFilter(subq, subq.Field("manager_id"), providers, brands, cloudEnv)
- subq = models.RangeObjectsFilter(subq, rangeObjs, nil, nil, subq.Field("manager_id"), nil, nil)
- q = q.In("id", subq.SubQuery())
- }
- count := make(map[string]interface{})
- count["zones"], _ = q.CountWithError()
- return count
- }
- func VpcUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, providers []string, brands []string, cloudEnv string, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.VpcManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- return count
- }
- q := models.VpcManager.Query().IsFalse("is_emulated")
- if len(rangeObjs) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
- q = models.CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
- q = models.RangeObjectsFilter(q, rangeObjs, nil, nil, q.Field("manager_id"), nil, nil)
- }
- if scope == rbacscope.ScopeDomain {
- q = q.Equals("domain_id", ownerId.GetProjectDomainId())
- }
- q = db.ObjectIdQueryWithPolicyResult(ctx, q, models.VpcManager, results)
- key := "vpcs"
- if len(prefix) > 0 {
- key = fmt.Sprintf("%s.vpcs", prefix)
- }
- count[key], _ = q.CountWithError()
- return count
- }
- func DnsZoneUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.DnsZoneManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- return count
- }
- q := models.DnsZoneManager.Query()
- if scope == rbacscope.ScopeDomain {
- q = q.Equals("domain_id", ownerId.GetProjectDomainId())
- }
- q = db.ObjectIdQueryWithPolicyResult(ctx, q, models.DnsZoneManager, results)
- key := "dns_zones"
- if len(prefix) > 0 {
- key = fmt.Sprintf("%s.dns_zones", prefix)
- }
- count[key], _ = q.CountWithError()
- return count
- }
- func StorageUsage(
- ctx context.Context,
- userToken mcclient.TokenCredential,
- prefix string,
- rangeObjs []db.IStandaloneModel,
- hostTypes []string, resourceTypes []string,
- providers []string, brands []string, cloudEnv string,
- pendingDeleted bool, includeSystem bool,
- scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- results := db.UsagePolicyCheck(userToken, models.StorageManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- return map[string]interface{}{}
- }
- sPrefix := getSysKey(scope, "storages")
- dPrefix := getKey(scope, "disks")
- if len(prefix) > 0 {
- sPrefix = fmt.Sprintf("%s.%s", sPrefix, prefix)
- dPrefix = fmt.Sprintf("%s.%s", dPrefix, prefix)
- }
- count := make(map[string]interface{})
- result := models.StorageManager.TotalCapacity(
- ctx,
- rangeObjs,
- hostTypes, resourceTypes,
- providers, brands, cloudEnv,
- scope, ownerId,
- pendingDeleted, includeSystem,
- true,
- results,
- )
- count[sPrefix] = result.Capacity
- for s, capa := range result.StorageTypeCapacity {
- count[fmt.Sprintf("%s.storage_type.%s", sPrefix, s)] = capa
- }
- for m, capa := range result.MediumeCapacity {
- count[fmt.Sprintf("%s.medium_type.%s", sPrefix, m)] = capa
- }
- count[fmt.Sprintf("%s.virtual", sPrefix)] = result.CapacityVirtual
- count[fmt.Sprintf("%s.actual_capacity_used", sPrefix)] = result.ActualCapacityUsed
- count[fmt.Sprintf("%s.owner", dPrefix)] = result.CapacityUsed
- count[fmt.Sprintf("%s.count.owner", dPrefix)] = result.CountUsed
- count[fmt.Sprintf("%s.unready.owner", dPrefix)] = result.CapacityUnready
- count[fmt.Sprintf("%s.unready.count.owner", dPrefix)] = result.CountUnready
- count[fmt.Sprintf("%s.attached.owner", dPrefix)] = result.AttachedCapacity
- for s, capa := range result.AttachedStorageTypeCapacity {
- count[fmt.Sprintf("%s.attached.owner.storage_type.%s", dPrefix, s)] = capa
- }
- for m, capa := range result.AttachedMediumeCapacity {
- count[fmt.Sprintf("%s.attached.owner.medium_type.%s", dPrefix, m)] = capa
- }
- count[fmt.Sprintf("%s.attached.count.owner", dPrefix)] = result.CountAttached
- count[fmt.Sprintf("%s.detached.owner", dPrefix)] = result.DetachedCapacity
- for s, capa := range result.DetachedStorageTypeCapacity {
- count[fmt.Sprintf("%s.detached.owner.storage_type.%s", dPrefix, s)] = capa
- }
- for m, capa := range result.DetachedMediumeCapacity {
- count[fmt.Sprintf("%s.detached.owner.medium_type.%s", dPrefix, m)] = capa
- }
- count[fmt.Sprintf("%s.detached.count.owner", dPrefix)] = result.CountDetached
- count[fmt.Sprintf("%s.mounted.owner", dPrefix)] = result.AttachedCapacity
- count[fmt.Sprintf("%s.mounted.count.owner", dPrefix)] = result.CountAttached
- count[fmt.Sprintf("%s.unmounted.owner", dPrefix)] = result.DetachedCapacity
- count[fmt.Sprintf("%s.unmounted.count.owner", dPrefix)] = result.CountDetached
- storageCmtRate := 0.0
- if result.Capacity > 0 {
- storageCmtRate = utils.FloatRound(float64(result.CapacityUsed)/float64(result.Capacity), 2)
- }
- count[fmt.Sprintf("%s.commit_rate", sPrefix)] = storageCmtRate
- result = models.StorageManager.TotalCapacity(
- ctx,
- rangeObjs,
- hostTypes, resourceTypes,
- providers, brands, cloudEnv,
- scope, ownerId,
- pendingDeleted, includeSystem,
- false,
- policyResult,
- )
- count[fmt.Sprintf("%s", dPrefix)] = result.CapacityUsed
- for s, capa := range result.StorageTypeCapacityUsed {
- count[fmt.Sprintf("%s.storage_type.%s", dPrefix, s)] = capa
- }
- for m, capa := range result.MediumeCapacityUsed {
- count[fmt.Sprintf("%s.medium_type.%s", dPrefix, m)] = capa
- }
- count[fmt.Sprintf("%s.count", dPrefix)] = result.CountUsed
- count[fmt.Sprintf("%s.unready", dPrefix)] = result.CapacityUnready
- count[fmt.Sprintf("%s.unready.count", dPrefix)] = result.CountUnready
- count[fmt.Sprintf("%s.attached", dPrefix)] = result.AttachedCapacity
- for s, capa := range result.AttachedStorageTypeCapacity {
- count[fmt.Sprintf("%s.attached.storage_type.%s", dPrefix, s)] = capa
- }
- for m, capa := range result.AttachedMediumeCapacity {
- count[fmt.Sprintf("%s.attached.medium_type.%s", dPrefix, m)] = capa
- }
- count[fmt.Sprintf("%s.attached.count", dPrefix)] = result.CountAttached
- count[fmt.Sprintf("%s.detached", dPrefix)] = result.DetachedCapacity
- for s, capa := range result.DetachedStorageTypeCapacity {
- count[fmt.Sprintf("%s.detached.storage_type.%s", dPrefix, s)] = capa
- }
- for m, capa := range result.DetachedMediumeCapacity {
- count[fmt.Sprintf("%s.detached.medium_type.%s", dPrefix, m)] = capa
- }
- count[fmt.Sprintf("%s.detached.count", dPrefix)] = result.CountDetached
- count[fmt.Sprintf("%s.mounted", dPrefix)] = result.AttachedCapacity
- count[fmt.Sprintf("%s.mounted.count", dPrefix)] = result.CountAttached
- count[fmt.Sprintf("%s.unmounted", dPrefix)] = result.DetachedCapacity
- count[fmt.Sprintf("%s.unmounted.count", dPrefix)] = result.CountDetached
- return count
- }
- func DisksUsage(
- ctx context.Context,
- userToken mcclient.TokenCredential,
- dPrefix string,
- rangeObjs []db.IStandaloneModel,
- hostTypes []string,
- resourceTypes []string,
- providers []string,
- brands []string,
- cloudEnv string,
- scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider,
- pendingDeleted bool, includeSystem bool,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.StorageManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- return count
- }
- result := models.StorageManager.TotalCapacity(ctx, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, scope, ownerId, pendingDeleted, includeSystem, false, results)
- count[dPrefix] = result.CapacityUsed
- count[fmt.Sprintf("%s.storage", dPrefix)] = result.Capacity
- count[fmt.Sprintf("%s.storage.virtual", dPrefix)] = result.CapacityVirtual
- count[fmt.Sprintf("%s.count", dPrefix)] = result.CountUsed
- count[fmt.Sprintf("%s.unready", dPrefix)] = result.CapacityUnready
- count[fmt.Sprintf("%s.unready.count", dPrefix)] = result.CountUnready
- count[fmt.Sprintf("%s.attached", dPrefix)] = result.AttachedCapacity
- count[fmt.Sprintf("%s.attached.count", dPrefix)] = result.CountAttached
- count[fmt.Sprintf("%s.detached", dPrefix)] = result.DetachedCapacity
- count[fmt.Sprintf("%s.detached.count", dPrefix)] = result.CountDetached
- count[fmt.Sprintf("%s.mounted", dPrefix)] = result.AttachedCapacity
- count[fmt.Sprintf("%s.mounted.count", dPrefix)] = result.CountAttached
- count[fmt.Sprintf("%s.unmounted", dPrefix)] = result.DetachedCapacity
- count[fmt.Sprintf("%s.unmounted.count", dPrefix)] = result.CountDetached
- return count
- }
- func WireUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.WireManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- return count
- }
- result := models.WireManager.TotalCount(ctx, rangeObjs, hostTypes, providers, brands, cloudEnv, scope, userCred, results)
- count[getKey(scope, "wires")] = result.WiresCount - result.EmulatedWiresCount
- count[getKey(scope, "networks")] = result.NetCount
- // include nics for pending_deleted guests
- count[getKey(scope, "nics.guest")] = result.GuestNicCount
- // nics for pending_deleted guests
- count[getKey(scope, "nics.guest.pending_delete")] = result.PendingDeletedGuestNicCount
- count[getKey(scope, "nics.host")] = result.HostNicCount
- count[getKey(scope, "nics.reserve")] = result.ReservedCount
- count[getKey(scope, "nics.group")] = result.GroupNicCount
- count[getKey(scope, "nics.lb")] = result.LbNicCount
- count[getKey(scope, "nics.eip")] = result.EipNicCount
- count[getKey(scope, "nics.netif")] = result.NetifNicCount
- count[getKey(scope, "nics.db")] = result.DbNicCount
- count[getKey(scope, "nics")] = result.NicCount()
- return count
- }
- func prefixKey(prefix string, key string) string {
- if len(prefix) > 0 {
- return prefix + "." + key
- } else {
- return key
- }
- }
- func NetworkUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, providers []string, brands []string, cloudEnv string, rangeObjs []db.IStandaloneModel, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.NetworkManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- return count
- }
- ret := models.NetworkManager.TotalPortCount(ctx, scope, userCred, providers, brands, cloudEnv, rangeObjs, results)
- for k, v := range ret {
- if len(k) > 0 {
- count[prefixKey(prefix, fmt.Sprintf("ports.%s", k))] = v.Count
- count[prefixKey(prefix, fmt.Sprintf("ports_exit.%s", k))] = v.CountExt
- } else {
- count[prefixKey(prefix, "ports")] = v.Count
- count[prefixKey(prefix, "ports_exit")] = v.CountExt
- }
- }
- return count
- }
- func HostAllUsage(ctx context.Context, userToken mcclient.TokenCredential, pref string, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel,
- hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- prefix := getSysKey(scope, "hosts")
- if len(pref) > 0 {
- prefix = fmt.Sprintf("%s.%s", prefix, pref)
- }
- return hostUsage(ctx, userToken, userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.None, tristate.False, policyResult)
- }
- func HostEnabledUsage(ctx context.Context, userToken mcclient.TokenCredential, pref string, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel,
- hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- prefix := getSysKey(scope, "enabled_hosts")
- if len(pref) > 0 {
- prefix = fmt.Sprintf("%s.%s", prefix, pref)
- }
- return hostUsage(ctx, userToken, userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.True, tristate.False, policyResult)
- }
- func BaremetalUsage(ctx context.Context, userToken mcclient.TokenCredential, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel,
- hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- prefix := getSysKey(scope, "baremetals")
- count := hostUsage(ctx, userToken, userCred, scope, prefix, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, tristate.None, tristate.True, policyResult)
- delete(count, fmt.Sprintf("%s.memory.virtual", prefix))
- delete(count, fmt.Sprintf("%s.cpu.virtual", prefix))
- return count
- }
- func hostUsage(
- ctx context.Context,
- userToken mcclient.TokenCredential,
- userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, prefix string,
- rangeObjs []db.IStandaloneModel, hostTypes []string,
- resourceTypes []string, providers []string, brands []string, cloudEnv string,
- enabled, isBaremetal tristate.TriState,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.HostManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- return count
- }
- result := models.HostManager.TotalCount(ctx, userCred, scope, rangeObjs, "", "", hostTypes, resourceTypes, providers, brands, cloudEnv, enabled, isBaremetal, results)
- count[prefix] = result.Count
- count[fmt.Sprintf("%s.any_pool", prefix)] = result.Count
- count[fmt.Sprintf("%s.memory", prefix)] = result.Memory
- count[fmt.Sprintf("%s.memory.used", prefix)] = result.MemoryUsed
- count[fmt.Sprintf("%s.memory.total", prefix)] = result.MemoryTotal
- count[fmt.Sprintf("%s.cpu", prefix)] = result.CPU
- count[fmt.Sprintf("%s.cpu.total", prefix)] = result.CPUTotal
- count[fmt.Sprintf("%s.cpu.used", prefix)] = result.CPUUsed
- count[fmt.Sprintf("%s.memory.virtual", prefix)] = int64(result.MemoryVirtual)
- count[fmt.Sprintf("%s.cpu.virtual", prefix)] = int64(result.CPUVirtual)
- count[fmt.Sprintf("%s.memory.reserved", prefix)] = result.MemoryReserved
- count[fmt.Sprintf("%s.memory.reserved.isolated", prefix)] = result.IsolatedReservedMemory
- count[fmt.Sprintf("%s.cpu.reserved.isolated", prefix)] = result.IsolatedReservedCpu
- count[fmt.Sprintf("%s.storage.reserved.isolated", prefix)] = result.IsolatedReservedStorage
- count[fmt.Sprintf("%s.storage_gb", prefix)] = result.StorageSize / 1024
- return count
- }
- func GuestNormalUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string,
- brands []string, cloudEnv string, includeSystem bool, since *time.Time, policyResult rbacutils.SPolicyResult) Usage {
- return guestUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, false, includeSystem, since, policyResult)
- }
- func ContainerNormalUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string,
- brands []string, cloudEnv string, includeSystem bool, since *time.Time, policyResult rbacutils.SPolicyResult) Usage {
- return containerUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, false, includeSystem, since, policyResult)
- }
- func GuestPendingDeleteUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string,
- brands []string, cloudEnv string, includeSystem bool, since *time.Time, policyResult rbacutils.SPolicyResult) Usage {
- return guestUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, true, includeSystem, since, policyResult)
- }
- func ContainerPendingDeleteUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string,
- brands []string, cloudEnv string, includeSystem bool, since *time.Time, policyResult rbacutils.SPolicyResult) Usage {
- return containerUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, true, includeSystem, since, policyResult)
- }
- func GuestRunningUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string,
- brands []string, cloudEnv string, includeSystem bool,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- return guestUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_RUNNING}, false, includeSystem, nil, policyResult)
- }
- func ContainerRunningUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string,
- brands []string, cloudEnv string, includeSystem bool,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- return containerUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_RUNNING}, false, includeSystem, nil, policyResult)
- }
- func GuestReadyUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string,
- brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) Usage {
- return guestUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_READY}, false, includeSystem, nil, policyResult)
- }
- func ContainerReadyUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string,
- brands []string, cloudEnv string, includeSystem bool,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- return containerUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_READY}, false, includeSystem, nil, policyResult)
- }
- func guestHypervisorsUsage(
- ctx context.Context,
- userToken mcclient.TokenCredential,
- prefix string,
- scope rbacscope.TRbacScope,
- ownerId mcclient.IIdentityProvider,
- rangeObjs []db.IStandaloneModel,
- hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string,
- status, hypervisors []string,
- pendingDelete, includeSystem bool,
- since *time.Time,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.GuestManager, scope)
- log.Debugf("guestHypervisorsUsage origin %s", results.String())
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- log.Debugf("guestHypervisorsUsage policyResults %s results %s", policyResult.String(), results.String())
- // temporarily hide system resources
- // XXX needs more work later
- guestCountStats := models.GuestManager.TotalCount(ctx, scope, ownerId, rangeObjs, status, hypervisors,
- includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since,
- results,
- )
- originPrefix := prefix
- for arch, guest := range guestCountStats {
- prefix := originPrefix
- if arch != apis.OS_ARCH_ALL {
- prefix = fmt.Sprintf("%s.%s", originPrefix, arch)
- }
- count[prefix] = guest.TotalGuestCount
- count[fmt.Sprintf("%s.any_pool", prefix)] = guest.TotalGuestCount
- count[fmt.Sprintf("%s.cpu", prefix)] = guest.TotalCpuCount
- count[fmt.Sprintf("%s.memory", prefix)] = guest.TotalMemSize
- if len(hypervisors) == 1 && hypervisors[0] == api.HYPERVISOR_POD {
- continue
- }
- count[fmt.Sprintf("%s.disk", prefix)] = guest.TotalDiskSize
- count[fmt.Sprintf("%s.isolated_devices", prefix)] = guest.TotalIsolatedCount
- count[fmt.Sprintf("%s.ha", prefix)] = guest.TotalBackupGuestCount
- count[fmt.Sprintf("%s.ha.cpu", prefix)] = guest.TotalBackupCpuCount
- count[fmt.Sprintf("%s.ha.memory", prefix)] = guest.TotalBackupMemSize
- count[fmt.Sprintf("%s.ha.disk", prefix)] = guest.TotalBackupDiskSize
- }
- return count
- }
- func guestUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel,
- hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string,
- status []string, pendingDelete, includeSystem bool, since *time.Time,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- hypervisors := sets.NewString(api.HYPERVISORS...)
- hypervisors.Delete(api.HYPERVISOR_POD, api.HYPERVISOR_BAREMETAL)
- return guestHypervisorsUsage(ctx, userToken, prefix, scope, userCred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, status, hypervisors.List(), pendingDelete, includeSystem, since, policyResult)
- }
- func containerUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel,
- hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string,
- status []string, pendingDelete, includeSystem bool, since *time.Time,
- policyResult rbacutils.SPolicyResult,
- ) Usage {
- hypervisors := sets.NewString(api.HYPERVISOR_POD)
- return guestHypervisorsUsage(ctx, userToken, prefix, scope, userCred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, status, hypervisors.List(), pendingDelete, includeSystem, since, policyResult)
- }
- func IsolatedDeviceUsage(ctx context.Context, userToken mcclient.TokenCredential, pref string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostType []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- prefix := "isolated_devices"
- if len(pref) > 0 {
- prefix = fmt.Sprintf("%s.%s", prefix, pref)
- }
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.IsolatedDeviceManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- return count
- }
- ret, _ := models.IsolatedDeviceManager.TotalCount(ctx, scope, userCred, hostType, resourceTypes, providers, brands, cloudEnv, rangeObjs, results)
- count[prefix] = ret.Devices
- count[prefix+".used"] = ret.DevicesUsed
- count[prefix+".gpu"] = ret.Gpus
- count[prefix+".gpu.used"] = ret.GpusUsed
- return count
- }
- func getSysKey(scope rbacscope.TRbacScope, key string) string {
- return _getKey(scope, key, true)
- }
- func getKey(scope rbacscope.TRbacScope, key string) string {
- return _getKey(scope, key, false)
- }
- func _getKey(scope rbacscope.TRbacScope, key string, includeSystem bool) string {
- switch scope {
- case rbacscope.ScopeProject:
- if includeSystem {
- if len(key) > 0 {
- return fmt.Sprintf("project.%s", key)
- } else {
- return "project"
- }
- } else {
- return key
- }
- case rbacscope.ScopeDomain:
- if len(key) > 0 {
- return fmt.Sprintf("domain.%s", key)
- } else {
- return "domain"
- }
- default:
- if includeSystem {
- return key
- } else {
- if len(key) > 0 {
- return fmt.Sprintf("all.%s", key)
- } else {
- return "all"
- }
- }
- }
- }
- func EipUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.ElasticipManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- eipUsage := models.ElasticipManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "eip")] = eipUsage.Total()
- count[getKey(scope, "eip.public_ip")] = eipUsage.PublicIPCount
- count[getKey(scope, "eip.public_ip.bandwidth.mb")] = eipUsage.PublicIpBandwidth
- count[getKey(scope, "eip.floating_ip")] = eipUsage.EIPCount
- count[getKey(scope, "eip.floating_ip.bandwidth.mb")] = eipUsage.EipBandwidth
- count[getKey(scope, "eip.floating_ip")] = eipUsage.EIPCount
- count[getKey(scope, "eip.floating_ip.used")] = eipUsage.EIPUsedCount
- count[getKey(scope, "eip.used")] = eipUsage.EIPUsedCount + eipUsage.PublicIPCount
- return count
- }
- func BucketUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.BucketManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- bucketUsage := models.BucketManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "buckets")] = bucketUsage.Buckets
- count[getKey(scope, "bucket_objects")] = bucketUsage.Objects
- count[getKey(scope, "bucket_bytes")] = bucketUsage.Bytes
- count[getKey(scope, "bucket_bytes_limit")] = bucketUsage.BytesLimit
- count[getKey(scope, "bucket_disk_used_rate")] = bucketUsage.DiskUsedRate
- return count
- }
- func SnapshotUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.SnapshotManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- cnt, _ := models.TotalSnapshotCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "snapshot")] = cnt
- return count
- }
- func InstanceSnapshotUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.InstanceSnapshotManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- cnt, _ := models.TotalInstanceSnapshotCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "instance_snapshot")] = cnt
- return count
- }
- func LoadbalancerUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.LoadbalancerManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- cnt, _ := models.LoadbalancerManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "loadbalancer")] = cnt
- return count
- }
- func DBInstanceUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.DBInstanceManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- cnt, _ := models.DBInstanceManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "rds")] = cnt.TotalRdsCount
- count[getKey(scope, "rds.cpu")] = cnt.TotalCpuCount
- count[getKey(scope, "rds.memory")] = cnt.TotalMemSizeMb
- count[getKey(scope, "rds.disk_size_gb")] = cnt.TotalDiskSizeGb
- count[getKey(scope, "rds.disk_size_used_mb")] = cnt.TotalDiskSizeUsedMb
- count[getKey(scope, "rds.disk_size_used_rate")] = cnt.DiskUsedRate
- return count
- }
- func MongoDBUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.MongoDBManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- cnt, _ := models.MongoDBManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "mongodb")] = cnt.TotalMongodbCount
- count[getKey(scope, "mongodb.cpu")] = cnt.TotalCpuCount
- count[getKey(scope, "mongodb.memory")] = cnt.TotalMemSizeMb
- return count
- }
- func ElasticSearchUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.ElasticSearchManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- cnt, _ := models.ElasticSearchManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "es")] = cnt.TotalEsCount
- count[getKey(scope, "es.cpu")] = cnt.TotalCpuCount
- count[getKey(scope, "es.memory")] = cnt.TotalMemSizeGb * 1024
- return count
- }
- func KafkaUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.KafkaManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- cnt, _ := models.KafkaManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "kafka")] = cnt.TotalKafkaCount
- count[getKey(scope, "kafka.disk")] = cnt.TotalDiskSizeGb
- return count
- }
- func ElasticCacheUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage {
- count := make(map[string]interface{})
- results := db.UsagePolicyCheck(userToken, models.ElasticcacheManager, scope)
- results = results.Merge(policyResult)
- if results.Result.IsDeny() {
- // deny
- return count
- }
- cnt, _ := models.ElasticcacheManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results)
- count[getKey(scope, "cache")] = cnt
- return count
- }
|