#include #include #include #include #include #include #include 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); }