thank you very much! indeed rrd_update_r() takes its arguments in a fairly different way compared to rrd_update(). In fact calling the 3rd and 4th arguments of rrd_update_r() is misleading.
One more question that is unclear to be. Is rrd_update_r() actually an async call to rrd_update? or is it simple a thread-safe call to rrd_update and I am the one who should spawn a thread and execute rrd_update_r() in it? thank you On Mon, Dec 21, 2015 at 3:22 PM, Tony Mountifield <t...@mountifield.org> wrote: > Hi there, > > > > You might find this page useful: > http://stackoverflow.com/questions/6681090/how-to-call-threadsafe-rrd-update-r-round-robin-database-function-with-c-api > > > > In particular, I think you need to give the template separately as the > second arg to rrd_update_r(). > > > > Try something that ends up like this: > > > > char *argv[] = { "1450694776:1015:1000:123:20.63:38.48:987" }; > > > > int ret = rrd_update_r("sensors.rrd", > "CO2unf:CO2fil:O2pp:O2pct:O2temp:O2pres", 1, argv); > > > > Regards > > Tony > > > > *From:* Athanasios Silis [mailto:athanasios.si...@gmail.com] > *Sent:* 21 December 2015 12:12 > *To:* Tony Mountifield > *Subject:* Re: [rrd-users] rrd_update_r() error : expected timestamp not > found in data source from update > > > > mind you the examples are not very helpful, because the only relevant > section is in rrd_daemon.c , where > > a "cache_item_t" structure is "fed" into rrd_update_r(). > > The "cache_item_t" structure is a typedef of "cache_item_s" and no parent > declaration is visible anywhere in the rrdtool1.x/* folder! > > > > On Mon, Dec 21, 2015 at 12:47 PM, Athanasios Silis < > athanasios.si...@gmail.com> wrote: > > Hi there, > > thank you for taking the time. This is only a proof of concept to verify > how it works. so it all in main.cpp > > #include <iostream> > #include <errno.h> // Error number definitions > #include <rrd.h> > #include <wordexp.h> > #include <time.h> > > using namespace std; > > void splitToArgs(string& str); > > int main(int argc, char* argv[]) > { > time_t tm = time(NULL); > stringstream ss; > ss << tm; > cout << "ss=" << ss.str() << endl; > > string updstr = string("update sensors.rrd --template > CO2unf:CO2fil:O2pp:O2pct:O2temp:O2pres ")\ > + ss.str() + string(":1015:1000:123:20.63:38.48:987"); > cout << "updstr=" << updstr << endl; > > splitToArgs(updstr); > return 0; > } > > void splitToArgs(string& str) > { > wordexp_t we; > int er = 0; > > if ( (er=wordexp(str.c_str() , &we, 0)) != 0) > { > cout << "error in word expansion " << er << endl; > } > else > { > if (we.we_wordc>0) > { > char * filename = we.we_wordv[1]; > rrd_clear_error(); > //int ret = rrd_update( we.we_wordc, we.we_wordv ); > const char **w = const_cast<const > char**>(we.we_wordv); //hell yeah! > int ret = rrd_update_r( filename , NULL , > we.we_wordc, w ); > if ( ret != 0 ) > { > cout << "rrd_update error # = " << ret << > " error get= " > << rrd_get_error() << " > rrd_strerror(errno) = " << endl; > } > } > } > wordfree(&we); > } > > > > The about produces the following output: > > ss=1450694776 > > updstr=update sensors.rrd --template > CO2unf:CO2fil:O2pp:O2pct:O2temp:O2pres > 1450694776:1015:1000:123:20.63:38.48:987 > > rrd_update error # = -1 error get= sensors.rrd: expected timestamp not > found in data source from update > > > > > > On Mon, Dec 21, 2015 at 12:22 PM, Tony Mountifield <t...@mountifield.org> > wrote: > > In article <CADgchnuMGkA=tQdMtACMWPYX2TgDUwKfbf3g= > d+fa3v5bp+...@mail.gmail.com>, > Athanasios Silis <athanasios.si...@gmail.com> wrote: > > Hello there, > > I am trying to use rrd_update_r() to update a rrdb through a c++ program. > > So I am generating the argc/argv on the fly to pass into the function. > > > > The originating string is the following: > > > > time_t tm = time(NULL); > > stringstream ss; > > ss << tm; > > string updstr = string("update sensors.rrd \ > > --template CO2unf:CO2fil:O2pp:O2pct:O2temp:O2pres ")\ > > + ss.str() + string(":1015:1000:123:20.63:38.48:987"); > > > > I get this error from rrd_get_error(): > > sensors.rrd: expected timestamp not found in data source from update > > > > Is timestamp not accepted in seconds from EPOCH? > > Can you show your code all the way from the above until the call to > rrd_update_r()? > > Also, show the value of updstr, to make sure it is what you think it is? > > Cheers > Tony > -- > Tony Mountifield > Work: t...@softins.co.uk - http://www.softins.co.uk > Play: t...@mountifield.org - http://tony.mountifield.org > > _______________________________________________ > rrd-users mailing list > rrd-users@lists.oetiker.ch > https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users > > > > >
_______________________________________________ rrd-users mailing list rrd-users@lists.oetiker.ch https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users