package rrdformat import ( "encoding/xml" "strconv" ) //const XMLNS = "https://oss.oetiker.ch/rrdtool/rrdtool-dump.xml" func (rrd RRD) MarshalXML(e *xml.Encoder, start xml.StartElement) error { return e.EncodeElement(rrd.Data, start) } 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. Last Updated if err := e.EncodeElement(rrd.LastUpdated, xmlStart("lastupdate")); err != nil { return err } if err := e.EncodeToken(xml.CharData("\n")); err != nil { return err } // 3. Data Sources for _, ds := range rrd.DSDefs { if err := e.EncodeElement(ds, xmlStart("ds")); err != nil { return err } } // 4. Round Robin Archives for _, rra := range rrd.RRADefs { if err := e.EncodeElement(rra, xmlStart("rra")); err != nil { return err } } if err := e.EncodeToken(start.End()); err != nil { return err } return nil } func (t TimeWithUsec) MarshalXML(e *xml.Encoder, start xml.StartElement) error { return e.EncodeElement(TimeWithoutUsec{Sec: t.Sec}, start) } 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 }