3 final class HarbormasterManagementArchiveLogsWorkflow
4 extends HarbormasterManagementWorkflow
{
6 protected function didConstruct() {
8 ->setName('archive-logs')
9 ->setExamples('**archive-logs** [__options__] --mode __mode__')
10 ->setSynopsis(pht('Compress, decompress, store or destroy build logs.'))
17 'Use "plain" to remove encoding, or "compress" to compress '.
23 'Show more details about operations as they are performed. '.
24 'Slow! But also very reassuring!'),
29 public function execute(PhutilArgumentParser
$args) {
30 $viewer = $this->getViewer();
32 $mode = $args->getArg('mode');
34 throw new PhutilArgumentUsageException(
35 pht('Choose an archival mode with --mode.'));
43 $valid_modes = array_fuse($valid_modes);
44 if (empty($valid_modes[$mode])) {
45 throw new PhutilArgumentUsageException(
47 'Unknown mode "%s". Valid modes are: %s.',
49 implode(', ', $valid_modes)));
52 $log_table = new HarbormasterBuildLog();
53 $logs = new LiskMigrationIterator($log_table);
55 $show_details = $args->getArg('details');
62 foreach ($logs as $log) {
65 pht('Processing Harbormaster build log #%d...', $log->getID()));
68 $old_stats = $this->computeDetails($log);
73 $log->decompressLog();
81 $new_stats = $this->computeDetails($log);
82 $this->printStats($old_stats, $new_stats);
84 $total_old +
= $old_stats['bytes'];
85 $total_new +
= $new_stats['bytes'];
93 'Done. Total byte size of affected logs: %s -> %s.',
94 new PhutilNumber($total_old),
95 new PhutilNumber($total_new)));
101 private function computeDetails(HarbormasterBuildLog
$log) {
104 $hash = hash_init('sha1');
106 foreach ($log->newChunkIterator() as $chunk) {
107 $bytes +
= strlen($chunk->getChunk());
109 hash_update($hash, $chunk->getChunkDisplayText());
115 'hash' => hash_final($hash),
119 private function printStats(array $old_stats, array $new_stats) {
125 new PhutilNumber($old_stats['bytes']),
126 new PhutilNumber($new_stats['bytes'])));
132 pht('Stored Chunks'),
133 new PhutilNumber($old_stats['chunks']),
134 new PhutilNumber($new_stats['chunks'])));
142 $new_stats['hash']));
144 if ($old_stats['hash'] !== $new_stats['hash']) {
146 pht('Log data hashes differ! Something is tragically wrong!'));