diff options
Diffstat (limited to 'src/analysis/db/misc')
-rw-r--r-- | src/analysis/db/misc/snapshot.c | 228 | ||||
-rw-r--r-- | src/analysis/db/misc/snapshot.h | 30 | ||||
-rw-r--r-- | src/analysis/db/misc/timestamp.c | 71 | ||||
-rw-r--r-- | src/analysis/db/misc/timestamp.h | 8 |
4 files changed, 331 insertions, 6 deletions
diff --git a/src/analysis/db/misc/snapshot.c b/src/analysis/db/misc/snapshot.c index 982553b..546191b 100644 --- a/src/analysis/db/misc/snapshot.c +++ b/src/analysis/db/misc/snapshot.c @@ -210,8 +210,236 @@ bool pack_snapshot_id(const snapshot_id_t *id, packed_buffer *pbuf) /* ---------------------------------------------------------------------------------- */ +/****************************************************************************** +* * +* Paramètres : info = description d'instantané à initialiser. [OUT] * +* * +* Description : Construit une description pour instantané de base de données.* +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool init_snapshot_info(snapshot_info_t *info) +{ + bool result; /* Bilan à retourner */ + + result = init_snapshot_id(&info->id); + + if (result) + result = init_timestamp(&info->created); + + if (result) + { + info->name = NULL; + info->desc = NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : info = description d'instantané à initialiser. [OUT] * +* id = source de données pour l'identifiant. * +* created = source de données pour la date de création. * +* name = source de données éventuelle pour le nom. * +* desc = source de données éventuelle pour la description. * +* * +* Description : Construit une description pour instantané de base de données.* +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool init_snapshot_info_from_text(snapshot_info_t *info, const char *id, uint64_t created, const char *name, const char *desc) +{ + bool result; /* Bilan à retourner */ + + result = init_snapshot_id_from_text(&info->id, id); + + if (result) + result = init_timestamp_from_value(&info->created, created); + + if (result) + { + if (name == NULL) + info->name = NULL; + else + info->name = strdup(name); + + if (desc == NULL) + info->desc = NULL; + else + info->desc = strdup(desc); + + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : info = description d'instantané à initialiser. [OUT] * +* * +* Description : Libère la mémoire occupée par une description d'instantané. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void exit_snapshot_info(snapshot_info_t *info) +{ + if (info->name != NULL) + { + free(info->name); + info->name = NULL; + } + + if (info->desc != NULL) + { + free(info->desc); + info->desc = NULL; + } + +} + + +/****************************************************************************** +* * +* Paramètres : dest = destination de la copie de description. [OUT] * +* src = source de la description à copier. * +* * +* Description : Effectue une copie de description d'instantané. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void copy_snapshot_info(snapshot_info_t *dest, const snapshot_info_t *src) +{ + exit_snapshot_info(dest); + + copy_snapshot_id(&dest->id, &src->id); + + copy_timestamp(&dest->created, &src->created); + + if (src->name != NULL) + dest->name = strdup(src->name); + + if (src->desc != NULL) + dest->desc = strdup(src->desc); + +} + + +/****************************************************************************** +* * +* Paramètres : info = informations à constituer. [OUT] * +* pbuf = paquet de données où venir puiser les infos. * +* * +* Description : Importe la description d'un identifiant d'instantané. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool unpack_snapshot_info(snapshot_info_t *info, packed_buffer *pbuf) +{ + bool result; /* Bilan à retourner */ + rle_string string; /* Chaîne à transmettre */ + + result = unpack_snapshot_id(&info->id, pbuf); + + if (result) + result = unpack_timestamp(&info->created, pbuf); + + if (result) + { + result = unpack_rle_string(&string, pbuf); + if (result) + { + info->name = strdup(get_rle_string(&string)); + exit_rle_string(&string); + } + + } + if (result) + { + result = unpack_rle_string(&string, pbuf); + if (result) + { + info->desc = strdup(get_rle_string(&string)); + exit_rle_string(&string); + } + } + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : info = informations à sauvegarer. * +* pbuf = paquet de données où venir inscrire les infos. * +* * +* Description : Exporte la description d'un identifiant d'instantané. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool pack_snapshot_info(const snapshot_info_t *info, packed_buffer *pbuf) +{ + bool result; /* Bilan à retourner */ + rle_string string; /* Chaîne à transmettre */ + + result = pack_snapshot_id(&info->id, pbuf); + + if (result) + result = pack_timestamp(&info->created, pbuf); + + if (result) + { + init_static_rle_string(&string, info->name); + + result = pack_rle_string(&string, pbuf); + + exit_rle_string(&string); + + } + + if (result) + { + init_static_rle_string(&string, info->desc); + + result = pack_rle_string(&string, pbuf); + + exit_rle_string(&string); + + } + + return result; + +} diff --git a/src/analysis/db/misc/snapshot.h b/src/analysis/db/misc/snapshot.h index 4aaa6f9..e3a003c 100644 --- a/src/analysis/db/misc/snapshot.h +++ b/src/analysis/db/misc/snapshot.h @@ -29,6 +29,8 @@ #include <stdint.h> +#include "rlestr.h" +#include "timestamp.h" #include "../../../common/packed.h" @@ -42,7 +44,7 @@ /* Représentation d'un instantané */ typedef struct _snapshot_id_t { - char name[SNAP_ID_HEX_SZ]; + char name[SNAP_ID_HEX_SZ]; /* Caractères hexadécimaux */ } snapshot_id_t; @@ -72,10 +74,36 @@ bool pack_snapshot_id(const snapshot_id_t *, packed_buffer *); /* --------------------------- PROPRIETES DES INSTANTANES --------------------------- */ +/* Description d'un instantané */ +typedef struct _snapshot_info_t +{ + snapshot_id_t id; /* Identifiant attribué */ + + timestamp_t created; /* Date de création */ + + char *name; /* Nom de l'instantané */ + char *desc; /* Description associée */ + +} snapshot_info_t; + + +/* Construit une description pour instantané de base de données. */ +bool init_snapshot_info(snapshot_info_t *); + +/* Construit une description pour instantané de base de données. */ +bool init_snapshot_info_from_text(snapshot_info_t *, const char *, uint64_t, const char *, const char *); +/* Libère la mémoire occupée par une description d'instantané. */ +void exit_snapshot_info(snapshot_info_t *); +/* Effectue une copie de description d'instantané. */ +void copy_snapshot_info(snapshot_info_t *, const snapshot_info_t *); +/* Importe la description d'un identifiant d'instantané. */ +bool unpack_snapshot_info(snapshot_info_t *, packed_buffer *); +/* Exporte la description d'un identifiant d'instantané. */ +bool pack_snapshot_info(const snapshot_info_t *, packed_buffer *); diff --git a/src/analysis/db/misc/timestamp.c b/src/analysis/db/misc/timestamp.c index 12299eb..dfc6f25 100644 --- a/src/analysis/db/misc/timestamp.c +++ b/src/analysis/db/misc/timestamp.c @@ -29,6 +29,9 @@ #include <time.h> +#include "../../../core/logs.h" + + /****************************************************************************** * * @@ -36,19 +39,59 @@ * * * Description : Obtient un horodatage initialisé au moment même. * * * -* Retour : - * +* Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ -void init_timestamp(timestamp_t *timestamp) +bool init_timestamp(timestamp_t *timestamp) { + bool result; /* Bilan à retourner */ struct timespec info; /* Détails sur l'époque */ + int ret; /* Bilan de la récupération */ + + ret = clock_gettime(CLOCK_REALTIME, &info); - clock_gettime(CLOCK_REALTIME, &info); + if (ret != 0) + { + LOG_ERROR_N("clock_gettime"); + result = false; + } - *timestamp = info.tv_sec * 1000000 + info.tv_nsec / 1000; + else + { + *timestamp = info.tv_sec * 1000000 + info.tv_nsec / 1000; + result = true; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : timestamp = horodatage à initialiser. [OUT] * +* value = valeur d'initialisation. * +* * +* Description : Obtient un horodatage initialisé avec une valeur donnée. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool init_timestamp_from_value(timestamp_t *timestamp, uint64_t value) +{ + bool result; /* Bilan à retourner */ + + result = true; + + *timestamp = value; + + return result; } @@ -79,6 +122,26 @@ bool timestamp_is_younger(timestamp_t stamp, timestamp_t limit) /****************************************************************************** * * +* Paramètres : dest = destination de la copie d'horodatage. [OUT] * +* src = source de l'horodatage à copier. * +* * +* Description : Effectue une copie d'horodatage. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void copy_timestamp(timestamp_t *dest, const timestamp_t *src) +{ + *dest = *src; + +} + + +/****************************************************************************** +* * * Paramètres : t1 = premier horodatage à comparer. * * t2 = second horodatage à comparer. * * * diff --git a/src/analysis/db/misc/timestamp.h b/src/analysis/db/misc/timestamp.h index 002f4d4..7f6290876 100644 --- a/src/analysis/db/misc/timestamp.h +++ b/src/analysis/db/misc/timestamp.h @@ -39,11 +39,17 @@ typedef uint64_t timestamp_t; /* Obtient un horodatage initialisé au moment même. */ -void init_timestamp(timestamp_t *); +bool init_timestamp(timestamp_t *); + +/* Obtient un horodatage initialisé avec une valeur donnée. */ +bool init_timestamp_from_value(timestamp_t *, uint64_t); /* Définit si un horodatage est plus récent qu'un autre ou non. */ bool timestamp_is_younger(timestamp_t, timestamp_t); +/* Effectue une copie d'horodatage. */ +void copy_timestamp(timestamp_t *, const timestamp_t *); + /* Effectue la comparaison entre deux horodatages. */ int cmp_timestamp(const timestamp_t *, const timestamp_t *); |