Files
api/objects/logs_o.php
T
Jepp9350 d3e9391160 Add new cron tasks and enhance user synchronization logic
Introduced cron tasks for syncing user economic customer details and discounts. Enhanced caching mechanisms for users and departments, added Slack messaging capabilities, and updated CLI/script routing for better flexibility. New routes and utility methods improve cron execution and logging.
2025-01-24 13:04:10 +01:00

96 lines
3.8 KiB
PHP

<?php
namespace objects;
use classes\db;
use classes\object_property;
use traits\db_object_t;
class logs_o extends db
{
use db_object_t;
public object_property $module;
public object_property $department;
public object_property $type;
public object_property $user_id;
public object_property $action;
public object_property $message;
public function structure(): void
{
$this->setTable('logs');
}
public function add(string $module, string $department, int $type, int $user_id, string $action, string $message): void
{
// Add to the cache instead of the database, to make it faster
redis->add_log($module, $department, $type, $user_id, $action, $message);
}
public function getObjectProperties(): void
{
$this->module = new object_property($this->table, $this->id, 'module', 'string', true);
$this->department = new object_property($this->table, $this->id, 'department', 'string', false);
$this->type = new object_property($this->table, $this->id, 'type', 'int', true);
$this->user_id = new object_property($this->table, $this->id, 'user_id', 'int', false);
$this->action = new object_property($this->table, $this->id, 'action', 'string', true);
$this->message = new object_property($this->table, $this->id, 'message', 'string', false);
}
public function syncLogsToDatabase($display_progress = false): void
{
function progress($display_progress, $message): void
{
if ($display_progress) {
echo "\n\033[33m$message\033[0m\n";
}
}
function progress_bar($display_progress, int $current, int $total): void
{
// Calculate the percentage
$percentage = ($current / $total) * 100;
// Round the percentage
$percentage = round($percentage);
// Display the progress bar
if ($display_progress) {
echo "\r\033[33m" . str_repeat('=', $percentage) . str_repeat(' ', 100 - $percentage) . "\033[0m " . number_format($percentage, 2) . '%';
}
// Show the percentage, completed and total
if ($display_progress) {
echo "\r\033[33m" . number_format($percentage, 2) . '% (' . $current . '/' . $total . ")\033[0m";
// If the current is equal to the total, add a new line
if ($current === $total) {
echo "\n";
}
}
}
global /** @var db $db */
$db;
// Get all logs from the cache
progress($display_progress, 'Counting logs in cache');
$total = redis->get_log_count();
progress($display_progress, 'Downloading ' . $total . ' logs from cache');
$logs = redis->get_logs();
progress($display_progress, 'Retrieved ' . count($logs) . ' logs from cache');
$current = 0;
// Insert the logs into the database
if ($logs) {
progress($display_progress, 'Preparing to insert logs into the database');
$stmt = $db->prepare("INSERT INTO $this->table (module, department, type, user_id, action, message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
progress($display_progress, 'Inserting logs into the database');
foreach ( $logs as $log ) {
$current++;
$timestamp = date('Y-m-d H:i:s', $log['timestamp']);
$stmt->bind_param('ssiiisss', $log['module'], $log['department'], $log['type'], $log['user_id'], $log['action'], $log['message'], $timestamp, $timestamp);
$stmt->execute();
// Remove the log from the cache
redis->delete('log_' . $log['id']);
progress_bar($display_progress, $current, $total);
}
$stmt->close();
}
}
}