128 lines
3.0 KiB
C
128 lines
3.0 KiB
C
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
|
|
char **str_to_word_array(char *str);
|
|
void print_tab(char **tab);
|
|
|
|
|
|
char *open_file(char *path)
|
|
{
|
|
struct stat s;
|
|
int fd = open(path, O_RDONLY);
|
|
int tkt = stat(path, &s);
|
|
char *str = NULL;
|
|
if (fd < 0 || tkt < 0) {
|
|
write(2, "File not found.\n", 16);
|
|
exit(84);
|
|
}
|
|
str = malloc(sizeof(char) * s.st_size + 1);
|
|
if (read(fd, str, s.st_size) <= 0) {
|
|
write(2, "can't read file\n", 16);
|
|
exit (84);
|
|
}
|
|
str[s.st_size] = 0;
|
|
close(fd);
|
|
return (str);
|
|
}
|
|
|
|
char **word_array_date(char **fc)
|
|
{
|
|
char **tab = malloc(sizeof(char *) * 100000);
|
|
for (int i = 0; i != 9999; i++) {
|
|
tab[i] = malloc(sizeof(char) * 13);
|
|
tab[i][12] = 0;
|
|
}
|
|
int j = 0;
|
|
strncpy(tab[0], fc[0], 12);
|
|
for (int i = 0; fc[i] != NULL; i++) {
|
|
if (strncmp(tab[j], fc[i], 12) != 0 && fc[i][0] == '[') {
|
|
j++;
|
|
strncpy(tab[j], fc[i], 12);
|
|
}
|
|
}
|
|
tab[j + 1] = NULL;
|
|
return (tab);
|
|
}
|
|
|
|
char **parse_log_file(char *path)
|
|
{
|
|
int nb_new_error = 0;
|
|
int nb_new_notice = 0;
|
|
int nb_new_warning = 0;
|
|
int nb_new_fatal = 0;
|
|
int nb_total = 0;
|
|
char *file = open_file(path);
|
|
char **tab = str_to_word_array(file);
|
|
char **date = word_array_date(tab);
|
|
for (int j = 0; date[j] != NULL; j++) {
|
|
for (int i = 0; tab[i] != NULL; i++) {
|
|
if (strncmp(tab[i], date[j], 12) == 0 && strncmp(tab[i] + 27, "PHP Fatal error:", 17) == 0)
|
|
nb_new_fatal++;
|
|
if (strncmp(tab[i], date[j], 12) == 0 && strncmp(tab[i] + 27, "PHP Warning:", 12) == 0)
|
|
nb_new_warning++;
|
|
if (strncmp(tab[i], date[j], 12) == 0 && strncmp(tab[i] + 27, "PHP Parse error:", 16) == 0)
|
|
nb_new_error++;
|
|
if (strncmp(tab[i], date[j], 12) == 0 && strncmp(tab[i] + 27, "PHP Notice:", 11) == 0)
|
|
nb_new_notice++;
|
|
}
|
|
|
|
printf("Pour la date du: %s\n", date[j] + 1);
|
|
printf("Nombre de nouvelle ligne: %d\n", nb_new_error + nb_new_fatal + nb_new_notice + nb_new_warning);
|
|
printf("Nombre d'erreurs: %d\n", nb_new_error);
|
|
printf("Nombre d'erreurs fatales: %d\n", nb_new_fatal);
|
|
printf("Nombre de notices: %d\n", nb_new_notice);
|
|
printf("Nombre de warning: %d\n\n", nb_new_warning);
|
|
nb_total += nb_new_error + nb_new_notice + nb_new_warning + nb_new_fatal;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// LE TRAITEMENT EN HTML
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nb_new_error = 0;
|
|
nb_new_notice = 0;
|
|
nb_new_warning = 0;
|
|
nb_new_fatal = 0;
|
|
|
|
|
|
}
|
|
printf("Total de ligne: %d\n", nb_total);
|
|
return(tab);
|
|
}
|
|
|
|
int main(int ac, char **av)
|
|
/*GERER LES ARGUMENT LO
|
|
Crée les graph et le HTML */
|
|
{
|
|
if (ac != 2) {
|
|
write (2, "Manque l'argument du nom de fichier\n", 37);
|
|
return (84);
|
|
}
|
|
char **tab = parse_log_file(av[1]);
|
|
|
|
return (0);
|
|
} |