The tasks component allows you to write code based tasks which are completed by a daemon, this could allow you to create a single interface to control a cluster of servers tasks.
Require this package with composer using the following command:
$ composer require plinker/tasks
You should create a file which will be run via cron:
cron.php
<?php
require 'vendor/autoload.php';
if (php_sapi_name() != 'cli') {
header('HTTP/1.0 403 Forbidden');
exit('CLI script');
}
$task = new Plinker\Tasks\Runner([
'database' => [
'dsn' => 'sqlite:./.plinker/database.db',
'host' => '',
'name' => '',
'username' => '',
'password' => '',
'freeze' => false,
'debug' => false
],
'debug' => true,
'log' => true,
'sleep_time' => 2,
'tmp_path' => './.plinker',
'auto_update' => 86400
]);
$task->daemon('Queue');
Then add a cron job:
@reboot while sleep 1; do cd /var/www/html/examples/tasks && /usr/bin/php run.php ; done
Creating a client instance is done as follows:
<?php
require 'vendor/autoload.php';
/**
* Initialize plinker client.
*
* @param string $server - URL to server listener.
* @param string $config - server secret, and/or a additional component data
*/
$client = new \Plinker\Core\Client(
'http://example.com/server.php',
[
'secret' => 'a secret password',
// database connection
'database' => [
'dsn' => 'sqlite:./.plinker/database.db',
'host' => '',
'name' => '',
'username' => '',
'password' => '',
'freeze' => false,
'debug' => false,
],
// displays output to task runner console
'debug' => true,
// daemon sleep time
'sleep_time' => 1,
'tmp_path' => './.plinker'
]
);
// or using global function
$client = plinker_client('http://example.com/server.php', 'a secret password', [
// database connection
'database' => [
'dsn' => 'sqlite:./.plinker/database.db',
'host' => '',
'name' => '',
'username' => '',
'password' => '',
'freeze' => false,
'debug' => false,
],
// displays output to task runner console
'debug' => true,
// daemon sleep time
'sleep_time' => 1,
'tmp_path' => './.plinker'
]);
Once setup, you call the class though its namespace to its method.
Create a new task, tasks with the same name will be overwritten.
Parameter | Type | Description | Default |
---|---|---|---|
name | string | Name of task | |
source | string | Task source code | |
type | string | Type of task (php|bash) | |
description | string | Description of task | |
params | array | Default params passed to task |
Call
$client->tasks->create(
'Hello World',
'<?php echo "Hello World";',
'php',
'My Hello World task',
[]
)
Response
Array
(
[id] => 1
[name] => Hello World
[source] => cda22aa1e43992c1103a9f8a386b5dcb
[type] => php
[description] => My Hello World task
[params] =>
[updated] => 2018-01-01 00:00:00
[created] => 2018-01-01 00:00:00
)
Update a task.
Parameter | Type | Description | Default |
---|---|---|---|
id | int | Id of task | |
name | string | Name of task | |
source | string | Task source code | |
type | string | Type of task (php|bash) | |
description | string | Description of task | |
params | array | Default params passed to task |
Call
$client->tasks->update(
1
'Hello World',
'<?php echo "Hello World - Updated";',
'php',
'My Hello World task',
[]
)
Response
Array
(
[id] => 1
[name] => Hello World - Updated
[source] => cda22aa1e43992c1103a9f8a386b5dcb
[type] => php
[description] => My Hello World task
[params] =>
[updated] => 2018-01-01 00:00:00
[created] => 2018-01-01 00:00:00
)
Get a task.
Parameter | Type | Description | Default |
---|---|---|---|
name | string | Name of task |
Call
$client->tasks->get('Hello World');
Response (RedBean Object)
RedBeanPHP\OODBBean Object
(
[properties:protected] => Array
(
[id] => 1
[name] => Hello World
[source] => cda22aa1e43992c1103a9f8a386b5dcb
[type] => php
[description] => My Hello World task
[params] =>
[updated] => 2018-01-01 00:00:00
[created] => 2018-01-01 00:00:00
)
[__info:protected] => Array
(
[type] => tasksource
[sys.id] => id
[sys.orig] => Array
(
[id] => 1
[name] => Hello World
[source] => cda22aa1e43992c1103a9f8a386b5dcb
[type] => php
[description] => My Hello World task
[params] =>
[updated] => 2018-01-01 00:00:00
[created] => 2018-01-01 00:00:00
)
[tainted] =>
[changed] =>
[changelist] => Array
(
)
[model] =>
)
[beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
(
)
[fetchType:protected] =>
[withSql:protected] =>
[withParams:protected] => Array
(
)
[aliasName:protected] =>
[via:protected] =>
[noLoad:protected] =>
[all:protected] =>
)
Get a task by id.
Parameter | Type | Description | Default |
---|---|---|---|
id | int | Id of task |
Call
$client->tasks->getById(1);
Response (RedBean Object)
RedBeanPHP\OODBBean Object
(
[properties:protected] => Array
(
[id] => 1
[name] => Hello World
[source] => cda22aa1e43992c1103a9f8a386b5dcb
[type] => php
[description] => My Hello World task
[params] =>
[updated] => 2018-01-01 00:00:00
[created] => 2018-01-01 00:00:00
)
[__info:protected] => Array
(
[type] => tasksource
[sys.id] => id
[sys.orig] => Array
(
[id] => 1
[name] => Hello World
[source] => cda22aa1e43992c1103a9f8a386b5dcb
[type] => php
[description] => My Hello World task
[params] =>
[updated] => 2018-01-01 00:00:00
[created] => 2018-01-01 00:00:00
)
[tainted] =>
[changed] =>
[changelist] => Array
(
)
[model] =>
)
[beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
(
)
[fetchType:protected] =>
[withSql:protected] =>
[withParams:protected] => Array
(
)
[aliasName:protected] =>
[via:protected] =>
[noLoad:protected] =>
[all:protected] =>
)
Get all tasks.
Call
$client->tasks->getTaskSources();
Response (RedBean Object)
Array
(
[1] => RedBeanPHP\OODBBean Object
(
[properties:protected] => Array
(
[id] => 1
[name] => Hello World
[source] => cda22aa1e43992c1103a9f8a386b5dcb
[type] => php
[description] => My Hello World task
[params] =>
[updated] => 2018-01-01 00:00:00
[created] => 2018-01-01 00:00:00
)
[__info:protected] => Array
(
[type] => tasksource
[sys.id] => id
[sys.orig] => Array
(
[id] => 1
[name] => Hello World
[source] => cda22aa1e43992c1103a9f8a386b5dcb
[type] => php
[description] => My Hello World task
[params] =>
[updated] => 2018-01-01 00:00:00
[created] => 2018-01-01 00:00:00
)
[tainted] =>
[changed] =>
[changelist] => Array
(
)
[model] =>
)
[beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
(
)
[fetchType:protected] =>
[withSql:protected] =>
[withParams:protected] => Array
(
)
[aliasName:protected] =>
[via:protected] =>
[noLoad:protected] =>
[all:protected] =>
)
)
)
Get the status of a task.
Parameter | Type | Description | Default |
---|---|---|---|
name | string | Name of task |
Call
$client->tasks->status('Hello World');
Response
running
Get the run count of a particular task.
Parameter | Type | Description | Default |
---|---|---|---|
name | string | Name of task |
Call
$client->tasks->runCount('Hello World');
Response
100
Remove a task by its name.
Parameter | Type | Description | Default |
---|---|---|---|
name | string | Name of task |
Call
$client->tasks->remove('Hello World');
Response
true
Remove a task by its id.
Parameter | Type | Description | Default |
---|---|---|---|
id | int | Id of task |
Call
$client->tasks->removeById(1);
Response
true
Task logs are entries created, when a task is run. Use this method to get the data.
Parameter | Type | Description | Default |
---|---|---|---|
tasksource_id | int | The id of the task source (optional) |
Call
$result = $client->tasks->getTasksLog();
Response
Array
(
[1] => RedBeanPHP\OODBBean Object
(
[properties:protected] => Array
(
[id] => 1
[name] => Hello World
[params] => []
[repeats] => 1
[completed] => 0
[sleep] => 1
[tasksource_id] => 1
[run_last] => 2018-01-01 00:00:00
[run_next] => 2018-01-01 00:00:00
[run_count] => 6
[result] =>
[tasksource] =>
)
[__info:protected] => Array
(
[type] => tasks
[sys.id] => id
[sys.orig] => Array
(
[id] => 1
[name] => Hello World
[params] => []
[repeats] => 1
[completed] => 0
[sleep] => 1
[tasksource_id] => 1
[run_last] => 2018-01-01 00:00:00
[run_next] => 2018-01-01 00:00:00
[run_count] => 6
[result] =>
[tasksource] =>
)
[tainted] =>
[changed] =>
[changelist] => Array
(
)
[model] =>
)
[beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
(
)
[fetchType:protected] =>
[withSql:protected] =>
[withParams:protected] => Array
(
)
[aliasName:protected] =>
[via:protected] =>
[noLoad:protected] =>
[all:protected] =>
)
)
)
Task logs are entries created, when a task is run. Use this method to get the counts.
Parameter | Type | Description | Default |
---|---|---|---|
tasksource_id | int | The id of the task (optional) |
Call
$result = $client->tasks->getTasksLogCount();
Response
1
Remove a task log from the task.
Parameter | Type | Description | Default |
---|---|---|---|
task_id | int | The id of the task |
Call
$result = $client->tasks->removeTasksLog(1);
Response
true
Task logs are entries created, when a task is run. Use this method to get the data.
Parameter | Type | Description | Default |
---|---|---|---|
task_id | int | The id of the task (optional) |
Call
$result = $client->tasks->getTasks();
Response
Array
(
[1] => RedBeanPHP\OODBBean Object
(
[properties:protected] => Array
(
[id] => 1
[name] => Hello World
[params] => []
[repeats] => 1
[completed] => 0
[sleep] => 1
[tasksource_id] => 1
[run_last] => 2018-01-01 00:00:00
[run_next] => 2018-01-01 00:00:00
[run_count] => 6
[result] =>
[tasksource] =>
)
[__info:protected] => Array
(
[type] => tasks
[sys.id] => id
[sys.orig] => Array
(
[id] => 1
[name] => Hello World
[params] => []
[repeats] => 1
[completed] => 0
[sleep] => 1
[tasksource_id] => 1
[run_last] => 2018-01-01 00:00:00
[run_next] => 2018-01-01 00:00:00
[run_count] => 6
[result] =>
[tasksource] =>
)
[tainted] =>
[changed] =>
[changelist] => Array
(
)
[model] =>
)
[beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
(
)
[fetchType:protected] =>
[withSql:protected] =>
[withParams:protected] => Array
(
)
[aliasName:protected] =>
[via:protected] =>
[noLoad:protected] =>
[all:protected] =>
)
)
)
Place task entry in tasking table for deamon to run.
Parameter | Type | Description | Default |
---|---|---|---|
name | string | Name of the task | `` |
params | array | Array of values which are passed to task | `` |
sleep | int | Sleep time between iterations, if 0 its run once | 0 |
Call
// run once
$client->tasks->run('Hello World', [], 0);
// run every day
$client->tasks->run('Hello World', [], 86400);
Response
Array
(
[id] => 1
[name] => Hello World
[params] => []
[repeats] => 1
[completed] => 0
[sleep] => 86400
[tasksource_id] => 1
[run_last] => 2018-01-01 00:00:00
[run_next] => 2018-01-01 00:00:00
[run_count] => 10
[result] => Hello World
)
Run a task now (task is not placed in tasking table for deamon to run), and run as the web server user.
Parameter | Type | Description | Default |
---|---|---|---|
name | string | Name of the task | `` |
Call
$client->tasks->runNow('Hello World');
Response
Hello World
Delete all tasks.
Call
$result = $client->tasks->clear();
Response
true
Delete database. Use with caution.
Call
$result = $client->tasks->reset();
Response
true
There are no tests setup for this component.
Please see CONTRIBUTING for details.
If you discover any security related issues, please contact me via https://cherone.co.uk instead of using the issue tracker.
Want to see an example project which uses this component?
If you use this project and make money from it or want to show your appreciation, please feel free to make a donation https://www.paypal.me/lcherone, thanks.
Get your company or name listed throughout the documentation and on each github repository, contact me at https://cherone.co.uk for further details.
The MIT License (MIT). Please see License File for more information.
See the organisations page for additional components.