From feca811e0e0afcd67e9153522d40ae58bb468b2f Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Tue, 9 Nov 2010 18:56:23 +0100 Subject: Modified time branch to store only first and last time seen. --- parsing.c | 171 +++++++++++++++----------------------------------------------- 1 file changed, 42 insertions(+), 129 deletions(-) (limited to 'parsing.c') diff --git a/parsing.c b/parsing.c index fea0e96..8875f61 100644 --- a/parsing.c +++ b/parsing.c @@ -18,7 +18,7 @@ #define TIME_BUFFER_SIZE 0xf #define DATE_BUFFER_SIZE 0x20 -static pthread_mutex_t user_mutex, user_time_mutex, word_mutex, channel_mutex, time_mutex; +static pthread_mutex_t user_mutex, word_mutex, channel_mutex, time_mutex; static struct user_t *last_user = NULL; static int in_monolog = 0, monolog_len = 0; @@ -99,11 +99,6 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * wchar_t wtext[TEXT_BUFFER_SIZE]; mbstowcs(wtext, text, TEXT_BUFFER_SIZE); - pthread_mutex_lock(&user_mutex); - user->characters += wcslen(wtext); - user->lines[time_i]++; - pthread_mutex_unlock(&user_mutex); - pthread_mutex_lock(&time_mutex); now = now_global; pthread_mutex_unlock(&time_mutex); @@ -112,21 +107,15 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * now.tm_min = min; time_t now_ut = mktime(&now); - pthread_mutex_lock(&user_time_mutex); - struct user_time_t *user_time = user_time_get(nick, 0); - if(user_time->seen_first == 0) { - user_time->seen_first = now_ut; - } - /* Set if user is not yet seen. */ - if(user_time->last_join == 0) { - user_time->last_join = now_ut; - } - /* Add to online total. */ - if(user_time->seen_last > 0) { - user_time->time_total += now_ut - user_time->seen_last; + pthread_mutex_lock(&user_mutex); + user->characters += wcslen(wtext); + user->lines[time_i]++; + + if(user->seen_first == 0) { + user->seen_first = now_ut; } - user_time->seen_last = now_ut; - pthread_mutex_unlock(&user_time_mutex); + user->seen_last = now_ut; + pthread_mutex_unlock(&user_mutex); pthread_mutex_lock(&channel_mutex); channel->hours[time_i]++; @@ -175,14 +164,14 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * now.tm_min = min; time_t now_ut = mktime(&now); - pthread_mutex_lock(&user_time_mutex); - struct user_time_t *user_time = user_time_get(nick, 0); + pthread_mutex_lock(&user_mutex); + struct user_t *user = user_get(nick); - if(user_time->seen_first == 0) { - user_time->seen_first = now_ut; + if(user->seen_first == 0) { + user->seen_first = now_ut; } - user_time->last_join = user_time->seen_last = now_ut; - pthread_mutex_unlock(&user_time_mutex); + user->seen_last = now_ut; + pthread_mutex_unlock(&user_mutex); continue; } @@ -206,24 +195,14 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * now.tm_min = min; time_t now_ut = mktime(&now); - pthread_mutex_lock(&user_time_mutex); - struct user_time_t *user_time = user_time_get(nick, 1); - - if(user_time->real_user) { - struct user_time_t *temp = user_time->real_user; - user_time->real_user = NULL; - user_time = temp; - } + pthread_mutex_lock(&user_mutex); + struct user_t *user = user_get(nick); - if(user_time->seen_first == 0) { - user_time->seen_first = now_ut; + if(user->seen_first == 0) { + user->seen_first = now_ut; } - /* Add to online total. */ - if(user_time->seen_last > 0) { - user_time->time_total += now_ut - user_time->seen_last; - } - user_time->seen_last = now_ut; - pthread_mutex_unlock(&user_time_mutex); + user->seen_last = now_ut; + pthread_mutex_unlock(&user_mutex); continue; } @@ -247,32 +226,21 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * now.tm_min = min; time_t now_ut = mktime(&now); - pthread_mutex_lock(&user_time_mutex); - struct user_time_t *user_time = user_time_get(nick, 1); - - if(user_time->real_user) { - struct user_time_t *temp = user_time->real_user; - user_time->real_user = NULL; - user_time = temp; - } + pthread_mutex_lock(&user_mutex); + struct user_t *user = user_get(nick); - if(user_time->seen_first == 0) { - user_time->seen_first = now_ut; + if(user->seen_first == 0) { + user->seen_first = now_ut; } - /* Add to online total. */ - if(user_time->seen_last > 0) { - user_time->time_total += now_ut - user_time->seen_last; - } - user_time->seen_last = now_ut; - pthread_mutex_unlock(&user_time_mutex); + user->seen_last = now_ut; + pthread_mutex_unlock(&user_mutex); continue; } rc = pcre_exec(rs->nick_changed, rs->nick_changed_e, line, strlen(line), 0, 0, ovector, 30); if(rc > 0) { - char oldnick[NICK_BUFFER_SIZE], newnick[NICK_BUFFER_SIZE], hour_s[TIME_BUFFER_SIZE], min_s[TIME_BUFFER_SIZE]; - pcre_copy_named_substring(rs->nick_changed, line, ovector, rc, "old_nick", oldnick, NICK_BUFFER_SIZE); + char newnick[NICK_BUFFER_SIZE], hour_s[TIME_BUFFER_SIZE], min_s[TIME_BUFFER_SIZE]; pcre_copy_named_substring(rs->nick_changed, line, ovector, rc, "new_nick", newnick, NICK_BUFFER_SIZE); pcre_copy_named_substring(rs->nick_changed, line, ovector, rc, "hour", hour_s, TIME_BUFFER_SIZE); pcre_copy_named_substring(rs->nick_changed, line, ovector, rc, "minute", min_s, TIME_BUFFER_SIZE); @@ -289,24 +257,14 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * now.tm_min = min; time_t now_ut = mktime(&now); - pthread_mutex_lock(&user_time_mutex); - struct user_time_t *from_user = user_time_get(oldnick, 1); - struct user_time_t *to_user = user_time_get(newnick, 1); + pthread_mutex_lock(&user_mutex); + struct user_t *user = user_get(newnick); - if(from_user->real_user) { - to_user->real_user = from_user->real_user; - from_user->real_user = NULL; - } else { - to_user->real_user = from_user; + if(user->seen_first == 0) { + user->seen_first = now_ut; } - if(to_user->real_user) { - to_user->time_total += now_ut - to_user->seen_last; - to_user->real_user->seen_last = now_ut; - } else { - from_user->time_total += now_ut - from_user->seen_last; - from_user->seen_last = now_ut; - } - pthread_mutex_unlock(&user_time_mutex); + user->seen_last = now_ut; + pthread_mutex_unlock(&user_mutex); continue; } @@ -321,7 +279,7 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * pcre_copy_named_substring(rs->log_opened, line, ovector, rc, "date", date, DATE_BUFFER_SIZE); if(!strptime(date, log_date_format, &now)) { - printf("log fail: %s\n", date); + fprintf(stderr, "log fail: %s\n", date); continue; } @@ -332,7 +290,8 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * continue; } - rc = pcre_exec(rs->day_changed, rs->day_changed_e, line, strlen(line), 0, 0, ovector, 30); + /* day_changed is optional */ + rc = rs->day_changed ? pcre_exec(rs->day_changed, rs->day_changed_e, line, strlen(line), 0, 0, ovector, 30) : 0; if(rc > 0) { char date[DATE_BUFFER_SIZE]; @@ -342,7 +301,7 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * pcre_copy_named_substring(rs->day_changed, line, ovector, rc, "date", date, DATE_BUFFER_SIZE); if(!strptime(date, day_date_format, &now)) { - printf("day fail: %s\n", date); + fprintf(stderr, "day fail: %s\n", date); continue; } @@ -378,19 +337,12 @@ static void process_file(FILE *f, struct channel_t *channel, struct regexset_t * *victim_user = user_get(victim); user->kicks++; victim_user->kicked++; - pthread_mutex_unlock(&user_mutex); - pthread_mutex_lock(&user_time_mutex); - struct user_time_t *user_time = user_time_get(nick, 0); - if(user_time->seen_first == 0) { - user_time->seen_first = now_ut; - } - /* Add to online total. */ - if(user_time->seen_last > 0) { - user_time->time_total += now_ut - user_time->seen_last; + if(user->seen_first == 0) { + user->seen_first = now_ut; } - user_time->seen_last = now_ut; - pthread_mutex_unlock(&user_time_mutex); + user->seen_last = now_ut; + pthread_mutex_unlock(&user_mutex); continue; } @@ -410,49 +362,14 @@ static void *thread_func(void *arg) { return NULL; } -static void merge_user_time_data(struct user_time_t *user_time) { - struct user_t *user; - - user = user_get(user_time->nick); - - if(user->seen_first == 0 || user_time->seen_first < user->seen_first) { - user->seen_first = user_time->seen_first; - } - - if(user_time->seen_last > user->seen_last) { - user->seen_last = user_time->seen_last; - } - - printf("adding %lu to %s\n", user_time->time_total, user->nick); - user->time_total += user_time->time_total; -} - -static void merge_time_data() { - for(int i = 0; i < USERS_MAX; i++) { - struct user_time_t *user_time; - - user_time = &users_time[i]; - if(user_time->nick) - merge_user_time_data(user_time); - user_time = user_time->next; - - while(user_time) { - merge_user_time_data(user_time); - user_time = user_time->next; - } - } -} - void process(int thread_n) { pthread_mutex_init(&user_mutex, NULL); - pthread_mutex_init(&user_time_mutex, NULL); pthread_mutex_init(&word_mutex, NULL); pthread_mutex_init(&channel_mutex, NULL); pthread_mutex_init(&time_mutex, NULL); /* Parsing stuff goes here. */ for(int chan_i = 0; chan_i < channel_get_count(); chan_i++) { user_init(); - user_time_init(); word_init(); struct channel_t *channel = channel_get(chan_i); printf("Channel %s\n", channel->name); @@ -488,16 +405,12 @@ void process(int thread_n) { file = file->next; } - merge_time_data(); - export_xml(channel, users); user_free(); - user_time_free(); word_free(); } pthread_mutex_destroy(&time_mutex); pthread_mutex_destroy(&user_mutex); - pthread_mutex_destroy(&user_time_mutex); pthread_mutex_destroy(&word_mutex); pthread_mutex_destroy(&channel_mutex); } -- cgit v1.2.3