mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 07:49:57 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| Logs
 | |
| ====
 | |
| 
 | |
| Chaque modification effectuée sur un modèle est enregistrée dans la base dans données.
 | |
| 
 | |
| Dès qu'un modèle veut être sauvegardé, deux signaux sont envoyés dans ``logs.signals`` : un avant et un après
 | |
| la sauvegarde.
 | |
| En pré-sauvegarde, on récupère l'ancienne version du modèle, si elle existe.
 | |
| En post-sauvegarde, on récupère l'utilisateur⋅rice et l'IP courant⋅es (voir ci-dessous), on convertit les modèles en JSON
 | |
| et on enregistre une entrée ``Changelog`` dans la base de données.
 | |
| 
 | |
| Pour récupérer l'utilisateur⋅rice et son IP, le middleware ``logs.middlewares.LogsMiddlewares`` récupère à chaque requête
 | |
| l'utilisateur⋅rice et l'adresse IP, et les stocke dans le processus courant, afin qu'ils puissent être
 | |
| récupérés par les signaux.
 | |
| 
 | |
| Si jamais la modification ne provient pas d'une requête Web, on suppose qu'elle vient d'une instruction
 | |
| lancée avec ``manage.py``.
 | |
| On récupère alors le nom de l'utilisateur⋅rice dans l'interface de commandes, et si une note est associée à cet alias,
 | |
| alors on considère que c'est le détenteur de la note qui a effectué cette modification, sur l'adresse IP ``127.0.0.1``.
 | |
| Sinon, le champ est laissé à ``None``.
 | |
| 
 | |
| Une entrée de ``Changelog`` contient les informations suivantes :
 | |
| 
 | |
|   * Utilisateur⋅rice (``ForeignKey`` vers ``User``, nullable)
 | |
|   * Adresse IP (``GenericIPAddressField``)
 | |
|   * Type de modèle enregistré (``ForeignKey`` vers ``Model``)
 | |
|   * Identifiant ``pk`` de l'instance enregistrée (``CharField``)
 | |
|   * Anciennes données (au format JSON, ``None`` si création de données)
 | |
|   * Nouvelles données (au format JSON, ``None`` si suppression de données)
 | |
|   * Action (``CharField`` avec choix ``create``, ``edit``, ``delete``)
 | |
|   * Date de modification (``DateTimeField``)
 | |
| 
 | |
| Exemple de Changelog, pour la création d'une transaction de 42424242 centimes d'une note vers une autre :
 | |
| 
 | |
| .. code:: json
 | |
| 
 | |
|     {
 | |
|         "id": 42,
 | |
|         "ip": "192.168.0.1",
 | |
|         "instance_pk": "1",
 | |
|         "previous": null,
 | |
|         "data": "{\"id\":1,\"created_at\":\"2020-03-11T17:24:09.858651+01:00\",\"quantity\":1,\"amount\":42424242,\"reason\":\"Volons la Kfet\",\"valid\":true,\"polymorphic_ctype\":36,\"source\":6,\"destination\":7}",
 | |
|         "action": "create",
 | |
|         "timestamp": "2020-03-11T17:24:10.088151+01:00",
 | |
|         "user": 1,
 | |
|         "model": 36
 | |
|     }
 | |
| 
 | |
| S'il est préférable de passer en console Postgresql pour parcourir les logs, ils sont trouvables via l'API dans
 | |
| ``/api/logs``, sous réserve d'avoir les droits suffisants (ie. être respo info).
 | |
| 
 | |
| 
 | |
| Graphe
 | |
| ~~~~~~
 | |
| 
 | |
| .. image:: ../_static/img/graphs/logs.svg
 | |
|   :alt: Logs graph
 |