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