@@ -112,6 +112,15 @@ func registerTenantHandlers(api *operations.ConsoleAPI) {
112112 }
113113 return admin_api .NewTenantAddZoneCreated ()
114114 })
115+
116+ api .AdminAPIGetTenantUsageHandler = admin_api .GetTenantUsageHandlerFunc (func (params admin_api.GetTenantUsageParams , session * models.Principal ) middleware.Responder {
117+ payload , err := getTenantUsageResponse (session , params )
118+ if err != nil {
119+ log .Println (err )
120+ return admin_api .NewGetTenantUsageDefault (500 ).WithPayload (& models.Error {Code : 500 , Message : swag .String ("Unable to get tenant usage" )})
121+ }
122+ return admin_api .NewGetTenantUsageOK ().WithPayload (payload )
123+ })
115124}
116125
117126// deleteTenantAction performs the actions of deleting a tenant
@@ -178,7 +187,7 @@ func getTenant(ctx context.Context, operatorClient OperatorClient, namespace, te
178187 return minInst , nil
179188}
180189
181- func getTenantInfo (tenant * operator.Tenant , tenantInfo * usageInfo ) * models.Tenant {
190+ func getTenantInfo (tenant * operator.Tenant ) * models.Tenant {
182191 var instanceCount int64
183192 var volumeCount int64
184193 for _ , zone := range tenant .Spec .Zones {
@@ -217,7 +226,6 @@ func getTenantInfo(tenant *operator.Tenant, tenantInfo *usageInfo) *models.Tenan
217226 Zones : zones ,
218227 Namespace : tenant .ObjectMeta .Namespace ,
219228 Image : tenant .Spec .Image ,
220- UsedSize : tenantInfo .DisksUsage ,
221229 }
222230}
223231
@@ -230,55 +238,18 @@ func getTenantInfoResponse(session *models.Principal, params admin_api.TenantInf
230238 if err != nil {
231239 return nil , err
232240 }
233- clientset , err := cluster .K8sClient (session .SessionToken )
234- if err != nil {
235- log .Println ("error getting k8sClient:" , err )
236- return nil , err
237- }
238241
239242 opClient := & operatorClient {
240243 client : opClientClientSet ,
241244 }
242- k8sClient := & k8sClient {
243- client : clientset ,
244- }
245245
246246 minTenant , err := getTenant (ctx , opClient , params .Namespace , params .Tenant )
247247 if err != nil {
248248 log .Println ("error getting minioTenant:" , err )
249249 return nil , err
250250 }
251- tenantScheme := getTenantScheme (minTenant )
252251
253- svcName := minTenant .Spec .ServiceName
254- if svcName == "" {
255- svcName = minTenant .Name
256- // TODO:
257- // 1 get tenant services
258- // 2 filter out cluster ip svc
259- }
260-
261- mAdmin , err := getTenantAdminClient (
262- ctx ,
263- k8sClient ,
264- params .Namespace ,
265- params .Tenant ,
266- svcName ,
267- tenantScheme )
268- if err != nil {
269- log .Println ("error getting tenant's admin client:" , err )
270- return nil , err
271- }
272- // create a minioClient interface implementation
273- // defining the client to be used
274- adminClient := adminClient {client : mAdmin }
275- // serialize output
276- adminInfo , err := getAdminInfo (ctx , adminClient )
277- if err != nil {
278- log .Println ("error getting admin info:" , err )
279- return nil , err
280- }
281- info := getTenantInfo (minTenant , adminInfo )
252+ info := getTenantInfo (minTenant )
282253 return info , nil
283254}
284255
@@ -684,3 +655,65 @@ func getTenantAddZoneResponse(session *models.Principal, params admin_api.Tenant
684655 }
685656 return nil
686657}
658+
659+ // getTenantUsageResponse returns the usage of a tenant
660+ func getTenantUsageResponse (session * models.Principal , params admin_api.GetTenantUsageParams ) (* models.TenantUsage , error ) {
661+ // 5 seconds timeout
662+ ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
663+ defer cancel ()
664+
665+ opClientClientSet , err := cluster .OperatorClient (session .SessionToken )
666+ if err != nil {
667+ return nil , err
668+ }
669+ clientset , err := cluster .K8sClient (session .SessionToken )
670+ if err != nil {
671+ log .Println ("error getting k8sClient:" , err )
672+ return nil , err
673+ }
674+
675+ opClient := & operatorClient {
676+ client : opClientClientSet ,
677+ }
678+ k8sClient := & k8sClient {
679+ client : clientset ,
680+ }
681+
682+ minTenant , err := getTenant (ctx , opClient , params .Namespace , params .Tenant )
683+ if err != nil {
684+ log .Println ("error getting minioTenant:" , err )
685+ return nil , err
686+ }
687+ tenantScheme := getTenantScheme (minTenant )
688+
689+ svcName := minTenant .Spec .ServiceName
690+ if svcName == "" {
691+ svcName = minTenant .Name
692+ // TODO:
693+ // 1 get tenant services
694+ // 2 filter out cluster ip svc
695+ }
696+
697+ mAdmin , err := getTenantAdminClient (
698+ ctx ,
699+ k8sClient ,
700+ params .Namespace ,
701+ params .Tenant ,
702+ svcName ,
703+ tenantScheme )
704+ if err != nil {
705+ log .Println ("error getting tenant's admin client:" , err )
706+ return nil , err
707+ }
708+ // create a minioClient interface implementation
709+ // defining the client to be used
710+ adminClient := adminClient {client : mAdmin }
711+ // serialize output
712+ adminInfo , err := getAdminInfo (ctx , adminClient )
713+ if err != nil {
714+ log .Println ("error getting admin info:" , err )
715+ return nil , err
716+ }
717+ info := & models.TenantUsage {UsedSize : adminInfo .Usage }
718+ return info , nil
719+ }
0 commit comments