Hello,

I want to update an RRD database inside a C program.

For that I use rrd_last() to check if the database already exists.
If it does I just uptade it with rrd_update().
If it doesn't I create it with rrd_create() and then update it with
rrd_update().

When I run the program the first time (the RRD database doesn't exists),
after the rrd_update() call, I get the error:
"ERROR: Not enough arguments"

The second time the problem doesn't accurs!
It just happens when I call rrd_create() followed by rrd_update().

Using pipes I don't get the problem.

-=-=-=-=-=-=-=-

Here is the output for the two consecutives runs:

[EMAIL PROTECTED] niacap]# ./a.out 
COMMAND: last test.rrd
ERROR: opening 'test.rrd': No such file or directory    <----- OK, IT
DOESN'T EXISTS
COMMAND: create --start 1000000000 test.rrd
        DS:out:COUNTER:600:U:U
        DS:in:COUNTER:600:U:U
        RRA:AVERAGE:0.5:1:288
        RRA:AVERAGE:0.5:6:326
COMMAND: update test.rrd 1000000001:1000:1000
ERROR: Not enough arguments                             <----- THE ERROR

[EMAIL PROTECTED] niacap]# ./a.out 
COMMAND: last test.rrd                                  <----- IT EXISTS
COMMAND: update test.rrd 1000000001:1000:1000           <----- NO ERROR
[EMAIL PROTECTED] niacap]# 

-=-=-=-=-=-=-=-

Here is the code for this program that simulates the problem:

#include <stdio.h>
#include <string.h>
#include <rrd.h>

void r_erro (void)
{
        if (rrd_test_error())
        {
                fprintf(stdout, "ERROR: %s\n", rrd_get_error());
                rrd_clear_error();
        }
}

unsigned int r_last (char *rrd_nome)
{
        char *argv[2] = { "last", rrd_nome };
        unsigned int t;

        printf("COMMAND: %s %s\n", argv[0], argv[1]);
        t = rrd_last(2, argv);
        r_erro();

        return ((int)t == -1) ? 0 : t;
}

int main (void)
{
        int i;
        unsigned int last;

        char r_nome[50] = "test.rrd";
        char r_update_temp[50];
        char *r_update[3] = { "update", r_nome, r_update_temp };

        char *r_create[8] =
        {
                "create", "--start", "1000000000", r_nome,
                "DS:out:COUNTER:600:U:U",
                "DS:in:COUNTER:600:U:U",
                "RRA:AVERAGE:0.5:1:288",
                "RRA:AVERAGE:0.5:6:326"
        };

        if ( !(last = r_last(r_nome)) )
        {
                printf("COMMAND: %s %s %s %s\n\t%s\n\t%s\n\t%s\n\t%s\n",
                        r_create[0], r_create[1], r_create[2], r_create[3],
                        r_create[4], r_create[5], r_create[6], r_create[7]);
                rrd_create(8, r_create);
                r_erro();
        }

        sprintf(r_update_temp, "%u:%u:%u", ++last, 1000, 1000);
        printf("COMMAND: %s %s %s\n", r_update[0], r_update[1], r_update[2]);

        rrd_update(3, r_update);
        r_erro();
}

-- 
-chico

--
Unsubscribe mailto:[EMAIL PROTECTED]
Help        mailto:[EMAIL PROTECTED]
Archive     http://www.ee.ethz.ch/~slist/rrd-users
WebAdmin    http://www.ee.ethz.ch/~slist/lsg2.cgi

Reply via email to