summaryrefslogtreecommitdiff
path: root/rrdformat/marshal_xml.go
diff options
context:
space:
mode:
Diffstat (limited to 'rrdformat/marshal_xml.go')
-rw-r--r--rrdformat/marshal_xml.go32
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
}