From dff188a6157c10ab6745b1a389c925794d6ca1ba Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 3 Feb 2020 00:30:31 -0500 Subject: fix --- rrdformat/marshal_xml.go | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) (limited to 'rrdformat/marshal_xml.go') 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 } -- cgit v1.2.3