[rrd-developers] fix #182217 breaks librrdp-perl
Tobias Oetiker
tobi at oetiker.ch
Tue Apr 7 19:25:47 CEST 2009
Hi Sebastian,
Today Sebastian Harl wrote:
> > >
> > > By now (rrdtool 1.3), the problem is the following:
> > >
> > > RRDp::read() expects the output to be terminated by a line matching
> > > "^OK(<system information>)?". However, when outputting a PNG, the
> > > output is most likely not terminated by a newline, so RRDp::read sits
> > > there waiting for that magic line forever.
> > >
> > > I'm not sure how to properly solve that. We don't get an end-of-file
> > > marker at that point, so we cannot simply wait for that. One possible
> > > way would be to look for "OK ..." at the _end_ of a line. However, since
> > > <system information> is optional, we'd get a "false positive" if the
> > > output includes "OK" at the end of _some_ line, which, I suppose, might
> > > very well happen e.g. when outputting some binary image data. (Btw.,
> > > this is already true for "OK" at the beginning of a line which could be
> > > seen as a bug as well.)
> > >
> > > Another way would be to tune the output of the rrdtool server process
> > > and return the status (possibly including the number of bytes in the
> > > following output) before printing the output of the command. Obviously,
> > > this would require to cache all output. Also, this would break all
> > > existing applications that use the rrdtool server.
>
> > the graphv interface outputs the graph in a 'sane' way so that RRDp
> > could capture it if it was enhanced accordingly ...
>
> Anybody willing to step up to provide a patch? I'm currently fairly
> short of time, so I probably won't get to that anytime soon.
>
> Also, I still think that the behavior of RRDp::cmd('graph - [...]')
> should be fixed. Waiting forever is not an acceptable behavior imho.
> Imho, falling back to graphv in that case is not an option, since the
> output of graph and graphv are different. However, bailing out and
> reporting an error should be fine. Any comments on that?
adding a newline after the graph output is quite simple, and I
imagine it would not immediately break anything ... the RRDp code
will NOT work when there is a newline inside the graph but this has
always been the case ...
Index: rrd_graph.c
===================================================================
--- rrd_graph.c (revision 1781)
+++ rrd_graph.c (working copy)
@@ -3675,6 +3675,9 @@
} else if (strcmp(walker->key, "image") == 0) {
fwrite(walker->value.u_blo.ptr, walker->value.u_blo.size, 1,
(stream ? stream : stdout));
+ if (! stream){
+ fwrite("\n",1,1,stdout);
+ }
}
/* skip anything else */
walker = walker->next;
does this help
tobi
>
> TIA,
> Sebastian
>
>
--
Tobi Oetiker, OETIKER+PARTNER AG, Aarweg 15 CH-4600 Olten, Switzerland
http://it.oetiker.ch tobi at oetiker.ch ++41 62 775 9902 / sb: -9900
More information about the rrd-developers
mailing list