2037f9e6b4e6a2a9445a162809e88aa96703312c
markd
  Tue Apr 13 00:24:40 2021 -0700
log dynamic gfServer clock, user, and system times to help understand performance

diff --git src/gfServer/gfServer.c src/gfServer/gfServer.c
index 5e20e0c..af7e0f9 100644
--- src/gfServer/gfServer.c
+++ src/gfServer/gfServer.c
@@ -1444,38 +1444,46 @@
     }
 else
     errAbort("invalid command '%s'", args[0]);
 
 logInfo("dynserver: %s completed in %4.3f seconds", args[0], 0.001 * (clock1000() - startTime));
 freeMem(args[0]);
 return TRUE;
 }
 
 static void dynamicServer(char* rootDir)
 /* dynamic server for inetd. Read query from stdin, open index, query, respond, exit.
  * only one query at a time */
 {
 pushWarnHandler(dynWarnHandler);
 logDebug("dynamicServer connect");
+struct runTimes startTimes = getTimesInSeconds();
 
 // make sure errors are logged
 pushWarnHandler(dynWarnErrorVa);
 struct dynSession dynSession;
 ZeroVar(&dynSession);
 
 while (dynamicServerCommand(rootDir, &dynSession))
     continue;
+
+struct runTimes endTimes = getTimesInSeconds();
+logInfo("dynserver: exit: clock: %0.4f user: %0.4f system: %0.4f (seconds)",
+        endTimes.clockSecs - startTimes.clockSecs,
+        endTimes.userSecs - startTimes.userSecs,
+        endTimes.sysSecs - startTimes.sysSecs);
+
 logDebug("dynamicServer disconnect");
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 char *command;
 
 gfCatchPipes();
 dnaUtilOpen();
 optionInit(&argc, argv, optionSpecs);
 command = argv[1];
 if (optionExists("trans"))
     {
     doTrans = TRUE;