New options for cron uploader:
Logging level Including all logs in output Stop on error instead of continuing
This commit is contained in:
		
							parent
							
								
									e1aefb78ab
								
							
						
					
					
						commit
						86f7a06ed0
					
				| @ -10,6 +10,15 @@ define("SCORE_LOG_INFO", 20); | |||||||
| define("SCORE_LOG_DEBUG", 10); | define("SCORE_LOG_DEBUG", 10); | ||||||
| define("SCORE_LOG_NOTSET", 0); | define("SCORE_LOG_NOTSET", 0); | ||||||
| 
 | 
 | ||||||
|  | const LOGGING_LEVEL_NAMES = [ | ||||||
|  |     SCORE_LOG_NOTSET=>"Not Set", | ||||||
|  |     SCORE_LOG_DEBUG=>"Debug", | ||||||
|  |     SCORE_LOG_INFO=>"Info", | ||||||
|  |     SCORE_LOG_WARNING=>"Warning", | ||||||
|  |     SCORE_LOG_ERROR=>"Error", | ||||||
|  |     SCORE_LOG_CRITICAL=>"Critical", | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * A shorthand way to send a LogEvent |  * A shorthand way to send a LogEvent | ||||||
|  * |  * | ||||||
|  | |||||||
| @ -3,17 +3,22 @@ | |||||||
| 
 | 
 | ||||||
| abstract class CronUploaderConfig | abstract class CronUploaderConfig | ||||||
| { | { | ||||||
|     const DEFAULT_PATH = "cron_uploader"; |     public const DEFAULT_PATH = "cron_uploader"; | ||||||
| 
 | 
 | ||||||
|     const KEY = "cron_uploader_key"; |     public const KEY = "cron_uploader_key"; | ||||||
|     const DIR = "cron_uploader_dir"; |     public const DIR = "cron_uploader_dir"; | ||||||
|     const USER = "cron_uploader_user"; |     public const USER = "cron_uploader_user"; | ||||||
|  |     public const STOP_ON_ERROR = "cron_uploader_stop_on_error"; | ||||||
|  |     public const INCLUDE_ALL_LOGS = "cron_uploader_include_all_logs"; | ||||||
|  |     public const LOG_LEVEL = "cron_uploader_log_level"; | ||||||
| 
 | 
 | ||||||
|     public static function set_defaults(): void |     public static function set_defaults(): void | ||||||
|     { |     { | ||||||
|         global $config; |         global $config; | ||||||
|         $config->set_default_string(self::DIR, data_path(self::DEFAULT_PATH)); |         $config->set_default_string(self::DIR, data_path(self::DEFAULT_PATH)); | ||||||
| 
 |         $config->set_default_bool(self::INCLUDE_ALL_LOGS, false); | ||||||
|  |         $config->set_default_bool(self::STOP_ON_ERROR, false); | ||||||
|  |         $config->set_default_int(self::LOG_LEVEL, SCORE_LOG_INFO); | ||||||
|         $upload_key = $config->get_string(self::KEY, ""); |         $upload_key = $config->get_string(self::KEY, ""); | ||||||
|         if (empty($upload_key)) { |         if (empty($upload_key)) { | ||||||
|             $upload_key = self::generate_key(); |             $upload_key = self::generate_key(); | ||||||
|  | |||||||
| @ -15,6 +15,8 @@ class CronUploader extends Extension | |||||||
|     const UPLOADED_DIR = "uploaded"; |     const UPLOADED_DIR = "uploaded"; | ||||||
|     const FAILED_DIR = "failed_to_upload"; |     const FAILED_DIR = "failed_to_upload"; | ||||||
| 
 | 
 | ||||||
|  |     private static $IMPORT_RUNNING = false; | ||||||
|  | 
 | ||||||
|     public function onInitExt(InitExtEvent $event) |     public function onInitExt(InitExtEvent $event) | ||||||
|     { |     { | ||||||
|         // Set default values
 |         // Set default values
 | ||||||
| @ -58,6 +60,15 @@ class CronUploader extends Extension | |||||||
|         $sb->add_text_option(CronUploaderConfig::DIR, "Root dir", true); |         $sb->add_text_option(CronUploaderConfig::DIR, "Root dir", true); | ||||||
|         $sb->add_text_option(CronUploaderConfig::KEY, "Key", true); |         $sb->add_text_option(CronUploaderConfig::KEY, "Key", true); | ||||||
|         $sb->add_choice_option(CronUploaderConfig::USER, $users, "User", true); |         $sb->add_choice_option(CronUploaderConfig::USER, $users, "User", true); | ||||||
|  |         $sb->add_bool_option(CronUploaderConfig::STOP_ON_ERROR, "Stop On Error", true); | ||||||
|  |         $sb->add_choice_option(CronUploaderConfig::LOG_LEVEL, [ | ||||||
|  |             LOGGING_LEVEL_NAMES[SCORE_LOG_DEBUG] => SCORE_LOG_DEBUG, | ||||||
|  |             LOGGING_LEVEL_NAMES[SCORE_LOG_INFO] => SCORE_LOG_INFO, | ||||||
|  |             LOGGING_LEVEL_NAMES[SCORE_LOG_WARNING] => SCORE_LOG_WARNING, | ||||||
|  |             LOGGING_LEVEL_NAMES[SCORE_LOG_ERROR] => SCORE_LOG_ERROR, | ||||||
|  |             LOGGING_LEVEL_NAMES[SCORE_LOG_CRITICAL] => SCORE_LOG_CRITICAL, | ||||||
|  |         ], "Output Log Level: ", true); | ||||||
|  |         $sb->add_bool_option(CronUploaderConfig::INCLUDE_ALL_LOGS, "Include All Logs", true); | ||||||
|         $sb->end_table(); |         $sb->end_table(); | ||||||
|         $sb->add_label("<a href='$documentation_link'>Read the documentation</a> for cron setup instructions."); |         $sb->add_label("<a href='$documentation_link'>Read the documentation</a> for cron setup instructions."); | ||||||
| 
 | 
 | ||||||
| @ -105,6 +116,23 @@ class CronUploader extends Extension | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public function onLog(LogEvent $event) | ||||||
|  |     { | ||||||
|  |         global $config; | ||||||
|  |         if (self::$IMPORT_RUNNING && | ||||||
|  |             $event->priority >= $config->get_int(CronUploaderConfig::LOG_LEVEL) && | ||||||
|  |             ($event->section==self::NAME || $config->get_bool(CronUploaderConfig::INCLUDE_ALL_LOGS)) | ||||||
|  |         ) { | ||||||
|  |             $output =  "[" . date('Y-m-d H:i:s') . "] [" . LOGGING_LEVEL_NAMES[$event->priority] . "] " . $event->message  ; | ||||||
|  | 
 | ||||||
|  |             echo $output . "\r\n"; | ||||||
|  |             flush_output(); | ||||||
|  | 
 | ||||||
|  |             $log_path = $this->get_log_file(); | ||||||
|  |             file_put_contents($log_path, $output); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private function restage_folder(string $folder) |     private function restage_folder(string $folder) | ||||||
|     { |     { | ||||||
|         global $page; |         global $page; | ||||||
| @ -275,7 +303,7 @@ class CronUploader extends Extension | |||||||
|      */ |      */ | ||||||
|     public function process_upload(string $key, ?int $upload_count = null): bool |     public function process_upload(string $key, ?int $upload_count = null): bool | ||||||
|     { |     { | ||||||
|         global $database, $_shm_load_start; |         global $database, $config, $_shm_load_start; | ||||||
| 
 | 
 | ||||||
|         $max_time = intval(ini_get('max_execution_time'))*.8; |         $max_time = intval(ini_get('max_execution_time'))*.8; | ||||||
| 
 | 
 | ||||||
| @ -301,6 +329,7 @@ class CronUploader extends Extension | |||||||
|             throw new SCoreException("Cron upload process is already running"); |             throw new SCoreException("Cron upload process is already running"); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         self::$IMPORT_RUNNING = true; | ||||||
|         try { |         try { | ||||||
|             //set_time_limit(0);
 |             //set_time_limit(0);
 | ||||||
| 
 | 
 | ||||||
| @ -338,9 +367,13 @@ class CronUploader extends Extension | |||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     $failed++; |                     $failed++; | ||||||
|                     $this->move_uploaded($img[0], $img[1], $output_subdir, true); |  | ||||||
|                     $this->log_message(SCORE_LOG_ERROR, "(" . gettype($e) . ") " . $e->getMessage()); |                     $this->log_message(SCORE_LOG_ERROR, "(" . gettype($e) . ") " . $e->getMessage()); | ||||||
|                     $this->log_message(SCORE_LOG_ERROR, $e->getTraceAsString()); |                     $this->log_message(SCORE_LOG_ERROR, $e->getTraceAsString()); | ||||||
|  |                     if ($config->get_bool(CronUploaderConfig::STOP_ON_ERROR)) { | ||||||
|  |                         break; | ||||||
|  |                     } else { | ||||||
|  |                         $this->move_uploaded($img[0], $img[1], $output_subdir, true); | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
| @ -357,6 +390,7 @@ class CronUploader extends Extension | |||||||
| 
 | 
 | ||||||
|             return true; |             return true; | ||||||
|         } finally { |         } finally { | ||||||
|  |             self::$IMPORT_RUNNING = false; | ||||||
|             flock($lockfile, LOCK_UN); |             flock($lockfile, LOCK_UN); | ||||||
|             fclose($lockfile); |             fclose($lockfile); | ||||||
|         } |         } | ||||||
| @ -494,14 +528,6 @@ class CronUploader extends Extension | |||||||
|     private function log_message(int $severity, string $message): void |     private function log_message(int $severity, string $message): void | ||||||
|     { |     { | ||||||
|         log_msg(self::NAME, $severity, $message); |         log_msg(self::NAME, $severity, $message); | ||||||
| 
 |  | ||||||
|         $time = "[" . date('Y-m-d H:i:s') . "]"; |  | ||||||
| 
 |  | ||||||
|         echo $time . " " . $message."\r\n"; |  | ||||||
|         flush_output(); |  | ||||||
| 
 |  | ||||||
|         $log_path = $this->get_log_file(); |  | ||||||
|         file_put_contents($log_path, $time . " " . $message); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private function get_log_file(): string |     private function get_log_file(): string | ||||||
| @ -517,5 +543,4 @@ class CronUploader extends Extension | |||||||
|         $page->set_type(MIME_TYPE_TEXT); |         $page->set_type(MIME_TYPE_TEXT); | ||||||
|         $page->send_headers(); |         $page->send_headers(); | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -234,11 +234,11 @@ class LogDatabase extends Extension | |||||||
|     { |     { | ||||||
|         $sb = new SetupBlock("Logging (Database)"); |         $sb = new SetupBlock("Logging (Database)"); | ||||||
|         $sb->add_choice_option("log_db_priority", [ |         $sb->add_choice_option("log_db_priority", [ | ||||||
|             "Debug" => SCORE_LOG_DEBUG, |             LOGGING_LEVEL_NAMES[SCORE_LOG_DEBUG] => SCORE_LOG_DEBUG, | ||||||
|             "Info" => SCORE_LOG_INFO, |             LOGGING_LEVEL_NAMES[SCORE_LOG_INFO] => SCORE_LOG_INFO, | ||||||
|             "Warning" => SCORE_LOG_WARNING, |             LOGGING_LEVEL_NAMES[SCORE_LOG_WARNING] => SCORE_LOG_WARNING, | ||||||
|             "Error" => SCORE_LOG_ERROR, |             LOGGING_LEVEL_NAMES[SCORE_LOG_ERROR] => SCORE_LOG_ERROR, | ||||||
|             "Critical" => SCORE_LOG_CRITICAL, |             LOGGING_LEVEL_NAMES[SCORE_LOG_CRITICAL] => SCORE_LOG_CRITICAL, | ||||||
|         ], "Debug Level: "); |         ], "Debug Level: "); | ||||||
|         $event->panel->add_block($sb); |         $event->panel->add_block($sb); | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user