From db0397aa8a27b86bcd4bfbbb5c265ed7e0b31307 Mon Sep 17 00:00:00 2001 From: JJ Date: Thu, 1 Aug 2024 09:38:48 -0400 Subject: [PATCH 1/2] add files to generate and remove test data --- docker-compose.yml | 1 + .../bulk-insert-logs.sample.sql | 222 +++++++++++++++++ .../large-datasets/bulk-insert-logs.sql | 223 ++++++++++++++++++ .../large-datasets/generate-bulk-insert.php | 111 +++++++++ .../large-datasets/remove-test-logs.sql | 8 + .../large-datasets/show-stream-db-stats.sql | 4 + package.json | 3 + 7 files changed, 572 insertions(+) create mode 100644 local/scripts/large-datasets/bulk-insert-logs.sample.sql create mode 100644 local/scripts/large-datasets/bulk-insert-logs.sql create mode 100644 local/scripts/large-datasets/generate-bulk-insert.php create mode 100644 local/scripts/large-datasets/remove-test-logs.sql create mode 100644 local/scripts/large-datasets/show-stream-db-stats.sql diff --git a/docker-compose.yml b/docker-compose.yml index 688165808..c558f3c40 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,6 +38,7 @@ services: - .:/var/www/html/wp-content/plugins/stream-src # Working directory. - ./build:/var/www/html/wp-content/plugins/stream # Built version for testing. - ./local/public:/var/www/html # WP core files. + - ./local/scripts:/var/local/scripts # Let us access the scripts in the container. restart: always extra_hosts: - host.docker.internal:host-gateway diff --git a/local/scripts/large-datasets/bulk-insert-logs.sample.sql b/local/scripts/large-datasets/bulk-insert-logs.sample.sql new file mode 100644 index 000000000..15a7a9b1c --- /dev/null +++ b/local/scripts/large-datasets/bulk-insert-logs.sample.sql @@ -0,0 +1,222 @@ + +/* This is a fallback file for debugging purposes. :) */ + + DELIMITER / / + + + / / DROP PROCEDURE IF EXISTS generateStreamLogs + + / / CREATE PROCEDURE generateStreamLogs(logdate DATETIME) BEGIN DECLARE i INT DEFAULT 0; + + SELECT ( CONCAT( 'Generating data for ', logdate ) ); + + WHILE (i <= 100) DO + INSERT INTO + wordpress.wp_stream ( + site_id, + blog_id, + object_id, + user_id, + user_role, + summary, + created, + connector, + context, + `action`, + ip + ) + VALUES + ( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ); + + INSERT INTO + wordpress.wp_stream_meta (record_id, meta_key, meta_value) + VALUES + (LAST_INSERT_ID() + 0, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 0, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 0, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 0, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 0, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 1, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 1, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 1, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 1, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 1, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 2, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 2, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 2, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 2, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 2, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 3, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 3, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 3, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 3, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 3, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 4, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 4, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 4, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 4, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 4, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 5, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 5, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 5, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 5, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 5, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 6, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 6, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 6, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 6, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 6, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 7, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 7, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 7, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 7, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 7, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 8, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 8, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 8, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 8, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 8, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 9, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 9, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 9, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 9, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 9, 'test_meta_key_5', 'meta_value_5'); + + SET + i = i + 1; + + END WHILE; + + END; + + / / DROP PROCEDURE IF EXISTS generateStreamLogsByDays + + / / CREATE PROCEDURE generateStreamLogsByDays() BEGIN DECLARE j INT DEFAULT 0; + + WHILE (j <= 1640) DO CALL generateStreamLogs( + DATE_ADD( + CAST('2018-07-02 00:00:00' as DATETIME), + INTERVAL - j DAY + ) + ); + + SET + j = j + 1; + + END WHILE; + + END; + + / / CALL generateStreamLogsByDays(); + diff --git a/local/scripts/large-datasets/bulk-insert-logs.sql b/local/scripts/large-datasets/bulk-insert-logs.sql new file mode 100644 index 000000000..b3716e937 --- /dev/null +++ b/local/scripts/large-datasets/bulk-insert-logs.sql @@ -0,0 +1,223 @@ + +/* This is a generated file. Run it via `php local/scripts/large-datasets/generate-bulk-insert.php` outside the Docker container. */ + + DELIMITER / / + + + / / DROP PROCEDURE IF EXISTS generateStreamLogs + + / / CREATE PROCEDURE generateStreamLogs(logdate DATETIME) BEGIN DECLARE i INT DEFAULT 0; + + SELECT ( CONCAT( 'Generating data for ', logdate ) ); + + WHILE (i <= 100) DO + INSERT INTO + wordpress.wp_stream ( + site_id, + blog_id, + object_id, + user_id, + user_role, + summary, + created, + connector, + context, + `action`, + ip + ) + VALUES + ( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ),( + 1, + 1, + i, + 1, + 'administrator', + 'This is the summary', + logdate, + 'posts', + 'post', + 'test', + '127.0.0.1' + ); + + INSERT INTO + wordpress.wp_stream_meta (record_id, meta_key, meta_value) + VALUES + (LAST_INSERT_ID() + 0, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 0, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 0, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 0, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 0, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 1, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 1, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 1, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 1, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 1, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 2, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 2, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 2, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 2, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 2, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 3, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 3, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 3, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 3, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 3, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 4, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 4, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 4, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 4, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 4, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 5, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 5, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 5, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 5, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 5, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 6, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 6, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 6, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 6, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 6, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 7, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 7, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 7, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 7, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 7, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 8, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 8, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 8, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 8, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 8, 'test_meta_key_5', 'meta_value_5'),(LAST_INSERT_ID() + 9, 'test_meta_key_1', 'meta_value_1'), + (LAST_INSERT_ID() + 9, 'test_meta_key_2', 'meta_value_2'), + (LAST_INSERT_ID() + 9, 'test_meta_key_3', 'meta_value_3'), + (LAST_INSERT_ID() + 9, 'test_meta_key_4', 'meta_value_4'), + (LAST_INSERT_ID() + 9, 'test_meta_key_5', 'meta_value_5'); + + SET + i = i + 1; + + END WHILE; + + END; + + / / DROP PROCEDURE IF EXISTS generateStreamLogsByDays + + / / CREATE PROCEDURE generateStreamLogsByDays() BEGIN DECLARE j INT DEFAULT 0; + + WHILE (j <= 1640) DO CALL generateStreamLogs( + DATE_ADD( + CAST('2018-07-02 00:00:00' as DATETIME), + INTERVAL - j DAY + ) + ); + + SET + j = j + 1; + + END WHILE; + + END; + + / / CALL generateStreamLogsByDays(); + + \ No newline at end of file diff --git a/local/scripts/large-datasets/generate-bulk-insert.php b/local/scripts/large-datasets/generate-bulk-insert.php new file mode 100644 index 000000000..3f251494b --- /dev/null +++ b/local/scripts/large-datasets/generate-bulk-insert.php @@ -0,0 +1,111 @@ + + +/* This is a generated file. Run it via `php local/scripts/large-datasets/generate-bulk-insert.php` outside the Docker container. */ + + DELIMITER / / + + + / / DROP PROCEDURE IF EXISTS generateStreamLogs + + / / CREATE PROCEDURE generateStreamLogs(logdate DATETIME) BEGIN DECLARE i INT DEFAULT 0; + + SELECT ( CONCAT( 'Generating data for ', logdate ) ); + + WHILE (i <= ) DO + INSERT INTO + wordpress.wp_stream ( + site_id, + blog_id, + object_id, + user_id, + user_role, + summary, + created, + connector, + context, + `action`, + ip + ) + VALUES + ; + + INSERT INTO + wordpress.wp_stream_meta (record_id, meta_key, meta_value) + VALUES + ; + + SET + i = i + 1; + + END WHILE; + + END; + + / / DROP PROCEDURE IF EXISTS generateStreamLogsByDays + + / / CREATE PROCEDURE generateStreamLogsByDays() BEGIN DECLARE j INT DEFAULT 0; + + WHILE (j <= ) DO CALL generateStreamLogs( + DATE_ADD( + CAST('' as DATETIME), + INTERVAL - j DAY + ) + ); + + SET + j = j + 1; + + END WHILE; + + END; + + / / CALL generateStreamLogsByDays(); + + Date: Thu, 1 Aug 2024 09:43:01 -0400 Subject: [PATCH 2/2] add documentation --- contributing.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contributing.md b/contributing.md index 3e4a53471..d33f9a3e7 100644 --- a/contributing.md +++ b/contributing.md @@ -60,6 +60,9 @@ We use npm as the canonical task runner for the project. The following commands - `npm run test-xdebug` will run the PHPunit tests with Xdebug enabled. - `npm run switch-to:php7.4` and `npm run switch-to:php8.2` will switch you to either PHP 7.4 or PHP 8.2 - `npm run document:connectors` generates [connectors.md](connectors.md). This runs via your local php. +- `npm run large-log-tables:generate` inserts ~1.6M rows to `wp_stream` and ~8.4M rows to `wp_streammeta` for testing +- `npm run large-log-tables:remove` removes the test data only +- `npm run large-log-tables:show` shows how much test data is in the tables, this does not include non-test entries By default, tests have `WP_DEBUG` as false. You can override this if necessary by setting `WP_STREAM_TEST_DEBUG` to "yes".