github.com/go-graphite/carbonapi@v0.17.0/zipper/zipper_pb3.go (about)

     1  package zipper
     2  
     3  import (
     4  	"context"
     5  	"math"
     6  	_ "net/http/pprof"
     7  
     8  	"github.com/ansel1/merry"
     9  	"github.com/go-graphite/carbonapi/zipper/types"
    10  	protov2 "github.com/go-graphite/protocol/carbonapi_v2_pb"
    11  	protov3 "github.com/go-graphite/protocol/carbonapi_v3_pb"
    12  	"go.uber.org/zap"
    13  
    14  	_ "github.com/go-graphite/carbonapi/zipper/protocols/auto"
    15  	_ "github.com/go-graphite/carbonapi/zipper/protocols/graphite"
    16  	_ "github.com/go-graphite/carbonapi/zipper/protocols/prometheus"
    17  	_ "github.com/go-graphite/carbonapi/zipper/protocols/v2"
    18  	_ "github.com/go-graphite/carbonapi/zipper/protocols/v3"
    19  )
    20  
    21  // DEPRECATED
    22  // This file contains legacy functions for carbonzipper old protocol versions
    23  // Likely they will be removed in future
    24  
    25  // PB3-compatible methods
    26  func (z Zipper) FetchProtoV2(ctx context.Context, query []string, startTime, stopTime int32) (*protov2.MultiFetchResponse, *types.Stats, merry.Error) {
    27  	logger := z.logger.With(zap.String("function", "FetchProtoV2"))
    28  	request := &protov3.MultiFetchRequest{}
    29  	for _, q := range query {
    30  		request.Metrics = append(request.Metrics, protov3.FetchRequest{
    31  			Name:      q,
    32  			StartTime: int64(startTime),
    33  			StopTime:  int64(stopTime),
    34  		})
    35  	}
    36  
    37  	grpcRes, stats, err := z.FetchProtoV3(ctx, request)
    38  	if err != nil {
    39  		if grpcRes == nil || len(grpcRes.Metrics) == 0 {
    40  			return nil, nil, err
    41  		} else {
    42  			logger.Debug("had errors while fetching result",
    43  				zap.Any("errors", err),
    44  			)
    45  		}
    46  	}
    47  
    48  	var res protov2.MultiFetchResponse
    49  	for i := range grpcRes.Metrics {
    50  		vals := make([]float64, 0, len(grpcRes.Metrics[i].Values))
    51  		isAbsent := make([]bool, 0, len(grpcRes.Metrics[i].Values))
    52  		for _, v := range grpcRes.Metrics[i].Values {
    53  			if math.IsNaN(v) {
    54  				vals = append(vals, 0)
    55  				isAbsent = append(isAbsent, true)
    56  			} else {
    57  				vals = append(vals, v)
    58  				isAbsent = append(isAbsent, false)
    59  			}
    60  		}
    61  		res.Metrics = append(res.Metrics,
    62  			protov2.FetchResponse{
    63  				Name:      grpcRes.Metrics[i].Name,
    64  				StartTime: int32(grpcRes.Metrics[i].StartTime),
    65  				StopTime:  int32(grpcRes.Metrics[i].StopTime),
    66  				StepTime:  int32(grpcRes.Metrics[i].StepTime),
    67  				Values:    vals,
    68  				IsAbsent:  isAbsent,
    69  			})
    70  	}
    71  
    72  	return &res, stats, nil
    73  }
    74  
    75  func (z Zipper) FindProtoV2(ctx context.Context, query []string) ([]*protov2.GlobResponse, *types.Stats, merry.Error) {
    76  	logger := z.logger.With(zap.String("function", "FindProtoV2"))
    77  	request := &protov3.MultiGlobRequest{
    78  		Metrics: query,
    79  	}
    80  	grpcRes, stats, err := z.FindProtoV3(ctx, request)
    81  	if err != nil {
    82  		if grpcRes == nil || len(grpcRes.Metrics) == 0 {
    83  			return nil, nil, err
    84  		} else {
    85  			logger.Debug("had errors while fetching result",
    86  				zap.Any("errors", err),
    87  			)
    88  		}
    89  	}
    90  
    91  	reses := make([]*protov2.GlobResponse, 0, len(grpcRes.Metrics))
    92  	for _, grpcRes := range grpcRes.Metrics {
    93  
    94  		res := &protov2.GlobResponse{
    95  			Name: grpcRes.Name,
    96  		}
    97  
    98  		for _, v := range grpcRes.Matches {
    99  			match := protov2.GlobMatch{
   100  				Path:   v.Path,
   101  				IsLeaf: v.IsLeaf,
   102  			}
   103  			res.Matches = append(res.Matches, match)
   104  		}
   105  		reses = append(reses, res)
   106  	}
   107  
   108  	return reses, stats, nil
   109  }
   110  
   111  func (z Zipper) InfoProtoV2(ctx context.Context, targets []string) (*protov2.ZipperInfoResponse, *types.Stats, merry.Error) {
   112  	logger := z.logger.With(zap.String("function", "InfoProtoV2"))
   113  	request := &protov3.MultiGlobRequest{
   114  		Metrics: targets,
   115  	}
   116  	grpcRes, stats, err := z.InfoProtoV3(ctx, request)
   117  	if err != nil {
   118  		if grpcRes == nil || len(grpcRes.Info) == 0 {
   119  			return nil, nil, err
   120  		} else {
   121  			logger.Debug("had errors while fetching result",
   122  				zap.Any("errors", err),
   123  			)
   124  		}
   125  	}
   126  
   127  	res := &protov2.ZipperInfoResponse{}
   128  
   129  	for k, i := range grpcRes.Info {
   130  		for _, v := range i.Metrics {
   131  			rets := make([]protov2.Retention, 0, len(v.Retentions))
   132  			for _, ret := range v.Retentions {
   133  				rets = append(rets, protov2.Retention{
   134  					SecondsPerPoint: int32(ret.SecondsPerPoint),
   135  					NumberOfPoints:  int32(ret.NumberOfPoints),
   136  				})
   137  			}
   138  			i := &protov2.InfoResponse{
   139  				Name:              v.Name,
   140  				AggregationMethod: v.ConsolidationFunc,
   141  				MaxRetention:      int32(v.MaxRetention),
   142  				XFilesFactor:      v.XFilesFactor,
   143  				Retentions:        rets,
   144  			}
   145  			res.Responses = append(res.Responses, protov2.ServerInfoResponse{
   146  				Server: k,
   147  				Info:   i,
   148  			})
   149  		}
   150  	}
   151  
   152  	return res, stats, nil
   153  }
   154  func (z Zipper) ListProtoV2(ctx context.Context) (*protov2.ListMetricsResponse, *types.Stats, merry.Error) {
   155  	logger := z.logger.With(zap.String("function", "ListProtoV2"))
   156  	grpcRes, stats, err := z.ListProtoV3(ctx)
   157  	if err != nil {
   158  		if grpcRes == nil || len(grpcRes.Metrics) == 0 {
   159  			return nil, nil, err
   160  		} else {
   161  			logger.Debug("had errors while fetching result",
   162  				zap.Any("errors", err),
   163  			)
   164  		}
   165  	}
   166  
   167  	res := &protov2.ListMetricsResponse{
   168  		Metrics: grpcRes.Metrics,
   169  	}
   170  	return res, stats, nil
   171  }
   172  func (z Zipper) StatsProtoV2(ctx context.Context) (*protov2.MetricDetailsResponse, *types.Stats, merry.Error) {
   173  	logger := z.logger.With(zap.String("function", "StatsProtoV2"))
   174  	grpcRes, stats, err := z.StatsProtoV3(ctx)
   175  	if err != nil {
   176  		if grpcRes == nil || len(grpcRes.Metrics) == 0 {
   177  			return nil, nil, err
   178  		} else {
   179  			logger.Debug("had errors while fetching result",
   180  				zap.Any("errors", err),
   181  			)
   182  		}
   183  	}
   184  
   185  	metrics := make(map[string]*protov2.MetricDetails, len(grpcRes.Metrics))
   186  	for k, v := range grpcRes.Metrics {
   187  		metrics[k] = &protov2.MetricDetails{
   188  			Size_:   v.Size_,
   189  			ModTime: v.ModTime,
   190  			ATime:   v.ATime,
   191  			RdTime:  v.RdTime,
   192  		}
   193  	}
   194  
   195  	res := &protov2.MetricDetailsResponse{
   196  		FreeSpace:  grpcRes.FreeSpace,
   197  		TotalSpace: grpcRes.TotalSpace,
   198  		Metrics:    metrics,
   199  	}
   200  
   201  	return res, stats, nil
   202  }