2020-08-08 21:45:24 +02:00
< ? PHP
/**
* Provides an interface for CLI outputs of museum - digital ' s dev and admin tools .
*
* @ author Joshua Ramon Enslin < joshua @ museum - digital . de >
*/
/**
* Interface for CLI outputs of museum - digital ' s dev and admin tools .
*/
class MDConsole {
2020-08-08 22:07:39 +02:00
const STATUS_NOTICE = 0 ;
const STATUS_UPDATE = 1 ;
const STATUS_DELETION = 2 ;
const STATUS_ERROR = 3 ;
2020-08-08 22:23:27 +02:00
const STATUS_SKIPPED = 4 ;
2020-08-08 21:45:24 +02:00
const CONSOLE_LEVEL_COLORS = [
2020-08-08 22:07:39 +02:00
self :: STATUS_NOTICE => " " ,
self :: STATUS_ERROR => " 41 " , // 0: Red background | Problem
self :: STATUS_UPDATE => " 42 " , // 1: Green background | Edited automatically
self :: STATUS_DELETION => " 44 " , // 2: Blue background | Deleted
self :: STATUS_SKIPPED => " 40 " , // 2: Blue background | Deleted
2020-08-08 21:45:24 +02:00
];
const CONSOLE_LOG_USED_RESOURCES_ENABLED = 1 ;
const CONSOLE_LOG_USED_RESOURCES_DISABLED = 0 ;
/**
* Prints a headline .
*
* @ param string $msg Message to print .
* @ param integer $level Heading level .
*
* @ return void
*/
final public static function heading ( string $msg , int $level = 2 ) : void {
if ( $level < 1 || $level > 6 ) {
throw new MDConsoleInvalidHeadingNumber ( " Invalid heading number " );
}
$msgLen = strlen ( $msg );
echo sprintf ( " \033 [1;30;m \033 [0m \033 [1m%s \033 [0m " . PHP_EOL , $msg );
if ( $level >= 3 ) return ;
switch ( $level ) {
case 1 :
$headingLvlChar = " = " ;
case 2 :
default :
$headingLvlChar = " - " ;
}
for ( $i = 0 ; $i < $msgLen + 6 ; $i ++ ) echo $headingLvlChar ;
echo PHP_EOL ;
}
/**
* Prints a headline .
*
* @ param string $msg Message to print .
*
* @ return void
*/
final public static function note ( string $msg ) : void {
echo PHP_EOL . sprintf ( " \033 [30m(%s)%s \033 [0m " . PHP_EOL . PHP_EOL , date ( " H:i:s " ), $msg );
}
/**
* Formats a message uniformly , maybe also to stdout .
*
* @ param string $context Context this is called from .
* @ param integer $level Level of the notification .
* @ param integer $editedNo Number of edited entries .
* @ param string $additionalNote Optional , additional note .
* @ param string $link Link .
*
* @ return void
*/
2020-08-08 22:07:39 +02:00
final public static function write ( string $context , int $level = self :: STATUS_NOTICE , int $editedNo = 0 , string $additionalNote = " " , string $link = " " ) : void {
2020-08-08 21:45:24 +02:00
// Get parts for generating the message to log.
$additionalNote = strtr ( $additionalNote , [ " ä " => " ae " , " ö " => " oe " , " ü " => " ue " ]);
$date = date ( " H:i:s " ); // Get current date & time.
// Generate the message to log.
# $message = sprintf("%1$07s", memory_get_usage()) . " :: {$date} :: {$msg}" . PHP_EOL;
$levelColor = self :: CONSOLE_LEVEL_COLORS [ $level ];
2020-08-27 16:14:18 +02:00
if ( $link === " " )
2020-08-08 21:45:24 +02:00
echo sprintf ( " \033 [1;30; " . $levelColor . " m_____ \033 [0m \033 [0m %-20s \033 [40m:: \033 [0m # \033 [32m%+9s \033 [0m \033 [40m:: \033 [0m 📝 %-50s \033 [40m:: \033 [0m 📅 %+20s \n " , $context , $editedNo , $additionalNote , $date );
else
echo sprintf ( " \033 [1;30; " . $levelColor . " m_____ \033 [0m \033 [0m %-20s \033 [40m:: \033 [0m # \033 [32m%+9s \033 [0m \033 [40m:: \033 [0m 📝 %-50s \033 [40m:: \033 [0m 📅 %+20s \033 [40m:: \033 [0m $link\n " , $context , $editedNo , $additionalNote , $date );;
}
/**
* Sets up last line of CLI output .
*
* @ return void
*/
final public static function setupCLI () : void {
$startTime = microtime ( true );
2020-08-27 16:14:18 +02:00
register_shutdown_function ( function ( $startTime ) : void {
2020-08-08 21:45:24 +02:00
$duration = microtime ( true ) - $startTime ;
if ( $duration < 30 ) return ;
2020-08-08 22:23:27 +02:00
self :: note ( " Long script run " . PHP_EOL . " Script run time, that's: " . round ( $duration , 2 ) . PHP_EOL . " Peak memory usage: " . memory_get_peak_usage () . PHP_EOL . " Memory usage at end of script: " . memory_get_usage ());
2020-08-08 21:45:24 +02:00
}, $startTime );
}
/**
* Constructor .
*
* @ return void
*/
public function __construct () {
self :: setupCLI ();
}
}