Ejemplo n.º 1
0
static void log_print_all(void *tinst) {
    struct statistics_controller *c = tinst;
    struct log_print_cell_data data;
    int y, ylimit;
    
    top_globalstats_iterate(c->globalstats, log_print_globalstats, NULL);
    putchar('\n');

    log_print_header(tinst);
    putchar('\n');
    
    data.x = 0;
    data.xoffset = /*padding*/ 0;
    data.have_limit = top_prefs_get_ncols(&data.ncols);
    data.column = 0;
    data.row = 0;
       
    ylimit = log_get_total(tinst);

    for(y = 0; y < ylimit; ++y) {
	data.x = 0;
	data.xoffset = 0;
	data.column = 0;
	c->iterate(c, log_print_cell, &data);
	data.row++;
	putchar('\n');
    }
}
Ejemplo n.º 2
0
static int log_open(LogContext *pContext)
{
    int result;
	if ((pContext->log_fd = open(pContext->log_filename, O_WRONLY | \
				O_CREAT | O_APPEND | pContext->fd_flags, 0644)) < 0)
	{
		fprintf(stderr, "open log file \"%s\" to write fail, " \
			"errno: %d, error info: %s\n", \
			pContext->log_filename, errno, STRERROR(errno));
		pContext->log_fd = STDERR_FILENO;
		return errno != 0 ? errno : EACCES;
	}

    if (pContext->use_file_write_lock) {
        if ((result=file_try_write_lock(pContext->log_fd)) != 0) {
            close(pContext->log_fd);
            pContext->log_fd = STDERR_FILENO;
            return result;
        }
    }

    if (pContext->take_over_stderr) {
        if (dup2(pContext->log_fd, STDERR_FILENO) < 0) {
            fprintf(stderr, "file: "__FILE__", line: %d, "
                    "call dup2 fail, errno: %d, error info: %s\n",
                    __LINE__, errno, STRERROR(errno));
        }
    }

    if (pContext->take_over_stdout) {
        if (dup2(pContext->log_fd, STDOUT_FILENO) < 0) {
            fprintf(stderr, "file: "__FILE__", line: %d, "
                    "call dup2 fail, errno: %d, error info: %s\n",
                    __LINE__, errno, STRERROR(errno));
        }
    }

	pContext->current_size = lseek(pContext->log_fd, 0, SEEK_END);
	if (pContext->current_size < 0)
	{
		fprintf(stderr, "lseek file \"%s\" fail, " \
			"errno: %d, error info: %s\n", \
			pContext->log_filename, errno, STRERROR(errno));
		return errno != 0 ? errno : EACCES;
	}
    if (pContext->current_size == 0 && pContext->print_header_callback != NULL)
    {
        log_print_header(pContext);
    }

	return 0;
}
Ejemplo n.º 3
0
void log_set_header_callback(LogContext *pContext, LogHeaderCallback header_callback)
{
	pContext->print_header_callback = header_callback;
    if (pContext->print_header_callback != NULL)
    {
        int64_t current_size;

		pthread_mutex_lock(&(pContext->log_thread_lock));
        current_size = pContext->current_size;
		pthread_mutex_unlock(&(pContext->log_thread_lock));
        if (current_size == 0)
        {
            log_print_header(pContext);
        }
    }
}