Changeset 1155


Ignore:
Timestamp:
Sep 15, 2008 1:58:33 PM (16 years ago)
Author:
gah
Message:

added statistics for pymol

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/pymolproxy/pymolproxy.c

    r1152 r1155  
    4747
    4848#define IO_TIMEOUT (30000)
     49#define STATSFILE       "/var/tmp/pymolproxy.csv"
    4950
    5051typedef struct {
     
    107108    struct timeval tv;
    108109    double start, finish;
     110    int result;
    109111
    110112    gettimeofday(&tv, NULL);
    111113    start = ((double)tv.tv_sec) + ((double)tv.tv_usec * 1.0e-6);
    112     Tcl_Eval(interp, Tcl_DStringValue(dsPtr));
     114    result = Tcl_Eval(interp, Tcl_DStringValue(dsPtr));
    113115    trace("Executed (%s)", Tcl_DStringValue(dsPtr));
    114116    Tcl_DStringSetLength(dsPtr, 0);
     
    118120    statsPtr->cmdTime += finish - start;
    119121    statsPtr->nCommands++;
    120 }
     122    return result;
     123}
     124
     125#ifdef KEEPSTATS
    121126
    122127static int
     
    125130    struct timeval tv;
    126131    double start, finish;
    127     int lockf;
    128     FILE *f;
    129     char *lockFileName, *statsFileName;
     132    int f;
     133    size_t length;
     134    char buf[4000];
    130135
    131136    /* Get ending time.  */
     
    134139    tv = statsPtr->start;
    135140    start = ((double)tv.tv_sec) + ((double)tv.tv_usec * 1.0e-6);
    136     for(;;) {
    137         lockf = open(lockFileName, O_EXCL | O_CREAT | O_TRUNC | O_WRONLY, 0600);
    138         if (lockf >= 0) {
    139             break;
    140         }
    141         if (errno != EEXIST) {
    142             fprintf(stderr, "can't open lock file \"%s\"\n: %s\n",
    143                     lockFileName, strerror(errno));
    144             return 0;
    145         }
    146         /* Need to turn off alarms first. */
    147         alarm(0);
    148         sleep(1);
    149     }
    150     f = fopen(statsFileName, "a+");
    151     if (f == NULL) {
    152         fprintf(f, "\"pymolproxy\",%d,%d,%d,%d,%d,%d,%g,%g",
    153                 getpid(),
    154                 code,
    155                 statsPtr->date,
    156                 statsPtr->nFrames,
    157                 statsPtr->nBytes,
    158                 statsPtr->nCommands,
    159                 statsPtr->cmdTime,
    160                 finish - start);
    161         fclose(f);
    162     }
    163     close(lockf);
    164     unlink(lockFileName);
     141    sprintf(buf, "\"pymolproxy\",%d,%d,%d,%d,%d,%d,%g,%g",
     142            getpid(),
     143            code,
     144            statsPtr->date,
     145            statsPtr->nFrames,
     146            statsPtr->nBytes,
     147            statsPtr->nCommands,
     148            statsPtr->cmdTime,
     149            finish - start);
     150    f = open(STATSFILE, O_APPEND | O_CREAT | O_WRONLY, 0600);
     151    if (f < 0) {
     152        return 0;
     153    }
     154    length = strlen(buf);
     155    if (write(f, buf, length) != length) {
     156        return 0;
     157    }
     158    close(f);
    165159    return 1;
    166160}
     161#endif
    167162
    168163INLINE static void
     
    13611356                   
    13621357                    if (ch == '\n' && Tcl_CommandComplete(Tcl_DStringValue(&cmdbuffer))) {
    1363                         ExecuteCommand(interp, &cmdbuffer, &stats);
     1358                        int result;
     1359
     1360                        result = ExecuteCommand(interp, &cmdbuffer, &stats);
    13641361                        if (timeout == 0) status = 0; // send update
    13651362                    }
     
    14231420   
    14241421    status = waitpid(pid, &result, WNOHANG);
     1422#ifdef KEEPSTATS
    14251423    WriteStats(&stats, status);
     1424#endif
    14261425    if (status == -1) {
    14271426        trace("pymolproxy: error waiting on pymol server to exit (%d)\n", errno);
Note: See TracChangeset for help on using the changeset viewer.