mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-31 11:24:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			174 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
 | |
| 
 | |
| namespace Icinga\Module\Monitoring;
 | |
| 
 | |
| use Exception;
 | |
| use Icinga\Module\Setup\Step;
 | |
| use Icinga\Application\Config;
 | |
| use Icinga\Exception\IcingaException;
 | |
| 
 | |
| class BackendStep extends Step
 | |
| {
 | |
|     protected $data;
 | |
| 
 | |
|     protected $backendIniError;
 | |
| 
 | |
|     protected $resourcesIniError;
 | |
| 
 | |
|     public function __construct(array $data)
 | |
|     {
 | |
|         $this->data = $data;
 | |
|     }
 | |
| 
 | |
|     public function apply()
 | |
|     {
 | |
|         $success = $this->createBackendsIni();
 | |
|         $success &= $this->createResourcesIni();
 | |
|         return $success;
 | |
|     }
 | |
| 
 | |
|     protected function createBackendsIni()
 | |
|     {
 | |
|         $config = array();
 | |
|         $config[$this->data['backendConfig']['name']] = array(
 | |
|             'type'      => $this->data['backendConfig']['type'],
 | |
|             'resource'  => $this->data['resourceConfig']['name']
 | |
|         );
 | |
| 
 | |
|         try {
 | |
|             Config::fromArray($config)
 | |
|                 ->setConfigFile(Config::resolvePath('modules/monitoring/backends.ini'))
 | |
|                 ->saveIni();
 | |
|         } catch (Exception $e) {
 | |
|             $this->backendIniError = $e;
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         $this->backendIniError = false;
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     protected function createResourcesIni()
 | |
|     {
 | |
|         $resourceConfig = $this->data['resourceConfig'];
 | |
|         $resourceName = $resourceConfig['name'];
 | |
|         unset($resourceConfig['name']);
 | |
| 
 | |
|         try {
 | |
|             $config = Config::app('resources', true);
 | |
|             $config->setSection($resourceName, $resourceConfig);
 | |
|             $config->saveIni();
 | |
|         } catch (Exception $e) {
 | |
|             $this->resourcesIniError = $e;
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         $this->resourcesIniError = false;
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public function getSummary()
 | |
|     {
 | |
|         $pageTitle = '<h2>' . mt('monitoring', 'Monitoring Backend', 'setup.page.title') . '</h2>';
 | |
|         $backendDescription = '<p>' . sprintf(
 | |
|             mt(
 | |
|                 'monitoring',
 | |
|                 'Icinga Web 2 will retrieve information from your monitoring environment'
 | |
|                 . ' using a backend called "%s" and the specified resource below:'
 | |
|             ),
 | |
|             $this->data['backendConfig']['name']
 | |
|         ) . '</p>';
 | |
| 
 | |
|         if ($this->data['resourceConfig']['type'] === 'db') {
 | |
|             $resourceTitle = '<h3>' . mt('monitoring', 'Database Resource') . '</h3>';
 | |
|             $resourceHtml = ''
 | |
|                 . '<table>'
 | |
|                 . '<tbody>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Resource Name') . '</strong></td>'
 | |
|                 . '<td>' . $this->data['resourceConfig']['name'] . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Database Type') . '</strong></td>'
 | |
|                 . '<td>' . $this->data['resourceConfig']['db'] . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Host') . '</strong></td>'
 | |
|                 . '<td>' . $this->data['resourceConfig']['host'] . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Port') . '</strong></td>'
 | |
|                 . '<td>' . $this->data['resourceConfig']['port'] . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Database Name') . '</strong></td>'
 | |
|                 . '<td>' . $this->data['resourceConfig']['dbname'] . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Username') . '</strong></td>'
 | |
|                 . '<td>' . $this->data['resourceConfig']['username'] . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Password') . '</strong></td>'
 | |
|                 . '<td>' . str_repeat('*', strlen($this->data['resourceConfig']['password'])) . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '</tbody>'
 | |
|                 . '</table>';
 | |
|         } else { // $this->data['resourceConfig']['type'] === 'livestatus'
 | |
|             $resourceTitle = '<h3>' . mt('monitoring', 'Livestatus Resource') . '</h3>';
 | |
|             $resourceHtml = ''
 | |
|                 . '<table>'
 | |
|                 . '<tbody>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Resource Name') . '</strong></td>'
 | |
|                 . '<td>' . $this->data['resourceConfig']['name'] . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '<tr>'
 | |
|                 . '<td><strong>' . t('Socket') . '</strong></td>'
 | |
|                 . '<td>' . $this->data['resourceConfig']['socket'] . '</td>'
 | |
|                 . '</tr>'
 | |
|                 . '</tbody>'
 | |
|                 . '</table>';
 | |
|         }
 | |
| 
 | |
|         return $pageTitle . '<div class="topic">' . $backendDescription . $resourceTitle . $resourceHtml . '</div>';
 | |
|     }
 | |
| 
 | |
|     public function getReport()
 | |
|     {
 | |
|         $report = array();
 | |
| 
 | |
|         if ($this->backendIniError === false) {
 | |
|             $report[] = sprintf(
 | |
|                 mt('monitoring', 'Monitoring backend configuration has been successfully written to: %s'),
 | |
|                 Config::resolvePath('modules/monitoring/backends.ini')
 | |
|             );
 | |
|         } elseif ($this->backendIniError !== null) {
 | |
|             $report[] = sprintf(
 | |
|                 mt(
 | |
|                     'monitoring',
 | |
|                     'Monitoring backend configuration could not be written to: %s. An error occured:'
 | |
|                 ),
 | |
|                 Config::resolvePath('modules/monitoring/backends.ini')
 | |
|             );
 | |
|             $report[] = sprintf(mt('setup', 'ERROR: %s'), IcingaException::describe($this->backendIniError));
 | |
|         }
 | |
| 
 | |
|         if ($this->resourcesIniError === false) {
 | |
|             $report[] = sprintf(
 | |
|                 mt('monitoring', 'Resource configuration has been successfully updated: %s'),
 | |
|                 Config::resolvePath('resources.ini')
 | |
|             );
 | |
|         } elseif ($this->resourcesIniError !== null) {
 | |
|             $report[] = sprintf(
 | |
|                 mt('monitoring', 'Resource configuration could not be udpated: %s. An error occured:'),
 | |
|                 Config::resolvePath('resources.ini')
 | |
|             );
 | |
|             $report[] = sprintf(mt('setup', 'ERROR: %s'), IcingaException::describe($this->resourcesIniError));
 | |
|         }
 | |
| 
 | |
|         return $report;
 | |
|     }
 | |
| }
 |