X-Git-Url: http://royale.zerezo.com/git/?p=irssistats;a=blobdiff_plain;f=irssistats.c;h=c4e9af2b5dc7d11e5533725a433b2f2d567a74d3;hp=66522e86445defd2d18ba64169bac31c534811fa;hb=refs%2Ftags%2Fv0.73;hpb=5fb3a5641346b7e7851d5d0f8f84047e25be8c20 diff --git a/irssistats.c b/irssistats.c index 66522e8..c4e9af2 100644 --- a/irssistats.c +++ b/irssistats.c @@ -1,5 +1,5 @@ /* - * irssistats version 0.72 + * irssistats version 0.73 * * This tool generates IRC stats based on irssi logs. * Usage: irssistats [/path/to/file.conf] @@ -49,7 +49,7 @@ #define MINWORDLENGTH 5 /* irssistats */ -#define VERSION "0.72" +#define VERSION "0.73" #define URL "http://royale.zerezo.com/irssistats/" /* Counters */ @@ -71,7 +71,7 @@ char *counters[NBCOUNTERS]={"C_SMILE","C_FROWN","C_EXCLAM","C_QUESTION","C_ME"," /* Languages */ #define NBLANGUAGES 11 -#define NBKEYS 39 +#define NBKEYS 41 char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and abbreviation */ { { /* English language */ @@ -79,7 +79,9 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "CHARSET", "ISO-8859-1" }, { "HEADER", "Statistics for %s by %s" }, { "LEGEND", "Legend" }, - { "LASTDAYS", "Lastdays statistics" }, + { "LASTDAYS", "Last days statistics" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Hourly statistics" }, { "TOPUSERS", "Most active people" }, { "OTHERS", "There are %d left not ranked..." }, @@ -122,6 +124,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Statistiques de %s par %s" }, { "LEGEND", "Légende" }, { "LASTDAYS", "Statistiques des derniers jours" }, + { "LASTWEEKS", "Statistiques des dernières semaines" }, + { "LASTMONTHS", "Statistiques des derniers mois" }, { "TOPHOURS", "Statistiques horaires" }, { "TOPUSERS", "Personnes les plus actives" }, { "OTHERS", "Il reste %d personnes non classées..." }, @@ -165,6 +169,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Statistiken für %s von %s" }, { "LEGEND", "Legende" }, { "LASTDAYS", "Statistik der letzten Tage" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Stündliche Statistik" }, { "TOPUSERS", "Die aktivsten Personen" }, { "OTHERS", "Es bleiben noch %d uneingetragene" }, @@ -192,7 +198,7 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "C_EXCLAM", "schreit oft !" }, { "C_QUESTION", "stellt viele Fragen ?" }, { "C_ME", "mag /me'en" }, - { "C_TOPIC", "aendert oft das Topico" }, + { "C_TOPIC", "aendert oft das Topic" }, { "C_MODE", "aendert oft die Modes" }, { "C_KICK", "mag /kick'en" }, { "C_KICKED", "wird oft gekickt"}, @@ -208,6 +214,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Estadísticas de %s por %s" }, { "LEGEND", "Leyenda" }, { "LASTDAYS", "Estadísticas de los últimos días" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Estadísticas por horas" }, { "TOPUSERS", "Los que más escriben" }, { "OTHERS", "Hay %d más que no llegaron..." }, @@ -251,6 +259,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Statystyki dla %s zebrane przez %s" }, { "LEGEND", "Legenda" }, { "LASTDAYS", "Statystyki z ostatnich dni" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Statystyki godzinowe" }, { "TOPUSERS", "Najaktywniejsi" }, { "OTHERS", "Jest jeszcze %d nie sklasyfikowanych..." }, @@ -294,6 +304,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Statystyki dla %s przez %s" }, { "LEGEND", "Legenda" }, { "LASTDAYS", "Statystyki z ostatnich dni" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Statystyki godzinne" }, { "TOPUSERS", "Najaktywniejsi ludzie" }, { "OTHERS", "Zostalo jeszcze %d nie sklasyfikowanych..." }, @@ -337,6 +349,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Kanavan %s tilastot - %s" }, { "LEGEND", "Merkkien selitykset" }, { "LASTDAYS", "Viime päivien tilastot" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Tilastot tunneittain" }, { "TOPUSERS", "Aktiivisimmat ihmiset" }, { "OTHERS", "Jäljelle jäi %d joita ei listattu..." }, @@ -380,6 +394,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Statistiche per il canale %s di %s" }, { "LEGEND", "Legenda" }, { "LASTDAYS", "Statistiche degli ultimi giorni" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Statistiche in ore" }, { "TOPUSERS", "Utenti più attivi" }, { "OTHERS", "Ci sono %d utenti non classificati..." }, @@ -424,6 +440,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Statistieken voor %s door %s" }, { "LEGEND", "Legenda" }, { "LASTDAYS", "Statistieken van de laatste dagen" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Statistieken per uur" }, { "TOPUSERS", "Meest actieve mensen" }, { "OTHERS", "Er zijn nog %d mensen die de top niet haalden..." }, @@ -467,6 +485,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "óÔÁÔÉÓÔÉËÁ ÄÌÑ %s ÏÔ %s" }, { "LEGEND", "ïÂÏÚÎÁÞÅÎÉÑ" }, { "LASTDAYS", "óÔÁÔÉÓÔÉËÁ ÐÏÓÌÅÄÎÉÈ ÄÎÅÊ" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "ðÏÞÁÓÏ×ÁÑ ÓÔÁÔÉÓÔÉËÁ" }, { "TOPUSERS", "áËÔÉ×ÎÅÊÛÉÅ ÌÀÄÉ" }, { "OTHERS", "ïÓÔÁÌÏÓØ %d ÎÅÐÏÄÓÞÉÔÁÎÙÈ..." }, @@ -510,6 +530,8 @@ char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and ab { "HEADER", "Statistika kanalile %s on koostanud %s" }, { "LEGEND", "Legend" }, { "LASTDAYS", "Viimaste päevade statistika" }, + { "LASTWEEKS", "Last weeks statistics" }, + { "LASTMONTHS", "Last months statistics" }, { "TOPHOURS", "Tunni statistika" }, { "TOPUSERS", "Kõige aktiivsemad inimesed" }, { "OTHERS", "%d inimest on rääkinud" }, @@ -574,6 +596,8 @@ time_t debut; int top_words=1; /* 0 = disabled */ int ranking=0; /* 0 = lines ; 1 = words ; 2 = letters */ int quarter=0; /* 1 = enabled */ +int months=0; /* 1 = enabled */ +int weeks=0; /* 1 = enabled */ int photo_size=60; struct user @@ -610,9 +634,10 @@ struct { int lines; int hours[4]; -} lastdays[31]; +} lastdays[31], lastweeks[31], lastmonths[31]; int days=0; char currday[16]; +int currwday=-1, currmon=-1; int hours[24*4]; int lines=0; @@ -862,6 +887,7 @@ void day_changed(char* date) { int i,j; char newday[16]; + struct tm currdate; memcpy(newday, date, 11); if (date[13]==':') @@ -886,6 +912,36 @@ void day_changed(char* date) memcpy(currday, newday, 15); if (debug==2) fprintf(stderr, "day %d changed to: %s\n", days, currday); + + /* try to parse the date for weeks/months stats */ + if (strptime(currday, "%a %b %d %Y", &currdate)) + { + /* each monday we change the week number */ + if (currdate.tm_wday == 1) + { + for (i=30;i>0;i--) + { + lastweeks[i].lines=lastweeks[i-1].lines; + for (j=0;j<4;j++) lastweeks[i].hours[j]=lastweeks[i-1].hours[j]; + } + lastweeks[0].lines=0; + for (j=0;j<4;j++) lastweeks[0].hours[j]=0; + } + /* if the month has changed */ + if (currdate.tm_mon != currmon && currmon > 0) + { + for (i=30;i>0;i--) + { + lastmonths[i].lines=lastmonths[i-1].lines; + for (j=0;j<4;j++) lastmonths[i].hours[j]=lastmonths[i-1].hours[j]; + } + lastmonths[0].lines=0; + for (j=0;j<4;j++) lastmonths[0].hours[j]=0; + } + currwday = currdate.tm_wday; + currmon = currdate.tm_mon; + + } } else { if (debug==2) fprintf(stderr, "but day did not change\n"); @@ -1088,6 +1144,10 @@ void parse_log(char *logfile) users[i].hours[hour/6]++; lastdays[0].lines++; lastdays[0].hours[hour/6]++; + lastweeks[0].lines++; + lastweeks[0].hours[hour/6]++; + lastmonths[0].lines++; + lastmonths[0].hours[hour/6]++; lines++; if (quarter) { @@ -1214,7 +1274,8 @@ void gen_xhtml(char *xhtmlfile) fprintf(fic,"\n\n",L("CHARSET")); if (refresh_time) fprintf(fic,"\n",refresh_time); - subtheme=strtok(theme,","); + strcpy(line, theme); + subtheme=strtok(line,","); fprintf(fic,"\n",subtheme,subtheme); while ((subtheme=strtok(NULL,","))!=NULL) fprintf(fic,"\n",subtheme,subtheme); @@ -1236,6 +1297,42 @@ void gen_xhtml(char *xhtmlfile) for (i=0;i<4;i++) fprintf(fic,"
%s %d-%d\n",i+1,L("HOURS"),i*6,i*6+5); fprintf(fic,"\n\n\n\n"); + if (months) + { + /* last months */ + fprintf(fic,"
\n

%s

\n\n\n",L("LASTMONTHS")); + max=-1; + for (i=30;i>=0;i--) if (lastmonths[i].lines>max) max=lastmonths[i].lines; + for (i=30;i>=0;i--) + { + fprintf(fic,"\n"); + } + fprintf(fic,"\n\n"); + for (i=30;i>=0;i--) + fprintf(fic,"\n",i); + fprintf(fic,"\n
%d",lastmonths[i].lines); + for (j=0;j<4;j++) if (lastmonths[i].hours[j]!=0) fprintf(fic,"
",j+1,150*lastmonths[i].hours[j]/max); + fprintf(fic,"
%d
\n
\n\n"); + } + + if (weeks) + { + /* last weeks */ + fprintf(fic,"
\n

%s

\n\n\n",L("LASTWEEKS")); + max=-1; + for (i=30;i>=0;i--) if (lastweeks[i].lines>max) max=lastweeks[i].lines; + for (i=30;i>=0;i--) + { + fprintf(fic,"\n"); + } + fprintf(fic,"\n\n"); + for (i=30;i>=0;i--) + fprintf(fic,"\n",i); + fprintf(fic,"\n
%d",lastweeks[i].lines); + for (j=0;j<4;j++) if (lastweeks[i].hours[j]!=0) fprintf(fic,"
",j+1,150*lastweeks[i].hours[j]/max); + fprintf(fic,"
%d
\n
\n\n"); + } + /* last days */ fprintf(fic,"
\n

%s

\n\n\n",L("LASTDAYS")); max=-1; @@ -1430,9 +1527,10 @@ void gen_xhtml(char *xhtmlfile) if (logo) fprintf(fic,"
\n\n"); /* end */ + fprintf(fic,"\n\n"); if (strcmp("none",footer)==0) { - fprintf(fic,"\n\n\n\n\n"); + fprintf(fic,"\n\n\n"); } else { @@ -1462,7 +1560,7 @@ void parse_config(char *configfile) char keyword[MAXLINELENGTH]; char value[MAXLINELENGTH]; int configlines=0; - int i; + int i,j; if (configfile!=NULL) { @@ -1627,8 +1725,22 @@ void parse_config(char *configfile) nburls=0; nbtopics=0; days=0; + currwday=-1; + currmon=-1; for (i=0;i<24*4;i++) hours[i]=0; lines=0; + for (i=0;i<31;i++) + { + lastdays[i].lines=0; + lastweeks[i].lines=0; + lastmonths[i].lines=0; + for (j=0;j<4;j++) + { + lastdays[i].hours[j]=0; + lastweeks[i].hours[j]=0; + lastmonths[i].hours[j]=0; + } + } freewords(&words); freeruswords(&ruswords); for (i=0;i