void checkOneDependency(struct joiner *joiner,
                        struct joinerDependency *dep, struct sqlConnection *conn, char *dbName)
/* Check out one dependency in one database. */
{
    char *tableToCheck = dep->table->table;
    if (sqlWildcardIn(tableToCheck))
    {
        errAbort("Can't handle wildCards in dependency tables line %d of %s",
                 dep->lineIx, joiner->fileName);
    }
    if (slNameInList(dep->table->dbList, dbName)
            && sqlTableExists(conn, tableToCheck))
    {
        time_t tableTime = sqlTableUpdateTime(conn, tableToCheck);
        struct joinerTable *dependsOn;
        for (dependsOn = dep->dependsOnList; dependsOn != NULL;
                dependsOn = dependsOn->next)
        {
            if (slNameInList(dependsOn->dbList, dbName))
            {
                if (!sqlTableExists(conn, dependsOn->table))
                {
                    warn("Error: %s.%s doesn't exist line %d of %s",
                         dbName, dependsOn->table,
                         dep->lineIx, joiner->fileName);
                }
                else
                {
                    time_t depTime = sqlTableUpdateTime(conn, dependsOn->table);
                    if (depTime > tableTime)
                    {
                        char *depStr = sqlUnixTimeToDate(&depTime, FALSE);
                        char *tableStr = sqlUnixTimeToDate(&tableTime, FALSE);

                        warn("Error: %s.%s updated after %s.%s line %d of %s",
                             dbName, dependsOn->table, dbName, tableToCheck,
                             dep->lineIx, joiner->fileName);
                        warn("\t%s vs. %s", depStr, tableStr);
                        freeMem(depStr);
                        freeMem(tableStr);
                    }
                }
            }
        }
    }
}
示例#2
0
文件: web.c 项目: elmargb/kentUtils
static void phoneHome()
{
static boolean beenHere = FALSE;
if (beenHere)  /* one at a time please */
    return;
beenHere = TRUE;

char *expireTime = cfgOptionDefault("browser.cgiExpireMinutes", "20");
unsigned expireMinutes = sqlUnsigned(expireTime);
expireSeconds = expireMinutes * 60;

char trashFile[PATH_LEN];
safef(trashFile, sizeof(trashFile), "%s/registration.txt", trashDir());

/* trashFile does not exist during command line execution */
if(fileExists(trashFile))	/* update access time for trashFile */
    {
    struct utimbuf ut;
    struct stat mystat;
    ZeroVar(&mystat);
    if (stat(trashFile,&mystat)==0)
	{
	ut.actime = clock1();
	ut.modtime = mystat.st_mtime;
	}
    else
	{
	ut.actime = ut.modtime = clock1();
	}
    (void) utime(trashFile, &ut);
    if (expireSeconds > 0)
	{
	(void) signal(SIGALRM, cgiApoptosis);
	(void) alarm(expireSeconds);	/* CGI timeout */
	}
    return;
    }

char *scriptName = cgiScriptName();
char *ip = getenv("SERVER_ADDR");
if (scriptName && ip)  /* will not be true from command line execution */
    {
    FILE *f = fopen(trashFile, "w");
    if (f)		/* rigamarole only if we can get a trash file */
	{
	time_t now = time(NULL);
	char *localTime;
	extern char *tzname[2];
	struct tm *tm = localtime(&now);
	localTime = sqlUnixTimeToDate(&now,FALSE); /* FALSE == localtime */
	fprintf(f, "%s, %s, %s %s, %s\n", scriptName, ip, localTime,
	    tm->tm_isdst ? tzname[1] : tzname[0], trashFile);
	fclose(f);
	chmod(trashFile, 0666);
	pid_t pid0 = fork();
	if (0 == pid0)	/* in child */
	    {
	    close(STDOUT_FILENO); /* do not hang up Apache finish for parent */
	    expireSeconds = 0;	/* no error message from this exit */
	    (void) signal(SIGALRM, cgiApoptosis);
	    (void) alarm(6);	/* timeout here in 6 seconds */
#include "versionInfo.h"
	    char url[1024];
	    safef(url, sizeof(url), "%s%s%s%s%s%s", "http://",
	"genomewiki.", "ucsc.edu/", "cgi-bin/useCount?", "version=browser.v",
		CGI_VERSION);

	    /* 6 second alarm will exit this page fetch if it does not work */
	    (void) htmlPageGetWithCookies(url, NULL); /* ignore return */

	    exit(0);
	    }	/* child of fork has done exit(0) normally or via alarm */
	}		/* trash file open OK */
    if (expireSeconds > 0)
	{
	(void) signal(SIGALRM, cgiApoptosis);
	(void) alarm(expireSeconds);	/* CGI timeout */
	}
    }			/* an actual CGI binary */
}			/* phoneHome()	*/