Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Queue\Failed;
4
 
5
use DateTimeInterface;
6
use Illuminate\Database\ConnectionResolverInterface;
7
use Illuminate\Support\Facades\Date;
8
 
9
class DatabaseFailedJobProvider implements FailedJobProviderInterface, PrunableFailedJobProvider
10
{
11
    /**
12
     * The connection resolver implementation.
13
     *
14
     * @var \Illuminate\Database\ConnectionResolverInterface
15
     */
16
    protected $resolver;
17
 
18
    /**
19
     * The database connection name.
20
     *
21
     * @var string
22
     */
23
    protected $database;
24
 
25
    /**
26
     * The database table.
27
     *
28
     * @var string
29
     */
30
    protected $table;
31
 
32
    /**
33
     * Create a new database failed job provider.
34
     *
35
     * @param  \Illuminate\Database\ConnectionResolverInterface  $resolver
36
     * @param  string  $database
37
     * @param  string  $table
38
     * @return void
39
     */
40
    public function __construct(ConnectionResolverInterface $resolver, $database, $table)
41
    {
42
        $this->table = $table;
43
        $this->resolver = $resolver;
44
        $this->database = $database;
45
    }
46
 
47
    /**
48
     * Log a failed job into storage.
49
     *
50
     * @param  string  $connection
51
     * @param  string  $queue
52
     * @param  string  $payload
53
     * @param  \Throwable  $exception
54
     * @return int|null
55
     */
56
    public function log($connection, $queue, $payload, $exception)
57
    {
58
        $failed_at = Date::now();
59
 
60
        $exception = (string) mb_convert_encoding($exception, 'UTF-8');
61
 
62
        return $this->getTable()->insertGetId(compact(
63
            'connection', 'queue', 'payload', 'exception', 'failed_at'
64
        ));
65
    }
66
 
67
    /**
68
     * Get a list of all of the failed jobs.
69
     *
70
     * @return array
71
     */
72
    public function all()
73
    {
74
        return $this->getTable()->orderBy('id', 'desc')->get()->all();
75
    }
76
 
77
    /**
78
     * Get a single failed job.
79
     *
80
     * @param  mixed  $id
81
     * @return object|null
82
     */
83
    public function find($id)
84
    {
85
        return $this->getTable()->find($id);
86
    }
87
 
88
    /**
89
     * Delete a single failed job from storage.
90
     *
91
     * @param  mixed  $id
92
     * @return bool
93
     */
94
    public function forget($id)
95
    {
96
        return $this->getTable()->where('id', $id)->delete() > 0;
97
    }
98
 
99
    /**
100
     * Flush all of the failed jobs from storage.
101
     *
102
     * @param  int|null  $hours
103
     * @return void
104
     */
105
    public function flush($hours = null)
106
    {
107
        $this->getTable()->when($hours, function ($query, $hours) {
108
            $query->where('failed_at', '<=', Date::now()->subHours($hours));
109
        })->delete();
110
    }
111
 
112
    /**
113
     * Prune all of the entries older than the given date.
114
     *
115
     * @param  \DateTimeInterface  $before
116
     * @return int
117
     */
118
    public function prune(DateTimeInterface $before)
119
    {
120
        $query = $this->getTable()->where('failed_at', '<', $before);
121
 
122
        $totalDeleted = 0;
123
 
124
        do {
125
            $deleted = $query->take(1000)->delete();
126
 
127
            $totalDeleted += $deleted;
128
        } while ($deleted !== 0);
129
 
130
        return $totalDeleted;
131
    }
132
 
133
    /**
134
     * Get a new query builder instance for the table.
135
     *
136
     * @return \Illuminate\Database\Query\Builder
137
     */
138
    protected function getTable()
139
    {
140
        return $this->resolver->connection($this->database)->table($this->table);
141
    }
142
}