Compare commits

..

6 Commits
main ... main

Author SHA1 Message Date
21dcf07b31 Diagramme 2024-10-14 21:21:57 +02:00
bf39270efa set_stats_ping_diagram 2024-10-14 20:57:42 +02:00
b32097e117 modification de non 2024-10-14 20:35:55 +02:00
2500c54883 fin de la factorisation 2024-10-14 20:33:40 +02:00
9905d215ca suite diagramme 2024-09-17 22:37:22 +02:00
1343760946 TD2 2024-09-17 12:01:24 +02:00
8 changed files with 1472 additions and 1 deletions

18
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "gcc",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "windows-gcc-x64",
"compilerArgs": [
""
]
}
],
"version": 4
}

24
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,24 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++ Runner: Debug Session",
"type": "cppdbg",
"request": "launch",
"args": [],
"stopAtEntry": false,
"externalConsole": true,
"cwd": "c:/Users/yanis/TD2_DEV51_Qualite_Algo",
"program": "c:/Users/yanis/TD2_DEV51_Qualite_Algo/build/Debug/outDebug",
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

59
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,59 @@
{
"C_Cpp_Runner.cCompilerPath": "gcc",
"C_Cpp_Runner.cppCompilerPath": "g++",
"C_Cpp_Runner.debuggerPath": "gdb",
"C_Cpp_Runner.cStandard": "",
"C_Cpp_Runner.cppStandard": "",
"C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/VR_NR/Community/VC/Auxiliary/Build/vcvarsall.bat",
"C_Cpp_Runner.useMsvc": false,
"C_Cpp_Runner.warnings": [
"-Wall",
"-Wextra",
"-Wpedantic",
"-Wshadow",
"-Wformat=2",
"-Wcast-align",
"-Wconversion",
"-Wsign-conversion",
"-Wnull-dereference"
],
"C_Cpp_Runner.msvcWarnings": [
"/W4",
"/permissive-",
"/w14242",
"/w14287",
"/w14296",
"/w14311",
"/w14826",
"/w44062",
"/w44242",
"/w14905",
"/w14906",
"/w14263",
"/w44265",
"/w14928"
],
"C_Cpp_Runner.enableWarnings": true,
"C_Cpp_Runner.warningsAsError": false,
"C_Cpp_Runner.compilerArgs": [],
"C_Cpp_Runner.linkerArgs": [],
"C_Cpp_Runner.includePaths": [],
"C_Cpp_Runner.includeSearch": [
"*",
"**/*"
],
"C_Cpp_Runner.excludeSearch": [
"**/build",
"**/build/**",
"**/.*",
"**/.*/**",
"**/.vscode",
"**/.vscode/**"
],
"C_Cpp_Runner.useAddressSanitizer": false,
"C_Cpp_Runner.useUndefinedSanitizer": false,
"C_Cpp_Runner.useLeakSanitizer": false,
"C_Cpp_Runner.showCompilationTime": false,
"C_Cpp_Runner.useLinkTimeOptimization": false,
"C_Cpp_Runner.msvcSecureNoWarnings": false
}

1112
TD2_Diagramme.drawio Normal file

File diff suppressed because it is too large Load Diff

BIN
TD2_diagramme.drawio.pdf Normal file

Binary file not shown.

Binary file not shown.

View File

@ -115,7 +115,7 @@
free(pmatch);
if(read_line != NULL){
free(read_line);
}
}c
(void) fclose(fd);

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