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 }