Add fieldDump() to User. Add writing to logging db. #330
This commit is contained in:
parent
3e8a6a642a
commit
eff3dc94ec
3 changed files with 65 additions and 17 deletions
|
|
@ -275,3 +275,6 @@ services:
|
||||||
- name: 'doctrine.event_listener'
|
- name: 'doctrine.event_listener'
|
||||||
event: 'onFlush'
|
event: 'onFlush'
|
||||||
entity: 'App\Entity\User'
|
entity: 'App\Entity\User'
|
||||||
|
- name: 'doctrine.orm.entity_listener'
|
||||||
|
event: 'postPersist'
|
||||||
|
entity: 'App\Entity\User'
|
||||||
|
|
|
||||||
|
|
@ -312,5 +312,21 @@ class User extends BaseUser implements Serializable
|
||||||
|
|
||||||
public function fieldDump()
|
public function fieldDump()
|
||||||
{
|
{
|
||||||
|
// get all fields and their values into an array
|
||||||
|
$field_array = [
|
||||||
|
'id' => $this->getID(),
|
||||||
|
'username' => $this->getUsername(),
|
||||||
|
'password' => $this->getPassword(),
|
||||||
|
'first_name' => $this->getFirstName(),
|
||||||
|
'last_name' => $this->getLastName(),
|
||||||
|
'email' => $this->getEmail(),
|
||||||
|
'contact_number' => $this->getContactNumber(),
|
||||||
|
'roles' => $this->getRoles(),
|
||||||
|
'hubs' => $this->getHubs(),
|
||||||
|
];
|
||||||
|
|
||||||
|
$fields = json_encode($field_array);
|
||||||
|
|
||||||
|
return $fields;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,16 +24,23 @@ abstract class EntityListener
|
||||||
|
|
||||||
public function postPersist($object, LifecycleEventArgs $args)
|
public function postPersist($object, LifecycleEventArgs $args)
|
||||||
{
|
{
|
||||||
$event_time = new DateTime();
|
//$event_time = new DateTime();
|
||||||
|
|
||||||
// get user for logging
|
// get user id for logging
|
||||||
$user = $this->token_storage->getToken()->getUser();
|
$user = $this->token_storage->getToken()->getUser();
|
||||||
$username = $user->getUsername();
|
//$username = $user->getUsername();
|
||||||
|
$user_id = $user->getID();
|
||||||
|
|
||||||
|
// get entity name
|
||||||
$obj_class = preg_replace('/.*\\\\/', '', get_class($object));
|
$obj_class = preg_replace('/.*\\\\/', '', get_class($object));
|
||||||
$log_message = $obj_class . ' with id ' . $object->getID() . ' created.';
|
$log_message = $obj_class . ' with id ' . $object->getID() . ' created by ' . $user_id;
|
||||||
|
|
||||||
error_log($log_message);
|
// get fields of object
|
||||||
|
$fields = $object->fieldDump();
|
||||||
|
|
||||||
|
error_log($log_message . ' with ' . $fields);
|
||||||
|
|
||||||
|
$this->writeToLogDB($obj_class, $object->getID(), 'create', $fields, $user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onFlush(OnFlushEventArgs $args)
|
public function onFlush(OnFlushEventArgs $args)
|
||||||
|
|
@ -41,11 +48,11 @@ abstract class EntityListener
|
||||||
$em = $args->getEntityManager();
|
$em = $args->getEntityManager();
|
||||||
|
|
||||||
// get date time of event for logging
|
// get date time of event for logging
|
||||||
$event_time = new DateTime();
|
//$event_time = new DateTime();
|
||||||
|
|
||||||
// get user for logging
|
// get user for logging
|
||||||
$user = $this->token_storage->getToken()->getUser();
|
$user = $this->token_storage->getToken()->getUser();
|
||||||
$username = $user->getUsername();
|
$user_id = $user->getID();
|
||||||
|
|
||||||
$field_changes = [];
|
$field_changes = [];
|
||||||
|
|
||||||
|
|
@ -56,18 +63,15 @@ abstract class EntityListener
|
||||||
$updated_collections = $unit_of_work->getScheduledCollectionUpdates();
|
$updated_collections = $unit_of_work->getScheduledCollectionUpdates();
|
||||||
$deleted_collections = $unit_of_work->getScheduledCollectionDeletions();
|
$deleted_collections = $unit_of_work->getScheduledCollectionDeletions();
|
||||||
|
|
||||||
// get objects for creation
|
|
||||||
foreach ($created_entities as $created_entity)
|
|
||||||
{
|
|
||||||
$obj_class = preg_replace('/.*\\\\/', '', get_class($created_entity));
|
|
||||||
$log_message = $obj_class . ' with id ' . $created_entity->getUsername() . ' created.';
|
|
||||||
|
|
||||||
error_log($log_message);
|
|
||||||
}
|
|
||||||
|
|
||||||
// get updated fields. This doesn't include lists of other entities.
|
// get updated fields. This doesn't include lists of other entities.
|
||||||
foreach ($updated_entities as $updated_entity)
|
foreach ($updated_entities as $updated_entity)
|
||||||
{
|
{
|
||||||
|
// get entity name
|
||||||
|
$obj_class = preg_replace('/.*\\\\/', '', get_class($updated_entity));
|
||||||
|
$log_message = $obj_class . ' with id ' . $updated_entity->getID() . ' updated by ' . $user_id;
|
||||||
|
|
||||||
|
error_log($log_message);
|
||||||
|
|
||||||
$changeset = $unit_of_work->getEntityChangeSet($updated_entity);
|
$changeset = $unit_of_work->getEntityChangeSet($updated_entity);
|
||||||
|
|
||||||
$entity_fields = array_keys($changeset);
|
$entity_fields = array_keys($changeset);
|
||||||
|
|
@ -83,13 +87,25 @@ abstract class EntityListener
|
||||||
'new_value' => $values[1],
|
'new_value' => $values[1],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->writeToLogDB($obj_class, $updated_entity->getID(), 'update', $field_changes, $user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get deleted objects
|
// get deleted objects
|
||||||
foreach ($deleted_entities as $deleted_entity)
|
foreach ($deleted_entities as $deleted_entity)
|
||||||
{
|
{
|
||||||
|
// get entity name
|
||||||
|
$obj_class = preg_replace('/.*\\\\/', '', get_class($deleted_entity));
|
||||||
|
$log_message = $obj_class . ' with id ' . $deleted_entity->getID() . ' deleted by ' . $user_id;
|
||||||
|
|
||||||
|
error_log($log_message);
|
||||||
|
|
||||||
$deleted_id = $deleted_entity->getID();
|
$deleted_id = $deleted_entity->getID();
|
||||||
$log_message = 'Object with id ' . $deleted_id . ' deleted.';
|
|
||||||
|
// get fields of deleted entity
|
||||||
|
$fields = $deleted_entity->fieldDump();
|
||||||
|
|
||||||
|
$this->writeToLogDB($obj_class, $deleted_id, 'delete', $fields, $user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
//$this->log_db->writePoints([new Point(
|
//$this->log_db->writePoints([new Point(
|
||||||
|
|
@ -137,4 +153,17 @@ abstract class EntityListener
|
||||||
} */
|
} */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function writeToLogDB($entity_type, $entity_id, $action, $content, $user_id)
|
||||||
|
{
|
||||||
|
$new_point = new Point(
|
||||||
|
'entity_log', // measurement
|
||||||
|
null, // measurement value
|
||||||
|
['entity_type' => $entity_type, 'entity_id' => $entity_id], // measurement tags
|
||||||
|
['action' => $action, 'content' => $content, 'user' => $user_id], // measurement fields
|
||||||
|
exec('date +%s%N') // timestamp in nanoseconds on Linux only
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->log_db->writePoints([$new_point]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue