Skip to content

Commit dec0d9c

Browse files
committed
Apply old PR 210
Closes chrisboulton/php-resque#210
1 parent e52ee4c commit dec0d9c

File tree

1 file changed

+67
-19
lines changed

1 file changed

+67
-19
lines changed

lib/Resque/Job/Status.php

Lines changed: 67 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,20 @@ public function isTracking()
9696
*/
9797
public function update($status, $result = null)
9898
{
99+
$status = (int) $status;
100+
99101
if(!$this->isTracking()) {
100102
return;
101103
}
102104

105+
if($status < self::STATUS_WAITING || $status > self::STATUS_COMPLETE) {
106+
return;
107+
}
108+
103109
$statusPacket = array(
104110
'status' => $status,
105111
'updated' => time(),
106-
'started' => $this->getValue('started'),
112+
'started' => $this->fetch('started'),
107113
'result' => $result,
108114
);
109115
Resque::redis()->set((string)$this, json_encode($statusPacket));
@@ -115,23 +121,14 @@ public function update($status, $result = null)
115121
}
116122

117123
/**
118-
* Fetch a value from the status packet for the job being monitored.
124+
* Fetch the status for the job being monitored.
119125
*
120-
* @return mixed False if the status is not being monitored, otherwise the
121-
* requested value from the status packet.
126+
* @return mixed False if the status is not being monitored, otherwise the status
127+
* as an integer, based on the Resque_Job_Status constants.
122128
*/
123-
protected function getValue($value = null)
129+
public function get()
124130
{
125-
if(!$this->isTracking()) {
126-
return false;
127-
}
128-
129-
$statusPacket = json_decode(Resque::redis()->get((string)$this), true);
130-
if(!$statusPacket) {
131-
return false;
132-
}
133-
134-
return empty($value) ? $statusPacket : $statusPacket[$value];
131+
return $this->status();
135132
}
136133

137134
/**
@@ -140,20 +137,42 @@ protected function getValue($value = null)
140137
* @return mixed False if the status is not being monitored, otherwise the status
141138
* as an integer, based on the Resque_Job_Status constants.
142139
*/
143-
public function get()
140+
public function status()
144141
{
145-
return $this->getValue('status');
142+
return $this->fetch('status');
146143
}
147144

145+
/**
146+
* Fetch the last update timestamp of the job being monitored.
147+
*
148+
* @return mixed False if the job is not being monitored, otherwise the
149+
* update timestamp.
150+
*/
151+
public function updated()
152+
{
153+
return $this->fetch('updated');
154+
}
155+
156+
/**
157+
* Fetch the start timestamp of the job being monitored.
158+
*
159+
* @return mixed False if the job is not being monitored, otherwise the
160+
* start timestamp.
161+
*/
162+
public function started()
163+
{
164+
return $this->fetch('started');
165+
}
166+
148167
/**
149168
* Fetch the result of the job being monitored.
150169
*
151170
* @return mixed False if the job is not being monitored, otherwise the result
152171
* as mixed
153172
*/
154-
public function getResult()
173+
public function result()
155174
{
156-
return $this->getValue('result');
175+
return $this->fetch('result');
157176
}
158177

159178
/**
@@ -173,4 +192,33 @@ public function __toString()
173192
{
174193
return 'job:' . $this->prefix . $this->id . ':status';
175194
}
195+
196+
/**
197+
* Fetch a value from the status packet for the job being monitored.
198+
*
199+
* @return mixed False if the status is not being monitored, otherwise the
200+
* requested value from the status packet.
201+
*/
202+
protected function fetch($value = null)
203+
{
204+
if(!$this->isTracking()) {
205+
return false;
206+
}
207+
208+
$statusPacket = json_decode(Resque::redis()->get((string)$this), true);
209+
if(!$statusPacket) {
210+
return false;
211+
}
212+
213+
if(empty($value)) {
214+
return $statusPacket;
215+
} else {
216+
if(isset($statusPacket[$value])) {
217+
return $statusPacket[$value];
218+
} else {
219+
return null;
220+
}
221+
}
222+
223+
}
176224
}

0 commit comments

Comments
 (0)