'Speedtest',
'enabled' => true,
'image' => 'plugins/images/tabs/speedtest-icon.png',
'category' => 'Monitor',
'settings' => array(
'Enable' => array(
array(
'type' => 'html',
'override' => 6,
'label' => 'Info',
'html' => '
This homepage item requires Speedtest-Tracker to be running on your network.
'
),
array(
'type' => 'switch',
'name' => 'homepageSpeedtestEnabled',
'label' => 'Enable',
'value' => $this->config['homepageSpeedtestEnabled']
),
array(
'type' => 'select',
'name' => 'homepageSpeedtestAuth',
'label' => 'Minimum Authentication',
'value' => $this->config['homepageSpeedtestAuth'],
'options' => $this->groupOptions
)
),
'Connection' => array(
array(
'type' => 'input',
'name' => 'speedtestURL',
'label' => 'URL',
'value' => $this->config['speedtestURL'],
'help' => 'Enter the IP:PORT of your speedtest instance e.g. http(s)://:'
),
),
'Options' => array(
array(
'type' => 'input',
'name' => 'speedtestHeader',
'label' => 'Title',
'value' => $this->config['speedtestHeader'],
'help' => 'Sets the title of this homepage module',
),
array(
'type' => 'switch',
'name' => 'speedtestHeaderToggle',
'label' => 'Toggle Title',
'value' => $this->config['speedtestHeaderToggle'],
'help' => 'Shows/hides the title of this homepage module'
),
),
)
);
}
public function speedTestHomepagePermissions($key = null)
{
$permissions = [
'main' => [
'enabled' => [
'homepageSpeedtestEnabled'
],
'auth' => [
'homepageSpeedtestAuth'
],
'not_empty' => [
'speedtestURL'
]
]
];
if (array_key_exists($key, $permissions)) {
return $permissions[$key];
} elseif ($key == 'all') {
return $permissions;
} else {
return [];
}
}
public function homepageOrderSpeedtest()
{
if ($this->homepageItemPermissions($this->speedTestHomepagePermissions('main'))) {
return '
';
}
}
public function getSpeedtestHomepageData()
{
if (!$this->homepageItemPermissions($this->speedTestHomepagePermissions('main'), true)) {
return false;
}
$api = [];
$url = $this->qualifyURL($this->config['speedtestURL']);
$dataUrl = $url . '/api/speedtest/latest';
try {
$response = Requests::get($dataUrl);
if ($response->success) {
$json = json_decode($response->body, true);
$api['data'] = [
'current' => $json['data'],
];
$keys = [
'average',
'max',
'maximum',
'minimum'
];
foreach ($keys as $key) {
if (array_key_exists($key, $json)) {
if ($key == 'max') {
$api['data']['maximum'] = $json[$key];
} else {
$api['data'][$key] = $json[$key];
}
}
}
$api['options'] = [
'title' => $this->config['speedtestHeader'],
'titleToggle' => $this->config['speedtestHeaderToggle'],
];
} else {
$this->setAPIResponse('error', 'SpeedTest connection error', 409);
return false;
}
} catch (Requests_Exception $e) {
$this->writeLog('error', 'Speedtest Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
$this->setAPIResponse('error', $e->getMessage(), 500);
return false;
};
$api = isset($api) ? $api : false;
$this->setAPIResponse('success', null, 200, $api);
return $api;
}
}