forked from rodrigopedra/laravel-cloud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathServerTask.php
137 lines (118 loc) · 2.56 KB
/
ServerTask.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
namespace App;
use App\Scripts\RunServerTask;
use App\Events\ServerTaskFailed;
use App\Callbacks\CheckServerTask;
use App\Events\ServerTaskFinished;
use Illuminate\Database\Eloquent\Model;
class ServerTask extends Model
{
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'commands' => 'json',
];
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* Get the stack task that the server task belongs to.
*/
public function stackTask()
{
return $this->belongsTo(StackTask::class, 'stack_task_id');
}
/**
* Get the entity the task belongs to.
*/
public function taskable()
{
return $this->morphTo();
}
/**
* Get the underlying task for the server task.
*/
public function task()
{
return $this->belongsTo(Task::class, 'task_id');
}
/**
* Determine if the server task is pending.
*
* @return bool
*/
public function isPending()
{
return $this->status === 'pending';
}
/**
* Determine if the server task is running.
*
* @return bool
*/
public function isRunning()
{
return $this->status === 'running';
}
/**
* Run the server task.
*
* @return void
*/
public function run()
{
$task = $this->taskable->runInBackground(new RunServerTask($this), [
'then' => [new CheckServerTask($this->id)],
]);
$this->update([
'status' => 'running',
'task_id' => $task->id,
]);
}
/**
* Determine if the server task has finished.
*
* @return bool
*/
public function isFinished()
{
return $this->status === 'finished';
}
/**
* Mark the server task as finished.
*
* @return void
*/
public function markAsFinished()
{
$this->update(['status' => 'finished']);
ServerTaskFinished::dispatch($this);
$this->stackTask->syncStatus();
}
/**
* Determine if the server task has failed.
*
* @return bool
*/
public function hasFailed()
{
return $this->status === 'failed';
}
/**
* Mark the server task as failed.
*
* @return void
*/
public function markAsFailed()
{
$this->update(['status' => 'failed']);
ServerTaskFailed::dispatch($this);
$this->stackTask->syncStatus();
}
}