static int get_token( char *source, char *next ) { static Hook *hook = 0; char *pattern = "</?[^>]+/?>"; long start; long nchars; int rc; rc = strcontains( source, pattern, &hook, &start, &nchars); if( rc == 0 ) { return XML2DB_NOTFOUND; } else if( rc < 0 ) { return XML2DB_ERROR; } if( *(source + start + nchars - 2) == '/' ) { return XML2DB_EMPTY; } else if( *(source + start + 1) == '/' ) { return XML2DB_END; } else { return XML2DB_START; } }
void* worker(void* filename) { char* fullFileName=(char*)malloc(sizeof(char)*MAXLINESIZE); strcpy(fullFileName,pathToDir); strcat(fullFileName,filename); FILE* file=fopen(fullFileName,"r"); if(!file) { printf("Could not open file %s, line number: %d",fullFileName,line_no); pthread_exit(NULL); } char c; int line_number=1; char* fileLine=(char*)malloc(sizeof(char)*MAXLINESIZE); while(c!=EOF) { int i=0; while(!feof(file) && (c=fgetc(file)) && c!=EOF && c!='\n' ) { fileLine[i]=c; i++; } fileLine[i]='\0'; if(strcontains(fileLine,keyword,strlen(fileLine),strlen(keyword))==1)//insert item { char* printLine=(char*)malloc(sizeof(char)*MAXLINESIZE); strcpy(printLine,fileLine); char* printFileName=(char*)malloc(sizeof(char)*MAXLINESIZE); strcpy(printFileName,filename); pthread_mutex_lock(&buffer_lock); insert_into_buffer(printFileName,line_number,printLine); pthread_mutex_unlock(&buffer_lock); } line_number++; } free(fileLine); fclose(file); free(filename); pthread_mutex_lock(&running_mutex); running_threads--; pthread_mutex_unlock(&running_mutex); free(fullFileName); pthread_exit(NULL); }
static void pfmorph( Pf *pf ) { Pf *dlspf; Pf *stapf; Tbl *stas; int ista; char *sta; char *opt_string; if( pfget( pf, "dls", (void **) &dlspf ) == PFINVALID ) { return; } stas = pfkeys( dlspf ); for( ista = 0; ista < maxtbl( stas ); ista++ ) { sta = gettbl( stas, ista ); if( pfget( dlspf, sta, (void **) &stapf ) == PFINVALID ) { continue; } if( ( opt_string = pfget_string( stapf, "opt" ) ) == (char *) NULL || ! strcmp( opt_string, "-" ) ) { pfset( stapf, "acok", "-" ); pfset( stapf, "api", "-" ); pfset( stapf, "isp1", "-" ); pfset( stapf, "isp2", "-" ); pfset( stapf, "ti", "-" ); } else { if( strcontains( opt_string, "acok", NULL, NULL, NULL ) ) { pfset( stapf, "acok", "1" ); } else { pfset( stapf, "acok", "0" ); } if( strcontains( opt_string, "api", NULL, NULL, NULL ) ) { pfset( stapf, "api", "1" ); } else { pfset( stapf, "api", "0" ); } if( strcontains( opt_string, "isp1", NULL, NULL, NULL ) ) { pfset( stapf, "isp1", "1" ); } else { pfset( stapf, "isp1", "0" ); } if( strcontains( opt_string, "isp2", NULL, NULL, NULL ) ) { pfset( stapf, "isp2", "1" ); } else { pfset( stapf, "isp2", "0" ); } if( strcontains( opt_string, "ti", NULL, NULL, NULL ) ) { pfset( stapf, "ti", "1" ); } else { pfset( stapf, "ti", "0" ); } } } freetbl( stas, 0 ); return; }
int main( int argc, char **argv ) { int c; int errflag = 0; int orb; int stop = 0; long nrecs; char *match = ".*/pf/st"; char *from = 0; char *statefile = 0; char *pfname = "orb2rrdc"; char *orbname; char *dbcache; char *rrdtool; char command[STRSZ]; char net[STRSZ]; char sta[STRSZ]; char rrdvar[STRSZ]; char key[STRSZ]; char path[FILENAME_MAX]; Dbptr db; Dbptr dbt; Pf *pf; char *Default_network; Tbl *dlslines; Arr *Dls_vars_dsparams; Arr *Dls_vars_rras; Tbl *Dls_vars_keys; char *line; char *dls_var; char *dsparams; Tbl *rras; int i; int j; OrbreapThr *ort; int pktid; char srcname[ORBSRCNAME_SIZE]; double time = 0; char *packet = 0; int nbytes = 0; int bufsize = 0; Packet *pkt = 0; int rc; char *s; Pf *dlspf; Tbl *dlspfkeys; char *element; Tbl *parts; double val; Pf *pfval = 0; elog_init( argc, argv ); while( ( c = getopt( argc, argv, "vVd:s:p:m:f:" ) ) != -1 ) { switch( c ) { case 'd': CacheDaemon = optarg; break; case 'f': from = optarg; break; case 'm': match = optarg; break; case 'p': pfname = optarg; break; case 's': statefile = optarg; break; case 'v': Verbose++; break; case 'V': VeryVerbose++; Verbose++; break; default: elog_complain( 0, "Unknown option '%c'\n", c ); errflag++; break; } } if( errflag || argc - optind != 2 ) { usage(); } if( Verbose ) { elog_notify( 0, "Starting at %s (%s $Revision$ $Date$)\n", zepoch2str( str2epoch( "now" ), "%D %T %Z", "" ), Program_Name ); } orbname = argv[optind++]; dbcache = argv[optind++]; pfread( pfname, &pf ); rrdtool = pfget_string( pf, "rrdtool" ); if( rrdtool == NULL || ! strcmp( rrdtool, "" ) ) { elog_die( 0, "Error: no rrdtool executable name specified in parameter file\n" ); } else if( ( rrdtool[0] == '/' && ! is_present( rrdtool ) ) || ( rrdtool[0] != '/' && ! datafile( "PATH", rrdtool ) ) ) { elog_die( 0, "Error: can't find rrdtool executable by name of '%s' (check PATH environment " "variable, or absolute path name if given)\n", rrdtool ); } else if( rrdtool[0] == '/' ) { sprintf( command, "%s -", rrdtool ); } else { sprintf( command, "rrdtool -" ); } Suppress_egrep = pfget_string( pf, "suppress_egrep" ); if( Suppress_egrep != NULL && strcmp( Suppress_egrep, "" ) ) { if( ! datafile( "PATH", "egrep" ) ) { elog_complain( 0, "Ignoring suppress_egrep parameter: can't find egrep on path\n" ); } else { sprintf( command, "%s 2>&1 | egrep -v '%s'", command, Suppress_egrep ); } } if( VeryVerbose ) { elog_notify( 0, "Executing command: %s\n", command ); } Rrdfp = popen( command, "w" ); if( Rrdfp == (FILE *) NULL ) { elog_die( 0, "Failed to open socket to rrdtool command\n" ); } orb = orbopen( orbname, "r&" ); if( orb < 0 ) { elog_die( 0, "Failed to open orb '%s' for reading. Bye.\n", orbname ); } orbselect( orb, match ); if( from != NULL && statefile == NULL ) { pktid = orbposition( orb, from ); if( Verbose ) { elog_notify( 0, "Positioned to packet %d\n", pktid ); } } else if( from != NULL ) { elog_complain( 0, "Ignoring -f in favor of existing state file\n" ); } if( statefile != NULL ) { stop = 0; exhume( statefile, &stop, 15, 0 ); orbresurrect( orb, &pktid, &time ); if( Verbose ) { elog_notify( 0, "Resurrecting state to pktid %d, time %s\n", pktid, s = strtime( time ) ); free( s ); } orbseek( orb, pktid ); } dbopen( dbcache, "r+", &db ); if( db.database < 0 ) { elog_die( 0, "Failed to open cache database '%s'. Bye.\n", dbcache ); } else { db = dblookup( db, "", "rrdcache", "", "" ); if( db.table < 0 ) { elog_die( 0, "Failed to lookup 'rrdcache' table in '%s'. Bye.\n", dbcache ); } } dbcrunch( db ); dbt = dbsubset( db, "endtime == NULL", NULL ); Rrd_files = newarr( 0 ); dbquery( dbt, dbRECORD_COUNT, &nrecs ); for( dbt.record = 0; dbt.record < nrecs; dbt.record++ ) { dbgetv( dbt, 0, "net", &net, "sta", &sta, "rrdvar", &rrdvar, NULL ); dbfilename( dbt, (char *) &path ); sprintf( key, "%s:%s:%s", net, sta, rrdvar ); if( ! is_present( path ) ) { elog_complain( 0, "WARNING: rrd file '%s', listed in database, does not exist. " "Removing database entry.\n", path ); dbmark( dbt ); } else { setarr( Rrd_files, key, strdup( path ) ); if( VeryVerbose ) { elog_notify( 0, "Re-using rrd file '%s' for '%s'\n", path, key ); } } } Rrdfile_pattern = pfget_string( pf, "rrdfile_pattern" ); Status_stepsize_sec = pfget_double( pf, "status_stepsize_sec" ); Default_network = pfget_string( pf, "default_network" ); dlslines = pfget_tbl( pf, "dls_vars" ); Dls_vars_dsparams = newarr( 0 ); Dls_vars_rras = newarr( 0 ); for( i = 0; i < maxtbl( dlslines ); i++ ) { line = gettbl( dlslines, i ); strtr( line, "\t", " " ); rras = split( line, ' ' ); dls_var = shifttbl( rras ); dsparams = shifttbl( rras ); setarr( Dls_vars_dsparams, dls_var, dsparams ); setarr( Dls_vars_rras, dls_var, rras ); } ort = orbreapthr_new( orb, -1., 0 ); for( ; stop == 0; ) { orbreapthr_get( ort, &pktid, srcname, &time, &packet, &nbytes, &bufsize ); if( statefile ) { rc = bury(); if( rc < 0 ) { elog_complain( 0, "Unexpected failure of bury command! " "(are there two orb2rrdc's running with the same state" "file?)\n" ); clear_register( 1 ); } } rc = unstuffPkt( srcname, time, packet, nbytes, &pkt ); if( rc == Pkt_pf ) { if( VeryVerbose ) { /* Parameter files generally too big for elog */ fprintf( stderr, "Received a parameter-file '%s' at %s\n%s\n\n", srcname, s = strtime( time ), pf2string( pkt->pf ) ); free( s ); } else if( Verbose ) { elog_notify( 0, "Received a parameter-file '%s' at %s\n", srcname, s = strtime( time ) ); free( s ); } pfmorph( pkt->pf ); if( VeryVerbose ) { fprintf( stderr, "Morphed parameter-file '%s' to interpret 'opt':\n%s\n\n", srcname, pf2string( pkt->pf ) ); } pfget( pkt->pf, "dls", (void **) &dlspf ); dlspfkeys = pfkeys( dlspf ); Dls_vars_keys = keysarr( Dls_vars_dsparams ); for( i = 0; i < maxtbl( dlspfkeys ); i++ ) { element = gettbl( dlspfkeys, i ); if( strcontains( element, "_", 0, 0, 0 ) ) { parts = split( (s = strdup( element )), '_' ); sprintf( net, "%s", (char *) gettbl( parts, 0 ) ); sprintf( sta, "%s", (char *) gettbl( parts, 1 ) ); free( s ); freetbl( parts, 0 ); } else { sprintf( net, "%s", Default_network ); sprintf( sta, "%s", element ); } for( j = 0; j < maxtbl( Dls_vars_keys ); j++ ) { dls_var = gettbl( Dls_vars_keys, j ); sprintf( key, "%s{%s}", element, dls_var ); if( pfresolve( dlspf, key, 0, &pfval ) < 0 ) { elog_complain( 0, "Unable to extract variable '%s' " "(not present or wrong type) from element '%s' " "in packet from '%s', timestamped '%s'; Skipping\n", key, element, srcname, s = strtime( time ) ); free( s ); pfval = 0; continue; } else if( pfval != (Pf *) NULL && pfval->value.s != (char *) NULL && ! strcmp( pfval->value.s, "-" ) ) { if( VeryVerbose ) { elog_notify( 0, "Non-floating point value '-' in variable '%s', " "in packet from '%s', timestamped '%s'; Skipping data point\n", key, srcname, s = strtime( time ) ); free( s ); } continue; } else { val = pfget_double( dlspf, key ); } archive_dlsvar( db, net, sta, dls_var, (char *) getarr( Dls_vars_dsparams, dls_var ), (Tbl *) getarr( Dls_vars_rras, dls_var ), time, val ); } } freetbl( dlspfkeys, 0 ); freetbl( Dls_vars_keys, 0 ); } else if( rc == Pkt_stash ) { ; /* Do nothing */ } else { if( Verbose ) { elog_notify( 0, "Received a packet that's not a parameter file " "(type '%d' from unstuffPkt); skipping\n", rc ); } } } }
static char * generate_sqltable_create( Dbptr db, long flags ) { char *table; char part[STRSZ]; void *stk = 0; Tbl *primary; Tbl *fields; long ifield; char *field; char field_a[STRSZ]; char field_b[STRSZ]; char *fnull; long fsize; long ftype; char *fformat; int precision; int scale; long longest = 0; if( db.table < 0 ) { return NULL; } dbquery( db, dbTABLE_NAME, &table ); pushstr( &stk, "CREATE TABLE `" ); pushstr( &stk, table ); pushstr( &stk, "`\n (\n" ); dbquery( db, dbTABLE_FIELDS, &fields ); applytbl( fields, find_longest, (void *) &longest ); if( ! ( flags & DB2SQL_OMIT_SYNC ) && longest < strlen( Db2sql_syncfield_name ) ) { longest = strlen( Db2sql_syncfield_name ); } for( ifield = 0; ifield < maxtbl( fields ); ifield++ ) { if( ifield > 0 ) { pushstr( &stk, ",\n" ); } field = gettbl( fields, ifield ); db = dblookup( db, "", table, field, "" ); pushstr( &stk, " `" ); pushstr( &stk, field ); pushstr( &stk, "`" ); pushstr( &stk, spaces( longest - strlen(field) + 2 ) ); dbquery( db, dbFIELD_SIZE, &fsize ); dbquery( db, dbFIELD_TYPE, &ftype ); dbquery( db, dbFIELD_FORMAT, &fformat ); dbquery( db, dbNULL, &fnull ); memset( part, '\0', STRSZ ); switch( ftype ) { case dbSTRING: if( fsize < 256 ) { sprintf( part, "CHAR(%ld)", fsize ); } else { sprintf( part, "TEXT(%ld)", fsize ); } pushstr( &stk, part ); break; case dbREAL: case dbTIME: if( fnull != (char *) NULL && strcontains( fnull, "[eE]", 0, 0, 0 ) ) { sprintf( part, "DOUBLE" ); } else { sscanf( fformat, "%%%d.%d", &precision, &scale ); sprintf( part, "DECIMAL(%d,%d)", precision, scale ); } pushstr( &stk, part ); break; case dbINTEGER: case dbYEARDAY: sprintf( part, "INTEGER(%ld)", fsize ); pushstr( &stk, part ); break; case dbDBPTR: pushstr( &stk, "CHAR(32)" ); break; } /* Disallow defaults for SQL TEXT fields */ if( fnull != (char *) NULL && strncmp( part, "TEXT", 4 ) ) { pushstr( &stk, " DEFAULT " ); if( ftype == dbSTRING ) { pushstr( &stk, "'" ); pushstr( &stk, fnull ); pushstr( &stk, "'" ); } else { pushstr( &stk, fnull ); } } } if( ! ( flags & DB2SQL_OMIT_SYNC ) ) { pushstr( &stk, ",\n" ); pushstr( &stk, " `" ); pushstr( &stk, Db2sql_syncfield_name ); pushstr( &stk, "`" ); pushstr( &stk, spaces( longest - strlen(Db2sql_syncfield_name) + 2 ) ); pushstr( &stk, DB2SQL_SYNCFIELD_SPEC ); } dbquery( db, dbPRIMARY_KEY, &primary ); if( maxtbl( primary ) > 0 ) { pushstr( &stk, ",\n PRIMARY KEY (" ); for( ifield = 0; ifield < maxtbl( primary ); ifield++ ) { if( ifield > 0 ) { pushstr( &stk, ", " ); } field = gettbl( primary, ifield ); if( strcontains( field, "::", 0, 0, 0 ) ) { strsub( field, "::", " ", field ); sscanf( field, "%s %s", field_a, field_b ); pushstr( &stk, "`" ); pushstr( &stk, field_a ); pushstr( &stk, "`" ); /* end-of-range keys can be NULL in Datascope, so don't use it as primary in SQL: pushstr( &stk, ", `" ); pushstr( &stk, field_b ); pushstr( &stk, "`" ); */ } else { pushstr( &stk, "`" ); pushstr( &stk, field ); pushstr( &stk, "`" ); } } pushstr( &stk, ")" ); } pushstr( &stk, "\n );\n" ); return popstr( &stk, 1 ); }
static Tbl * get_fieldnames( Dbptr db, int flags ) { Tbl *fieldnames; Tbl *view_tables; Tbl *table_fields; char *tablename; char *fieldname; char afield[STRSZ]; Dbvalue result; int itable; int ifield; static Hook *hook = 0; int start; int nchars; int is_view; fieldnames = newtbl( 0 ); view_tables = newtbl( 0 ); dbquery( db, dbTABLE_IS_VIEW, &is_view ); if( is_view ) { dbquery( db, dbVIEW_TABLES, &view_tables ); view_tables = duptbl( view_tables, (void *(*)(void *)) strdup ); } else { dbquery( db, dbTABLE_NAME, &result ); view_tables = strtbl( strdup( result.t ), 0 ); } for( itable = 0; itable < maxtbl( view_tables ); itable++ ) { tablename = gettbl( view_tables, itable ); db = dblookup( db, "", tablename, "", "" ); if( flags & DBXML_PRIMARY ) { dbquery( db, dbPRIMARY_KEY, &table_fields ); } else { dbquery( db, dbTABLE_FIELDS, &table_fields ); } for( ifield = 0; ifield < maxtbl( table_fields ); ifield++ ) { fieldname = gettbl( table_fields, ifield ); if( strcontains( fieldname, "::", &hook, &start, &nchars ) ) { strcpy( afield, fieldname ); afield[start] = '\0'; fprintf( stderr, "SCAFFOLD: adding %s\n", afield); add_fieldname( fieldnames, tablename, afield ); strcpy( afield, fieldname + start + 2 ); fprintf( stderr, "SCAFFOLD: adding %s\n", afield); add_fieldname( fieldnames, tablename, afield ); } else { add_fieldname( fieldnames, tablename, fieldname ); } } } freetbl( view_tables, free ); return fieldnames; }