github.com/polarismesh/polaris@v1.17.8/apiserver/grpcserver/discover/v1/heartbeat_access.go (about)

     1  /**
     2   * Tencent is pleased to support the open source community by making Polaris available.
     3   *
     4   * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
     5   *
     6   * Licensed under the BSD 3-Clause License (the "License");
     7   * you may not use this file except in compliance with the License.
     8   * You may obtain a copy of the License at
     9   *
    10   * https://opensource.org/licenses/BSD-3-Clause
    11   *
    12   * Unless required by applicable law or agreed to in writing, software distributed
    13   * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    14   * CONDITIONS OF ANY KIND, either express or implied. See the License for the
    15   * specific language governing permissions and limitations under the License.
    16   */
    17  
    18  package v1
    19  
    20  import (
    21  	"context"
    22  
    23  	apiservice "github.com/polarismesh/specification/source/go/api/v1/service_manage"
    24  
    25  	"github.com/polarismesh/polaris/plugin"
    26  )
    27  
    28  // BatchGetHeartbeat 批量获取心跳记录
    29  func (g *DiscoverServer) BatchGetHeartbeat(ctx context.Context,
    30  	req *apiservice.GetHeartbeatsRequest) (*apiservice.GetHeartbeatsResponse, error) {
    31  	checker, ok := g.healthCheckServer.Checkers()[int32(apiservice.HealthCheck_HEARTBEAT)]
    32  	if !ok {
    33  		return &apiservice.GetHeartbeatsResponse{}, nil
    34  	}
    35  	keys := req.GetInstanceIds()
    36  	records := make([]*apiservice.HeartbeatRecord, 0, len(keys))
    37  	for i := range keys {
    38  		resp, err := checker.Query(ctx, &plugin.QueryRequest{
    39  			InstanceId: keys[i],
    40  		})
    41  		if err != nil {
    42  			return nil, err
    43  		}
    44  		record := &apiservice.HeartbeatRecord{
    45  			InstanceId:       keys[i],
    46  			LastHeartbeatSec: resp.LastHeartbeatSec,
    47  			Exist:            resp.Exists,
    48  		}
    49  		records = append(records, record)
    50  	}
    51  	return &apiservice.GetHeartbeatsResponse{
    52  		Records: records,
    53  	}, nil
    54  }
    55  
    56  // BatchDelHeartbeat 批量删除心跳记录
    57  func (g *DiscoverServer) BatchDelHeartbeat(ctx context.Context,
    58  	req *apiservice.DelHeartbeatsRequest) (*apiservice.DelHeartbeatsResponse, error) {
    59  	checker, ok := g.healthCheckServer.Checkers()[int32(apiservice.HealthCheck_HEARTBEAT)]
    60  	if !ok {
    61  		return &apiservice.DelHeartbeatsResponse{}, nil
    62  	}
    63  	keys := req.GetInstanceIds()
    64  	for i := range keys {
    65  		if err := checker.Delete(ctx, keys[i]); err != nil {
    66  			return nil, err
    67  		}
    68  	}
    69  	return &apiservice.DelHeartbeatsResponse{}, nil
    70  }