Skip to content

Commit 27a57b1

Browse files
authored
Add Tenant Usage API (#208)
1 parent c03642f commit 27a57b1

12 files changed

+744
-69
lines changed

models/tenant.go

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

models/tenant_usage.go

Lines changed: 60 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

portal-ui/bindata_assetfs.go

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

restapi/admin_tenants.go

Lines changed: 73 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

restapi/admin_tenants_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,12 @@ func Test_TenantInfo(t *testing.T) {
315315
},
316316
Namespace: "minio-ns",
317317
Image: "minio/minio:RELEASE.2020-06-14T18-32-17Z",
318-
UsedSize: int64(1024),
319318
},
320319
},
321320
}
322321
for _, tt := range tests {
323322
t.Run(tt.name, func(t *testing.T) {
324-
got := getTenantInfo(tt.args.minioTenant, tt.args.tenantInfo)
323+
got := getTenantInfo(tt.args.minioTenant)
325324
if !reflect.DeepEqual(got, tt.want) {
326325
ji, _ := json.Marshal(got)
327326
vi, _ := json.Marshal(tt.want)

0 commit comments

Comments
 (0)