39 #define LOG_TOP_RES_FILE "log_top.res" 40 #define LOG_TOP_Q_FILE "log_top.q" 41 #define LOG_TOP_TAG_FILE "tags" 42 #define LOG_TOP_NE_FILE "log_top.ne" 44 static int sort_func (
const void *arg1,
const void *arg2);
45 static char *
time2str (
int t,
char *buf);
52 static int num_query_info_ne = 0;
56 static T_MUTEX query_info_mutex;
61 query_info_mutex_init ()
63 MUTEX_INIT (query_info_mutex);
93 char minstr[64], maxstr[64], avgstr[64];
97 MUTEX_LOCK (query_info_mutex);
112 fprintf (stderr,
"%s\n", strerror (errno));
113 goto query_info_print_end;
119 fprintf (fp_res,
"%8s %8s %9s %9s %10s\n",
"",
"max",
"min",
"avg",
"cnt(err)");
121 fprintf (fp_res,
"%8s %8s %10s\n",
"",
"max",
"cnt");
123 fprintf (fp_res,
"-----------------------------------------------------\n");
127 sprintf (buf,
"[Q%d]", i + 1);
130 fprintf (fp_res,
"%-8s %9s %9s %9s %4d (%d)", buf,
time2str (query_info_arr[i].
max, maxstr),
132 avgstr), query_info_arr[i].count,
133 query_info_arr[i].err_count);
137 fprintf (fp_res,
"%-8s %8d %10d", buf, query_info_arr[i].
max, query_info_arr[i].
count);
140 fprintf (fp_q,
"%s-------------------------------------------\n", buf);
145 fprintf (fp_res,
"%5s",
"X");
148 fprintf (fp_res,
"\n");
150 fwrite (query_info_arr[i].cas_log, query_info_arr[i].cas_log_len, 1, fp_q);
151 fprintf (fp_q,
"\n");
159 for (i = 0; i < num_query_info_ne; i++)
161 sprintf (buf,
"[N%d]", i + 1);
162 fprintf (fp_ne,
"%s-------------------------------------------\n", buf);
169 fprintf (fp_ne,
"%s\n", query_info_arr_ne[i].cas_log);
185 query_info_print_end:
187 MUTEX_UNLOCK (query_info_mutex);
203 MUTEX_LOCK (query_info_mutex);
208 goto query_info_add_end;
213 if (strcmp (query_info_arr[i].organized_sql, qi->
organized_sql) == 0)
223 if (query_info_arr ==
NULL)
225 fprintf (stderr,
"%s\n", strerror (errno));
227 goto query_info_add_end;
236 if (exec_time < query_info_arr[qi_idx].
min)
238 query_info_arr[qi_idx].
min = exec_time;
240 if (exec_time > query_info_arr[qi_idx].
max)
242 query_info_arr[qi_idx].
max = exec_time;
243 FREE_MEM (query_info_arr[qi_idx].cas_log);
245 if (query_info_arr[qi_idx].cas_log ==
NULL)
247 fprintf (stderr,
"%s\n", strerror (errno));
249 goto query_info_add_end;
251 sprintf (query_info_arr[qi_idx].cas_log,
"%s:%d\n", filename, lineno);
252 query_info_arr[qi_idx].
cas_log_len = (int)
strlen (query_info_arr[qi_idx].cas_log);
253 memcpy (query_info_arr[qi_idx].cas_log + query_info_arr[qi_idx].cas_log_len, qi->
cas_log, qi->
cas_log_len);
256 query_info_arr[qi_idx].
count++;
257 query_info_arr[qi_idx].
sum += exec_time;
267 MUTEX_UNLOCK (query_info_mutex);
289 MUTEX_LOCK (query_info_mutex);
294 if (strcmp (query_info_arr[i].organized_sql, qi->
organized_sql) == 0)
297 goto query_info_add_ne_end;
301 for (i = 0; i < num_query_info_ne; i++)
303 if (strcmp (query_info_arr_ne[i].organized_sql, qi->
organized_sql) == 0)
313 if (query_info_arr_ne ==
NULL)
315 fprintf (stderr,
"%s\n", strerror (errno));
317 goto query_info_add_ne_end;
319 qi_idx = num_query_info_ne;
326 FREE_MEM (query_info_arr_ne[qi_idx].cas_log);
328 if (query_info_arr_ne[qi_idx].cas_log ==
NULL)
330 fprintf (stderr,
"%s\n", strerror (errno));
332 goto query_info_add_ne_end;
337 query_info_add_ne_end:
339 MUTEX_UNLOCK (query_info_mutex);
358 sprintf (buf,
"%d:%02d.%03d", sec / 60, sec % 60, msec);
360 sprintf (buf,
"%d.%03d", sec, msec);
int sql_info_write(char *src_sql, char *q_name, FILE *fp)
T_LOG_TOP_MODE log_top_mode
int query_info_add(T_QUERY_INFO *qi, int exec_time, int execute_res, char *filename, int lineno, char *end_date)
void query_info_print(void)
static T_QUERY_INFO * query_info_arr
char start_date[DATE_STR_LEN+1]
void query_info_init(T_QUERY_INFO *qi)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
void query_info_clear(T_QUERY_INFO *qi)
static char * time2str(int t, char *buf)
int query_info_add_ne(T_QUERY_INFO *qi, char *end_date)
char * strdup(const char *str)
static int sort_func(const void *arg1, const void *arg2)
int check_log_time(char *start_date, char *end_date)
#define REALLOC(PTR, SIZE)
static int num_query_info