'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 '

Loading Speedtest...

'; } } 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; } }