Changeset: 5971875e2b5b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5971875e2b5b
Modified Files:
        monetdb5/mal/mal_profiler.c
Branch: default
Log Message:

Add prettifier mode
When opening a profiler stream you can ask for a single-
or multi-line json rendering.
Use the mode of the openstream(mode). First bit determines
the emission of in transit MAL instructions. The second bit
toggles between rendering modes (0= prettify, 1= single line)


diffs (199 lines):

diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -28,6 +28,7 @@ stream *eventstream = 0;
 static int sqlProfiling = FALSE;
 static str myname = 0; // avoid tracing the profiler module
 static int eventcounter = 0;
+static str prettify = "\n"; /* or ' ' for single line json output */
 
 static int TRACE_init = 0;
 int malProfileMode = 0;     /* global flag to indicate profiling mode */
@@ -130,7 +131,7 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
 
        /* make profile event tuple  */
        lognew();
-       logadd("{\n\"event\":         ,\n"); // fill in later with the event 
counter
+       logadd("{%s\"event\":         ,%s",prettify,prettify); // fill in later 
with the event counter
 
 #ifdef HAVE_CTIME_R3
        tbuf = ctime_r(&clk, ctm, sizeof(ctm));
@@ -145,29 +146,29 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
        /* there should be less than 10^6 == 1M usecs in 1 sec */
        assert(clock.tv_usec >= 0 && clock.tv_usec < 1000000);
        if( usrname)
-               logadd("\"user\":\"%s\",\n",usrname);
-       logadd("\"clk\":"LLFMT",\n",GDKusec());
-       logadd("\"ctime\":\"%s.%06ld\",\n", tbuf+11, (long)clock.tv_usec);
-       logadd("\"thread\":%d,\n", THRgettid());
+               logadd("\"user\":\"%s\",%s",usrname, prettify);
+       logadd("\"clk\":"LLFMT",%s",GDKusec(),prettify);
+       logadd("\"ctime\":\"%s.%06ld\",%s", tbuf+11, (long)clock.tv_usec, 
prettify);
+       logadd("\"thread\":%d,%s", THRgettid(),prettify);
 
-       logadd("\"function\":\"%s.%s\",\n", getModuleId(getInstrPtr(mb, 0)), 
getFunctionId(getInstrPtr(mb, 0)));
-       logadd("\"pc\":%d,\n", mb?getPC(mb,pci):0);
-       logadd("\"tag\":%d,\n", stk?stk->tag:0);
+       logadd("\"function\":\"%s.%s\",%s", getModuleId(getInstrPtr(mb, 0)), 
getFunctionId(getInstrPtr(mb, 0)), prettify);
+       logadd("\"pc\":%d,%s", mb?getPC(mb,pci):0, prettify);
+       logadd("\"tag\":%d,%s", stk?stk->tag:0, prettify);
 
        if( start){
-               logadd("\"state\":\"start\",\n");
+               logadd("\"state\":\"start\",%s", prettify);
                // determine the Estimated Time of Completion
                if ( pci->calls){
-                       logadd("\"usec\":"LLFMT",\n", pci->totticks/pci->calls);
+                       logadd("\"usec\":"LLFMT",%s", pci->totticks/pci->calls, 
prettify);
                } else{
-                       logadd("\"usec\":"LLFMT",\n", pci->ticks);
+                       logadd("\"usec\":"LLFMT",%s", pci->ticks, prettify);
                }
        } else {
-               logadd("\"state\":\"done\",\n");
-               logadd("\"usec\":"LLFMT",\n", pci->ticks);
+               logadd("\"state\":\"done\",%s", prettify);
+               logadd("\"usec\":"LLFMT",%s", pci->ticks, prettify);
        }
-       logadd("\"rss\":"SZFMT ",\n", MT_getrss()/1024/1024);
-       logadd("\"size\":"LLFMT ",\n", pci? pci->wbytes/1024/1024:0);   // 
result size
+       logadd("\"rss\":"SZFMT ",%s", MT_getrss()/1024/1024, prettify);
+       logadd("\"size\":"LLFMT ",%s", pci? pci->wbytes/1024/1024:0, prettify); 
// result size
 
 #ifdef NUMAprofiling
                logadd("\"numa\":[");
@@ -175,21 +176,21 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
                for( i= pci->retc ; i < pci->argc; i++)
                if( !isVarConstant(mb, getArg(pci,i)) && 
mb->var[getArg(pci,i)]->worker)
                        logadd("%c %d", (i?',':' '), 
mb->var[getArg(pci,i)]->worker);
-               logadd("],\n");
+               logadd("],%s", prettify);
 #endif
 
 #ifdef HAVE_SYS_RESOURCE_H
        getrusage(RUSAGE_SELF, &infoUsage);
        if(infoUsage.ru_inblock - prevUsage.ru_inblock)
-               logadd("\"inblock\":%ld,\n", infoUsage.ru_inblock - 
prevUsage.ru_inblock);
+               logadd("\"inblock\":%ld,%s", infoUsage.ru_inblock - 
prevUsage.ru_inblock, prettify);
        if(infoUsage.ru_oublock - prevUsage.ru_oublock)
-               logadd("\"oublock\":%ld,\n", infoUsage.ru_oublock - 
prevUsage.ru_oublock);
+               logadd("\"oublock\":%ld,%s", infoUsage.ru_oublock - 
prevUsage.ru_oublock, prettify);
        if(infoUsage.ru_majflt - prevUsage.ru_majflt)
-               logadd("\"majflt\":%ld,\n", infoUsage.ru_majflt - 
prevUsage.ru_majflt);
+               logadd("\"majflt\":%ld,%s", infoUsage.ru_majflt - 
prevUsage.ru_majflt, prettify);
        if(infoUsage.ru_nswap - prevUsage.ru_nswap)
-               logadd("\"nswap\":%ld,\n", infoUsage.ru_nswap - 
prevUsage.ru_nswap);
+               logadd("\"nswap\":%ld,s%sn", infoUsage.ru_nswap - 
prevUsage.ru_nswap, prettify);
        if(infoUsage.ru_nvcsw - prevUsage.ru_nvcsw)
-               logadd("\"nvcsw\":%ld,\n", infoUsage.ru_nvcsw - 
prevUsage.ru_nvcsw +infoUsage.ru_nivcsw - prevUsage.ru_nivcsw);
+               logadd("\"nvcsw\":%ld,%s", infoUsage.ru_nvcsw - 
prevUsage.ru_nvcsw +infoUsage.ru_nivcsw - prevUsage.ru_nivcsw, prettify);
        prevUsage = infoUsage;
 #endif
 
@@ -208,7 +209,7 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
                if( *c){
                        stmtq = mal_quote(c, strlen(c));
                        if (stmtq != NULL) {
-                               logadd("\"stmt\":\"%s\",\n", stmtq);
+                               logadd("\"stmt\":\"%s\",%s", stmtq,prettify);
                                //GDKfree(stmtq);
                        }
                } 
@@ -219,7 +220,7 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
                stmt = shortStmtRendering(mb, stk, pci);
                stmtq = mal_quote(stmt, strlen(stmt));
                if (stmtq != NULL) {
-                       logadd("\"short\":\"%s\",\n", stmtq);
+                       logadd("\"short\":\"%s\",%s", stmtq, prettify);
                        GDKfree(stmtq);
                } 
                GDKfree(stmt);
@@ -246,9 +247,9 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
                }
 //#define MALARGUMENTDETAILS
 #ifdef MALARGUMENTDETAILS
-               logadd("\"prereq\":%s],\n", prereq);
+               logadd("\"prereq\":%s],%s", prereq, prettify);
 #else
-               logadd("\"prereq\":%s]\n", prereq);
+               logadd("\"prereq\":%s]%s", prereq, prettify);
 #endif
                
 /* EXAMPLE MAL statement argument decomposition
@@ -288,7 +289,7 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
                                GDKfree(stmtq);
                        }
                        GDKfree(tname);
-                       logadd("}%s\n", (j< pci->argc-1?",":""));
+                       logadd("}%s%s", (j< pci->argc-1?",":""), prettify);
                }
 #endif
        }
@@ -381,7 +382,7 @@ profilerHeartbeatEvent(char *alter)
        clk = clock.tv_sec;
        
        lognew();
-       logadd("{\n\"event\":         ,\n"); // fill in later with the event 
counter
+       logadd("{\n\"event\":         ,%s",prettify); // fill in later with the 
event counter
 #ifdef HAVE_CTIME_R3
        tbuf = ctime_r(&clk, ctm, sizeof(ctm));
 #else
@@ -392,24 +393,24 @@ profilerHeartbeatEvent(char *alter)
 #endif
 #endif
        tbuf[19]=0;
-       logadd("\"time\":\"%s.%06ld\",\n", tbuf+11, (long)clock.tv_usec);
-       logadd("\"rss\":"SZFMT ",\n", MT_getrss()/1024/1024);
+       logadd("\"time\":\"%s.%06ld\",%s",tbuf+11, (long)clock.tv_usec, 
prettify);
+       logadd("\"rss\":"SZFMT ",%s", MT_getrss()/1024/1024, prettify);
 #ifdef HAVE_SYS_RESOURCE_H
        getrusage(RUSAGE_SELF, &infoUsage);
        if(infoUsage.ru_inblock - prevUsage.ru_inblock)
-               logadd("\"inblock\":%ld,\n", infoUsage.ru_inblock - 
prevUsage.ru_inblock);
+               logadd("\"inblock\":%ld,%s", infoUsage.ru_inblock - 
prevUsage.ru_inblock, prettify);
        if(infoUsage.ru_oublock - prevUsage.ru_oublock)
-               logadd("\"oublock\":%ld,\n", infoUsage.ru_oublock - 
prevUsage.ru_oublock);
+               logadd("\"oublock\":%ld,%s", infoUsage.ru_oublock - 
prevUsage.ru_oublock, prettify);
        if(infoUsage.ru_majflt - prevUsage.ru_majflt)
-               logadd("\"majflt\":%ld,\n", infoUsage.ru_majflt - 
prevUsage.ru_majflt);
+               logadd("\"majflt\":%ld,%s", infoUsage.ru_majflt - 
prevUsage.ru_majflt, prettify);
        if(infoUsage.ru_nswap - prevUsage.ru_nswap)
-               logadd("\"nswap\":%ld,\n", infoUsage.ru_nswap - 
prevUsage.ru_nswap);
+               logadd("\"nswap\":%ld,%s", infoUsage.ru_nswap - 
prevUsage.ru_nswap, prettify);
        if(infoUsage.ru_nvcsw - prevUsage.ru_nvcsw)
-               logadd("\"nvcsw\":%ld,\n", infoUsage.ru_nvcsw - 
prevUsage.ru_nvcsw +infoUsage.ru_nivcsw - prevUsage.ru_nivcsw);
+               logadd("\"nvcsw\":%ld,%s", infoUsage.ru_nvcsw - 
prevUsage.ru_nvcsw +infoUsage.ru_nivcsw - prevUsage.ru_nivcsw, prettify);
        prevUsage = infoUsage;
 #endif
-       logadd("\"state\":\"%s\",\n",alter);
-       logadd("\"cpuload\":\"%s\",\n",cpuload);
+       logadd("\"state\":\"%s\",%s",alter,prettify);
+       logadd("\"cpuload\":\"%s\",%s",cpuload,prettify);
        logadd("}\n"); // end marker
        logjsonInternal(logbuffer);
 }
@@ -436,7 +437,12 @@ profilerEvent(MalBlkPtr mb, MalStkPtr st
 
 /* The first scheme dumps the events
  * on a stream (and in the pool)
+ * The mode encodes two flags: 
+ * - showing all running instructions
+ * - single line json
  */
+#define PROFSHOWRUNNING        1
+#define PROFSINGLELINE 2
 str
 openProfilerStream(stream *fd, int mode)
 {
@@ -455,8 +461,10 @@ openProfilerStream(stream *fd, int mode)
                closeProfilerStream();
        malProfileMode = -1;
        eventstream = fd;
+       prettify = (mode & PROFSINGLELINE) ? " ": "\n";
+
        /* show all in progress instructions for stethoscope startup */
-       if( mode > 0){
+       if( (mode & PROFSHOWRUNNING) > 0){
                for (i = 0; i < MAL_MAXCLIENTS; i++) {
                        c = mal_clients+i;
                        if ( c->active ) 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to