int main (int argc, char **argv) { int c, errflg = 0; char *in, *out; int orbin, orbout; double maxpkts = VERY_LARGE_NUMBER ; int quit; char *pktmatch = strdup(".*/pf/evtinfo"), *reject = 0; int nmatch; int specified_after = 0; double after = 0.0, until = VERY_LARGE_NUMBER ; double start_time, end_time, delta_t ; double totpkts = 0, totbytes = 0; Flags flags; static int last_pktid = -1; static double last_pkttime = 0.0; char *statefile = 0; double last_burial = 0.0; double decent_interval = 300.0; int mode = PKT_NOSAMPLES; int rcode; char srcname[ORBSRCNAME_SIZE]; double pkttime = 0.0 ; int pktid; int nbytes; char *packet = 0; int packetsz = 0; Packet *unstuffed = 0; Pf *pf; Tbl *tbl; Arr *arr; char *arrkey; char *pffilename; Tbl *channels; char *net; char *sta; char *chan; char netstachan[ORBSRCNAME_SIZE]; Srcname parts; double maxtime,mintime,starttime,triggertime,duration,min_g,max_g,snr; char *datalogger; int evtfilesize,channelno,maxcts,mincts; char *errors,*evtfilename,*ft,*filter,*srcid; char *line; int i; Pf *pfnew; Dbptr db; int put_tests=0; char *chanmatch=0; Hook *hook=0; char *tdummy=0; char *match=malloc(100); memset (&flags, 0, sizeof (flags)); elog_init (argc, argv); elog_notify (0, "%s $Revision: 1.5 $ $Date: 2005/05/10 07:34:43 $\n", Program_Name); while ((c = getopt (argc, argv, "m:n:r:S:c:tvV")) != -1) { switch (c) { case 'm': match = optarg; sprintf(pktmatch,"%s/pf/evtinfo",match); break; case 'c': chanmatch = optarg; break; case 't': put_tests = 1; break; case 'n': maxpkts = atoi (optarg); break; case 'r': reject = optarg; break; case 'S': statefile = optarg; break; case 'v': flags.verbose++; break; case 'V': flags.verbose++; flags.verbose++; break; case '?': errflg++; } } if (errflg || argc - optind < 2 || argc - optind > 4) usage (); in = argv[optind++]; out = argv[optind++]; if (argc > optind) { after = str2epoch (argv[optind++]); specified_after = 1; if (argc > optind) { until = str2epoch (argv[optind++]); if (until < after) { until += after ; } } } if ((orbin = orbopen (in, "r&")) < 0) die (0, "Can't open input '%s'\n", in); if (statefile != 0) { char *s; if (exhume (statefile, &quit, RT_MAX_DIE_SECS, 0) != 0) { elog_notify (0, "read old state file\n"); } if (orbresurrect (orbin, &last_pktid, &last_pkttime) == 0) { elog_notify (0, "resurrection successful: repositioned to pktid #%d @ %s\n", last_pktid, s = strtime (last_pkttime)); free (s); } else { complain (0, "resurrection unsuccessful\n"); } } if ((orbout = orbopen (out, "w&")) < 0) { die (0, "Can't open output '%s'\n", out); } if (pktmatch) { nmatch = orbselect (orbin, pktmatch); } if (nmatch < 0) { die (1, "select '%s' returned %d\n", pktmatch, nmatch); } if (reject) { nmatch = orbreject (orbin, reject); } if (nmatch < 0) { elog_die (1, "reject '%s' returned %d\n", reject, nmatch); } else { if (flags.verbose) { elog_notify (1,"%d sources selected\n", nmatch); } } if (specified_after) { pktid = orbafter (orbin, after); if (pktid < 0) { char *s; elog_complain (1, "seek to %s failed\n", s = strtime (after)); free (s); pktid = forbtell (orbin); elog_complain (1,"pktid is still #%d\n", pktid); } else { if (flags.verbose) elog_notify (1,"new starting pktid is #%d\n", pktid); } } start_time = now (); db = dbtmp("rt1.0"); while (!quit && pkttime < until && totpkts < maxpkts) { rcode = orbreap (orbin, &pktid, srcname, &pkttime, &packet, &nbytes, &packetsz); switch (rcode) { case 0: totpkts++; totbytes += nbytes; if (flags.verbose>2) { showPkt (pktid, srcname, pkttime, packet, nbytes, stdout, mode); } if (statefile != 0 && last_pkttime - last_burial > decent_interval) { bury (); last_burial = pkttime; } if ((unstuffPkt (srcname, pkttime, packet, nbytes, &unstuffed))==Pkt_pf) { pf = unstuffed->pf; tbl= pfkeys(pf); arrkey= gettbl(tbl,0); pfget(pf,arrkey,&pfnew); datalogger= pfget_string(pfnew,"datalogger"); duration= pfget_double(pfnew,"duration"); errors= pfget_string(pfnew,"errors"); evtfilename= pfget_string(pfnew,"evtfilename"); evtfilesize= pfget_int(pfnew,"evtfilesize"); ft= pfget_string(pfnew,"ft"); starttime= pfget_double(pfnew,"time"); triggertime= pfget_double(pfnew,"triggertime"); channels=pfget_tbl(pfnew,"channels"); if (strcasecmp(ft,"no")==0 || put_tests == 1) { for (i=0; i<maxtbl(channels);i++) { line=gettbl(channels,i); sscanf(line,"%s %d %lf %d %lf %lf %d %lf", netstachan,&channelno,&maxtime,&maxcts,&max_g,&mintime,&mincts,&min_g); split_srcname(netstachan,&parts); strcpy(parts.src_suffix,"GENC"); join_srcname(&parts,netstachan); if (flags.verbose>1) printf("%s,%s\n", netstachan,tdummy=strtime(triggertime)); if (chanmatch == 0 || strmatches(parts.src_chan,chanmatch,&hook)) { if (flags.verbose) elog_notify(1,"putting detev for %s,%s\n", netstachan,tdummy=strtime(triggertime)); db=dblookup(db,0,"detev",0,"dbSCRATCH"); dbputv(db,0,"sta",parts.src_sta,"chan",parts.src_chan, "filter",K2_FILTER, "time", triggertime, "tron", starttime - triggertime, "troff", starttime - triggertime + duration, "iphase","K2", "snr",(max_g * 1000.0 - min_g * 1000.0)/2.0, 0); db2orbpkt(db,orbout); } else { if (flags.verbose>1) elog_notify(1,"ignoring %s,%s\n", netstachan,tdummy=strtime(triggertime)); } } } } last_pktid = pktid; last_pkttime = pkttime; } } if (statefile != 0) bury (); end_time = now (); delta_t = end_time - start_time; if (flags.verbose>1) { if (totpkts > 0) { elog_notify (1,"\n%.0f %.2f byte packets (%.1f kbytes) in %.3f seconds\n\t%10.3f kbytes/s\n\t%10.3f kbaud\n\t%10.3f pkts/s\n", totpkts, totbytes / totpkts, totbytes / 1024, delta_t, totbytes / delta_t / 1024, totbytes / delta_t / 1024 * 8, totpkts / delta_t); } else { elog_notify (1,"\nno packets read\n"); } } if (orbclose (orbin)) { elog_complain (1, "error closing read orb\n"); } if (orbclose (orbout)) { elog_complain (1, "error closing write orb\n"); } return 0; }
static PyObject * python_orbclose( PyObject *self, PyObject *args ) { char *usage = "Usage: _orbclose(orb)\n"; int orbfd; int rc; if( ! PyArg_ParseTuple( args, "i", &orbfd ) ) { if( ! PyErr_Occurred() ) { PyErr_SetString( PyExc_RuntimeError, usage ); } return NULL; } delete_Orb_relic( orbfd ); rc = orbclose( orbfd ); if( rc < 0 ) { PyErr_SetString( PyExc_RuntimeError, "error closing orb connection" ); return NULL; } return Py_BuildValue( "" ); }
int main(int argc, char **argv) { Pf *pf; char *orbname, *dbname, *expr, *table, *rowtemp, verbose; int orb, totalrecords, records, record; Dbptr db, dbinput, dbscratch; elog_init(argc,argv); /* initialize variables */ verbose = 0; expr = NULL; loop = 0; record = 0; totalrecords = 0; rowtemp = malloc(ROW_MAX_LENGTH); if (rowtemp == NULL) die(1,"malloc() error.\n"); /* read in command line options */ { int c; unsigned char errflg = 0; while (( c = getopt( argc, argv, "vl:s:")) != -1) switch (c) { case 'l': loop = atoi(optarg); sigset(SIGINT,done); break; case 's': expr = optarg; break; case 'v': verbose = 1; break; case '?': errflg++; } if ( (argc - optind) != 3 ) errflg++; if (errflg) { elog_die(0,"usage: %s [-v] [-s subset] [-l delay] db table orb\n",argv[0]); } dbname = argv[optind++]; table = argv[optind++]; orbname= argv[optind++]; } /* start our work */ if ( dbopen ( dbname, "r+", &dbinput ) == dbINVALID ) { elog_die(1,"Couldn't open input database, \"%s\".\n",dbname); } dbinput = dblookup( dbinput, 0, table, 0, 0); dbscratch = dblookup( dbinput, 0, 0, 0, "dbSCRATCH"); if ( dbinput.table == dbINVALID ) { elog_die(1,"Couldn't lookup the table \"%s\" in the database \"%s\".\n", table,dbname); } if ( dbscratch.record == dbINVALID ) { elog_die(1,"Couldn't lookup the scratch record in the database \"%s\".\n", dbname); } if ( dbquery( dbinput, dbRECORD_COUNT, &records) < 0 ) { elog_die(1,"dbquery dbRECORD_COUNT failed.\n"); } orb = orbopen( orbname, "w&" ); if ( orb == -1 ) { elog_die(1,"Couldn't open the orb, \"%s\".\n",orbname); } if (loop == 0) loop = -1; while (loop) { db = dbinput; if ( expr != NULL) db = dbsubset( db, expr, 0 ); db.record = record; if ( dbquery( db, dbRECORD_COUNT, &records) < 0 ) elog_die(1,"dbquery dbRECORD_COUNT failed.\n"); for (;db.record<records;db.record++) { if (verbose) printf("writing record %d to orb...\n",db.record); /* copy the row from what could be a view into the scratch record of the input database, so as to avoid putting a view on the ORB */ if ( dbget( db, rowtemp) == dbINVALID ) die(1,"dbget error.\n"); if ( dbput( dbscratch, rowtemp) == dbINVALID ) die(1,"dbput error.\n"); if ( db2orbpkt( dbscratch, orb ) < 0 ) { complain ( 0, "Couldn't write record #%d to %s.\n", db.record, orbname); } totalrecords++; } record = db.record; /* if a subset expression was supplied, then we're working with a view, which should be freed. */ if ( expr != NULL) dbfree(db); if ( loop == -1 ) loop = 0; sleep(loop); } printf("posted %d records from database %s to orb %s.\n",totalrecords,dbname,orbname); dbclose(dbinput); orbclose(orb); free(rowtemp); }