void grn_query_logger_put(grn_ctx *ctx, unsigned int flag, const char *mark, const char *format, ...) { char timestamp[TIMESTAMP_BUFFER_SIZE]; char info[INFO_BUFFER_SIZE]; grn_obj *message = &ctx->impl->query_log_buf; if (!current_query_logger.log) { return; } { grn_timeval tv; timestamp[0] = '\0'; grn_timeval_now(ctx, &tv); grn_timeval2str(ctx, &tv, timestamp, TIMESTAMP_BUFFER_SIZE); } if (flag & (GRN_QUERY_LOG_COMMAND | GRN_QUERY_LOG_DESTINATION)) { grn_snprintf(info, INFO_BUFFER_SIZE, INFO_BUFFER_SIZE, "%p|%s", ctx, mark); info[INFO_BUFFER_SIZE - 1] = '\0'; } else { grn_timeval tv; uint64_t elapsed_time; grn_timeval_now(ctx, &tv); elapsed_time = (uint64_t)(tv.tv_sec - ctx->impl->tv.tv_sec) * GRN_TIME_NSEC_PER_SEC + (tv.tv_nsec - ctx->impl->tv.tv_nsec); grn_snprintf(info, INFO_BUFFER_SIZE, INFO_BUFFER_SIZE, "%p|%s%015" GRN_FMT_INT64U " ", ctx, mark, elapsed_time); info[INFO_BUFFER_SIZE - 1] = '\0'; } { va_list args; va_start(args, format); GRN_BULK_REWIND(message); grn_text_vprintf(ctx, message, format, args); va_end(args); GRN_TEXT_PUTC(ctx, message, '\0'); } current_query_logger.log(ctx, flag, timestamp, info, GRN_TEXT_VALUE(message), current_query_logger.user_data); }
void grn_logger_putv(grn_ctx *ctx, grn_log_level level, const char *file, int line, const char *func, const char *fmt, va_list ap) { if (level <= current_logger.max_level && current_logger.log) { char tbuf[TBUFSIZE]; char mbuf[MBUFSIZE]; char lbuf[LBUFSIZE]; tbuf[0] = '\0'; if (current_logger.flags & GRN_LOG_TIME) { grn_timeval tv; grn_timeval_now(ctx, &tv); grn_timeval2str(ctx, &tv, tbuf, TBUFSIZE); } if (current_logger.flags & GRN_LOG_MESSAGE) { grn_vsnprintf(mbuf, MBUFSIZE, fmt, ap); } else { mbuf[0] = '\0'; } if (current_logger.flags & GRN_LOG_LOCATION) { grn_snprintf(lbuf, LBUFSIZE, LBUFSIZE, "%d %s:%d %s()", getpid(), file, line, func); } else { lbuf[0] = '\0'; } current_logger.log(ctx, level, tbuf, "", mbuf, lbuf, current_logger.user_data); } }
static grn_obj * proc_status(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { uint32_t nvars; grn_obj *outbuf = args[0]; grn_expr_var *vars; grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); if (nvars == 1) { grn_timeval now; grn_content_type otype = GET_OTYPE(&vars[0].value); grn_timeval_now(ctx, &now); switch (otype) { case GRN_CONTENT_TSV: /* TODO: implement */ break; case GRN_CONTENT_JSON: GRN_TEXT_PUTS(ctx, outbuf, "{\"starttime\":"); grn_text_itoa(ctx, outbuf, grn_starttime.tv_sec); GRN_TEXT_PUTS(ctx, outbuf, ",\"uptime\":"); grn_text_itoa(ctx, outbuf, now.tv_sec - grn_starttime.tv_sec); GRN_TEXT_PUTC(ctx, outbuf, '}'); break; } } return outbuf; }
void grn_time_now(grn_ctx *ctx, grn_obj *obj) { grn_timeval tv; grn_timeval_now(ctx, &tv); GRN_TIME_SET(ctx, obj, GRN_TIME_PACK(tv.tv_sec, GRN_TIME_NSEC_TO_USEC(tv.tv_nsec))); }
static void lprint(grn_ctx *ctx, const char *fmt, ...) { char buf[1024]; grn_timeval tv; int len; va_list argp; grn_timeval_now(ctx, &tv); grn_timeval2str(ctx, &tv, buf); len = strlen(buf); buf[len++] = '|'; va_start(argp, fmt); vsnprintf(buf + len, 1023 - len, fmt, argp); va_end(argp); buf[1023] = '\0'; puts(buf); }
static void rotate_log_file(grn_ctx *ctx, const char *current_path) { char rotated_path[PATH_MAX]; grn_timeval now; struct tm tm_buffer; struct tm *tm; grn_timeval_now(ctx, &now); tm = grn_timeval2tm(ctx, &now, &tm_buffer); grn_snprintf(rotated_path, PATH_MAX, PATH_MAX, "%s.%04d-%02d-%02d-%02d-%02d-%02d-%06d", current_path, tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, (int)(GRN_TIME_NSEC_TO_USEC(now.tv_nsec))); rename(current_path, rotated_path); }