github.com/pyroscope-io/pyroscope@v0.37.3-0.20230725203016-5f6947968bd0/pkg/util/strutil/strconv.go (about)

     1  // Copyright 2013 The Prometheus Authors
     2  // Licensed under the Apache License, Version 2.0 (the "License");
     3  // you may not use this file except in compliance with the License.
     4  // You may obtain a copy of the License at
     5  //
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software
     9  // distributed under the License is distributed on an "AS IS" BASIS,
    10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package strutil
    15  
    16  import (
    17  	"fmt"
    18  	"net/url"
    19  
    20  	"github.com/grafana/regexp"
    21  )
    22  
    23  var invalidLabelCharRE = regexp.MustCompile(`[^a-zA-Z0-9_]`)
    24  
    25  // TableLinkForExpression creates an escaped relative link to the table view of
    26  // the provided expression.
    27  func TableLinkForExpression(expr string) string {
    28  	escapedExpression := url.QueryEscape(expr)
    29  	return fmt.Sprintf("/graph?g0.expr=%s&g0.tab=1", escapedExpression)
    30  }
    31  
    32  // GraphLinkForExpression creates an escaped relative link to the graph view of
    33  // the provided expression.
    34  func GraphLinkForExpression(expr string) string {
    35  	escapedExpression := url.QueryEscape(expr)
    36  	return fmt.Sprintf("/graph?g0.expr=%s&g0.tab=0", escapedExpression)
    37  }
    38  
    39  // SanitizeLabelName replaces anything that doesn't match
    40  // client_label.LabelNameRE with an underscore.
    41  func SanitizeLabelName(name string) string {
    42  	return invalidLabelCharRE.ReplaceAllString(name, "_")
    43  }