static void archive_dlsvar( Dbptr db, char *net, char *sta, char *dls_var, char *dsparams, Tbl *rras, double time, double val ) { char key[STRSZ]; char *rrd; double start_time; Dbptr dbt; char datasource[STRSZ]; char command[STRSZ]; char cacheopt[FILENAME_MAX]; /* Disable response printing for now (see below) char response[STRSZ]; char *resp_ptr; */ int i; sprintf( key, "%s:%s:%s", net, sta, dls_var ); rrd = getarr( Rrd_files, key ); /* rrdtool in server-mode apparently does not write files until a request occurs to switch to the next file, so the test below doesn't work right. Trust the database to report existing files: if( rrd == NULL || ! is_present( rrd ) ) { */ if( rrd == NULL ) { start_time = time - Status_stepsize_sec; dbt = db; dbt.record = dbaddnull( db ); dbputv( dbt, 0, "net", net, "sta", sta, "rrdvar", dls_var, "time", start_time, NULL ); trwfname( dbt, Rrdfile_pattern, &rrd ); sprintf( datasource, "DS:%s:%s", dls_var, dsparams ); if( Verbose ) { elog_notify( 0, "Creating rrdfile %s\n", rrd ); } sprintf( command, "create %s -b %d -s %f %s", rrd, (int) floor( start_time ), Status_stepsize_sec, datasource ); for( i = 0; i < maxtbl( rras ); i++ ) { strcat( command, " " ); strcat( command, (char *) gettbl( rras, i ) ); } if( VeryVerbose ) { elog_notify( 0, "Issuing rrdtool command: '%s'\n", command ); } fprintf( Rrdfp, "%s\n", command ); /* Disable response printing for now since popen() bi-directional pipes are not supported across all platforms: if( VeryVerbose ) { resp_ptr = getaline( Rrdfp, response, STRSZ ); if( resp_ptr == (char *) NULL ) { elog_notify( 0, "%s\n", "(null)" ); } else { elog_notify( 0, "%s\n", resp_ptr ); } } */ setarr( Rrd_files, key, strdup( rrd ) ); } if( VeryVerbose ) { elog_notify( 0, "Recording time '%f' value '%f' from '%s:%s:%s' in '%s'\n", time, val, net, sta, dls_var, rrd ); } if( CacheDaemon == NULL ) { sprintf( cacheopt, "%s", "" ); } else { sprintf( cacheopt, "--daemon=%s", CacheDaemon ); } sprintf( command, "update %s %s %d:%f", cacheopt, rrd, (int) floor( time ), val ); if( VeryVerbose ) { elog_notify( 0, "Issuing rrdtool command: '%s'\n", command ); } fprintf( Rrdfp, "%s\n", command ); /* Disable response printing for now since popen() bi-directional pipes are not supported across all platforms: if( VeryVerbose ) { resp_ptr = getaline( Rrdfp, response, STRSZ ); if( resp_ptr == (char *) NULL ) { elog_notify( 0, "%s\n", "(null)" ); } else { elog_notify( 0, "%s\n", resp_ptr ); } } */ }
static void archive_dlsvar( Dbptr db, char *net, char *sta, char *dls_var, char *dsparams, Tbl *rras, double time, double val ) { char key[STRSZ]; char *rrd; double start_time; Dbptr dbt; char datasource[STRSZ]; char command[STRSZ]; char response[STRSZ]; char *resp_ptr; int i; sprintf( key, "%s:%s:%s", net, sta, dls_var ); rrd = getarr( Rrd_files, key ); if( rrd == NULL || ! is_present( rrd ) ) { start_time = time - Status_stepsize_sec; dbt = db; dbt.record = dbaddnull( db ); dbputv( dbt, 0, "net", net, "sta", sta, "rrdvar", dls_var, "time", start_time, 0 ); trwfname( dbt, Rrdfile_pattern, &rrd ); sprintf( datasource, "DS:%s:%s", dls_var, dsparams ); if( Verbose ) { elog_notify( 0, "Creating rrdfile %s\n", rrd ); } sprintf( command, "create %s -b %d -s %f %s", rrd, (int) floor( start_time ), Status_stepsize_sec, datasource ); for( i = 0; i < maxtbl( rras ); i++ ) { strcat( command, " " ); strcat( command, (char *) gettbl( rras, i ) ); } fprintf( Rrdfp, "%s\n", command ); if( VeryVerbose ) { resp_ptr = getaline( Rrdfp, response, STRSZ ); if( resp_ptr == (char *) NULL ) { elog_notify( 0, "%s\n", "(null)" ); } else { elog_notify( 0, "%s\n", resp_ptr ); } } setarr( Rrd_files, key, rrd ); } if( VeryVerbose ) { elog_notify( 0, "Recording time '%f' value '%f' from '%s:%s:%s' in '%s'\n", time, val, net, sta, dls_var, rrd ); } sprintf( command, "update %s %d:%f", rrd, (int) floor( time ), val ); fprintf( Rrdfp, "%s\n", command ); if( VeryVerbose ) { resp_ptr = getaline( Rrdfp, response, STRSZ ); if( resp_ptr == (char *) NULL ) { elog_notify( 0, "%s\n", "(null)" ); } else { elog_notify( 0, "%s\n", resp_ptr ); } } }