Crossfire Server, Branch 1.12
R12190
|
This plugin will log events to an sqlite3 database named cflogger.db in the var directory. More...
Go to the source code of this file.
Defines | |
#define | CFLOGGER_CURRENT_FORMAT 3 |
Current database format. | |
#define | DO_OR_ROLLBACK(sqlstring) |
Helper macros for rolling back and returning if query failed. | |
#define | UPDATE_OR_ROLLBACK(tbl, newschema, select_columns) |
Functions | |
static void | add_death (object *victim, object *killer) |
Logs a death. | |
static void | add_map_event (mapstruct *map, int event_code, object *pl) |
Logs an event for a map. | |
static void | add_player_event (object *pl, int event_code) |
Logs an event for a living object. | |
CF_PLUGIN void * | cflogger_globalEventListener (int *type,...) |
Handles a global event. | |
CF_PLUGIN int | cflogger_runPluginCommand (object *op, char *params) |
Runs a plugin command. | |
static void | check_tables (void) |
Checks the database format, and applies changes if old version. | |
static int | check_tables_callback (void *param, int argc, char **argv, char **azColName) |
Simple callback to get an integer from a query. | |
CF_PLUGIN int | closePlugin (void) |
Close the plugin. | |
static int | do_sql (const char *sql) |
Helper function to run a SQL query. | |
void * | eventListener (int *type,...) |
Handles an object-related event. | |
static int | get_living_id (object *living) |
Returns a unique identifier for specified object. | |
static int | get_map_id (mapstruct *map) |
Gets the unique identifier for a map. | |
static int | get_region_id (region *reg) |
Gets the unique identifier for a region. | |
CF_PLUGIN void * | getPluginProperty (int *type,...) |
Gets a plugin property. | |
CF_PLUGIN int | initPlugin (const char *iversion, f_plug_api gethooksptr) |
Main plugin entry point. | |
CF_PLUGIN int | postInitPlugin (void) |
Plugin was initialized, now to finish. | |
static int | store_time (void) |
Stores a line to match current ingame and real time. | |
static int | update_table_format (const char *table, const char *newschema, const char *select_columns) |
Updates a table to a new schema, used for when ALTER TABLE doesn't work. | |
Variables | |
static sqlite3 * | database |
Pointer to the logging database. | |
static int | last_stored_day = -1 |
To keep track of stored ingame/real time matching. |
This plugin will log events to an sqlite3 database named cflogger.db in the var directory.
Log includes:
Definition in file cflogger.c.
#define CFLOGGER_CURRENT_FORMAT 3 |
#define DO_OR_ROLLBACK | ( | sqlstring | ) |
if (do_sql(sqlstring) != SQLITE_OK) { \ do_sql("rollback transaction;"); \ cf_log(llevError, " [%s] Logger database format update failed! Couldn't upgrade from format %d to fromat %d!. Won't log.\n", PLUGIN_NAME, format, CFLOGGER_CURRENT_FORMAT);\ sqlite3_close(database); \ database = NULL; \ return; \ }
Helper macros for rolling back and returning if query failed.
Used in check_tables().
Yes they are quite messy. The alternatives seemed worse.
Definition at line 180 of file cflogger.c.
Referenced by check_tables().
#define UPDATE_OR_ROLLBACK | ( | tbl, | |
newschema, | |||
select_columns | |||
) |
if (update_table_format((tbl), (newschema), (select_columns)) != SQLITE_OK) { \ do_sql("rollback transaction;"); \ cf_log(llevError, " [%s] Logger database format update failed! Couldn't upgrade from format %d to fromat %d!. Won't log.\n", PLUGIN_NAME, format, CFLOGGER_CURRENT_FORMAT);\ sqlite3_close(database); \ database = NULL; \ return; \ }
Definition at line 189 of file cflogger.c.
Referenced by check_tables().
static void add_death | ( | object * | victim, |
object * | killer | ||
) | [static] |
Logs a death.
If either of the parameters is NULL, or if neither is a PLAYER, nothing is logged.
victim | who died. |
killer | who killed. |
Definition at line 513 of file cflogger.c.
References cf_object_get_object_property(), CFAPI_OBJECT_PROP_OWNER, do_sql(), get_living_id(), get_map_id(), and PLAYER.
Referenced by cflogger_globalEventListener().
static void add_map_event | ( | mapstruct * | map, |
int | event_code, | ||
object * | pl | ||
) | [static] |
Logs an event for a map.
map | map for which to log an event. |
event_code | arbitrary event code. |
pl | object causing the event. Can be NULL. |
Definition at line 489 of file cflogger.c.
References do_sql(), get_living_id(), get_map_id(), and PLAYER.
Referenced by cflogger_globalEventListener().
static void add_player_event | ( | object * | pl, |
int | event_code | ||
) | [static] |
Logs an event for a living object.
pl | object for which to log an event. |
event_code | arbitrary event code. |
Definition at line 466 of file cflogger.c.
References do_sql(), get_living_id(), and get_map_id().
Referenced by cflogger_globalEventListener().
CF_PLUGIN void* cflogger_globalEventListener | ( | int * | type, |
... | |||
) |
Handles a global event.
type | ignored. |
Definition at line 624 of file cflogger.c.
References add_death(), add_map_event(), add_player_event(), EVENT_BORN, EVENT_CLOCK, EVENT_GKILL, EVENT_KICK, EVENT_LOGIN, EVENT_LOGOUT, EVENT_MAPENTER, EVENT_MAPLEAVE, EVENT_MAPLOAD, EVENT_MAPRESET, EVENT_MAPUNLOAD, EVENT_MUZZLE, EVENT_PLAYER_DEATH, EVENT_REMOVE, pl::ob, and store_time().
Referenced by postInitPlugin().
CF_PLUGIN int cflogger_runPluginCommand | ( | object * | op, |
char * | params | ||
) |
Runs a plugin command.
Doesn't do anything.
op | ignored. |
params | ignored. |
Definition at line 598 of file cflogger.c.
static void check_tables | ( | void | ) | [static] |
Checks the database format, and applies changes if old version.
Definition at line 201 of file cflogger.c.
References cf_log(), CFLOGGER_CURRENT_FORMAT, check_tables_callback(), database, DO_OR_ROLLBACK, do_sql(), llevDebug, llevError, PLUGIN_NAME, and UPDATE_OR_ROLLBACK.
Referenced by postInitPlugin().
static int check_tables_callback | ( | void * | param, |
int | argc, | ||
char ** | argv, | ||
char ** | azColName | ||
) | [static] |
Simple callback to get an integer from a query.
param | user-supplied data. |
argc | number of items. |
argv | values. |
azColName | column names. |
Definition at line 80 of file cflogger.c.
Referenced by check_tables().
CF_PLUGIN int closePlugin | ( | void | ) |
Close the plugin.
Closes the sqlite database.
Definition at line 741 of file cflogger.c.
References cf_log(), database, llevInfo, and PLUGIN_VERSION.
static int do_sql | ( | const char * | sql | ) | [static] |
Helper function to run a SQL query.
Will LOG() an error if the query fails.
sql | query to run. |
Definition at line 102 of file cflogger.c.
References cf_log(), database, llevError, and PLUGIN_NAME.
Referenced by add_death(), add_map_event(), add_player_event(), check_tables(), get_living_id(), get_map_id(), get_region_id(), store_time(), and update_table_format().
void* eventListener | ( | int * | type, |
... | |||
) |
Handles an object-related event.
Doesn't do anything.
type | ignored. |
Definition at line 610 of file cflogger.c.
static int get_living_id | ( | object * | living | ) | [static] |
Returns a unique identifier for specified object.
Will insert an item in the table if required.
If the object is a player, only name is taken into account to generate an id.
Else, the object's level is taken into account, to distinguish monsters with the same name and different levels (special monsters, and such).
living | object to get identifier for. |
Definition at line 325 of file cflogger.c.
References database, do_sql(), and PLAYER.
Referenced by add_death(), add_map_event(), and add_player_event().
static int get_map_id | ( | mapstruct * | map | ) | [static] |
Gets the unique identifier for a map.
Will generate one if required.
Maps starting with '/random/' will all share the same identifier for the same region.
map | map for which an id is wanted. Must not be NULL. |
Definition at line 395 of file cflogger.c.
References database, do_sql(), get_region_id(), mapdef::path, and mapdef::region.
Referenced by add_death(), add_map_event(), and add_player_event().
static int get_region_id | ( | region * | reg | ) | [static] |
Gets the unique identifier for a region.
Will generate one if required.
reg | region for which an id is wanted |
Definition at line 359 of file cflogger.c.
References database, do_sql(), and regiondef::name.
Referenced by get_map_id().
CF_PLUGIN void* getPluginProperty | ( | int * | type, |
... | |||
) |
Gets a plugin property.
type | ignored. |
Definition at line 562 of file cflogger.c.
References PLUGIN_NAME, PLUGIN_VERSION, and snprintf().
CF_PLUGIN int initPlugin | ( | const char * | iversion, |
f_plug_api | gethooksptr | ||
) |
Main plugin entry point.
Plugin initialisation function.
iversion | server version. |
gethooksptr | function to get hooks from. |
Definition at line 546 of file cflogger.c.
References cf_init_plugin(), cf_log(), llevInfo, and PLUGIN_VERSION.
CF_PLUGIN int postInitPlugin | ( | void | ) |
Plugin was initialized, now to finish.
Registers events, initializes the database.
Definition at line 690 of file cflogger.c.
References cf_get_directory(), cf_log(), cf_system_register_global_event(), cflogger_globalEventListener(), check_tables(), database, EVENT_BORN, EVENT_CLOCK, EVENT_GKILL, EVENT_KICK, EVENT_LOGIN, EVENT_LOGOUT, EVENT_MAPENTER, EVENT_MAPLEAVE, EVENT_MAPLOAD, EVENT_MAPRESET, EVENT_MAPUNLOAD, EVENT_MUZZLE, EVENT_PLAYER_DEATH, EVENT_REMOVE, llevDebug, llevError, llevInfo, PLUGIN_NAME, PLUGIN_VERSION, snprintf(), and store_time().
static int store_time | ( | void | ) | [static] |
Stores a line to match current ingame and real time.
Definition at line 428 of file cflogger.c.
References cf_get_time(), database, _timeofday::day, do_sql(), _timeofday::hour, last_stored_day, _timeofday::minute, _timeofday::month, snprintf(), and _timeofday::year.
Referenced by cflogger_globalEventListener(), and postInitPlugin().
static int update_table_format | ( | const char * | table, |
const char * | newschema, | ||
const char * | select_columns | ||
) | [static] |
Updates a table to a new schema, used for when ALTER TABLE doesn't work.
(Such as when changing column constraints.)
table | Name of table. |
newschema | This is the new table format. Will be inserted into the parantheses of "create table table_name()". |
select_columns | This is inserted into "INSERT INTO table_name SELECT _ FROM ..." to allow changing order of columns, or skipping some. Normally it should be "*". |
No error checking is done. Also it is expected that appending an _old on the table name won't collide with anything.
Note that columns are expected to have same (or compatible) type, and be in the same order. Further both tables should have the same number of columns.
Definition at line 143 of file cflogger.c.
References do_sql().
sqlite3* database [static] |
Pointer to the logging database.
Definition at line 60 of file cflogger.c.
Referenced by check_tables(), closePlugin(), do_sql(), get_living_id(), get_map_id(), get_region_id(), postInitPlugin(), and store_time().
int last_stored_day = -1 [static] |
To keep track of stored ingame/real time matching.
Definition at line 63 of file cflogger.c.
Referenced by store_time().