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  }