00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "peo_debug.h"
00038
00039 #include <stdio.h>
00040 #include <time.h>
00041 #include <unistd.h>
00042 #include <string.h>
00043 #include <sys/types.h>
00044 #include <sys/stat.h>
00045 #include <vector>
00046
00047 #include "peo_debug.h"
00048
00049 #define MAX_BUFF_SIZE 1000
00050
00051 #define DEBUG_PATH "./log/"
00052
00053
00054 static bool debug = false;
00055
00056 static char host [MAX_BUFF_SIZE];
00057
00058 std :: vector <FILE *> files;
00059
00060
00061 void setDebugMode (bool __dbg)
00062 {
00063
00064 debug = __dbg;
00065 gethostname (host, MAX_BUFF_SIZE);
00066 }
00067
00068 extern int getNodeRank ();
00069
00070 void initDebugging ()
00071 {
00072
00073 mkdir (DEBUG_PATH, S_IRWXU);
00074
00075 char buff [MAX_BUFF_SIZE];
00076 sprintf (buff, "%s/%d", DEBUG_PATH, getNodeRank ());
00077 files.push_back (fopen (buff, "w"));
00078 }
00079
00080 void endDebugging ()
00081 {
00082
00083 for (unsigned i = 0; i < files.size (); i ++)
00084 if (files [i] != stdout)
00085 fclose (files [i]);
00086 files.clear();
00087 }
00088
00089 void printDebugMessage (const char * __mess)
00090 {
00091
00092 if (debug)
00093 {
00094
00095 char buff [MAX_BUFF_SIZE];
00096 char localTime [MAX_BUFF_SIZE];
00097 time_t t = time (0);
00098
00099
00100 strcpy( localTime, ctime (& t) );
00101 localTime[ strlen( localTime )-1 ] = ']';
00102 sprintf (buff, "[%s][%s: ", host, localTime );
00103
00104 for (unsigned i = 0; i < files.size (); i ++)
00105 fprintf (files [i], buff);
00106
00107
00108 sprintf (buff, "%s", __mess);
00109
00110 for (unsigned i = 0; i < files.size (); i ++)
00111 {
00112 fputs (buff, files [i]);
00113 fputs ("\n", files [i]);
00114 fflush (files [i]);
00115 }
00116 }
00117 }