refactor (package model): move from github.com/pkg/errors to 'errors' and 'fmt' packages (#10747)
Signed-off-by: Matthieu MOREL <mmorel-35@users.noreply.github.com> Co-Authored-By: Julien Pivotto <roidelapluie@gmail.com> Co-authored-by: Julien Pivotto <roidelapluie@gmail.com>
This commit is contained in:
parent
6375417324
commit
c2b4de3611
|
@ -15,11 +15,10 @@ package labels
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// Slice is a sortable slice of label sets.
|
||||
|
@ -81,7 +80,7 @@ func ReadLabels(fn string, n int) ([]Labels, error) {
|
|||
}
|
||||
|
||||
if i != n {
|
||||
return mets, errors.Errorf("requested %d metrics but found %d", n, i)
|
||||
return mets, fmt.Errorf("requested %d metrics but found %d", n, i)
|
||||
}
|
||||
return mets, nil
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/grafana/regexp"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prometheus/common/model"
|
||||
|
||||
"github.com/prometheus/prometheus/model/labels"
|
||||
|
@ -71,7 +70,7 @@ func (a *Action) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||
*a = act
|
||||
return nil
|
||||
}
|
||||
return errors.Errorf("unknown relabel action %q", s)
|
||||
return fmt.Errorf("unknown relabel action %q", s)
|
||||
}
|
||||
|
||||
// Config is the configuration for relabeling of target label sets.
|
||||
|
@ -105,25 +104,25 @@ func (c *Config) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||
c.Regex = MustNewRegexp("")
|
||||
}
|
||||
if c.Action == "" {
|
||||
return errors.Errorf("relabel action cannot be empty")
|
||||
return fmt.Errorf("relabel action cannot be empty")
|
||||
}
|
||||
if c.Modulus == 0 && c.Action == HashMod {
|
||||
return errors.Errorf("relabel configuration for hashmod requires non-zero modulus")
|
||||
return fmt.Errorf("relabel configuration for hashmod requires non-zero modulus")
|
||||
}
|
||||
if (c.Action == Replace || c.Action == HashMod || c.Action == Lowercase || c.Action == Uppercase) && c.TargetLabel == "" {
|
||||
return errors.Errorf("relabel configuration for %s action requires 'target_label' value", c.Action)
|
||||
return fmt.Errorf("relabel configuration for %s action requires 'target_label' value", c.Action)
|
||||
}
|
||||
if (c.Action == Replace || c.Action == Lowercase || c.Action == Uppercase) && !relabelTarget.MatchString(c.TargetLabel) {
|
||||
return errors.Errorf("%q is invalid 'target_label' for %s action", c.TargetLabel, c.Action)
|
||||
return fmt.Errorf("%q is invalid 'target_label' for %s action", c.TargetLabel, c.Action)
|
||||
}
|
||||
if (c.Action == Lowercase || c.Action == Uppercase) && c.Replacement != DefaultRelabelConfig.Replacement {
|
||||
return errors.Errorf("'replacement' can not be set for %s action", c.Action)
|
||||
return fmt.Errorf("'replacement' can not be set for %s action", c.Action)
|
||||
}
|
||||
if c.Action == LabelMap && !relabelTarget.MatchString(c.Replacement) {
|
||||
return errors.Errorf("%q is invalid 'replacement' for %s action", c.Replacement, c.Action)
|
||||
return fmt.Errorf("%q is invalid 'replacement' for %s action", c.Replacement, c.Action)
|
||||
}
|
||||
if c.Action == HashMod && !model.LabelName(c.TargetLabel).IsValid() {
|
||||
return errors.Errorf("%q is invalid 'target_label' for %s action", c.TargetLabel, c.Action)
|
||||
return fmt.Errorf("%q is invalid 'target_label' for %s action", c.TargetLabel, c.Action)
|
||||
}
|
||||
|
||||
if c.Action == LabelDrop || c.Action == LabelKeep {
|
||||
|
@ -132,7 +131,7 @@ func (c *Config) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||
c.Modulus != DefaultRelabelConfig.Modulus ||
|
||||
c.Separator != DefaultRelabelConfig.Separator ||
|
||||
c.Replacement != DefaultRelabelConfig.Replacement {
|
||||
return errors.Errorf("%s action requires only 'regex', and no other fields", c.Action)
|
||||
return fmt.Errorf("%s action requires only 'regex', and no other fields", c.Action)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -265,7 +264,7 @@ func relabel(lset labels.Labels, cfg *Config) labels.Labels {
|
|||
}
|
||||
}
|
||||
default:
|
||||
panic(errors.Errorf("relabel: unknown relabel action type %q", cfg.Action))
|
||||
panic(fmt.Errorf("relabel: unknown relabel action type %q", cfg.Action))
|
||||
}
|
||||
|
||||
return lb.Labels()
|
||||
|
|
|
@ -16,12 +16,13 @@ package rulefmt
|
|||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prometheus/common/model"
|
||||
yaml "gopkg.in/yaml.v3"
|
||||
|
||||
|
@ -40,12 +41,16 @@ type Error struct {
|
|||
|
||||
// Error prints the error message in a formatted string.
|
||||
func (err *Error) Error() string {
|
||||
if err.Err.nodeAlt != nil {
|
||||
return errors.Wrapf(err.Err.err, "%d:%d: %d:%d: group %q, rule %d, %q", err.Err.node.Line, err.Err.node.Column, err.Err.nodeAlt.Line, err.Err.nodeAlt.Column, err.Group, err.Rule, err.RuleName).Error()
|
||||
} else if err.Err.node != nil {
|
||||
return errors.Wrapf(err.Err.err, "%d:%d: group %q, rule %d, %q", err.Err.node.Line, err.Err.node.Column, err.Group, err.Rule, err.RuleName).Error()
|
||||
if err.Err.err == nil {
|
||||
return ""
|
||||
}
|
||||
return errors.Wrapf(err.Err.err, "group %q, rule %d, %q", err.Group, err.Rule, err.RuleName).Error()
|
||||
if err.Err.nodeAlt != nil {
|
||||
return fmt.Sprintf("%d:%d: %d:%d: group %q, rule %d, %q: %v", err.Err.node.Line, err.Err.node.Column, err.Err.nodeAlt.Line, err.Err.nodeAlt.Column, err.Group, err.Rule, err.RuleName, err.Err.err)
|
||||
}
|
||||
if err.Err.node != nil {
|
||||
return fmt.Sprintf("%d:%d: group %q, rule %d, %q: %v", err.Err.node.Line, err.Err.node.Column, err.Group, err.Rule, err.RuleName, err.Err.err)
|
||||
}
|
||||
return fmt.Sprintf("group %q, rule %d, %q: %v", err.Group, err.Rule, err.RuleName, err.Err.err)
|
||||
}
|
||||
|
||||
// WrappedError wraps error with the yaml node which can be used to represent
|
||||
|
@ -58,10 +63,14 @@ type WrappedError struct {
|
|||
|
||||
// Error prints the error message in a formatted string.
|
||||
func (we *WrappedError) Error() string {
|
||||
if we.err == nil {
|
||||
return ""
|
||||
}
|
||||
if we.nodeAlt != nil {
|
||||
return errors.Wrapf(we.err, "%d:%d: %d:%d", we.node.Line, we.node.Column, we.nodeAlt.Line, we.nodeAlt.Column).Error()
|
||||
} else if we.node != nil {
|
||||
return errors.Wrapf(we.err, "%d:%d", we.node.Line, we.node.Column).Error()
|
||||
return fmt.Sprintf("%d:%d: %d:%d: %v", we.node.Line, we.node.Column, we.nodeAlt.Line, we.nodeAlt.Column, we.err)
|
||||
}
|
||||
if we.node != nil {
|
||||
return fmt.Sprintf("%d:%d: %v", we.node.Line, we.node.Column, we.err)
|
||||
}
|
||||
return we.err.Error()
|
||||
}
|
||||
|
@ -81,13 +90,13 @@ func (g *RuleGroups) Validate(node ruleGroups) (errs []error) {
|
|||
|
||||
for j, g := range g.Groups {
|
||||
if g.Name == "" {
|
||||
errs = append(errs, errors.Errorf("%d:%d: Groupname must not be empty", node.Groups[j].Line, node.Groups[j].Column))
|
||||
errs = append(errs, fmt.Errorf("%d:%d: Groupname must not be empty", node.Groups[j].Line, node.Groups[j].Column))
|
||||
}
|
||||
|
||||
if _, ok := set[g.Name]; ok {
|
||||
errs = append(
|
||||
errs,
|
||||
errors.Errorf("%d:%d: groupname: \"%s\" is repeated in the same file", node.Groups[j].Line, node.Groups[j].Column, g.Name),
|
||||
fmt.Errorf("%d:%d: groupname: \"%s\" is repeated in the same file", node.Groups[j].Line, node.Groups[j].Column, g.Name),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -146,7 +155,7 @@ type RuleNode struct {
|
|||
func (r *RuleNode) Validate() (nodes []WrappedError) {
|
||||
if r.Record.Value != "" && r.Alert.Value != "" {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("only one of 'record' and 'alert' must be set"),
|
||||
err: fmt.Errorf("only one of 'record' and 'alert' must be set"),
|
||||
node: &r.Record,
|
||||
nodeAlt: &r.Alert,
|
||||
})
|
||||
|
@ -154,12 +163,12 @@ func (r *RuleNode) Validate() (nodes []WrappedError) {
|
|||
if r.Record.Value == "" && r.Alert.Value == "" {
|
||||
if r.Record.Value == "0" {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("one of 'record' or 'alert' must be set"),
|
||||
err: fmt.Errorf("one of 'record' or 'alert' must be set"),
|
||||
node: &r.Alert,
|
||||
})
|
||||
} else {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("one of 'record' or 'alert' must be set"),
|
||||
err: fmt.Errorf("one of 'record' or 'alert' must be set"),
|
||||
node: &r.Record,
|
||||
})
|
||||
}
|
||||
|
@ -167,31 +176,31 @@ func (r *RuleNode) Validate() (nodes []WrappedError) {
|
|||
|
||||
if r.Expr.Value == "" {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("field 'expr' must be set in rule"),
|
||||
err: fmt.Errorf("field 'expr' must be set in rule"),
|
||||
node: &r.Expr,
|
||||
})
|
||||
} else if _, err := parser.ParseExpr(r.Expr.Value); err != nil {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Wrapf(err, "could not parse expression"),
|
||||
err: fmt.Errorf("could not parse expression: %w", err),
|
||||
node: &r.Expr,
|
||||
})
|
||||
}
|
||||
if r.Record.Value != "" {
|
||||
if len(r.Annotations) > 0 {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("invalid field 'annotations' in recording rule"),
|
||||
err: fmt.Errorf("invalid field 'annotations' in recording rule"),
|
||||
node: &r.Record,
|
||||
})
|
||||
}
|
||||
if r.For != 0 {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("invalid field 'for' in recording rule"),
|
||||
err: fmt.Errorf("invalid field 'for' in recording rule"),
|
||||
node: &r.Record,
|
||||
})
|
||||
}
|
||||
if !model.IsValidMetricName(model.LabelValue(r.Record.Value)) {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("invalid recording rule name: %s", r.Record.Value),
|
||||
err: fmt.Errorf("invalid recording rule name: %s", r.Record.Value),
|
||||
node: &r.Record,
|
||||
})
|
||||
}
|
||||
|
@ -200,13 +209,13 @@ func (r *RuleNode) Validate() (nodes []WrappedError) {
|
|||
for k, v := range r.Labels {
|
||||
if !model.LabelName(k).IsValid() || k == model.MetricNameLabel {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("invalid label name: %s", k),
|
||||
err: fmt.Errorf("invalid label name: %s", k),
|
||||
})
|
||||
}
|
||||
|
||||
if !model.LabelValue(v).IsValid() {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("invalid label value: %s", v),
|
||||
err: fmt.Errorf("invalid label value: %s", v),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -214,7 +223,7 @@ func (r *RuleNode) Validate() (nodes []WrappedError) {
|
|||
for k := range r.Annotations {
|
||||
if !model.LabelName(k).IsValid() {
|
||||
nodes = append(nodes, WrappedError{
|
||||
err: errors.Errorf("invalid annotation name: %s", k),
|
||||
err: fmt.Errorf("invalid annotation name: %s", k),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -260,7 +269,7 @@ func testTemplateParsing(rl *RuleNode) (errs []error) {
|
|||
for k, val := range rl.Labels {
|
||||
err := parseTest(val)
|
||||
if err != nil {
|
||||
errs = append(errs, errors.Wrapf(err, "label %q", k))
|
||||
errs = append(errs, fmt.Errorf("label %q: %w", k, err))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -268,7 +277,7 @@ func testTemplateParsing(rl *RuleNode) (errs []error) {
|
|||
for k, val := range rl.Annotations {
|
||||
err := parseTest(val)
|
||||
if err != nil {
|
||||
errs = append(errs, errors.Wrapf(err, "annotation %q", k))
|
||||
errs = append(errs, fmt.Errorf("annotation %q: %w", k, err))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -287,7 +296,7 @@ func Parse(content []byte) (*RuleGroups, []error) {
|
|||
decoder.KnownFields(true)
|
||||
err := decoder.Decode(&groups)
|
||||
// Ignore io.EOF which happens with empty input.
|
||||
if err != nil && err != io.EOF {
|
||||
if err != nil && !errors.Is(err, io.EOF) {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
err = yaml.Unmarshal(content, &node)
|
||||
|
@ -306,11 +315,11 @@ func Parse(content []byte) (*RuleGroups, []error) {
|
|||
func ParseFile(file string) (*RuleGroups, []error) {
|
||||
b, err := os.ReadFile(file)
|
||||
if err != nil {
|
||||
return nil, []error{errors.Wrap(err, file)}
|
||||
return nil, []error{fmt.Errorf("%s: %w", file, err)}
|
||||
}
|
||||
rgs, errs := Parse(b)
|
||||
for i := range errs {
|
||||
errs[i] = errors.Wrap(errs[i], file)
|
||||
errs[i] = fmt.Errorf("%s: %w", file, errs[i])
|
||||
}
|
||||
return rgs, errs
|
||||
}
|
||||
|
|
|
@ -182,8 +182,12 @@ groups:
|
|||
`
|
||||
_, errs := Parse([]byte(group))
|
||||
require.Len(t, errs, 2, "Expected two errors")
|
||||
err0 := errs[0].(*Error).Err.node
|
||||
err1 := errs[1].(*Error).Err.node
|
||||
var err00 *Error
|
||||
require.True(t, errors.As(errs[0], &err00))
|
||||
err0 := err00.Err.node
|
||||
var err01 *Error
|
||||
require.True(t, errors.As(errs[1], &err01))
|
||||
err1 := err01.Err.node
|
||||
require.NotEqual(t, err0, err1, "Error nodes should not be the same")
|
||||
}
|
||||
|
||||
|
|
|
@ -58,8 +58,6 @@ yystate0:
|
|||
goto yystart61
|
||||
}
|
||||
|
||||
goto yystate0 // silence unused label error
|
||||
goto yystate1 // silence unused label error
|
||||
yystate1:
|
||||
c = l.next()
|
||||
yystart1:
|
||||
|
@ -94,7 +92,6 @@ yystate4:
|
|||
goto yystate4
|
||||
}
|
||||
|
||||
goto yystate5 // silence unused label error
|
||||
yystate5:
|
||||
c = l.next()
|
||||
yystart5:
|
||||
|
@ -262,7 +259,6 @@ yystate24:
|
|||
c = l.next()
|
||||
goto yyrule4
|
||||
|
||||
goto yystate25 // silence unused label error
|
||||
yystate25:
|
||||
c = l.next()
|
||||
yystart25:
|
||||
|
@ -282,7 +278,6 @@ yystate26:
|
|||
goto yystate26
|
||||
}
|
||||
|
||||
goto yystate27 // silence unused label error
|
||||
yystate27:
|
||||
c = l.next()
|
||||
yystart27:
|
||||
|
@ -308,7 +303,6 @@ yystate29:
|
|||
c = l.next()
|
||||
goto yyrule7
|
||||
|
||||
goto yystate30 // silence unused label error
|
||||
yystate30:
|
||||
c = l.next()
|
||||
yystart30:
|
||||
|
@ -346,7 +340,6 @@ yystate34:
|
|||
c = l.next()
|
||||
goto yyrule11
|
||||
|
||||
goto yystate35 // silence unused label error
|
||||
yystate35:
|
||||
c = l.next()
|
||||
yystart35:
|
||||
|
@ -383,7 +376,6 @@ yystate38:
|
|||
goto yystate36
|
||||
}
|
||||
|
||||
goto yystate39 // silence unused label error
|
||||
yystate39:
|
||||
c = l.next()
|
||||
yystart39:
|
||||
|
@ -418,7 +410,6 @@ yystate42:
|
|||
c = l.next()
|
||||
goto yyrule9
|
||||
|
||||
goto yystate43 // silence unused label error
|
||||
yystate43:
|
||||
c = l.next()
|
||||
yystart43:
|
||||
|
@ -479,7 +470,6 @@ yystate49:
|
|||
c = l.next()
|
||||
goto yyrule18
|
||||
|
||||
goto yystate50 // silence unused label error
|
||||
yystate50:
|
||||
c = l.next()
|
||||
yystart50:
|
||||
|
@ -517,7 +507,6 @@ yystate54:
|
|||
c = l.next()
|
||||
goto yyrule20
|
||||
|
||||
goto yystate55 // silence unused label error
|
||||
yystate55:
|
||||
c = l.next()
|
||||
yystart55:
|
||||
|
@ -574,7 +563,6 @@ yystate60:
|
|||
goto yystate58
|
||||
}
|
||||
|
||||
goto yystate61 // silence unused label error
|
||||
yystate61:
|
||||
c = l.next()
|
||||
yystart61:
|
||||
|
@ -747,16 +735,58 @@ yyrule25: // {S}[^ \n]+
|
|||
return tTimestamp
|
||||
}
|
||||
yyrule26: // \n
|
||||
{
|
||||
if true { // avoid go vet determining the below panic will not be reached
|
||||
l.state = sInit
|
||||
return tLinebreak
|
||||
goto yystate0
|
||||
}
|
||||
panic("unreachable")
|
||||
|
||||
goto yyabort // silence unused label error
|
||||
|
||||
yyabort: // no lexem recognized
|
||||
//
|
||||
// silence unused label errors for build and satisfy go vet reachability analysis
|
||||
//
|
||||
{
|
||||
if false {
|
||||
goto yyabort
|
||||
}
|
||||
if false {
|
||||
goto yystate0
|
||||
}
|
||||
if false {
|
||||
goto yystate1
|
||||
}
|
||||
if false {
|
||||
goto yystate5
|
||||
}
|
||||
if false {
|
||||
goto yystate25
|
||||
}
|
||||
if false {
|
||||
goto yystate27
|
||||
}
|
||||
if false {
|
||||
goto yystate30
|
||||
}
|
||||
if false {
|
||||
goto yystate35
|
||||
}
|
||||
if false {
|
||||
goto yystate39
|
||||
}
|
||||
if false {
|
||||
goto yystate43
|
||||
}
|
||||
if false {
|
||||
goto yystate50
|
||||
}
|
||||
if false {
|
||||
goto yystate55
|
||||
}
|
||||
if false {
|
||||
goto yystate61
|
||||
}
|
||||
}
|
||||
|
||||
return tInvalid
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ package textparse
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
|
@ -25,8 +26,6 @@ import (
|
|||
"strings"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/prometheus/prometheus/model/exemplar"
|
||||
"github.com/prometheus/prometheus/model/labels"
|
||||
"github.com/prometheus/prometheus/model/value"
|
||||
|
@ -276,7 +275,7 @@ func (p *OpenMetricsParser) Next() (Entry, error) {
|
|||
case "unknown":
|
||||
p.mtype = MetricTypeUnknown
|
||||
default:
|
||||
return EntryInvalid, errors.Errorf("invalid metric type %q", s)
|
||||
return EntryInvalid, fmt.Errorf("invalid metric type %q", s)
|
||||
}
|
||||
case tHelp:
|
||||
if !utf8.Valid(p.text) {
|
||||
|
@ -293,7 +292,7 @@ func (p *OpenMetricsParser) Next() (Entry, error) {
|
|||
u := yoloString(p.text)
|
||||
if len(u) > 0 {
|
||||
if !strings.HasSuffix(m, u) || len(m) < len(u)+1 || p.l.b[p.offsets[1]-len(u)-1] != '_' {
|
||||
return EntryInvalid, errors.Errorf("unit not a suffix of metric %q", m)
|
||||
return EntryInvalid, fmt.Errorf("unit not a suffix of metric %q", m)
|
||||
}
|
||||
}
|
||||
return EntryUnit, nil
|
||||
|
@ -353,7 +352,7 @@ func (p *OpenMetricsParser) Next() (Entry, error) {
|
|||
return EntrySeries, nil
|
||||
|
||||
default:
|
||||
err = errors.Errorf("%q %q is not a valid start token", t, string(p.l.cur()))
|
||||
err = fmt.Errorf("%q %q is not a valid start token", t, string(p.l.cur()))
|
||||
}
|
||||
return EntryInvalid, err
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
package textparse
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
|
@ -223,7 +224,7 @@ foo_total 17.0 1520879607.789 # {xx="yy"} 5`
|
|||
|
||||
for {
|
||||
et, err := p.Next()
|
||||
if err == io.EOF {
|
||||
if errors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
|
|
@ -27,6 +27,9 @@ const (
|
|||
sLValue
|
||||
sValue
|
||||
sTimestamp
|
||||
sExemplar
|
||||
sEValue
|
||||
sETimestamp
|
||||
)
|
||||
|
||||
// Lex is called by the parser generated by "go tool yacc" to obtain each
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// CAUTION: Generated file - DO NOT EDIT.
|
||||
// Code generated by golex. DO NOT EDIT.
|
||||
|
||||
// Copyright 2017 The Prometheus Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
@ -16,7 +16,7 @@
|
|||
package textparse
|
||||
|
||||
import (
|
||||
"github.com/pkg/errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -47,7 +47,7 @@ yystate0:
|
|||
|
||||
switch yyt := l.state; yyt {
|
||||
default:
|
||||
panic(errors.Errorf(`invalid start condition %d`, yyt))
|
||||
panic(fmt.Errorf(`invalid start condition %d`, yyt))
|
||||
case 0: // start condition: INITIAL
|
||||
goto yystart1
|
||||
case 1: // start condition: sComment
|
||||
|
@ -66,8 +66,6 @@ yystate0:
|
|||
goto yystart36
|
||||
}
|
||||
|
||||
goto yystate0 // silence unused label error
|
||||
goto yystate1 // silence unused label error
|
||||
yystate1:
|
||||
c = l.next()
|
||||
yystart1:
|
||||
|
@ -130,7 +128,6 @@ yystate7:
|
|||
goto yystate7
|
||||
}
|
||||
|
||||
goto yystate8 // silence unused label error
|
||||
yystate8:
|
||||
c = l.next()
|
||||
yystart8:
|
||||
|
@ -235,7 +232,6 @@ yystate18:
|
|||
goto yystate18
|
||||
}
|
||||
|
||||
goto yystate19 // silence unused label error
|
||||
yystate19:
|
||||
c = l.next()
|
||||
yystart19:
|
||||
|
@ -257,7 +253,6 @@ yystate20:
|
|||
goto yystate20
|
||||
}
|
||||
|
||||
goto yystate21 // silence unused label error
|
||||
yystate21:
|
||||
c = l.next()
|
||||
yystart21:
|
||||
|
@ -290,7 +285,6 @@ yystate23:
|
|||
goto yystate22
|
||||
}
|
||||
|
||||
goto yystate24 // silence unused label error
|
||||
yystate24:
|
||||
c = l.next()
|
||||
yystart24:
|
||||
|
@ -330,7 +324,6 @@ yystate28:
|
|||
c = l.next()
|
||||
goto yyrule13
|
||||
|
||||
goto yystate29 // silence unused label error
|
||||
yystate29:
|
||||
c = l.next()
|
||||
yystart29:
|
||||
|
@ -369,7 +362,6 @@ yystate32:
|
|||
goto yystate30
|
||||
}
|
||||
|
||||
goto yystate33 // silence unused label error
|
||||
yystate33:
|
||||
c = l.next()
|
||||
yystart33:
|
||||
|
@ -397,7 +389,6 @@ yystate35:
|
|||
c = l.next()
|
||||
goto yyrule11
|
||||
|
||||
goto yystate36 // silence unused label error
|
||||
yystate36:
|
||||
c = l.next()
|
||||
yystart36:
|
||||
|
@ -521,16 +512,50 @@ yyrule18: // {D}+
|
|||
return tTimestamp
|
||||
}
|
||||
yyrule19: // \n
|
||||
{
|
||||
if true { // avoid go vet determining the below panic will not be reached
|
||||
l.state = sInit
|
||||
return tLinebreak
|
||||
goto yystate0
|
||||
}
|
||||
panic("unreachable")
|
||||
|
||||
goto yyabort // silence unused label error
|
||||
|
||||
yyabort: // no lexem recognized
|
||||
//
|
||||
// silence unused label errors for build and satisfy go vet reachability analysis
|
||||
//
|
||||
{
|
||||
if false {
|
||||
goto yyabort
|
||||
}
|
||||
if false {
|
||||
goto yystate0
|
||||
}
|
||||
if false {
|
||||
goto yystate1
|
||||
}
|
||||
if false {
|
||||
goto yystate8
|
||||
}
|
||||
if false {
|
||||
goto yystate19
|
||||
}
|
||||
if false {
|
||||
goto yystate21
|
||||
}
|
||||
if false {
|
||||
goto yystate24
|
||||
}
|
||||
if false {
|
||||
goto yystate29
|
||||
}
|
||||
if false {
|
||||
goto yystate33
|
||||
}
|
||||
if false {
|
||||
goto yystate36
|
||||
}
|
||||
}
|
||||
|
||||
// Workaround to gobble up comments that started with a HELP or TYPE
|
||||
// prefix. We just consume all characters until we reach a newline.
|
||||
// This saves us from adding disproportionate complexity to the parser.
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package textparse
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
|
@ -26,8 +27,6 @@ import (
|
|||
"unicode/utf8"
|
||||
"unsafe"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/prometheus/prometheus/model/exemplar"
|
||||
"github.com/prometheus/prometheus/model/labels"
|
||||
"github.com/prometheus/prometheus/model/value"
|
||||
|
@ -252,7 +251,7 @@ func (p *PromParser) nextToken() token {
|
|||
}
|
||||
|
||||
func parseError(exp string, got token) error {
|
||||
return errors.Errorf("%s, got %q", exp, got)
|
||||
return fmt.Errorf("%s, got %q", exp, got)
|
||||
}
|
||||
|
||||
// Next advances the parser to the next sample. It returns false if no
|
||||
|
@ -301,11 +300,11 @@ func (p *PromParser) Next() (Entry, error) {
|
|||
case "untyped":
|
||||
p.mtype = MetricTypeUnknown
|
||||
default:
|
||||
return EntryInvalid, errors.Errorf("invalid metric type %q", s)
|
||||
return EntryInvalid, fmt.Errorf("invalid metric type %q", s)
|
||||
}
|
||||
case tHelp:
|
||||
if !utf8.Valid(p.text) {
|
||||
return EntryInvalid, errors.Errorf("help text is not a valid utf8 string")
|
||||
return EntryInvalid, fmt.Errorf("help text is not a valid utf8 string")
|
||||
}
|
||||
}
|
||||
if t := p.nextToken(); t != tLinebreak {
|
||||
|
@ -364,7 +363,7 @@ func (p *PromParser) Next() (Entry, error) {
|
|||
return EntrySeries, nil
|
||||
|
||||
default:
|
||||
err = errors.Errorf("%q is not a valid start token", t)
|
||||
err = fmt.Errorf("%q is not a valid start token", t)
|
||||
}
|
||||
return EntryInvalid, err
|
||||
}
|
||||
|
@ -388,7 +387,7 @@ func (p *PromParser) parseLVals() error {
|
|||
return parseError("expected label value", t)
|
||||
}
|
||||
if !utf8.Valid(p.l.buf()) {
|
||||
return errors.Errorf("invalid UTF-8 label value")
|
||||
return fmt.Errorf("invalid UTF-8 label value")
|
||||
}
|
||||
|
||||
// The promlexer ensures the value string is quoted. Strip first
|
||||
|
|
|
@ -16,6 +16,7 @@ package textparse
|
|||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"errors"
|
||||
"io"
|
||||
"os"
|
||||
"testing"
|
||||
|
@ -176,7 +177,7 @@ testmetric{label="\"bar\""} 1`
|
|||
|
||||
for {
|
||||
et, err := p.Next()
|
||||
if err == io.EOF {
|
||||
if errors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
@ -378,7 +379,7 @@ func BenchmarkParse(b *testing.B) {
|
|||
t, err := p.Next()
|
||||
switch t {
|
||||
case EntryInvalid:
|
||||
if err == io.EOF {
|
||||
if errors.Is(err, io.EOF) {
|
||||
break Outer
|
||||
}
|
||||
b.Fatal(err)
|
||||
|
@ -406,7 +407,7 @@ func BenchmarkParse(b *testing.B) {
|
|||
t, err := p.Next()
|
||||
switch t {
|
||||
case EntryInvalid:
|
||||
if err == io.EOF {
|
||||
if errors.Is(err, io.EOF) {
|
||||
break Outer
|
||||
}
|
||||
b.Fatal(err)
|
||||
|
@ -439,7 +440,7 @@ func BenchmarkParse(b *testing.B) {
|
|||
t, err := p.Next()
|
||||
switch t {
|
||||
case EntryInvalid:
|
||||
if err == io.EOF {
|
||||
if errors.Is(err, io.EOF) {
|
||||
break Outer
|
||||
}
|
||||
b.Fatal(err)
|
||||
|
|
Loading…
Reference in New Issue