optimiser la destination du cache
This commit is contained in:
		
							parent
							
								
									291db941b9
								
							
						
					
					
						commit
						d8b70d7ee0
					
				| @ -18,6 +18,9 @@ class CachectlApp extends Application { | ||||
|     ["-r", "--read", "name" => "action", "value" => self::ACTION_READ, | ||||
|       "help" => "Afficher le contenu d'un fichier cache", | ||||
|     ], | ||||
|     ["-d::", "--data", | ||||
|       "help" => "Identifiant de la donnée à afficher", | ||||
|     ], | ||||
|     ["-i", "--infos", "name" => "action", "value" => self::ACTION_INFOS, | ||||
|       "help" => "Afficher des informations sur le fichier cache", | ||||
|     ], | ||||
| @ -43,6 +46,8 @@ class CachectlApp extends Application { | ||||
| 
 | ||||
|   protected $updateAction, $updateDuration; | ||||
| 
 | ||||
|   protected $data = null; | ||||
| 
 | ||||
|   function setActionUpdate(int $action, $updateDuration): void { | ||||
|     $this->action = self::ACTION_UPDATE; | ||||
|     switch ($action) { | ||||
| @ -90,7 +95,7 @@ class CachectlApp extends Application { | ||||
|           "duration" => "INF", | ||||
|           "override_duration" => true, | ||||
|         ]); | ||||
|         yaml::dump($cache->get()); | ||||
|         yaml::dump($cache->get($this->data)); | ||||
|         break; | ||||
|       case self::ACTION_INFOS: | ||||
|         if ($showSection) msg::section($file); | ||||
|  | ||||
							
								
								
									
										8
									
								
								php/src/cache/CacheData.php
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								php/src/cache/CacheData.php
									
									
									
									
										vendored
									
									
								
							| @ -6,7 +6,7 @@ use nulib\php\func; | ||||
| use Traversable; | ||||
| 
 | ||||
| /** | ||||
|  * Interface CacheData: gestion d'une donnée mise en cache | ||||
|  * Class CacheData: gestion d'une donnée mise en cache | ||||
|  */ | ||||
| abstract class CacheData { | ||||
|   function __construct(?string $name, $compute) { | ||||
| @ -29,6 +29,12 @@ abstract class CacheData { | ||||
|     return $data; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * le cache est-il externe? si non, utiliser {@link setDatafile()} pour | ||||
|    * spécifier le fichier destination de la valeur | ||||
|    */ | ||||
|   abstract function isExternal(): bool; | ||||
| 
 | ||||
|   /** spécifier le chemin du cache à partir du fichier de base */ | ||||
|   abstract function setDatafile(?string $basefile): void; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										15
									
								
								php/src/cache/CacheFile.php
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								php/src/cache/CacheFile.php
									
									
									
									
										vendored
									
									
								
							| @ -217,10 +217,12 @@ class CacheFile extends SharedFile { | ||||
|     return null; | ||||
|   } | ||||
| 
 | ||||
|   protected function refreshData($data, bool $noCache) { | ||||
|     $source = $this->sources[$data] ?? null; | ||||
|   protected function refreshData($key, bool $noCache) { | ||||
|     $source = $this->sources[$key] ?? null; | ||||
|     $external = $source !== null && $source->isExternal(); | ||||
| 
 | ||||
|     $updateMetadata = $this->shouldUpdate($noCache); | ||||
|     if ($source === null) $updateData = $this->data === null; | ||||
|     if (!$key && !$external) $updateData = $this->data === null; | ||||
|     else $updateData = !$source->exists(); | ||||
|     if (!$this->readonly && ($updateMetadata || $updateData)) { | ||||
|       $this->lockWrite(); | ||||
| @ -232,11 +234,12 @@ class CacheFile extends SharedFile { | ||||
|         $this->data = null; | ||||
|         $updateData = true; | ||||
|       } | ||||
|       if ($source === null) { | ||||
|       if (!$key && !$external) { | ||||
|         if ($updateData) { | ||||
|           # calculer la valeur
 | ||||
|           try { | ||||
|             $data = $this->compute(); | ||||
|             if ($source !== null) $data = $source->compute(); | ||||
|             else $data = $this->compute(); | ||||
|           } catch (Exception $e) { | ||||
|             # le fichier n'est pas mis à jour, mais ce n'est pas gênant: lors
 | ||||
|             # des futurs appels, l'exception continuera d'être lancée ou la
 | ||||
| @ -270,7 +273,7 @@ class CacheFile extends SharedFile { | ||||
|           $data = null; | ||||
|         } | ||||
|       } | ||||
|     } elseif ($source === null) { | ||||
|     } elseif (!$key && !$external) { | ||||
|       $data = $this->data; | ||||
|     } elseif ($source->exists()) { | ||||
|       $data = $source->load(); | ||||
|  | ||||
							
								
								
									
										4
									
								
								php/src/cache/CursorCacheData.php
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								php/src/cache/CursorCacheData.php
									
									
									
									
										vendored
									
									
								
							| @ -11,6 +11,10 @@ class CursorCacheData extends CacheData { | ||||
|     $this->channel = $channel; | ||||
|   } | ||||
| 
 | ||||
|   function isExternal(): bool { | ||||
|     return true; | ||||
|   } | ||||
| 
 | ||||
|   function setDatafile(?string $basefile): void { | ||||
|   } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										4
									
								
								php/src/cache/DataCacheData.php
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								php/src/cache/DataCacheData.php
									
									
									
									
										vendored
									
									
								
							| @ -27,6 +27,10 @@ class DataCacheData extends CacheData { | ||||
|     return $data; | ||||
|   } | ||||
| 
 | ||||
|   function isExternal(): bool { | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   protected string $datafile; | ||||
| 
 | ||||
|   function setDatafile(?string $basefile): void { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user