mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 06:21:28 +00:00
* Plumbing * Batch processing in world * Cleanup * Cleanup * Update player_event_logs.cpp * Add player zoning event * Use generics * Comments * Add events * Add more events * AA_GAIN, AA_PURCHASE, FORAGE_SUCCESS, FORAGE_FAILURE * FISH_SUCCESS, FISH_FAILURE, ITEM_DESTROY * Add charges to ITEM_DESTROY * WENT_ONLINE, WENT_OFFLINE * LEVEL_GAIN, LEVEL_LOSS * LOOT_ITEM * MERCHANT_PURCHASE * MERCHANT_SELL * SKILL_UP * Add events * Add more events * TASK_ACCEPT, TASK_COMPLETE, and TASK_UPDATE * GROUNDSPAWN_PICKUP * SAY * REZ_ACCEPTED * COMBINE_FAILURE and COMBINE_SUCCESS * DROPPED_ITEM * DEATH * SPLIT_MONEY * TRADER_PURCHASE and TRADER_SELL * DISCOVER_ITEM * Convert GM_COMMAND to use new macro * Convert ZONING event to use macro * Revert some code changes * Revert "Revert some code changes" This reverts commit d53682f997e89a053a660761085913245db91e9d. * Add cereal generation support to repositories * TRADE * Formatting * Cleanup * Relocate discord_manager to discord folder * Discord sending plumbing * Rename UCS's Database class to UCSDatabase to be more specific and not collide with base Database class for repository usage * More discord sending plumbing * More discord message formatting work * More discord formatting work * Discord formatting of events * Format WENT_ONLINE, WENT_OFFLINE * Add merchant purchase event * Handle Discord MERCHANT_SELL formatter * Update player_event_discord_formatter.cpp * Tweaks * Implement retention truncation * Put mutex locking on batch queue, put processor on its own thread * Process on initial bootup * Implement optional QS processing, implement keepalive from world to QS * Reload player event settings when logs are reloaded in game * Set settings defaults * Update player_event_logs.cpp * Update player_event_logs.cpp * Set retention days on boot * Update player_event_logs.cpp * Player Handin Event Testing. Testing player handin stuff. * Cleanup. * Finish NPC Handin. * set a reference to the client inside of the trade object as well for plugins to process * Fix for windows _inline * Bump to cpp20 default, ignore excessive warnings on windows * Bump FMT to 6.1.2 for cpp20 compat and swap fmt::join for Strings::Join * Windows compile fixes * Update CMakeLists.txt * Update CMakeLists.txt * Update CMakeLists.txt * Create 2022_12_19_player_events_tables.sql * [Formatters] Work on Discord Formatters * Handin money. * Format header * [Formatters] Work on Discord Formatters * Format * Format * [Formatters] More Formatter work, need to test further. * [Formatters] More Work on Formatters. * Add missing #endif * [Formatters] Work on Formatters, fix Bot formatting in ^create help * NPC Handin Discord Formatter * Update player_event_logs.cpp * Discover Item Discord Formatter * Dropped Item Discord Formatter * Split Money Discord Formatter * Trader Discord Formatters * Cleanup. * Trade Event Discord Formatter Groundwork * SAY don't record GM commands * GM_Command don't record #help * Update player_event_logs.cpp * Fill in more event data * Post rebase fixes * Post rebase fix * Discord formatting adjustments * Add event deprecation or unimplemented tag support * Trade events * Add return money and sanity checks. * Update schema * Update ucs.cpp * Update client.cpp * Update 2022_12_19_player_events_tables.sql * Implement archive single line * Replace hackers table and functions with PossibleHack player event * Replace very old eventlog table since the same events are covered by player event logs * Update bot_command.cpp * Record NPC kill events ALL / Named / Raid * Add BatchEventProcessIntervalSeconds rule * Naming * Update CMakeLists.txt * Update database_schema.h * Remove logging function and methods * DB version * Cleanup SendPlayerHandinEvent --------- Co-authored-by: Kinglykrab <kinglykrab@gmail.com> Co-authored-by: Aeadoin <109764533+Aeadoin@users.noreply.github.com>
86 lines
2.6 KiB
C++
86 lines
2.6 KiB
C++
#ifndef EQEMU_PLAYER_EVENT_LOGS_H
|
|
#define EQEMU_PLAYER_EVENT_LOGS_H
|
|
|
|
#include "../repositories/player_event_log_settings_repository.h"
|
|
#include "player_events.h"
|
|
#include "../servertalk.h"
|
|
#include "../repositories/player_event_logs_repository.h"
|
|
#include "../timer.h"
|
|
#include "../json/json_archive_single_line.h"
|
|
#include <cereal/archives/json.hpp>
|
|
#include <mutex>
|
|
|
|
class PlayerEventLogs {
|
|
public:
|
|
void Init();
|
|
void ReloadSettings();
|
|
PlayerEventLogs *SetDatabase(Database *db);
|
|
bool ValidateDatabaseConnection();
|
|
bool IsEventEnabled(PlayerEvent::EventType event);
|
|
|
|
void Process();
|
|
|
|
// batch queue
|
|
void AddToQueue(const PlayerEventLogsRepository::PlayerEventLogs &logs);
|
|
|
|
// main event record generic function
|
|
// can ingest any struct event types
|
|
template<typename T>
|
|
std::unique_ptr<ServerPacket> RecordEvent(
|
|
PlayerEvent::EventType t,
|
|
const PlayerEvent::PlayerEvent &p,
|
|
T e
|
|
)
|
|
{
|
|
auto n = PlayerEventLogsRepository::NewEntity();
|
|
FillPlayerEvent(p, n);
|
|
n.event_type_id = t;
|
|
|
|
std::stringstream ss;
|
|
{
|
|
cereal::JSONOutputArchiveSingleLine ar(ss);
|
|
e.serialize(ar);
|
|
}
|
|
|
|
n.event_type_name = PlayerEvent::EventName[t];
|
|
n.event_data = Strings::Contains(ss.str(), "noop") ? "{}" : ss.str();
|
|
n.created_at = std::time(nullptr);
|
|
|
|
auto c = PlayerEvent::PlayerEventContainer{
|
|
.player_event = p,
|
|
.player_event_log = n
|
|
};
|
|
|
|
return BuildPlayerEventPacket(c);
|
|
}
|
|
|
|
[[nodiscard]] const PlayerEventLogSettingsRepository::PlayerEventLogSettings *GetSettings() const;
|
|
bool IsEventDiscordEnabled(int32_t event_type_id);
|
|
std::string GetDiscordWebhookUrlFromEventType(int32_t event_type_id);
|
|
|
|
static std::string GetDiscordPayloadFromEvent(const PlayerEvent::PlayerEventContainer &e);
|
|
private:
|
|
Database *m_database; // reference to database
|
|
PlayerEventLogSettingsRepository::PlayerEventLogSettings m_settings[PlayerEvent::EventType::MAX]{};
|
|
|
|
// batch queue is used to record events in batch
|
|
std::vector<PlayerEventLogsRepository::PlayerEventLogs> m_record_batch_queue{};
|
|
static void FillPlayerEvent(const PlayerEvent::PlayerEvent &p, PlayerEventLogsRepository::PlayerEventLogs &n);
|
|
static std::unique_ptr<ServerPacket>
|
|
BuildPlayerEventPacket(const PlayerEvent::PlayerEventContainer &e);
|
|
|
|
// timers
|
|
Timer m_process_batch_events_timer; // events processing timer
|
|
Timer m_process_retention_truncation_timer; // timer for truncating events based on retention settings
|
|
|
|
// processing
|
|
std::mutex m_batch_queue_lock{};
|
|
void ProcessBatchQueue();
|
|
void ProcessRetentionTruncation();
|
|
void SetSettingsDefaults();
|
|
};
|
|
|
|
extern PlayerEventLogs player_event_logs;
|
|
|
|
#endif //EQEMU_PLAYER_EVENT_LOGS_H
|