#include "common.h" #include "ZString.h" #include "ZReader.h" #include "ZTimer.h" #include "ZScanner.h" #include "ZRegexScanner.h" #include "ZCatScanner.h" #include "ZFarmScanner.h" long asMB(double n) { return (long)(n / (1024 * 1024)); } int rateMB(double r, long dt) { if (0 == dt) { return 0; } r /= dt; // bytes per millisecond r *= 1000; // bytes per second r /= 1024 * 1024; // megabytes per second return (int)r; // fraction is not significant } // Report rates only if somewhat meaningful void reportRate(ZScanner& scanner, ZTimer& t) { int v = rateMB(scanner.cbTotal, t.elapsed()); if (1 < v) { fprintf(stderr,"Scanned %d MB/s\n",v); } } void doRead(int ac, char** av) { ZTimer t; ZScanner scanner; ZReader::scanFiles(scanner, 1, ac, av); t.split(); fprintf( stderr, "Elapsed (ms): %ld" ", total (MB): %ld" ", lines: %ld" "\n", (long)t.elapsed(), asMB(scanner.cbTotal), (long)scanner.nLines ); reportRate(scanner, t); } void doGrep(int ac, char** av) { ZTimer t; ZRegexScanner scanner; VERIFY(scanner.setPattern("GET /weblog/([^ ]*) ")); ZReader::scanFiles(scanner, 1, ac, av); t.split(); fprintf( stderr, "Elapsed (ms): %ld" ", total (MB): %ld" ", lines: %ld" ", matched: %ld" "\n", (long)t.elapsed(), asMB(scanner.cbTotal), (long)scanner.nLines, (long)scanner.nMatched ); reportRate(scanner, t); } void doCatNull(int ac, char** av) { ZTimer t; ZCatScanner scanner; VERIFY(scanner.openTo("/dev/null")); ZReader::scanFiles(scanner, 1, ac, av); t.split(); fprintf( stderr, "Elapsed (ms): %ld" ", total (MB): %ld" ", lines: %ld" "\n", (long)t.elapsed(), asMB(scanner.cbTotal), (long)scanner.nLines ); reportRate(scanner, t); } void doFarm(int ac, char** av, int n, const char* sInterpreter, const char* sScript) { ZTimer t; ZFarmScanner scanner; VERIFY(scanner.openTo(n,sInterpreter,sScript)); ZReader::scanFiles(scanner, 1, ac, av); t.split(); fprintf( stderr, "Elapsed (ms): %ld" ", total (MB): %ld" ", lines: %ld" "\n", (long)t.elapsed(), asMB(scanner.cbTotal), (long)scanner.nLines ); reportRate(scanner, t); } int main(int ac, char** av) { ZTimer t; doRead(ac,av); //doGrep(ac,av); //doCatNull(ac,av); //doFarm(ac,av,4,"/usr/bin/wc"); //doFarm(ac, av, 4, "/usr/bin/perl", "reduce.pl"); t.split(); fprintf(stderr,"Final elapsed (ms): %ld\n",(long)t.elapsed()); return 0; }