-
Notifications
You must be signed in to change notification settings - Fork 0
/
wp-redis-job-queue.php
70 lines (59 loc) · 1.99 KB
/
wp-redis-job-queue.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
/**
* Plugin Name: WP Redis Job Queue
* Description: A simple Redis-based job queue for WordPress
* https://github.com/nrk/predis/wiki
*/
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/api.php';
use Predis\Client;
use WpRedisJobQueue\Cli\QueueCommand;
add_filter('wp_redis_job_queue/create_params', function($params) {
// Detect Redist hostname and port automatically
if (getenv('CACHE_HOST')) {
$host = getenv('CACHE_HOST');
} elseif (defined('WP_REDIS_JOB_QUEUE_HOST')) {
$host = WP_REDIS_JOB_QUEUE_HOST;
} else {
trigger_error('No Redis host detected!'
. ' You must define either the CACHE_HOST environment variable,'
. ' a WP_REDIS_JOB_QUEUE_HOST constant, or hook into the wp_redis_job_queue/create_params'
. ' filter to define a host for Predis to connect to.'
);
}
if (getenv('CACHE_PORT')) {
$port = getenv('CACHE_PORT');
} elseif (defined('WP_REDIS_JOB_QUEUE_PORT')) {
$port = WP_REDIS_JOB_QUEUE_PORT;
} else {
trigger_error('No Redis port detected!'
. ' You must define either the CACHE_PORT environment variable,'
. ' a WP_REDIS_JOB_QUEUE_PORT constant, or hook into the wp_redis_job_queue/create_params'
. ' filter to define a host for Predis to connect to.'
);
}
if ( ! (isset($host) && isset($port)) ) {
return [];
}
$params = [
'host' => $host,
'port' => $port,
];
if (getenv('CACHE_PASSWORD')) {
$params['password'] = getenv('CACHE_PASSWORD');
} elseif (defined('WP_REDIS_JOB_QUEUE_PASSWORD')) {
$params['password'] = WP_REDIS_JOB_QUEUE_PASSWORD;
}
return $params;
});
// Create a Predis instance
add_filter('wp_redis_job_queue/client', function($client) {
return $client ?: new Client(apply_filters('wp_redis_job_queue/create_params', null));
});
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command(
'queue',
// create a Predis client for our command to use
new QueueCommand(apply_filters('wp_redis_job_queue/client', null))
);
}