diff --git a/README.md b/README.md index 71fddae..85a1fbc 100644 --- a/README.md +++ b/README.md @@ -23,12 +23,11 @@ These formats are supported for now: `http`, `curl`, `wget`. ## Planned features - support as many as possible/necessary of authentication kinds (_currently no ones_); -- support as many as possible/necessary of body formats (_currently json and formdata_); +- support as many as possible/necessary of body formats (_currently only `json` and `formdata`_); - documentation generation support (markdown) with responce examples (if present); - maybe some another convert formats (like httpie or something...); - replace `{{vars}}` from folder; - replace `{{vars}}` from environment; -- performance measurement; - better logging; - tests, phpcs, psalm, etc.; - web version. diff --git a/pm-convert b/pm-convert index 9cf0a06..1168f11 100755 --- a/pm-convert +++ b/pm-convert @@ -21,7 +21,7 @@ foreach ($paths as $path) { is_null($file) && throw new RuntimeException('Unable to locate autoload.php file.'); try { - (new Processor($argv))->start(); + (new Processor($argv))->convert(); } catch (Exception $e) { fwrite(STDERR, sprintf('ERROR: %s%s', $e->getMessage(), PHP_EOL)); die(1); diff --git a/src/Processor.php b/src/Processor.php index 7450d29..df7d5b8 100644 --- a/src/Processor.php +++ b/src/Processor.php @@ -54,6 +54,16 @@ class Processor */ protected array $collections = []; + /** + * @var int Initial timestamp + */ + protected int $init_time; + + /** + * @var int Initial RAM usage + */ + protected int $init_ram; + /** * Constructor * @@ -61,6 +71,8 @@ class Processor */ public function __construct(protected array $argv) { + $this->init_time = hrtime(true); + $this->init_ram = memory_get_usage(true); } /** @@ -181,22 +193,43 @@ class Processor * * @throws Exception */ - public function start(): void + public function convert(): void { $this->parseArgs(); $this->initOutputDirectory(); $this->initConverters(); $this->initCollections(); + $count = count($this->collections); + $current = 1; + $success = 0; print(implode(PHP_EOL, array_merge($this->version(), $this->copyright())) . PHP_EOL . PHP_EOL); foreach ($this->collections as $collectionName => $collection) { - print("Converting '$collectionName':" . PHP_EOL); + printf("Converting '%s' (%d/%d):%s", $collectionName, $current, $count, PHP_EOL); foreach ($this->converters as $type => $exporter) { - print("\t-> " . strtolower($type)); + printf(' > %s', strtolower($type)); $outputPath = sprintf('%s%s%s', $this->outputPath, DIRECTORY_SEPARATOR, $collectionName); $exporter->convert($collection, $outputPath); - printf("\t- OK: %s%s", $exporter->getOutputPath(), PHP_EOL); + printf(' - OK: %s%s', $exporter->getOutputPath(), PHP_EOL); } + print(PHP_EOL); + ++$current; + ++$success; } + $this->printStats($success, $current); + } + + /** + * Outputs some statistics + * + * @param int $success + * @param int $count + * @return void + */ + protected function printStats(int $success, int $count): void + { + $time = (hrtime(true) - $this->init_time) / 1_000_000; + $ram = (memory_get_peak_usage(true) - $this->init_ram) / 1024 / 1024; + printf('Converted %d of %d in %.3f ms using %.3f MiB RAM', $success, $count, $time, $ram); } /**