aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public/BackgroundJob/IJobList.php
blob: 71faefb882562ce1276f2b852a59c451fc8b0459 (plain)
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php
/**
 * @copyright Copyright (c) 2016, ownCloud, Inc.
 *
 * @author Joas Schilling <coding@schilljs.com>
 * @author Morris Jobke <hey@morrisjobke.de>
 * @author Noveen Sachdeva <noveen.sachdeva@research.iiit.ac.in>
 * @author Robin Appelman <robin@icewind.nl>
 * @author Robin McCorkell <robin@mccorkell.me.uk>
 * @author Côme Chilliet <come.chilliet@nextcloud.com>
 *
 * @license AGPL-3.0
 *
 * This code is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License, version 3,
 * along with this program. If not, see <http://www.gnu.org/licenses/>
 *
 */
namespace OCP\BackgroundJob;

/**
 * Interface IJobList
 *
 * This interface provides functions to register background jobs
 *
 * To create a new background job create a new class that inherits from either
 * \OC\BackgroundJob\Job, \OC\BackgroundJob\QueuedJob or
 * \OC\BackgroundJob\TimedJob and register it using ->add($job, $argument),
 * $argument will be passed to the run() function of the job when the job is
 * executed.
 *
 * A regular job will be executed every time cron.php is run, a QueuedJob will
 * only run once and a TimedJob will only run at a specific interval which is to
 * be specified in the constructor of the job by calling
 * $this->setInterval($interval) with $interval in seconds.
 *
 * This interface should be used directly and not implemented by an application.
 * The implementation is provided by the server.
 *
 * @since 7.0.0
 */
interface IJobList {
	/**
	 * Add a job to the list
	 *
	 * @param IJob|class-string<IJob> $job
	 * @param mixed $argument The argument to be passed to $job->run() when the job is exectured
	 * @since 7.0.0
	 */
	public function add($job, $argument = null): void;

	/**
	 * Remove a job from the list
	 *
	 * @param IJob|class-string<IJob> $job
	 * @param mixed $argument
	 * @since 7.0.0
	 */
	public function remove($job, $argument = null): void;

	/**
	 * check if a job is in the list
	 *
	 * @param IJob|class-string<IJob> $job
	 * @param mixed $argument
	 * @since 7.0.0
	 */
	public function has($job, $argument): bool;

	/**
	 * Get jobs matching the search
	 *
	 * @param IJob|class-string<IJob>|null $job
	 * @return array<IJob>
	 * @since 25.0.0
	 * @deprecated 26.0.0 Use getJobsIterator instead to avoid duplicated job objects
	 */
	public function getJobs($job, ?int $limit, int $offset): array;

	/**
	 * Get jobs matching the search
	 *
	 * @param IJob|class-string<IJob>|null $job
	 * @return iterable<IJob>
	 * @since 26.0.0
	 */
	public function getJobsIterator($job, ?int $limit, int $offset): iterable;

	/**
	 * get the next job in the list
	 *
	 * @since 7.0.0 - In 24.0.0 parameter $onlyTimeSensitive got added
	 */
	public function getNext(bool $onlyTimeSensitive = false): ?IJob;

	/**
	 * @since 7.0.0
	 */
	public function getById(int $id): ?IJob;

	/**
	 * @since 23.0.0
	 */
	public function getDetailsById(int $id): ?array;

	/**
	 * set the job that was last ran to the current time
	 *
	 * @since 7.0.0
	 */
	public function setLastJob(IJob $job): void;

	/**
	 * Remove the reservation for a job
	 *
	 * @since 9.1.0
	 */
	public function unlockJob(IJob $job): void;

	/**
	 * set the lastRun of $job to now
	 *
	 * @since 7.0.0
	 */
	public function setLastRun(IJob $job): void;

	/**
	 * set the run duration of $job
	 *
	 * @since 12.0.0
	 */
	public function setExecutionTime(IJob $job, int $timeTaken): void;

	/**
	 * Reset the $job so it executes on the next trigger
	 *
	 * @since 23.0.0
	 */
	public function resetBackgroundJob(IJob $job): void;

	/**
	 * Checks whether a job of the passed class is reserved to run
	 *
	 * @param string|null $className
	 * @return bool
	 * @since 27.0.0
	 */
	public function hasReservedJob(?string $className): bool;
}