From 036f7ab20b7bdcddcdbac4071e359602b1a0728f Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 28 Jan 2020 08:58:49 -0500 Subject: wip xml --- rrdformat/marshal_xml.go | 84 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 5 deletions(-) (limited to 'rrdformat/marshal_xml.go') 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 +} -- cgit v1.2.3