diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2020-02-03 00:30:31 -0500 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2020-02-03 00:30:31 -0500 |
commit | dff188a6157c10ab6745b1a389c925794d6ca1ba (patch) | |
tree | f498118587f6db75dd19c6657407714711cbe250 /rrdformat/marshal_xml.go | |
parent | 8c121d944aafa0b682030156f6c5dd743dfab607 (diff) |
fix
Diffstat (limited to 'rrdformat/marshal_xml.go')
-rw-r--r-- | rrdformat/marshal_xml.go | 32 |
1 files changed, 10 insertions, 22 deletions
diff --git a/rrdformat/marshal_xml.go b/rrdformat/marshal_xml.go index 7b97894..cb2db93 100644 --- a/rrdformat/marshal_xml.go +++ b/rrdformat/marshal_xml.go @@ -3,6 +3,8 @@ package rrdformat import ( "encoding/xml" "strconv" + + "git.lukeshu.com/go/librrd/rrdformat/rrdbinary" ) //const XMLNS = "https://oss.oetiker.ch/rrdtool/rrdtool-dump.xml" @@ -50,7 +52,7 @@ func (rrd RRD) MarshalXML(e *xml.Encoder, start xml.StartElement) error { } // 3. Data Sources for _, ds := range rrd.DSDefs { - if err := e.EncodeElement(ds, xmlStart("ds")); err != nil { + if err := ds.marshalXML(rrd, e, xmlStart("ds")); err != nil { return err } } @@ -87,7 +89,7 @@ func (t TimeWithUsec) MarshalXML(e *xml.Encoder, start xml.StartElement) error { return nil } -func (ds DSDef) MarshalXML(e *xml.Encoder, start xml.StartElement) error { +func (ds DSDef) marshalXML(rrd RRD, e *xml.Encoder, start xml.StartElement) error { if err := e.EncodeToken(start); err != nil { return err } @@ -101,29 +103,14 @@ func (ds DSDef) MarshalXML(e *xml.Encoder, start xml.StartElement) error { switch ds.DSType { case DST_CDEF: var rpnps []rrdbinary.RPNToken - for _, param := range ds.Params { + for _, param := range ds.Parameters { rpnps = append(rpnps, param.AsRPNTokens()...) } - strs := make([]string, len(rpnps)) - for _, rpnp := range rpnps { - switch Op(rpnp.Op) { - case OP_NUMBER: - strs = append(strs, fmt.Sprintf("%d", rpnp.Val)) - case OP_VARIABLE: - if rpnp.Val < 0 || rpnp.Val >= len(rrd.DSDefs) { - return fmt.Errorf("out-of-bounds %s %d", Op(rpnp.Op), rpnp.Val) - } - strs = append(strs, rrd.DSDefs[int(rpnp.Val)].Name) - case OP_PREV_OTHER: - if rpnp.Val < 0 || rpnp.Val >= len(rrd.DSDefs) { - return fmt.Errorf("out-of-bounds %s %d", Op(rpnp.Op), rpnp.Val) - } - strs = append(strs, fmt.Sprintf("PREV(%s)", rrd.DSDefs[int(rpnp.Val)].Name)) - default: - strs = append(strs, rpnp.Op.String()) - } + str, err := rrd.RPNCompactToString(rpnps) + if err != nil { + return err } - if err := e.EncodeElement(strings.Join(strs, ","), xmlStart("cdef")); err != nil { + if err := e.EncodeElement(str, xmlStart("cdef")); err != nil { return err } default: @@ -133,4 +120,5 @@ func (ds DSDef) MarshalXML(e *xml.Encoder, start xml.StartElement) error { if err := e.EncodeToken(start.End()); err != nil { return err } + return nil } |