46 #include <sys/types.h> 58 #include "rnr/rnrconfig.h" 59 #include "rnr/color.h" 72 #define COLOR_PASS ANSI_FG_GREEN 73 #define COLOR_WARN ANSI_FG_YELLOW 74 #define COLOR_FAIL ANSI_FG_RED 75 #define COLOR_YN ANSI_FG_BLUE 76 #define COLOR_FATAL ANSI_FG_BRIGHT_RED 77 #define COLOR_OFF ANSI_COLOR_RESET 82 static const char *DiagSep = \
83 "-----------------------------------------------------------------------------";
85 static const char *SubHdrSep = \
86 ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .";
88 static const char *SubSumTag =
" ...";
89 static const char *TotSumTag =
"...";
93 static bool bSetup =
false;
94 static struct termios orig, nb;
100 if( tcgetattr(0, &orig) < 0 )
106 nb.c_lflag &= ~ICANON;
114 if( tcsetattr(0, TCSANOW, &nb) < 0 )
119 else if( read(0, &c, 1) < 0 )
124 if( tcsetattr(0, TCSANOW, &orig) < 0 )
135 long findProc(
const string &strName)
142 if( !(dir = opendir(
"/proc")) )
147 while( (ent = readdir(dir)) != NULL )
151 long lpid = strtol(ent->d_name, &endptr, 10);
153 if( *endptr !=
'\0' )
159 snprintf(buf,
sizeof(buf),
"/proc/%ld/cmdline", lpid);
161 FILE *fp = fopen(buf,
"r");
165 if( fgets(buf,
sizeof(buf), fp) != NULL )
168 string strCmd(strtok(buf,
" "));
170 if( strCmd.find(strName) != string::npos )
189 while( (c = getch()) == 0 );
202 const int MaxTagSize = 32;
207 char PassTag[MaxTagSize];
208 char WarnTag[MaxTagSize];
209 char FailTag[MaxTagSize];
210 char WaitTag[MaxTagSize];
211 char YNTag[MaxTagSize];
212 char FatalTag[MaxTagSize];
214 void setTags(
bool bColor)
218 sprintf(PassTag,
"[" COLOR_PASS
"PASS" COLOR_OFF
"] ");
219 sprintf(WarnTag,
"[" COLOR_WARN
"WARN" COLOR_OFF
"] ");
220 sprintf(FailTag,
"[" COLOR_FAIL
"FAIL" COLOR_OFF
"] ");
221 sprintf(WaitTag,
" ");
222 sprintf(YNTag,
"[" COLOR_YN
"y/n" COLOR_OFF
"] ");
223 sprintf(FatalTag,
"[" COLOR_FATAL
"FATAL" COLOR_OFF
"] ");
227 sprintf(PassTag,
"[PASS] ");
228 sprintf(WarnTag,
"[WARN] ");
229 sprintf(FailTag,
"[FAIL] ");
230 sprintf(WaitTag,
" ");
231 sprintf(YNTag,
"[y/n] ");
232 sprintf(FatalTag,
"[FATAL]");
236 void printHdr(
string strDiag)
238 printf(
"%s\n", DiagSep);
239 printf(
"%s\n", strDiag.c_str());
240 printf(
"%s\n\n", DiagSep);
243 void printSubHdr(
string strName)
246 printf(
"+ + %s + +\n", strName.c_str());
249 void printTestResult(
const char *sTag,
const char *sFmt, ...)
263 printf(
"%s %d/%d passed.\n\n", SubSumTag, stats.passCnt, stats.testCnt);
268 printf(
"%s %d/%d diagnostics passed.\n\n",
269 TotSumTag, stats.passCnt, stats.testCnt);
274 printf(
"%s\n", DiagSep);
275 printf(
"%s\n", DiagSep);
276 printf(
"Gran Total: %d/%d diagnostics passed.\n",
277 stats.passCnt, stats.testCnt);
278 printf(
"%s\n", DiagSep);
279 printf(
"%s\n", DiagSep);
Simple diagnostics statistics class.