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.go84
1 files changed, 79 insertions, 5 deletions
diff --git a/rrdformat/marshal_xml.go b/rrdformat/marshal_xml.go
index dfb0556..7263810 100644
--- a/rrdformat/marshal_xml.go
+++ b/rrdformat/marshal_xml.go
@@ -1,19 +1,93 @@
package rrdformat
import (
+ "strconv"
"encoding/xml"
)
-func (h *Header) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(h.Version, xml.StartElement{Name: xml.Name{Local: "version", Space: XMLNS}}); err != nil {
+//const XMLNS = "https://oss.oetiker.ch/rrdtool/rrdtool-dump.xml"
+
+func (rrd RRD) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+ return e.Encode(rrd.Data)
+}
+
+func xmlStart(name string) xml.StartElement {
+ return xml.StartElement{
+ Name: xml.Name{
+ Local: name,
+ },
+ }
+}
+
+func (rrd RRDv0005) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+ if err := e.EncodeToken(xml.Comment(" Round Robin Database Dump ")); err != nil {
+ return err
+ }
+ if err := e.EncodeToken(xml.CharData("\n")); err != nil {
+ return err
+ }
+ if err := e.EncodeToken(start); err != nil {
+ return err
+ }
+
+ // 1. Header
+ if err := e.Encode(rrd.Header); err != nil {
+ return err
+ }
+ // 2
+ if err := e.Encode(rrd.LastUpdated); err != nil {
return err
}
- if err := e.EncodeElement(h.PDPStep, xml.StartElement{Name: xml.Name{Local: "step", Space: XMLNS}}); err != nil {
+ if err := e.EncodeToken(xml.CharData("\n")); err != nil {
+ return err
+ }
+ for _, ds := range rrd.DSDefs {
+ if err := e.Encode(ds); err != nil {
+ return err
+ }
+ }
+
+ if err := e.EncodeToken(start.End()); err != nil {
return err
}
return nil
}
-var _ xml.Marshaler = &Header{}
+func (t TimeWithUsec) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+ return TimeWithoutUsec{Sec: t.Sec}.MarshalXML(e, start)
+}
-//var _ xml.Unmarshaler = &Header{}
+func (t TimeWithoutUsec) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+ if err := e.EncodeToken(start); err != nil {
+ return err
+ }
+ if err := e.EncodeToken(xml.CharData(strconv.FormatInt(int64(t.Sec), 10))); err != nil {
+ return err
+ }
+ if err := e.EncodeToken(start.End()); err != nil {
+ return err
+ }
+ if err := e.EncodeToken(xml.CharData(" ")); err != nil {
+ return err
+ }
+ if err := e.EncodeToken(xml.Comment(t.Time().Format(" 2006-01-02 15:04:05 MST "))); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (h Header) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+ if err := e.EncodeElement(h.Version, xmlStart("version")); err != nil {
+ return err
+ }
+ if err := e.EncodeElement(h.PDPStep, xmlStart("step")); err != nil {
+ return err
+ }
+ if err := e.EncodeToken(xml.CharData(" ")); err != nil {
+ return err
+ }
+ if err := e.EncodeToken(xml.Comment(" Seconds ")); err != nil {
+ return err
+ }
+ return nil
+}