Analyse fichier log a faire en C

Signaler
Messages postés
5
Date d'inscription
dimanche 28 avril 2002
Statut
Membre
Dernière intervention
2 juin 2002
-
Messages postés
1
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
24 février 2003
-
A l'aideeeeeeeeeeeeeeeeeeeeeeeeee
***************************************

Les serveurs web enregistrent la trace des visites dans des fichiers de log. Chaque requète (demande d'une page par un navigateur internet) génère une ligne dans un fichier de log (normalement nommé access_log. Ce fichier est utilisé par le webmaster pour déterminer quels sont les pages les plus visitées, combien de visiteurs passent sur le site, etc.
Le but de ce projet est d'écrire un programme permettant d'aider un webmaster à analyser le comportement de ses visiteurs.

Voici un extrait du fichier de log du serveur web de l'IUT:

193.249.12.70 - - [31/Dec/2000:22:26:14 +0500] "GET /precamp.html HTTP/1.1" 200 4775
194.231.30.90 - - [31/Dec/2000:22:26:41 +0500] "GET / HTTP/1.0" 200 6266
193.249.12.70 - - [31/Dec/2000:22:27:01 +0500] "GET /gtr.html HTTP/1.1" 200 9010
64.39.31.110 - - [01/Jan/2001:11:35:08 +0500] "GET / HTTP/1.0" 200 6266
212.217.125.156 - - [01/Jan/2001:21:05:50 +0500] "GET /images/logoiut.gif HTTP/1.0" 200 646
212.217.125.156 - - [01/Jan/2001:21:05:50 +0500] "GET /images/logou2.jpeg HTTP/1.0" 200 3978
212.217.125.156 - - [01/Jan/2001:21:06:16 +0500] "GET /gea.html HTTP/1.0" 200 10052
64.39.31.110 - - [01/Jan/2001:23:26:34 +0500] "GET / HTTP/1.0" 200 6266
216.36.21.13 - - [02/Jan/2001:05:39:42 +0500] "GET / HTTP/1.1" 200 6266
216.36.21.13 - - [02/Jan/2001:05:39:43 +0500] "GET /images/fd.jpeg HTTP/1.1" 200 2089

Les lignes du fichier ont toujours la même structure~: adresse IP du visiteur, date de la requète, requète HTTP. On ignorera la suite de la ligne.
La requète HTTP est normalement GET (on ignorera les autres requètes) et permet de retrouver le nom de la page ou de l'image demandée. Ainsi "GET / HTTP/1.0" est une requète qui demande la page d'accueil (/) du site.

Notons qu'une page qui comporte des images demande plusieurs requètes pour être chargée.

Objectif du programme
Votre programme permettra, à partir d'un fichier de log que l'on vous fournira (fichiers access_log), d'afficher les informations suivantes:
nombre de visites: une visite est caractérisée par le passage d'un visiteur, qui demande quelques pages puis quitte le site. Attention, plusieurs visiteurs peuvent etre actifs simultanément. On introduira un seuil temporel réglable (par exemple, on considera une visite comme terminée s'il n'y a pas de requète depuis 3 minutes). Un visiteur est caractérisé par son adresse IP.
hit parade des pages: afficher la liste des pages vues, triée par nombre de visiteurs.
hit parade des visiteurs: afficher la liste des visiteurs, trié par nombre de visite effectuées.
hit parade des dates: afficher les dates où il y a eu le plus de visites.
Question subsidiaire (non facultative)
Chercher sur Internet des programmes gratuits faisant ce genre de traitements. Quels sont les fonctionnalités qui manquent au votre ?

Voila mon pb c que j'aimerais faire des structures pour selectionner l'ip puis la date et la page visite et ensuite les mettre dans un tabelau pour les trier

Pour le moment j'ai fait qunn truc qui compte le nombre de visite sans rien prendre en compte (pas de timer)

#include <stdio.h> // io access
#include <stdlib.h> // atoi
#include <string.h> // strtok

int nb_de_visites(int argc, char* argv[]);

/**************************************************************************

Procedure Principale

**************************************************************************/

void main ()
{
int toto;
char* titi;
printf("\n");
printf("-------------------------------------------------------------------------------\n");
printf("Analyseur des visites d'un site web \n");
printf("Crée par Nicolas Mrowczynski & Anthony Champalaune\n");
printf("-------------------------------------------------------------------------------\n");
nb_de_visites(toto,&titi); //appelle de la fonction qui donne le nombre de visites
}

/**************************************************************************

Sous Fonctions Utilis‚es

**************************************************************************/

int nb_de_visites(int argc, char* argv[])
{
char line[4096];
int toknum = 0;
char * token;
int hits = 0;

FILE* logfile;

if(argv[1] != NULL)
{
logfile = fopen(argv[1], "r");
}

else
{
printf("Le fichier … analyser existe ,'web1.txt'\n");
logfile = fopen("c:\\web1.txt", "r"); //chemin du fichier
}

if(logfile == NULL)
{
printf("Le fichier n'a pas ‚t‚ trouvé.\n");
return 0;
}

if(!(ferror(logfile)))
{
// on continue a lire le fichier jusqu'a la fin

while( fgets(line, 4096, logfile) != NULL )
{

if(line[0] != '#')
{
hits ++;
if ((hits%50000)==0) printf("Nombre de visites: %i\n", hits); //status
// on efface les informations de la ligne
toknum = 0;
strtok(line, " ");

for(toknum = 0; toknum < 9;
toknum ++) strtok(NULL, " ");
}

}
fclose(logfile); //on ferme le fichier
}

else
{
// Il y'a a une erreur
printf("ERREUR d'ouverture!\n");
}
// On montre le nombre de visites
printf("Le nombre de visites : %i\n", hits);
return 0;
}

Je pense crée des structures ou je vais sélectionner toute les addresses ip , puis une autre avec les dates et enfin une autre avec 'addresse visite puis je trirais cela ensuite mais je sais pas si ca va marche comme ca.
Je vois po comment je peux selectionner les partie qui m'interraise

thx pour l'aide

6 réponses

Messages postés
20
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 juin 2007

En fait ici, tu n'a pas tellement besoin de structures. Tu dois faire, si j'ai bien compris des comptages. L'utilisation de structure va etre utile pour la lecture des requetes, cad que tu pourrais creer une fonction qui converti chaque ligne en une structure. Tu vas donc avoir une structure par ligne. Voic un exemple de structure :

struct Requete
{
int AdresseIP[4];
Date DateRequete;
char* PageDemandee;
}

Voici la definition de la structure Date dont tu as besoin avant la déclaration dee la structure Requete

struct Date
{
int Annee;
int Mois;
int Jour;
int Heure;
int Minute;
int Seconde;
}

Comme tu ne connait pas dans ton programme le nombre de requete, alloue un tableau de Requetes dynamiquement. Tu peux donc maintenant transformer chaque requete en une instance de la structure Requete. J'ai pas le temps d'ecrire le programme en entier. Tu dois ensuite pour le comptage de visite, le hit parade, etc. compter en analysant une par une toutes les structures Requetes pour les compter.

Blustuff.
Messages postés
5
Date d'inscription
dimanche 28 avril 2002
Statut
Membre
Dernière intervention
2 juin 2002

Thx pour l'info je vais faire comme t'a dit :) :) :)
Messages postés
13
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
15 mai 2002
1
J'ai un problême philosophique à lire ton code, en
particulier :

void main ()
{
int toto;
char* titi;
...
nb_de_visites(toto,&titi);
}

"toto" et "titi" ne sont pas initialisés avant l'appel .....
je penserais plutot lire:

void main( int argc, char**argv)
{
nb_de_visite(argc,argv);
}
Messages postés
1
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
7 mai 2002

salut, euh, nicolas ou anthony, je ne sais pas lequel de vous deux a mis ce mess dans le forum...
j'etais tranquillement en train de m'adonner a ma passion -la programmation- (en réalité en train de chercher qqch d'interessant pour mon projet de c...), quand j'ai vu ce message de SOS pour un projet de C que je connais bien... j'ai d'abord pensé que c'etait quelqu'un d'autre qui l'avait posté, mais en lisant ce petit prog, les noms de deux types du groupe G de GTR1 de l'IUT de B. m'ont sauté aux yeux! je sais pas trop si ca gene les profs qu'on demande de l'aide sur le net, mais au cas où, evitez qd meme de laisser vos noms dans le prog, ca serait un coup a vous faire griller...
allez, a lundi!
Messages postés
5
Date d'inscription
dimanche 28 avril 2002
Statut
Membre
Dernière intervention
2 juin 2002

Ca m'apprendra a mettre tjs nos nom des le debut du programme de toute façon le prog c'est nous qui allons le faire c'etait seulement pour savoir comment on peut seelectionner les parties qui nous interraise. Dommage qu'on ne puisse po modifie les messages ,j'aurais vire les nom :(
Messages postés
1
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
24 février 2003

que dirai jeanneret si il voyait cette article lol ^^