Skip to content

Conversation

@richard015ar
Copy link
Contributor

Issue: https://github.com/pressbooks/private/issues/2026

If this WP CLI command works, we should delete the script defined in https://github.com/pressbooks/pressbooks-network-analytics/pull/411 to avoid redundancy.

This pull request introduces a new WP-CLI command, pb network-aggregate, for aggregating Koko Analytics data across a Pressbooks multisite network. It adds robust batching, retry, and failure management to handle large networks and persistent errors gracefully. The implementation includes a distributed locking mechanism to prevent concurrent runs and records failures with exponential backoff for later retry. The changes also ensure plugin conflicts are avoided during aggregation by skipping problematic plugins.

New command and documentation:

  • Added the pb network-aggregate WP-CLI command, including detailed documentation in README.md about its options, behavior, troubleshooting, and internal logic. [1] [2] [3]

Aggregation and batching logic:

  • Implemented the main aggregation workflow in NetworkAggregateCommand, with batching, retries, start/max site controls, and Slack notification integration for reporting results.
  • Created Runner, AggregatorService, and BlogRepository classes to manage batch processing, aggregation logic, and efficient blog selection using keyset pagination. [1] [2] [3]

Failure handling and backoff:

  • Introduced FailureRepository and BackoffStrategy classes to record failures, schedule retries with exponential backoff, and clear records on success. [1] [2]

Distributed locking and logging:

  • Added LockManager for MySQL advisory locking to prevent concurrent aggregations, and CliLogger for structured CLI output. [1] [2]

Plugin conflict avoidance:

  • Updated command.php to automatically skip plugins known to cause Mustache conflicts when running the aggregation command, ensuring reliable execution.

Testing case

For testing, you can try: wp pb network-aggregate --mode=both --batch-size=200 --path=<WP_INSTALLATION_PATH>

@private-packagist
Copy link

composer.lock

Click to show 74 changes in this composer.lock file

Dev Package changes

Package Operation From To About
behat/behat add - v3.26.0 view code - License: MIT License
behat/gherkin add - v4.15.0 view code - License: MIT License
composer/pcre add - 3.3.2 view code - License: MIT License
composer/semver add - 3.4.4 view code - License: MIT License
composer/xdebug-handler add - 3.0.5 view code - License: MIT License
dealerdirect/phpcodesniffer-composer-installer add - v1.2.0 view code - License: MIT License
doctrine/instantiator add - 2.0.0 view code - License: MIT License
mustache/mustache add - v3.0.0 view code - License: MIT License
myclabs/deep-copy add - 1.13.4 view code - License: MIT License
nikic/php-parser add - v5.6.2 view code - License: BSD 3-Clause "New" or "Revised" License
phar-io/manifest add - 2.0.4 view code - License: BSD 3-Clause "New" or "Revised" License
phar-io/version add - 3.2.1 view code - License: BSD 3-Clause "New" or "Revised" License
php-parallel-lint/php-console-color add - v1.0.1 view code - License: BSD 2-Clause "Simplified" License
php-parallel-lint/php-console-highlighter add - v1.0.0 view code - License: MIT License
php-parallel-lint/php-parallel-lint add - v1.4.0 view code - License: BSD 2-Clause "Simplified" License
phpcompatibility/php-compatibility add - 9.3.5 view code - License: GNU Lesser General Public License v3.0 or later
phpunit/php-code-coverage add - 9.2.32 view code - License: BSD 3-Clause "New" or "Revised" License
phpunit/php-file-iterator add - 3.0.6 view code - License: BSD 3-Clause "New" or "Revised" License
phpunit/php-invoker add - 3.1.1 view code - License: BSD 3-Clause "New" or "Revised" License
phpunit/php-text-template add - 2.0.4 view code - License: BSD 3-Clause "New" or "Revised" License
phpunit/php-timer add - 5.0.3 view code - License: BSD 3-Clause "New" or "Revised" License
phpunit/phpunit add - 9.6.29 view code - License: BSD 3-Clause "New" or "Revised" License
psr/container add - 2.0.2 view code - License: MIT License
psr/event-dispatcher add - 1.0.0 view code - License: MIT License
psr/log add - 3.0.2 view code - License: MIT License
sebastian/cli-parser add - 1.0.2 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/code-unit add - 1.0.8 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/code-unit-reverse-lookup add - 2.0.3 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/comparator add - 4.0.9 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/complexity add - 2.0.3 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/diff add - 4.0.6 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/environment add - 5.1.5 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/exporter add - 4.0.8 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/global-state add - 5.0.8 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/lines-of-code add - 1.0.4 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/object-enumerator add - 4.0.4 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/object-reflector add - 2.0.4 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/recursion-context add - 4.0.6 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/resource-operations add - 3.0.4 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/type add - 3.2.1 view code - License: BSD 3-Clause "New" or "Revised" License
sebastian/version add - 3.0.2 view code - License: BSD 3-Clause "New" or "Revised" License
squizlabs/php_codesniffer add - 3.13.5 view code - License: BSD 3-Clause "New" or "Revised" License
symfony/config add - v7.3.6 view code - License: MIT License
symfony/console add - v7.3.6 view code - License: MIT License
symfony/dependency-injection add - v7.3.6 view code - License: MIT License
symfony/deprecation-contracts add - v3.6.0 view code - License: MIT License
symfony/event-dispatcher add - v7.3.3 view code - License: MIT License
symfony/event-dispatcher-contracts add - v3.6.0 view code - License: MIT License
symfony/filesystem add - v7.3.6 view code - License: MIT License
symfony/finder add - v7.3.5 view code - License: MIT License
symfony/polyfill-ctype add - v1.33.0 view code - License: MIT License
symfony/polyfill-intl-grapheme add - v1.33.0 view code - License: MIT License
symfony/polyfill-intl-normalizer add - v1.33.0 view code - License: MIT License
symfony/polyfill-mbstring add - v1.33.0 view code - License: MIT License
symfony/service-contracts add - v3.6.1 view code - License: MIT License
symfony/string add - v7.3.4 view code - License: MIT License
symfony/translation add - v7.3.4 view code - License: MIT License
symfony/translation-contracts add - v3.6.1 view code - License: MIT License
symfony/var-exporter add - v7.3.4 view code - License: MIT License
symfony/yaml add - v7.3.5 view code - License: MIT License
theseer/tokenizer add - 1.3.1 view code - License: BSD 3-Clause "New" or "Revised" License
wp-cli/config-command add - v2.3.8 view code - License: MIT License
wp-cli/core-command add - v2.1.22 view code - License: MIT License
wp-cli/entity-command add - v2.8.5 view code - License: MIT License
wp-cli/eval-command add - v2.2.6 view code - License: MIT License
wp-cli/extension-command add - v2.2.0 view code - License: MIT License
wp-cli/mustangostang-spyc add - 0.6.3 view code - License: MIT License
wp-cli/php-cli-tools add - v0.12.6 view code - License: MIT License
wp-cli/scaffold-command add - v2.5.1 view code - License: MIT License
wp-cli/wp-cli add - 2.13.x-dev 2cc5992 view code - License: MIT License
wp-cli/wp-cli-tests add - v3.2.7 view code - License: MIT License
wp-cli/wp-config-transformer add - v1.4.2 view code - License: MIT License
wp-coding-standards/wpcs add - 2.3.0 view code - License: MIT License
yoast/phpunit-polyfills add - 1.1.5 view code - License: BSD 3-Clause "New" or "Revised" License

Settings · Docs · Powered by Private Packagist

@cmurtagh cmurtagh merged commit d3fa3a5 into dev Nov 18, 2025
1 check passed
@richard015ar richard015ar deleted the feat/koko-command branch November 19, 2025 09:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants