33 #include <sys/timeb.h> 53 #if !defined(CAS_FOR_ORACLE) && !defined(CAS_FOR_MYSQL) 62 #define CAS_LOG_BUFFER_SIZE (8192) 63 #define SQL_LOG_BUFFER_SIZE 163840 64 #define ACCESS_LOG_IS_DENIED_TYPE(T) ((T)==ACL_REJECTED) 75 #if defined (ENABLE_UNUSED_FUNCTION) 76 static void cas_log_rename (
int run_time, time_t cur_time,
char *br_name,
int as_index);
78 static void cas_log_write_internal (FILE * fp,
struct timeval *log_time,
unsigned int seq_num,
bool do_flush,
79 const char *fmt, va_list ap);
88 static int error_file_offset;
89 static char cas_log_error_flag;
95 static size_t cas_fwrite (
const void *ptr,
size_t size,
size_t nmemb, FILE * stream);
97 static int cas_fseek (FILE * stream, INT64 offset,
int whence);
100 static FILE *cas_fopen_and_lock (
const char *path,
const char *
mode);
106 static int cas_fprintf (FILE * stream,
const char *format, ...);
107 static int cas_fputc (
int c, FILE * stream);
109 static int cas_rename (
const char *oldpath,
const char *newpath);
116 #ifndef LIBCAS_FOR_JSP 128 ret = snprintf (filename_buf, buf_size,
"%s%s_%d_%d_%d.sql.log", dirname, br_name,
shm_proxy_id + 1,
133 ret = snprintf (filename_buf, buf_size,
"%s%s_%d.sql.log", dirname, br_name,
shm_as_index + 1);
139 ret = snprintf (filename_buf, buf_size,
"%s%s_%d_%d_%d.slow.log", dirname, br_name,
shm_proxy_id + 1,
144 ret = snprintf (filename_buf, buf_size,
"%s%s_%d.slow.log", dirname, br_name,
shm_as_index + 1);
149 ret = snprintf (filename_buf, buf_size,
"unknown.log");
155 filename_buf[0] =
'\0';
165 #ifndef LIBCAS_FOR_JSP 213 #ifndef LIBCAS_FOR_JSP 236 #ifndef LIBCAS_FOR_JSP 255 char *filepath =
NULL;
272 if (snprintf (backup_filepath,
BROKER_PATH_MAX,
"%s.bak", filepath) < 0)
300 #if defined (ENABLE_UNUSED_FUNCTION) 302 cas_log_rename (
int run_time, time_t cur_time,
char *br_name,
int as_index)
309 localtime_r (&cur_time, &tmp_tm);
310 tmp_tm.tm_year += 1900;
313 tmp_tm.tm_mday, tmp_tm.tm_hour, tmp_tm.tm_min, tmp_tm.tm_sec, run_time);
321 #ifndef LIBCAS_FOR_JSP 329 bool abandon =
false;
381 if (run_time_sec >= 0 && run_time_msec >= 0)
383 cas_log_write (0,
false,
"*** elapsed time %d.%03d\n", run_time_sec, run_time_msec);
417 n = snprintf (p, len,
" (%u) ", seq_num);
422 n = vsnprintf (p, len, fmt, ap);
435 if (do_flush ==
true)
444 #ifndef LIBCAS_FOR_JSP 468 #ifndef LIBCAS_FOR_JSP 487 fmt =
"query_cancel client ip %s port %u";
492 snprintf (buf, LINE_MAX,
"query_cancel");
496 va_start (ap, dummy);
508 #ifndef LIBCAS_FOR_JSP 535 #ifndef LIBCAS_FOR_JSP 566 n = vsnprintf (p, len, fmt, ap);
577 if (do_flush ==
true)
586 #ifndef LIBCAS_FOR_JSP 606 #ifndef LIBCAS_FOR_JSP 627 #ifndef LIBCAS_FOR_JSP 655 #ifndef LIBCAS_FOR_JSP 665 for (s = query; *s; s++)
667 if (*s ==
'\n' || *s ==
'\r')
688 #ifndef LIBCAS_FOR_JSP 689 char client_ip_str[16];
691 if (ip_addr !=
NULL && *((
int *) ip_addr) != 0)
699 #if !defined (NDEBUG) 701 cas_log_debug (
const char *file_name,
const int line_no,
const char *fmt, ...)
704 #ifndef LIBCAS_FOR_JSP 707 char buf[LINE_MAX], *
p;
719 n = snprintf (p, len,
" (debug) file %s line %d ", file_name, line_no);
724 n = vsnprintf (p, len, fmt, ap);
740 #if defined (ENABLE_UNUSED_FUNCTION) 742 cas_error_log (
int err_code,
char *err_msg_str,
int client_ip_addr)
744 #ifndef LIBCAS_FOR_JSP 748 time_t t = time (
NULL);
750 char err_code_str[12];
754 localtime_r (&t, &ct1);
767 if (script_file ==
NULL)
769 sprintf (err_code_str,
"%d", err_code);
772 cas_fprintf (fp,
"[%d] %s %s %d/%d/%d %d:%d:%d %d\n%s:%s\ncmd:%s\n", (
int) getpid (), ip_str, script_file,
773 ct1.tm_year, ct1.tm_mon + 1, ct1.tm_mday, ct1.tm_hour, ct1.tm_min, ct1.tm_sec,
774 (
int) (
strlen (err_code_str) +
strlen (err_msg_str) + 1), err_code_str, err_msg_str, lastcmd);
777 cas_log_error_flag = 1;
787 #ifndef LIBCAS_FOR_JSP 793 struct timeval end_time;
794 char log_file_buf[PATH_MAX];
795 const char *print_format =
"%d %s %04d/%02d/%02d %02d:%02d:%02d %s %s %s %s\n";
796 char session_id_buf[16];
798 gettimeofday (&end_time,
NULL);
800 t1 = start_time->tv_sec;
801 t2 = end_time.tv_sec;
802 if (localtime_r (&t1, &ct1) ==
NULL || localtime_r (&t2, &ct2) ==
NULL)
818 access_log_file = log_file_buf;
827 fseek (fp, 0, SEEK_END);
830 time_t cur_time = time (
NULL);
833 if (localtime_r (&cur_time, &ct) !=
NULL)
849 ut_get_ipv4_string (clt_ip_str,
sizeof (clt_ip_str), (
unsigned char *) (&client_ip_addr));
851 session_id_buf[0] =
'\0';
853 #if !defined(CAS_FOR_ORACLE) && !defined(CAS_FOR_MYSQL) 860 cas_fprintf (fp, print_format, as_index + 1, clt_ip_str, ct1.tm_year, ct1.tm_mon + 1, ct1.tm_mday, ct1.tm_hour,
864 return (end_time.tv_sec - start_time->tv_sec);
873 #if !defined(LIBCAS_FOR_JSP) && !defined(CAS_FOR_ORACLE) && !defined(CAS_FOR_MYSQL) 874 char *plan_dump_filename;
880 if (is_only_query_plan)
894 #ifndef LIBCAS_FOR_JSP 898 if (snprintf (plan_file_name,
BROKER_PATH_MAX - 1,
"%s/%d.%d.plan", dirname, (
int) getpid (),
id) < 0)
903 return plan_file_name;
917 if (log_file_name ==
NULL)
920 #if defined (WINDOWS) 921 fp = cas_fopen_and_lock (log_file_name,
"a");
932 tmp_filename =
strdup (log_file_name);
933 if (tmp_filename ==
NULL)
937 tmp_dirname =
dirname (tmp_filename);
942 #if defined (WINDOWS) 943 fp = cas_fopen_and_lock (log_file_name,
"a");
968 #ifndef LIBCAS_FOR_JSP 1000 #ifndef LIBCAS_FOR_JSP 1023 #ifndef LIBCAS_FOR_JSP 1035 #ifndef LIBCAS_FOR_JSP 1064 #ifndef LIBCAS_FOR_JSP 1085 cas_slow_log_write (
struct timeval *log_time,
unsigned int seq_num,
bool unit_start,
const char *fmt, ...)
1087 #ifndef LIBCAS_FOR_JSP 1107 #ifndef LIBCAS_FOR_JSP 1127 #ifndef LIBCAS_FOR_JSP 1143 #ifndef LIBCAS_FOR_JSP 1153 for (s = query; *s; s++)
1155 if (*s ==
'\n' || *s ==
'\r')
1172 #if !defined(LIBCAS_FOR_JSP) 1175 #if defined(CAS_FOR_ORACLE) || defined(CAS_FOR_MYSQL) 1177 if (!is_prev_time_set)
1181 return is_prev_time_set;
1191 #if !defined(LIBCAS_FOR_JSP) 1194 #if defined(CAS_FOR_ORACLE) || defined(CAS_FOR_MYSQL) 1195 if (!is_prev_time_set)
1205 cas_fwrite (
const void *ptr,
size_t size,
size_t nmemb, FILE * stream)
1207 bool is_prev_time_set;
1211 result = fwrite (ptr, size, nmemb, stream);
1220 return ftell (stream);
1226 bool is_prev_time_set;
1230 result = fseek (stream, offset, whence);
1239 bool is_prev_time_set;
1243 result = fopen (path, mode);
1249 #if defined (WINDOWS) 1251 cas_fopen_and_lock (
const char *path,
const char *
mode)
1253 #define MAX_RETRY_COUNT 100 1255 bool is_prev_time_set;
1262 result = fopen (path, mode);
1265 if (lockf (fileno (result), F_TLOCK, 0) < 0)
1286 bool is_prev_time_set;
1290 result = fclose (fp);
1299 bool is_prev_time_set;
1303 result = ftruncate (fd, length);
1312 bool is_prev_time_set;
1316 result = fflush (stream);
1326 bool is_prev_time_set;
1330 result = fileno (stream);
1339 bool is_prev_time_set;
1343 va_start (ap, format);
1346 result = vfprintf (stream, format, ap);
1357 bool is_prev_time_set;
1361 result = fputc (c, stream);
1370 bool is_prev_time_set;
1374 result = unlink (pathname);
1383 bool is_prev_time_set;
1387 result = rename (oldpath, newpath);
1396 bool is_prev_time_set;
1400 result = mkdir (pathname, mode);
1409 char cmd_buf[BUFSIZ];
1411 sprintf (cmd_buf,
"%s.%04d%02d%02d%02d%02d%02d", access_log_file, ct->tm_year, ct->tm_mon + 1, ct->tm_mday,
1412 ct->tm_hour, ct->tm_min, ct->tm_sec);
1413 rename (access_log_file, cmd_buf);
1419 #if !defined(CAS_FOR_ORACLE) && !defined(CAS_FOR_MYSQL) #define SLEEP_MILISEC(sec, msec)
static int cas_fileno(FILE *stream)
static INT64 cas_ftell(FILE *stream)
char * dirname(const char *path)
static void cas_log_query_cancel(int dummy,...)
#define PATH_INFO_ENV_STR
static void cas_log_write2_internal(FILE *fp, bool do_flush, const char *fmt, va_list ap)
static int cas_ftruncate(int fd, off_t length)
static int cas_fflush(FILE *stream)
static void access_log_backup(char *access_log_file, struct tm *ct)
static void cas_log_write_and_set_savedpos(FILE *log_fp, const char *fmt,...)
void set_hang_check_time(void)
#define CAS_PROTO_MAKE_VER(VER)
char error_log_file[CONF_LOG_FILE_LEN]
void unset_hang_check_time(void)
char * ut_get_ipv4_string(char *ip_str, int len, const unsigned char *ip_addr)
static int cas_fseek(FILE *stream, INT64 offset, int whence)
SESSION_ID db_get_session_id(void)
unsigned char cas_clt_ip[4]
void cas_slow_log_open(char *br_name)
T_BROKER_VERSION clt_version
static char log_filepath[BROKER_PATH_MAX]
static int cas_fputc(int c, FILE *stream)
void cas_log_write_nonl(unsigned int seq_num, bool unit_start, const char *fmt,...)
static INT64 saved_log_fpos
void cas_slow_log_write_and_end(struct timeval *log_time, unsigned int seq_num, const char *fmt,...)
#define CAS_LOG_RESET_REOPEN
void set_optimization_level(int level)
#define CAS_LOG_RESET_REMOVE
void cas_slow_log_write_value_string(char *value, int size)
int ut_time_string(char *buf, struct timeval *time_val)
char broker_name[BROKER_NAME_LEN]
static char cas_log_buffer[CAS_LOG_BUFFER_SIZE]
void cas_log_write_query_string_nonl(char *query, int size)
static const char * get_access_log_type_string(ACCESS_LOG_TYPE type)
char * get_cubrid_file(T_CUBRID_FILE_ID fid, char *buf, size_t len)
static FILE * slow_log_fp
int long_transaction_time
unsigned short cas_clt_port
static bool cas_log_begin_hang_check_time(void)
int cas_access_log(struct timeval *start_time, int as_index, int client_ip_addr, char *dbname, char *dbuser, ACCESS_LOG_TYPE log_type)
void cas_log_write_query_string(char *query, int size)
char * cas_log_query_plan_file(int id)
void cas_log_write2_nonl(const char *fmt,...)
static int cas_unlink(const char *pathname)
static void cas_log_backup(T_CUBRID_FILE_ID fid)
static enum scanner_mode mode
void cas_log_end(int mode, int run_time_sec, int run_time_msec)
static FILE * cas_fopen(const char *path, const char *mode)
static int cas_mkdir(const char *pathname, mode_t mode)
int db_query_plan_dump_file(char *filename)
static int cas_fprintf(FILE *stream, const char *format,...)
#define CAS_LOG_BUFFER_SIZE
void cas_slow_log_write_query_string(char *query, int size)
void cas_log_write_value_string(char *value, int size)
static int cas_fclose(FILE *fp)
void cas_log_debug(const char *file_name, const int line_no, const char *fmt,...)
#define SQL_LOG_BUFFER_SIZE
static char slow_log_filepath[BROKER_PATH_MAX]
static char sql_log_buffer[SQL_LOG_BUFFER_SIZE]
static struct timeval start_time
static T_SHM_APPL_SERVER * shm_appl
static void cas_log_write_internal(FILE *fp, struct timeval *log_time, unsigned int seq_num, bool do_flush, const char *fmt, va_list ap)
static void cas_log_write_query_string_internal(char *query, int size, bool newline)
void cas_log_write_client_ip(const unsigned char *ip_addr)
static int cas_rename(const char *oldpath, const char *newpath)
void cas_log_reset(char *br_name)
static char * make_sql_log_filename(T_CUBRID_FILE_ID fid, char *filename_buf, size_t buf_size, const char *br_name)
void cas_slow_log_reset(char *br_name)
time_t claimed_alive_time
#define ACCESS_LOG_DENIED_FILENAME_POSTFIX
void cas_log_query_info_init(int id, char is_only_query_plan)
void cas_log_write(unsigned int seq_num, bool unit_start, const char *fmt,...)
#define ACCESS_LOG_IS_DENIED_TYPE(T)
void cas_slow_log_write2(const char *fmt,...)
void cas_slow_log_write(struct timeval *log_time, unsigned int seq_num, bool unit_start, const char *fmt,...)
T_APPL_SERVER_INFO * as_info
void cas_log_write_and_end(unsigned int seq_num, bool unit_start, const char *fmt,...)
static FILE * access_log_open(char *log_file_name)
char access_log_file[CONF_LOG_FILE_LEN]
char * strdup(const char *str)
enum t_cubrid_file_id T_CUBRID_FILE_ID
void set_cubrid_file(T_CUBRID_FILE_ID fid, char *value)
char * ut_uchar2ipstr(unsigned char *ip_addr)
void cas_log_close(bool flag)
char slow_log_dir[CONF_LOG_FILE_LEN]
void cas_log_write2(const char *fmt,...)
void cas_slow_log_close()
char log_dir[CONF_LOG_FILE_LEN]
static size_t cas_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
void cas_log_open(char *br_name)
static void cas_log_end_hang_check_time(bool is_prev_time_set)