github.com/netdata/go.d.plugin@v0.58.1/pkg/web/duration.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package web
     4  
     5  import (
     6  	"fmt"
     7  	"strconv"
     8  	"time"
     9  )
    10  
    11  // Duration is a time.Duration wrapper.
    12  type Duration struct {
    13  	Duration time.Duration
    14  }
    15  
    16  // UnmarshalYAML implements yaml.Unmarshaler.
    17  func (d *Duration) UnmarshalYAML(unmarshal func(interface{}) error) error {
    18  	var s string
    19  
    20  	if err := unmarshal(&s); err != nil {
    21  		return err
    22  	}
    23  
    24  	if v, err := time.ParseDuration(s); err == nil {
    25  		d.Duration = v
    26  		return nil
    27  	}
    28  	if v, err := strconv.ParseInt(s, 10, 64); err == nil {
    29  		d.Duration = time.Duration(v) * time.Second
    30  		return nil
    31  	}
    32  	if v, err := strconv.ParseFloat(s, 64); err == nil {
    33  		d.Duration = time.Duration(v) * time.Second
    34  		return nil
    35  	}
    36  	return fmt.Errorf("unparsable duration format '%s'", s)
    37  }
    38  
    39  func (d Duration) String() string { return d.Duration.String() }