fin de la factorisation

This commit is contained in:
2024-10-14 20:33:40 +02:00
parent 9905d215ca
commit 2500c54883
5 changed files with 359 additions and 132 deletions

View File

@@ -1,132 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <regex.h>
#include "../include/utils.h"
#include "../include/stats.h"
#include "../include/db-sqlite.h"
/*
-- get_ping_from_temp_log --
Desc :
Function which get the ping from a temp log containing the last ping did by the program
In-param :
None
Out-param :
None
Return value :
Ping value as a string or NULL if an error occured
*/
/*@null@*/char* get_ping_from_temp_log(){
/* Variables */
FILE* fd = NULL;
char* read_line = NULL;
size_t n = 0;
size_t nmatch = 2;
regex_t *p_reg;
regmatch_t* pmatch;
char* ping = NULL;
int start;
int end;
size_t size_ping;
/* regex struct memory allocation */
p_reg = (regex_t *) malloc(sizeof(*p_reg));
if(p_reg == NULL){
return ping; /* NULL */
}
/* Open ping log file */
fd = fopen("/var/log/ping-report/last-ping.log","r");
if(fd == NULL){
free(p_reg);
return ping; /* NULL */
}
/* Construct regex to get ping from log file */
if(regcomp(p_reg,"time=(.*) ms",REG_EXTENDED) != 0){
if(p_reg != NULL){
free(p_reg);
}
(void) fclose(fd);
return ping; /* NULL */
}
/* match info memory allocation */
pmatch = malloc(sizeof(*pmatch) * nmatch);
if(pmatch == NULL){
(void) fclose(fd);
regfree(p_reg);
free(p_reg);
return ping; /* NULL */
}
/* Read file */
whilegetline(getline(&read_line,&n,fd))
/* free allocated memory */
regfree(p_reg);
free(p_reg);
free(pmatch);
if(read_line != NULL){
free(read_line);
}c
(void) fclose(fd);
/* ping may be null, then it must mean that the ping request was lost */
return ping;
}
void whilegetline( int gegetline) {
while ( gegetline =! -1){
if(read_line == NULL){
break;
}
/* Exec regex to find ping */
if(regexec(p_reg,read_line,nmatch,pmatch,0) == 0){
/* Extract ping position from read line */
start = (int) pmatch[1].rm_so;
end = (int) pmatch[1].rm_egetlineo;
size_ping = (size_t) (end - start);
/* ping string memory allocation */
ping = malloc(sizeof(char) * (size_ping+2));
if(ping == NULL){
free(read_line);
read_line = NULL;
n = 0;
break;
}
/* Create ping string */
(void) strncpy(ping, &read_line[start], size_ping);
ping[size_ping]='\n';
ping[size_ping+1]='\0';
/* Free memory */
free(read_line);
read_line = NULL;
n = 0;
break;
}
free(read_line);
read_line = NULL;
n = 0;
}
}

View File

@@ -0,0 +1,258 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <regex.h>
#include "../include/utils.h"
#include "../include/stats.h"
#include "../include/db-sqlite.h"
/*
-- get_ping_from_temp_log --
Desc :
Function which get the ping from a temp log containing the last ping did by the program
In-param :
None
Out-param :
None
Return value :
Ping value as a string or NULL if an error occured
*/
/*@null@*/ char *get_ping_from_temp_log()
{
/* Variables */
FILE *fd = NULL;
char *read_line = NULL;
size_t n = 0;
size_t nmatch = 2;
regex_t *p_reg;
regmatch_t *pmatch;
char *ping = NULL;
int start;
int end;
size_t size_ping;
/* regex struct memory allocation */
p_reg = (regex_t *)malloc(sizeof(*p_reg));
if (p_reg == NULL)
{
return ping; /* NULL */
}
/* Open ping log file */
fd = fopen("/var/log/ping-report/last-ping.log", "r");
if (fd == NULL)
{
free(p_reg);
return ping; /* NULL */
}
/* Construct regex to get ping from log file */
if (regcomp(p_reg, "time=(.*) ms", REG_EXTENDED) != 0)
{
if (p_reg != NULL)
{
free(p_reg);
}
(void)fclose(fd);
return ping; /* NULL */
}
/* match info memory allocation */
pmatch = malloc(sizeof(*pmatch) * nmatch);
if (pmatch == NULL)
{
(void)fclose(fd);
regfree(p_reg);
free(p_reg);
return ping; /* NULL */
}
/* Read file */
whilegetline(getline(&read_line, &n, fd))
/* free allocated memory */
regfree(p_reg);
free(p_reg);
free(pmatch);
if (read_line != NULL)
{
free(read_line);
}
c
(void) fclose(fd);
/* ping may be null, then it must mean that the ping request was lost */
return ping;
}
void whilegetline(int gegetline)
{
while (gegetline = !-1)
{
if (read_line == NULL)
{
break;
}
/* Exec regex to find ping */
if (regexec(p_reg, read_line, nmatch, pmatch, 0) == 0)
{
/* Extract ping position from read line */
start = (int)pmatch[1].rm_so;
end = (int)pmatch[1].rm_egetlineo;
size_ping = (size_t)(end - start);
/* ping string memory allocation */
ping = malloc(sizeof(char) * (size_ping + 2));
if (ping == NULL)
{
free(read_line);
read_line = NULL;
n = 0;
break;
}
/* Create ping string */
(void)strncpy(ping, &read_line[start], size_ping);
ping[size_ping] = '\n';
ping[size_ping + 1] = '\0';
/* Free memory */
free(read_line);
read_line = NULL;
n = 0;
break;
}
free(read_line);
read_line = NULL;
n = 0;
}
}
/*
-- set_stats_ping --
Desc :
Function which calculate statistics about ping values, from log file.
In-param :
None
Out-param :
None
Return value :
None
*/
void set_stats_ping()
{
/* Variables */
FILE *fd;
/* Open log file */
fd = fopen("/var/log/ping-report/all-ping.log", "r");
if (fd != NULL)
{
whileSet_stats_ping();
}
else
{
perror("stats : ");
}
}
void whileSet_stats_ping()
{
double ping = 0.0;
double sum = 0.0;
double max = 0.0;
double min = 100.0;
double mean = 0.0;
int nb_high = 0;
int nb_loss = 0;
int nb_ping = 0;
char *read_line = NULL;
size_t n = 0;
/* Read file */
while (getline(&read_line, &n, fd) != -1)
{
/* Check getline error */
if (read_line == NULL)
{
break;
}
/* Check if the ping is flagged as LOSS */
if (strcmp(read_line, "LOSS") == 0)
{
nb_loss++;
}
else
{
/* Evaluate the ping as a double */
ping = strtod(read_line, NULL);
/* Test null ping */
if (ping < 0.1)
{
/* Ignore null ping */
}
else
{
/* Number of ping readed (for mean calculation) */
nb_ping++;
evaluatePing(ping,&max,&min,&nb_high,&sum)
}
}
free(read_line);
n = 0;
}
meanCaclulatoion(max,min,nb_high,nb_loss,nb_ping);
}
void evaluatePing(double ping , double *max ,double *min ,int *nb_high, double *sum)
{
/* Max ping */
if (ping > *max)
{
*max = ping;
}
/* Min ping */
if (ping < *min)
{
*min = ping;
}
/* Number of ping above 100 ms */
if (ping > 100.0)
{
(*nb_high)++;
}
/* Sum (for mean calculation) */
*sum += ping;
}
void meanCaclulatoion( double max, double min, int nb_high, int nb_loss, int nb_ping,char* read_line)
{
/* Mean calculation */
mean = sum / (double)nb_ping;
(void)fclose(fd);
insert_hourly_report(mean, max, min, nb_high, nb_loss, nb_ping);
if (read_line != NULL)
{
free(read_line);
}
}