1// Licensed to Elasticsearch B.V. under one or more contributor 2// license agreements. See the NOTICE file distributed with 3// this work for additional information regarding copyright 4// ownership. Elasticsearch B.V. licenses this file to you under 5// the Apache License, Version 2.0 (the "License"); you may 6// not use this file except in compliance with the License. 7// You may obtain a copy of the License at 8// 9// http://www.apache.org/licenses/LICENSE-2.0 10// 11// Unless required by applicable law or agreed to in writing, 12// software distributed under the License is distributed on an 13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14// KIND, either express or implied. See the License for the 15// specific language governing permissions and limitations 16// under the License. 17 18package apmrestful 19 20import ( 21 "bytes" 22 "strings" 23) 24 25// massageRoutePath removes the regexp patterns from route variables. 26func massageRoutePath(route string) string { 27 buf := bytes.NewBuffer(make([]byte, 0, len(route))) 28 end := 0 29 for end < len(route) { 30 var token string 31 i := strings.IndexRune(route[end:], '/') 32 if i == -1 { 33 token = route[end:] 34 end = len(route) 35 } else { 36 token = route[end : end+i+1] 37 end += i + 1 38 } 39 if strings.HasPrefix(token, "{") { 40 colon := strings.IndexRune(token, ':') 41 if colon != -1 { 42 buf.WriteString(token[:colon]) 43 rbracket := strings.LastIndexByte(token[colon:], '}') 44 if rbracket != -1 { 45 buf.WriteString(token[colon+rbracket:]) 46 } 47 } else { 48 buf.WriteString(token) 49 } 50 } else { 51 buf.WriteString(token) 52 } 53 } 54 return buf.String() 55} 56