github.com/minio/console@v1.4.1/api/admin_replication_status.go (about) 1 // This file is part of MinIO Console Server 2 // Copyright (c) 2022 MinIO, Inc. 3 // 4 // This program is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Affero General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // This program is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Affero General Public License for more details. 13 // 14 // You should have received a copy of the GNU Affero General Public License 15 // along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17 package api 18 19 import ( 20 "context" 21 22 "github.com/go-openapi/runtime/middleware" 23 "github.com/minio/console/api/operations" 24 siteRepApi "github.com/minio/console/api/operations/site_replication" 25 "github.com/minio/console/models" 26 "github.com/minio/madmin-go/v3" 27 ) 28 29 func registerSiteReplicationStatusHandler(api *operations.ConsoleAPI) { 30 api.SiteReplicationGetSiteReplicationStatusHandler = siteRepApi.GetSiteReplicationStatusHandlerFunc(func(params siteRepApi.GetSiteReplicationStatusParams, session *models.Principal) middleware.Responder { 31 rInfo, err := getSRStatusResponse(session, params) 32 if err != nil { 33 return siteRepApi.NewGetSiteReplicationStatusDefault(err.Code).WithPayload(err.APIError) 34 } 35 return siteRepApi.NewGetSiteReplicationStatusOK().WithPayload(rInfo) 36 }) 37 } 38 39 func getSRStatusResponse(session *models.Principal, params siteRepApi.GetSiteReplicationStatusParams) (*models.SiteReplicationStatusResponse, *CodedAPIError) { 40 ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) 41 defer cancel() 42 mAdmin, err := NewMinioAdminClient(params.HTTPRequest.Context(), session) 43 if err != nil { 44 return nil, ErrorWithContext(ctx, err) 45 } 46 adminClient := AdminClient{Client: mAdmin} 47 res, err := getSRStats(ctx, adminClient, params) 48 if err != nil { 49 return nil, ErrorWithContext(ctx, err) 50 } 51 return res, nil 52 } 53 54 func getSRStats(ctx context.Context, client MinioAdmin, params siteRepApi.GetSiteReplicationStatusParams) (info *models.SiteReplicationStatusResponse, err error) { 55 srParams := madmin.SRStatusOptions{ 56 Buckets: *params.Buckets, 57 Policies: *params.Policies, 58 Users: *params.Users, 59 Groups: *params.Groups, 60 } 61 if params.EntityType != nil && params.EntityValue != nil { 62 srParams.Entity = madmin.GetSREntityType(*params.EntityType) 63 srParams.EntityValue = *params.EntityValue 64 } 65 66 srInfo, err := client.getSiteReplicationStatus(ctx, srParams) 67 68 retInfo := models.SiteReplicationStatusResponse{ 69 BucketStats: &srInfo.BucketStats, 70 Enabled: srInfo.Enabled, 71 GroupStats: srInfo.GroupStats, 72 MaxBuckets: int64(srInfo.MaxBuckets), 73 MaxGroups: int64(srInfo.MaxGroups), 74 MaxPolicies: int64(srInfo.MaxPolicies), 75 MaxUsers: int64(srInfo.MaxUsers), 76 PolicyStats: &srInfo.PolicyStats, 77 Sites: &srInfo.Sites, 78 StatsSummary: srInfo.StatsSummary, 79 UserStats: &srInfo.UserStats, 80 } 81 82 if err != nil { 83 return nil, err 84 } 85 return &retInfo, nil 86 }