#include #include #include #include #include #define LOG_MODE 1 #include #include typedef struct { double sec; long count; struct timeval start; struct timeval stop; } cpt; #define t_init(x) {x.sec = 0; x.count = 0;} #define t_start(x) {gettimeofday(&(x.start), NULL);} #define t_stop(x) {gettimeofday(&(x.stop), NULL); x.sec += (double)(x.stop.tv_sec) - (double)(x.start.tv_sec) + ((double)(x.stop.tv_usec) - (double)(x.start.tv_usec)) / 1000000; x.count++;} int main (int argc, char ** argv) { LOGT_Channel * My_Channel; char Line [1000], * Event_Data; FILE * fid; unsigned int Nb_Send, Line_Number, i; cpt Compteur; if (argc != 2) { fprintf (stderr, "Usage : %s \n", argv [0]); return -1; } /* Ouverture du fichier de test */ fid = fopen (argv [1], "r"); if (!fid) { fprintf (stderr, "Unable to open file \"%s\" for reading\n", argv [1]); return -1; } /* Ouverture de la librairie */ if (LOG_Library_Open (0, NULL, LOGD_OPEN | LOGD_DEBUG_ALL) != LOGS_OK) { fprintf (stderr, "\n=> Impossible d'ouvrir la librairie LIBLOG\n"); return -1; } /* Ouverture d'un channel */ if (LOG_Channel_Open (&My_Channel, 0, 1, "IPR_CAVpopulate2.pc", "IPR_CAV") != LOGS_OK) { fprintf (stderr, "\n=> Impossible d'ouvrir un channel\n"); return -1; } /* Ajout des tables de routage utilisateur */ if (TL_Channel_RTab_Add (My_Channel, "UTILS:ROOTING:ROOTING_TABLE") != TLS_OK) { fprintf (stderr, "\n=> Impossible d'ajouter les tables de routage au channel\n"); LOG_Channel_Close (My_Channel); return -1; } /* Ajout des triggers */ if (TL_Channel_Trigger_Add (My_Channel, "UTILS:ROOTING:TRIGGER") != TLS_OK) { fprintf (stderr, "\n=> Impossible d'ajouter les triggers au channel\n"); LOG_Channel_Close (My_Channel); return -1; } /* Initialisation du compteur */ t_init (Compteur); /* Envoi des événements paramétrés dans le fichier */ Line_Number = 1; while (!feof (fid) && fgets (Line, 1000, fid)) { /* Récupération des informations dans la ligne du fichier */ Event_Data = strchr (Line, '#'); if (Event_Data == NULL) { fprintf (stderr, "Warning ligne n°%d : format incorrect (caractère '#' manquant)\n", Line_Number); } else { *Event_Data = (char)0; Nb_Send = atoi (Line); if (Nb_Send <= 0) { fprintf (stderr, "Warning ligne n°%d : valeur (%d) incorrecte avant le caracatère '#'\n", Line_Number, Nb_Send); Nb_Send = 1; } Event_Data++; for (i = 0; i < Nb_Send; i++) { t_start (Compteur); /* Envoi de l'événement proprement dit */ if (LOG_Event_External_Send (My_Channel, argv [1], Event_Data) == LOGD_RC_WARNING) fprintf (stderr, "Warning ligne n°%d : code retour WARNING sur envoi de l'événement\n", Line_Number); t_stop (Compteur); } } Line_Number++; } fclose (fid); /* Affichage du résultat du benchmark */ fprintf (stdout, "%ld événements envoyés en %.2f sec (%.2f évt/sec)\n", Compteur.count, Compteur.sec, Compteur.count / Compteur.sec); /* Fermeture du channel */ if (LOG_Channel_Close (My_Channel) != LOGS_OK) { fprintf (stderr, "\n=> Impossible de fermer le channel\n"); return -1; } /* Fermeture de la librairie */ if (LOG_Library_Close (LOGD_CLOSE) != LOGS_OK) { fprintf (stderr, "\n=> Impossible de fermer la librairie LIBLOG\n"); return -1; } return 1; }