Add fieldDump() to User. Add writing to logging db. #330

This commit is contained in:
Korina Cordero 2020-03-06 06:20:22 +00:00
parent 3e8a6a642a
commit eff3dc94ec
3 changed files with 65 additions and 17 deletions

View file

@ -275,3 +275,6 @@ services:
- name: 'doctrine.event_listener'
event: 'onFlush'
entity: 'App\Entity\User'
- name: 'doctrine.orm.entity_listener'
event: 'postPersist'
entity: 'App\Entity\User'

View file

@ -312,5 +312,21 @@ class User extends BaseUser implements Serializable
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;
}
}

View file

@ -24,16 +24,23 @@ abstract class EntityListener
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();
$username = $user->getUsername();
//$username = $user->getUsername();
$user_id = $user->getID();
// get entity name
$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)
@ -41,11 +48,11 @@ abstract class EntityListener
$em = $args->getEntityManager();
// get date time of event for logging
$event_time = new DateTime();
//$event_time = new DateTime();
// get user for logging
$user = $this->token_storage->getToken()->getUser();
$username = $user->getUsername();
$user_id = $user->getID();
$field_changes = [];
@ -56,18 +63,15 @@ abstract class EntityListener
$updated_collections = $unit_of_work->getScheduledCollectionUpdates();
$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.
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);
$entity_fields = array_keys($changeset);
@ -83,13 +87,25 @@ abstract class EntityListener
'new_value' => $values[1],
];
}
$this->writeToLogDB($obj_class, $updated_entity->getID(), 'update', $field_changes, $user_id);
}
// get deleted objects
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();
$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(
@ -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]);
}
}