+ -- local helper: create gprint statements
+ function __gprint(source)
+
+ local rv = { }
+ local numfmt = opts.number_format or "%6.1lf"
+ local totfmt = opts.totals_format or "%5.1lf%s"
+
+ -- don't include MIN if rrasingle is enabled
+ if not rrasingle then
+ _ti( rv, _sf( "GPRINT:%s_min:MIN:%s Min", source.sname, numfmt ) )
+ end
+
+ -- always include AVERAGE
+ _ti( rv, _sf( "GPRINT:%s_avg:AVERAGE:%s Avg", source.sname, numfmt ) )
+
+ -- don't include MAX if rrasingle is enabled
+ if not rrasingle then
+ _ti( rv, _sf( "GPRINT:%s_max:MAX:%s Max", source.sname, numfmt ) )
+ end
+
+ -- include total count if requested else include LAST
+ if source.total then
+ _ti( rv, _sf( "GPRINT:%s_avg_sum:LAST:(ca. %s Total)", source.sname, totfmt ) )
+ else
+ _ti( rv, _sf( "GPRINT:%s_avg:LAST:%s Last", source.sname, numfmt ) )
+ end
+
+ -- end label line
+ rv[#rv] = rv[#rv] .. "\\l"
+
+
+ return rv
+ end
+
+
+ -- remember images
+ _ti( images, opts.image )
+
+ -- insert provided addition rrd options
+ self:_push( { "-t", opts.title or "Unknown title" } )
+ self:_push( opts.rrd )
+
+ -- store index and safe instance name within each source object,
+ -- find longest instance name
+ for i, source in ipairs(opts.sources) do
+
+ if source.name:len() > _longest_name then
+ _longest_name = source.name:len()
+ end
+
+ if source.total then
+ _has_totals = true
+ end
+
+ source.index = i
+ source.sname = i .. source.name:gsub("[^A-Za-z0-9%-_]","_")
+ end
+
+ -- create DEF statements for each instance, find longest instance name
+ for i, source in ipairs(opts.sources) do
+ self:_push( __def( source ) )
+ end
+
+ -- create CDEF required for calculating totals
+ self:_push( __cdef_totals() )
+
+ -- create CDEF statements for each instance in reversed order
+ for i, source in ipairs(opts.sources) do
+ self:_push( __cdef( opts.sources[1 + #opts.sources - i] ) )
+ end
+
+ -- create LINE1, AREA and GPRINT statements for each instance
+ for i, source in ipairs(opts.sources) do
+ self:_push( __area( source ) )
+ self:_push( __gprint( source ) )