diff options
Diffstat (limited to 'src/sw-collector/sw_collector_db.h')
-rw-r--r-- | src/sw-collector/sw_collector_db.h | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/src/sw-collector/sw_collector_db.h b/src/sw-collector/sw_collector_db.h new file mode 100644 index 000000000..e3b56af93 --- /dev/null +++ b/src/sw-collector/sw_collector_db.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2017 Andreas Steffen + * HSR Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +/** + * @defgroup sw_collector_db_t sw_collector_db + * @{ @ingroup sw_collector + */ + +#ifndef SW_COLLECTOR_DB_H_ +#define SW_COLLECTOR_DB_H_ + +#include <library.h> + +typedef struct sw_collector_db_t sw_collector_db_t; +typedef enum sw_collector_db_query_t sw_collector_db_query_t; + +/** + * Type of software identifier queries + */ +enum sw_collector_db_query_t { + SW_QUERY_ALL, + SW_QUERY_INSTALLED, + SW_QUERY_REMOVED +}; + +/** + * Software collector database object + */ +struct sw_collector_db_t { + + /** + * bAdd event to database + * + * @param timestamp Timestamp in 20 octet RFC 3339 format + * @return Primary key pointing to event ID or 0 if failed + */ + uint32_t (*add_event)(sw_collector_db_t *this, char *timestamp); + + /** + * Get last event, zero EID if none exists + * + * @param eid Primary key pointing to last event + * @param epoch Epoch + * @param last_time Timestamp in 20 octet RFC 3339 format of last event + * @return + */ + bool (*get_last_event)(sw_collector_db_t *this, uint32_t *eid, + uint32_t *epoch, char **last_time); + + /** + * Add software identifier event to database + * + * @param eid Foreign key pointing to an event ID + * @param sw_id Foreign key pointing to a software identifier + * @param action 1 for CREATION, 2 for deletion + * @return TRUE if successful + */ + bool (*add_sw_event)(sw_collector_db_t *this, uint32_t eid, uint32_t sw_id, + uint8_t action); + + /** + * Set software_identifier, checking if the identifier already exists + * + * @param name Software identifier + * @param package Software package + * @param version Version of software package + * @param source Source ID of the software collector + * @param installed Installation status to be set, TRUE if installed + * @return Primary key pointing to SW ID or 0 if failed + */ + uint32_t (*set_sw_id)(sw_collector_db_t *this, char *name, char *package, + char *version, uint8_t source, bool installed); + + /** + * Get software_identifier record + * + * @param name Software identifier + * @param package Software package + * @param version Version of software package + * @param source Source ID of the software collector + * @param installed Installation status + * @return Primary key pointing to SW ID or 0 if failed + */ + uint32_t (*get_sw_id)(sw_collector_db_t *this, char *name, char **package, + char **version, uint8_t *source, bool *installed); + + /** + * Get number of installed or removed software identifiers + * + * @param type Query type (ALL, INSTALLED, REMOVED) + * @return Count + */ + uint32_t (*get_sw_id_count)(sw_collector_db_t *this, + sw_collector_db_query_t type); + + /** + * Update the software identifier version + * + * @param sw_id Primary key of software identifier + * @param name Software identifier + * @param version Package version + * @param installed Installation status + * @return TRUE if update successful + */ + bool (*update_sw_id)(sw_collector_db_t *this, uint32_t sw_id, char *name, + char *version, bool installed); + + /** + * Update the package name + * + * @param package_filter Package name[s] to be changed + * @param package New package name + * @return TRUE if update successful + */ + int (*update_package)(sw_collector_db_t *this, char *package_filter, + char *package); + + /** + * Enumerate over all collected [installed] software identities + * + * @param type Query type (ALL, INSTALLED, REMOVED) + * @param package If not NULL enumerate over all package versions + * @return Enumerator + */ + enumerator_t* (*create_sw_enumerator)(sw_collector_db_t *this, + sw_collector_db_query_t type, + char *package); + + /** + * Destroy sw_collector_db_t object + */ + void (*destroy)(sw_collector_db_t *this); + +}; + +/** + * Create an sw_collector_db_t instance + * + * @param uri database URI + */ +sw_collector_db_t* sw_collector_db_create(char *uri); + +#endif /** SW_COLLECTOR_DB_H_ @}*/ |