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() }