| Conditions | 14 |
| Paths | 114 |
| Total Lines | 92 |
| Code Lines | 61 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 1 | ||
| Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 56 | public function safeBinaries(): void |
||
| 57 | { |
||
| 58 | // update group stats - Updated to use new script location (modernized) |
||
| 59 | $this->executeCommand(PHP_BINARY.' app/Services/Tmux/Scripts/update_groups.php'); |
||
| 60 | |||
| 61 | $maxHeaders = (int) Settings::settingValue('max_headers_iteration') ?: 1000000; |
||
| 62 | $maxMessages = (int) Settings::settingValue('maxmssgs'); |
||
| 63 | |||
| 64 | // Prevent division by zero - ensure maxmssgs is at least 1 |
||
| 65 | if ($maxMessages < 1) { |
||
| 66 | $defaultMaxMessages = 20000; |
||
| 67 | $this->colorCli->warning('maxmssgs setting is invalid or not set, using default of '.$defaultMaxMessages); |
||
| 68 | $maxMessages = $defaultMaxMessages; |
||
| 69 | } |
||
| 70 | |||
| 71 | $maxProcesses = (int) Settings::settingValue('binarythreads'); |
||
| 72 | |||
| 73 | $groups = DB::select( |
||
| 74 | ' |
||
| 75 | SELECT g.name AS groupname, g.last_record AS our_last, |
||
| 76 | a.last_record AS their_last |
||
| 77 | FROM usenet_groups g |
||
| 78 | INNER JOIN short_groups a ON g.active = 1 AND g.name = a.name |
||
| 79 | ORDER BY a.last_record DESC' |
||
| 80 | ); |
||
| 81 | |||
| 82 | if (empty($groups)) { |
||
| 83 | $this->headerNone(); |
||
| 84 | |||
| 85 | return; |
||
| 86 | } |
||
| 87 | |||
| 88 | $i = 1; |
||
| 89 | $queues = []; |
||
| 90 | foreach ($groups as $group) { |
||
| 91 | if ((int) $group->our_last === 0) { |
||
| 92 | $queues[$i] = sprintf('update_group_headers %s', $group->groupname); |
||
| 93 | $i++; |
||
| 94 | } else { |
||
| 95 | $count = $group->their_last - $group->our_last - 20000; // skip first 20k |
||
| 96 | if ($count <= $maxMessages * 2) { |
||
| 97 | $queues[$i] = sprintf('update_group_headers %s', $group->groupname); |
||
| 98 | $i++; |
||
| 99 | } else { |
||
| 100 | $queues[$i] = sprintf('part_repair %s', $group->groupname); |
||
| 101 | $i++; |
||
| 102 | $getEach = (int) floor(min($count, $maxHeaders) / $maxMessages); |
||
| 103 | $remaining = (int) (min($count, $maxHeaders) - $getEach * $maxMessages); |
||
| 104 | for ($j = 0; $j < $getEach; $j++) { |
||
| 105 | $queues[$i] = sprintf('get_range binaries %s %s %s %s', $group->groupname, $group->our_last + $j * $maxMessages + 1, $group->our_last + $j * $maxMessages + $maxMessages, $i); |
||
| 106 | $i++; |
||
| 107 | } |
||
| 108 | if ($remaining > 0) { |
||
| 109 | $start = $group->our_last + $getEach * $maxMessages + 1; |
||
| 110 | $end = $start + $remaining; |
||
| 111 | $queues[$i] = sprintf('get_range binaries %s %s %s %s', $group->groupname, $start, $end, $i); |
||
| 112 | $i++; |
||
| 113 | } |
||
| 114 | } |
||
| 115 | } |
||
| 116 | } |
||
| 117 | |||
| 118 | // Streaming mode |
||
| 119 | if ((bool) config('nntmux.stream_fork_output', false) === true) { |
||
| 120 | $commands = []; |
||
| 121 | foreach ($queues as $queue) { |
||
| 122 | $commands[] = $this->buildDnrCommand($queue); |
||
| 123 | } |
||
| 124 | $this->runStreamingCommands($commands, $maxProcesses, 'safe_binaries'); |
||
| 125 | |||
| 126 | return; |
||
| 127 | } |
||
| 128 | |||
| 129 | $this->headerStart('safe_binaries', count($queues), $maxProcesses); |
||
| 130 | |||
| 131 | // Build commands array with group info for parallel execution |
||
| 132 | $commands = []; |
||
| 133 | $groupMapping = []; |
||
| 134 | foreach ($queues as $idx => $queue) { |
||
| 135 | preg_match('/alt\..+/i', $queue, $hit); |
||
| 136 | $commands[$idx] = $this->buildDnrCommand($queue); |
||
| 137 | $groupMapping[$idx] = $hit[0] ?? ''; |
||
| 138 | } |
||
| 139 | |||
| 140 | // Process using parallel commands with configurable timeout |
||
| 141 | $results = $this->runParallelCommands($commands, $maxProcesses); |
||
| 142 | |||
| 143 | foreach ($results as $idx => $output) { |
||
| 144 | $group = $groupMapping[$idx] ?? ''; |
||
| 145 | if (!empty($group)) { |
||
| 146 | echo $output; |
||
| 147 | $this->colorCli->primary('Updated group '.$group); |
||
| 148 | } |
||
| 153 |