Ejemplo n.º 1
0
/*
 * init_running_print, if sucess then return fp, else return NULL
 */
FILE *
init_running_print()
{
    int    i=0, k=0;
    FILE  *fp, *fptmp;
    char   line[LEN_10240] = {0};
    char   filename[LEN_128] = {0};

    /* will print tail*/
    conf.print_tail = 1;

    fp = fopen(conf.output_file_path, "r");//读取/var/log/tsar.data文件
    if (!fp) {
        do_debug(LOG_FATAL, "unable to open the log file %s\n", conf.output_file_path);
    }
    /*log number to use for print*/
    conf.print_file_number = -1;
    /* find start offset will print from tsar.data */
    k=find_offset_from_start(fp, i);//在tsar.data文件中,用二分查找,找出要开始打印的行的位置放在print_file_number。
    if (k == 1) {//如果返回1,代表当前的文件里面没有数据,数据在后面的文件中。用同样的方法扫描后面的文件。
        /*find all possible record*/
        for (i=1; ; i++) {
            memset(filename, 0, sizeof(filename));
            sprintf(filename, "%s.%d", conf.output_file_path, i);
            fptmp = fopen(filename, "r");
            if (!fptmp) {
                conf.print_file_number = i - 1;
                break;
            }

            k=find_offset_from_start(fptmp, i);
            if (k==0 || k==4) {
                if (fclose(fp) < 0) {
                    do_debug(LOG_FATAL, "fclose error:%s", strerror(errno));
                }
                fp=fptmp;
                break;
            }
            if (k== 2) {
                if (fseek(fp, 0, SEEK_SET) != 0) {
                    do_debug(LOG_FATAL, "fseek error:%s", strerror(errno));
                }
                if (fclose(fptmp) < 0) {
                    do_debug(LOG_FATAL, "fclose error:%s", strerror(errno));
                }
                break;
            }
            if (k == 1) {
                if (fclose(fp) < 0) {
                    do_debug(LOG_FATAL, "fclose error:%s", strerror(errno));
                }
                fp=fptmp;
                continue;
            }
            if (k == 5 || k == 6) {
                do_debug(LOG_FATAL, "log format error or find_offset_from_start have a bug. error code=%d\n", k);
            }
        }
    }

    if (k == 5 || k == 6) {
        do_debug(LOG_FATAL, "log format error or find_offset_from_start have a bug. error code=%d\n", k);
    }
    /* get record */
    if (!fgets(line, LEN_10240, fp)) {
        do_debug(LOG_FATAL, "can't get enough log info\n");
    }

    /* read one line to init module parameter */
    read_line_to_module_record(line);//读取一行数据到每个模块的mod->record

    /* print header */
    print_header();//打印头部信息

    /* set struct module fields */
    init_module_fields();

    set_record_time(line);//更新conf.print_interval的间隔时间
    return fp;
}
Ejemplo n.º 2
0
/*
 * init_running_print, if sucess then return fp, else return NULL
 */
FILE *init_running_print()
{
	int	i=0,k=0;
	FILE	*fp,*fptmp;
	char	line[LEN_10240] = {0};
	char	filename[LEN_128] = {0};

	/* will print tail*/
	conf.print_tail = 1;

	fp = fopen(conf.output_file_path, "r");
	if (!fp){
		do_debug(LOG_FATAL, "unable to open the log file %s\n",conf.output_file_path);
	}
	/*log number to use for print*/
	conf.print_file_number = -1;
	/* find start offset will print from tsar.data */
	k=find_offset_from_start(fp,i);
	if(k==1){
		/*find all possible record*/
		for(i=1;;i++){
			memset(filename,0,sizeof(filename));
			sprintf(filename,"%s.%d",conf.output_file_path,i);
			fptmp = fopen(filename, "r");
			if(!fptmp){
				conf.print_file_number = i - 1;
				break;
			}

			k=find_offset_from_start(fptmp,i);
			if(k==0 || k==4){
				fclose(fp);
				fp=fptmp;
				break;
			}
			if(k==2){
				fseek(fp,0,SEEK_SET);
				fclose(fptmp);
				break;
			}
			if(k==1){
				fclose(fp);
				fp=fptmp;
				continue;
			}
			if(k==5 || k==6){
				do_debug(LOG_FATAL, "log format error or find_offset_from_start have a bug. error code=%d\n",k);
			}
		}
	}

	if(k==5 || k==6){
		do_debug(LOG_FATAL, "log format error or find_offset_from_start have a bug. error code=%d\n",k);
	}
	/* get record */
	if (!fgets(line, LEN_10240, fp)) {
		do_debug(LOG_FATAL, "can't get enough log info\n");
	}

	/* read one line to init module parameter */
	read_line_to_module_record(line);

	/* print header */
	print_header();

	/* set struct module fields */	
	init_module_fields();

	set_record_time(line);
	return fp;
}