forked from seatgeek/djjob
-
Notifications
You must be signed in to change notification settings - Fork 0
/
database.php
81 lines (66 loc) · 2.49 KB
/
database.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
71
72
73
74
75
76
77
78
79
80
81
<?php
function assert_handler($file, $line, $code, $desc = null) {
printf("Assertion failed at %s:%s: %s: %s\n", $file, $line, $code, $desc);
}
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
assert_options(ASSERT_CALLBACK, 'assert_handler');
date_default_timezone_set('America/New_York');
require dirname(__FILE__) . "/../DJJob.php";
DJJob::configure("mysql:host=127.0.0.1;dbname=djjob", array(
"mysql_user" => "root",
"mysql_pass" => "",
));
DJJob::runQuery("
DROP TABLE IF EXISTS `jobs`;
CREATE TABLE `jobs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`handler` VARCHAR(255) NOT NULL,
`queue` VARCHAR(255) NOT NULL DEFAULT 'default',
`attempts` INT UNSIGNED NOT NULL DEFAULT 0,
`run_at` DATETIME NULL,
`locked_at` DATETIME NULL,
`locked_by` VARCHAR(255) NULL,
`failed_at` DATETIME NULL,
`error` VARCHAR(255) NULL,
`created_at` DATETIME NOT NULL
) ENGINE = MEMORY;
");
class HelloWorldJob {
public function __construct($name) {
$this->name = $name;
}
public function perform() {
echo "Hello {$this->name}!\n";
sleep(1);
}
}
class FailingJob {
public function perform() {
sleep(1);
throw new Exception("Uh oh");
}
}
$status = DJJob::status();
assert('$status["outstanding"] == 0', "Initial outstanding status is incorrect");
assert('$status["locked"] == 0', "Initial locked status is incorrect");
assert('$status["failed"] == 0', "Initial failed status is incorrect");
assert('$status["total"] == 0', "Initial total status is incorrect");
printf("=====================\nStarting run of DJJob\n=====================\n\n");
DJJob::enqueue(new HelloWorldJob("delayed_job"));
DJJob::bulkEnqueue(array(
new HelloWorldJob("shopify"),
new HelloWorldJob("github"),
));
DJJob::enqueue(new FailingJob());
// Test unicode support using the classic, rails snowman: http://www.fileformat.info/info/unicode/char/2603/browsertest.htm
DJJob::enqueue(new HelloWorldJob(html_entity_decode("☃", ENT_HTML5, "UTF-8")));
$worker = new DJWorker(array("count" => 5, "max_attempts" => 2, "sleep" => 10));
$worker->start();
printf("\n============\nRun complete\n============\n\n");
$status = DJJob::status();
assert('$status["outstanding"] == 0', "Final outstanding status is incorrect");
assert('$status["locked"] == 0', "Final locked status is incorrect");
assert('$status["failed"] == 1', "Final failed status is incorrect");
assert('$status["total"] == 1', "Final total status is incorrect");