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 t...@oetiker.ch ++41 62 775 9902 / sb: -9900 -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org