summaryrefslogtreecommitdiff
path: root/src/analysis/db/misc
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/db/misc')
-rw-r--r--src/analysis/db/misc/snapshot.c228
-rw-r--r--src/analysis/db/misc/snapshot.h30
-rw-r--r--src/analysis/db/misc/timestamp.c71
-rw-r--r--src/analysis/db/misc/timestamp.h8
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 *);