Ignore:
Timestamp:
Feb 27, 2013 11:34:13 PM (10 years ago)
Author:
gah
Message:

rework of stats log file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/nanovis.cpp

    r3376 r3377  
    324324
    325325int
    326 NanoVis::openStatsFile(const char *path)
     326NanoVis::getStatsFile(Tcl_Obj *objPtr)
    327327{
    328328    Tcl_DString ds;
    329     char **argv;
    330     int argc;
     329    Tcl_Obj **objv;
     330    int objc;
    331331    int i;
    332     const char *fileName;
    333     char string[200];
    334 
     332    char fileName[33];
     333    md5_state_t state;
     334    md5_byte_t digest[16];
     335    char *string;
     336
     337    if (objPtr == NULL) {
     338        return statsFile;
     339    }
     340    if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK) {
     341        return -1;
     342    }
     343    Tcl_ListObjAppendElement(interp, objPtr, Tcl_NewStringObj("pid", 3));
     344    Tcl_ListObjAppendElement(interp, objPtr, Tcl_NewIntObj(getpid()));
     345    string = Tcl_GetStringFromObj(objPtr, &length);
     346
     347    md5_init(&state);
     348    md5_append(&state, (const md5_byte_t *)string, length);
     349    md5_finish(&state, digest);
     350    for (i = 0; i < 16; i++) {
     351        sprintf(fileName + i * 2, "%02x", digest[i]);
     352    }
    335353    Tcl_DStringInit(&ds);
    336354    Tcl_DStringAppend(&ds, STATSDIR, -1);
    337     SplitPath(path, &argc, &argv);
    338     for (i = 0; i < argc; i++) {
    339         char *p;
    340 
    341         Tcl_DStringAppend(&ds, "/", 1);
    342         Tcl_DStringAppend(&ds, argv[i], -1);
    343         p = Tcl_DStringValue(&ds);
    344         if (access(p, X_OK) != 0) {
    345             mkdir(p, 0770);
    346         }
    347     }
    348355    Tcl_DStringAppend(&ds, "/", 1);
    349     sprintf(string, "%d", getpid());
    350     Tcl_DStringAppend(&ds, string, -1);
    351     fileName = Tcl_DStringValue(&ds);
    352     free(argv);
    353     statsFile = open(fileName, O_EXCL | O_CREAT | O_WRONLY, 0600);
     356    Tcl_DStringAppend(&dsm fileName, 32);
     357    path = Tcl_DStringValue(&ds);
     358
     359    statsFile = open(path, O_EXCL | O_CREAT | O_WRONLY, 0600);
    354360    Tcl_DStringFree(&ds);
    355361    if (statsFile < 0) {
     
    361367
    362368int
    363 NanoVis::writeToStatsFile(const char *s, size_t length)
    364 {
    365     ssize_t numWritten;
    366 
    367     if (statsFile >= 0) {
    368         numWritten = write(statsFile, s, length);
     369NanoVis::writeToStatsFile(int f, const char *s, size_t length)
     370{
     371    if (f >= 0) {
     372        ssize_t numWritten;
     373
     374        numWritten = write(f, s, length);
    369375        if (numWritten == (ssize_t)length) {
    370             close(dup(statsFile));
     376            close(dup(f));
    371377        }
    372378    }
     
    381387    Tcl_DString ds;
    382388    int result;
     389    int f;
    383390
    384391    {
     
    483490    }
    484491    Tcl_DStringAppend(&ds, "\n", -1);
    485     result = NanoVis::writeToStatsFile(Tcl_DStringValue(&ds),
     492    f = NanoVis::getStatsFile(NULL);
     493    result = NanoVis::writeToStatsFile(f, Tcl_DStringValue(&ds),
    486494                                       Tcl_DStringLength(&ds));
     495    close(f);
    487496    Tcl_DStringFree(&ds);
    488497    return result;
     
    20042013    NanoVis::stdin = stdin;
    20052014
    2006     fprintf(stdout, "NanoVis %s\n", NANOVIS_VERSION);
     2015    fprintf(stdout, "NanoVis %s (build %s)\n", NANOVIS_VERSION, SVN_VERSION);
    20072016    fflush(stdout);
    20082017
Note: See TracChangeset for help on using the changeset viewer.