Mercurial > hg > audiodb
changeset 76:f6cc39635877
Make the status request Web Services enabled.
author | mas01cr |
---|---|
date | Mon, 01 Oct 2007 13:54:22 +0000 |
parents | a7b7a1ca68b8 |
children | c4389e8f4461 |
files | audioDB.cpp audioDB.h audioDBws.h |
diffstat | 3 files changed, 108 insertions(+), 63 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB.cpp Mon Oct 01 13:32:55 2007 +0000 +++ b/audioDB.cpp Mon Oct 01 13:54:22 2007 +0000 @@ -10,42 +10,44 @@ exit(1); } -audioDB::audioDB(const unsigned argc, char* const argv[], adb__queryResult *adbQueryResult): - dim(0), - dbName(0), - inFile(0), - key(0), - trackFileName(0), - trackFile(0), - command(0), - timesFileName(0), - timesFile(0), - dbfid(0), - infid(0), - db(0), - indata(0), - dbH(0), - fileTable(0), - trackTable(0), - dataBuf(0), - l2normTable(0), - qNorm(0), - timesTable(0), - verbosity(1), - queryType(O2_FLAG_POINT_QUERY), - pointNN(O2_DEFAULT_POINTNN), - trackNN(O2_DEFAULT_TRACKNN), - sequenceLength(16), - sequenceHop(1), - queryPoint(0), - usingQueryPoint(0), - usingTimes(0), - isClient(0), - isServer(0), - port(0), - timesTol(0.1), - radius(0){ - +#define O2_AUDIODB_INITIALIZERS \ + dim(0), \ + dbName(0), \ + inFile(0), \ + key(0), \ + trackFileName(0), \ + trackFile(0), \ + command(0), \ + timesFileName(0), \ + timesFile(0), \ + dbfid(0), \ + infid(0), \ + db(0), \ + indata(0), \ + dbH(0), \ + fileTable(0), \ + trackTable(0), \ + dataBuf(0), \ + l2normTable(0), \ + qNorm(0), \ + timesTable(0), \ + verbosity(1), \ + queryType(O2_FLAG_POINT_QUERY), \ + pointNN(O2_DEFAULT_POINTNN), \ + trackNN(O2_DEFAULT_TRACKNN), \ + sequenceLength(16), \ + sequenceHop(1), \ + queryPoint(0), \ + usingQueryPoint(0), \ + usingTimes(0), \ + isClient(0), \ + isServer(0), \ + port(0), \ + timesTol(0.1), \ + radius(0) + +audioDB::audioDB(const unsigned argc, char* const argv[]): O2_AUDIODB_INITIALIZERS +{ if(processArgs(argc, argv)<0){ printf("No command found.\n"); cmdline_parser_print_version (); @@ -74,7 +76,7 @@ if(isClient) ws_query(dbName, inFile, (char*)hostport); else - query(dbName, inFile, adbQueryResult); + query(dbName, inFile); else if(O2_ACTION(COM_STATUS)) if(isClient) @@ -92,6 +94,20 @@ error("Unrecognized command",command); } +audioDB::audioDB(const unsigned argc, char* const argv[], adb__queryResult *adbQueryResult): O2_AUDIODB_INITIALIZERS +{ + processArgs(argc, argv); + assert(O2_ACTION(COM_QUERY)); + query(dbName, inFile, adbQueryResult); +} + +audioDB::audioDB(const unsigned argc, char* const argv[], adb__statusResult *adbStatusResult): O2_AUDIODB_INITIALIZERS +{ + processArgs(argc, argv); + assert(O2_ACTION(COM_STATUS)); + status(dbName, adbStatusResult); +} + audioDB::~audioDB(){ // Clean up if(indata) @@ -804,16 +820,25 @@ munmap(db,O2_DEFAULTDBSIZE); } +// FIXME: this can't propagate the sequence length argument (used for +// dudCount). See adb__status() definition for the other half of +// this. -- CSR, 2007-10-01 void audioDB::ws_status(const char*dbName, char* hostport){ struct soap soap; - int adbStatusResult; + adb__statusResult adbStatusResult; // Query an existing adb database soap_init(&soap); - if(soap_call_adb__status(&soap,hostport,NULL,(char*)dbName,adbStatusResult)==SOAP_OK) - std::cout << "result = " << adbStatusResult << std::endl; - else + if(soap_call_adb__status(&soap,hostport,NULL,(char*)dbName,adbStatusResult)==SOAP_OK) { + cout << "numFiles = " << adbStatusResult.numFiles << endl; + cout << "dim = " << adbStatusResult.dim << endl; + cout << "length = " << adbStatusResult.length << endl; + cout << "dudCount = " << adbStatusResult.dudCount << endl; + cout << "nullCount = " << adbStatusResult.nullCount << endl; + cout << "flags = " << adbStatusResult.flags << endl; + } else { soap_print_fault(&soap,stderr); + } soap_destroy(&soap); soap_end(&soap); @@ -843,21 +868,9 @@ } -void audioDB::status(const char* dbName){ +void audioDB::status(const char* dbName, adb__statusResult *adbStatusResult){ if(!dbH) initTables(dbName, 0, 0); - - // Update Header information - cout << "num files:" << dbH->numFiles << endl; - cout << "data dim:" << dbH->dim <<endl; - if(dbH->dim>0){ - cout << "total vectors:" << dbH->length/(sizeof(double)*dbH->dim)<<endl; - cout << "vectors available:" << (timesTableOffset-(dataoffset+dbH->length))/(sizeof(double)*dbH->dim) << endl; - } - cout << "total bytes:" << dbH->length << " (" << (100.0*dbH->length)/(timesTableOffset-dataoffset) << "%)" << endl; - cout << "bytes available:" << timesTableOffset-(dataoffset+dbH->length) << " (" << - (100.0*(timesTableOffset-(dataoffset+dbH->length)))/(timesTableOffset-dataoffset) << "%)" << endl; - cout << "flags:" << dbH->flags << endl; unsigned dudCount=0; unsigned nullCount=0; @@ -865,13 +878,35 @@ if(trackTable[k]<sequenceLength){ dudCount++; if(!trackTable[k]) - nullCount++; + nullCount++; } } - cout << "null count: " << nullCount << " small sequence count " << dudCount-nullCount << endl; + + if(adbStatusResult == 0) { + + // Update Header information + cout << "num files:" << dbH->numFiles << endl; + cout << "data dim:" << dbH->dim <<endl; + if(dbH->dim>0){ + cout << "total vectors:" << dbH->length/(sizeof(double)*dbH->dim)<<endl; + cout << "vectors available:" << (timesTableOffset-(dataoffset+dbH->length))/(sizeof(double)*dbH->dim) << endl; + } + cout << "total bytes:" << dbH->length << " (" << (100.0*dbH->length)/(timesTableOffset-dataoffset) << "%)" << endl; + cout << "bytes available:" << timesTableOffset-(dataoffset+dbH->length) << " (" << + (100.0*(timesTableOffset-(dataoffset+dbH->length)))/(timesTableOffset-dataoffset) << "%)" << endl; + cout << "flags:" << dbH->flags << endl; + + cout << "null count: " << nullCount << " small sequence count " << dudCount-nullCount << endl; + } else { + adbStatusResult->numFiles = dbH->numFiles; + adbStatusResult->dim = dbH->dim; + adbStatusResult->length = dbH->length; + adbStatusResult->dudCount = dudCount; + adbStatusResult->nullCount = nullCount; + adbStatusResult->flags = dbH->flags; + } } - void audioDB::dump(const char* dbName){ if(!dbH) initTables(dbName, 0, 0); @@ -2452,11 +2487,10 @@ // web services // SERVER SIDE -int adb__status(struct soap* soap, xsd__string dbName, xsd__int &adbCreateResult){ +int adb__status(struct soap* soap, xsd__string dbName, adb__statusResult &adbStatusResult){ char* const argv[]={"audioDB",COM_STATUS,"-d",dbName}; const unsigned argc = 4; - audioDB(argc,argv); - adbCreateResult=100; + audioDB(argc, argv, &adbStatusResult); return SOAP_OK; }
--- a/audioDB.h Mon Oct 01 13:32:55 2007 +0000 +++ b/audioDB.h Mon Oct 01 13:54:22 2007 +0000 @@ -157,7 +157,9 @@ unsigned getKeyPos(char* key); public: - audioDB(const unsigned argc, char* const argv[], adb__queryResult *adbQueryResult=0); + audioDB(const unsigned argc, char* const argv[]); + audioDB(const unsigned argc, char* const argv[], adb__queryResult *adbQueryResult); + audioDB(const unsigned argc, char* const argv[], adb__statusResult *adbStatusResult); ~audioDB(); int processArgs(const unsigned argc, char* const argv[]); void get_lock(int fd, bool exclusive); @@ -167,7 +169,7 @@ void insert(const char* dbName, const char* inFile); void batchinsert(const char* dbName, const char* inFile); void query(const char* dbName, const char* inFile, adb__queryResult *adbQueryResult=0); - void status(const char* dbName); + void status(const char* dbName, adb__statusResult *adbStatusResult=0); void ws_status(const char*dbName, char* hostport); void ws_query(const char*dbName, const char *trackKey, const char* hostport); void l2norm(const char* dbName);
--- a/audioDBws.h Mon Oct 01 13:32:55 2007 +0000 +++ b/audioDBws.h Mon Oct 01 13:54:22 2007 +0000 @@ -23,8 +23,17 @@ int *Spos; }; +class adb__statusResult { + unsigned numFiles; + unsigned dim; + unsigned length; + unsigned dudCount; + unsigned nullCount; + unsigned flags; +}; + // Print the status of an existing adb database -int adb__status(xsd__string dbName, xsd__int &adbCreateResult); +int adb__status(xsd__string dbName, adb__statusResult &adbStatusResult); // Query an existing adb database int adb__query(xsd__string dbName, xsd__string qKey, xsd__string keyList, xsd__string timesFileName, xsd__int qType, xsd__int qPos, xsd__int pointNN, xsd__int segNN, xsd__int segLen, adb__queryResult &adbQueryResult);