Passed
Push — master ( 1d8afe...b3ce84 )
by Patrick
02:10
created

StatusController::uimgtAction()   B

Complexity

Conditions 10
Paths 36

Size

Total Lines 59
Code Lines 36

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
eloc 36
c 0
b 0
f 0
nc 36
nop 0
dl 0
loc 59
rs 7.6666

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Icinga\Module\Trapdirector\Controllers;
4
5
use Icinga\Web\Url;
6
use Icinga\Web\Form;
7
use Zend_Form_Element_File as File;
8
use Zend_Form_Element_Submit as Submit;
9
10
use Exception;
11
12
use Icinga\Module\Trapdirector\TrapsController;
13
use Trapdirector\Trap;
14
15
class StatusController extends TrapsController
16
{
17
	public function indexAction()
18
	{
19
		$this->prepareTabs()->activate('status');
20
		
21
		/************  Trapdb ***********/
22
		try
23
		{
24
		    $dbConn = $this->getUIDatabase()->getDbConn();
25
		    if ($dbConn === null) throw new \ErrorException('uncatched db error');
26
			$query = $dbConn->select()->from(
27
				$this->getModuleConfig()->getTrapTableName(),
28
				array('COUNT(*)')
29
			);			
30
			$this->view->trap_count=$dbConn->fetchOne($query);
31
			$query = $dbConn->select()->from(
32
				$this->getModuleConfig()->getTrapDataTableName(),
33
				array('COUNT(*)')
34
			);			
35
			$this->view->trap_object_count=$dbConn->fetchOne($query);
36
			$query = $dbConn->select()->from(
37
				$this->getModuleConfig()->getTrapRuleName(),
38
				array('COUNT(*)')
39
			);			
40
			$this->view->rule_count=$dbConn->fetchOne($query);			
41
 			
42
			$this->view->trap_days_delete=$this->getUIDatabase()->getDBConfigValue('db_remove_days');
43
			
44
		}
45
		catch (Exception $e)
46
		{
47
			$this->displayExitError('status',$e->getMessage());
48
		}
49
		
50
		/*************** Log destination *******************/
51
		
52
		try
53
		{		
54
		    $this->view->currentLogDestination=$this->getUIDatabase()->getDBConfigValue('log_destination');
55
			$this->view->logDestinations=$this->getModuleConfig()->getLogDestinations();
56
			$this->view->currentLogFile=$this->getUIDatabase()->getDBConfigValue('log_file');
57
			$this->view->logLevels=$this->getModuleConfig()->getlogLevels();
58
			$this->view->currentLogLevel=$this->getUIDatabase()->getDBConfigValue('log_level');
59
		}
60
		catch (Exception $e)
61
		{
62
			$this->displayExitError('status',$e->getMessage());
63
		}
64
		
65
		/*************** SNMP configuration ****************/
66
		try
67
		{
68
		    $this->view->useSnmpTrapAddess= ( $this->getUIDatabase()->getDBConfigValue('use_SnmpTrapAddess') == 1 ) ? TRUE : FALSE;
69
		    $this->view->SnmpTrapAddressOID=$this->getUIDatabase()->getDBConfigValue('SnmpTrapAddess_oid');
70
		    $this->view->SnmpTrapAddressOIDDefault = ($this->view->SnmpTrapAddressOID == $this->getModuleConfig()->getDBConfigDefaults()['SnmpTrapAddess_oid'] ) ? TRUE : FALSE;
71
		    
72
		}
73
		catch (Exception $e)
74
		{
75
		    $this->displayExitError('status',$e->getMessage());
76
		}		
77
		
78
	} 
79
  
80
	/** Mib management
81
	*	Post param : action=update_mib_db : update mib database
82
	*	Post param : ation=check_update : check if mib update is finished
83
	*	File post : mibfile -> save mib file
84
	*/
85
	public function mibAction()
86
	{
87
		$this->prepareTabs()->activate('mib');
88
		
89
		$this->view->uploadStatus=null;
90
		// check if it is an ajax query
91
		if ($this->getRequest()->isPost())
92
		{
93
			$postData=$this->getRequest()->getPost();
94
			/** Check for action update or check update */
95
			if (isset($postData['action']))
96
			{
97
				$action=$postData['action'];
98
				if ($action == 'update_mib_db')
99
				{ // Do the update in background
100
					$return=exec('icingacli trapdirector mib update --pid /tmp/trapdirector_update.pid');
101
					if (preg_match('/OK/',$return))
102
					{
103
					    $this->_helper->json(array('status'=>'OK'));
104
					}
105
					// Error
106
					$this->_helper->json(array('status'=>$return));
107
				}
108
				if ($action == 'check_update')
109
				{
110
				    $file=@fopen('/tmp/trapdirector_update.pid','r');
111
				    if ($file == false)
112
				    {   // process is dead
113
				        $this->_helper->json(array('status'=>'tu quoque fili','err'=>'Cannot open file'));
114
				        return;
115
				    }
116
				    $pid=fgets($file);
117
				    $output=array();
118
				    $retVal=0;
119
					exec('ps '.$pid,$output,$retVal);
120
					if ($retVal == 0)
121
					{ // process is alive
122
						$this->_helper->json(array('status'=>'Alive and kicking'));
123
					}
124
					else
125
					{ // process is dead
126
					    $this->_helper->json(array('status'=>'tu quoque fili','err'=>'no proc'.$pid));
127
					}
128
				}
129
				$this->_helper->json(array('status'=>'ERR : no '.$action.' action possible' ));
130
			}
131
			/** Check for mib file UPLOAD */
132
			if (isset($_FILES['mibfile']))
133
			{
134
			    $name=filter_var($_FILES['mibfile']['name'],FILTER_SANITIZE_STRING);
135
				$DirConf=explode(':',$this->Config()->get('config', 'snmptranslate_dirs'));
136
				$destDir=array_shift($DirConf);
137
				if (!is_dir($destDir))
138
				{
139
				    $this->view->uploadStatus="ERROR : no $destDir directory, check module configuration";
140
				}
141
				else
142
				{
143
				    if (!is_writable($destDir))
144
				    {
145
				        $this->view->uploadStatus="ERROR : $destDir directory is not writable";
146
				    }
147
				    else
148
				    {
149
				        $destination = $destDir .'/'.$name; //$this->Module()->getBaseDir() . "/mibs/$name";
150
				        $sourceTmpNam=filter_var($_FILES['mibfile']['tmp_name'],FILTER_SANITIZE_STRING);
151
				        if (move_uploaded_file($sourceTmpNam,$destination)===false)
152
    				    {
153
    				        $this->view->uploadStatus="ERROR, file $destination not loaded. Check file and path name or selinux violations";
154
    				    }
155
    				    else
156
    				    {
157
    				        $this->view->uploadStatus="File $name uploaded in $destDir";
158
    				    }
159
				    }
160
				}
161
162
			}
163
			
164
		}
165
		
166
		// snmptranslate tests
167
		$snmptranslate = $this->Config()->get('config', 'snmptranslate');
168
		$this->view->snmptranslate_bin=$snmptranslate;
169
		$this->view->snmptranslate_state='warn';
170
		if (is_executable ( $snmptranslate ))
171
		{
172
			$translate=exec($snmptranslate . ' 1');
173
			if (preg_match('/iso/',$translate))
174
			{
175
				$this->view->snmptranslate='works fine';
176
				$this->view->snmptranslate_state='ok';
177
			}
178
			else
179
			{
180
				$this->view->snmptranslate='can execute but no resolution';
181
			}
182
		}
183
		else
184
		{
185
			$this->view->snmptranslate='cannot execute';
186
		}
187
	
188
		// mib database
189
		
190
		$this->view->mibDbCount=$this->getMIB()->countObjects();
191
		$this->view->mibDbCountTrap=$this->getMIB()->countObjects(null,21);
192
		
193
		// mib dirs
194
		$DirConf=$this->Config()->get('config', 'snmptranslate_dirs');
195
		$dirArray=explode(':',$DirConf);
196
197
		// Get base directories from net-snmp-config
198
		$output=$matches=array();
199
		$retVal=0;
200
		$sysDirs=exec('net-snmp-config --default-mibdirs',$output,$retVal);
201
		if ($retVal==0)
202
		{
203
			$dirArray=array_merge($dirArray,explode(':',$sysDirs));
204
		}
205
		else
206
		{
207
			$translateOut=exec($this->Config()->get('config', 'snmptranslate') . ' -Dinit_mib .1.3 2>&1 | grep MIBDIRS');
208
			if (preg_match('/MIBDIRS.*\'([^\']+)\'/',$translateOut,$matches))
209
			{
210
				$dirArray=array_merge($dirArray,explode(':',$matches[1]));
211
			}
212
			else
213
			{
214
				array_push($dirArray,'Install net-snmp-config to see system directories');
215
			}
216
		}
217
		
218
		$this->view->dirArray=$dirArray;
219
		
220
		$output=null;
221
		foreach (explode(':',$DirConf) as $mibdir)
222
		{
223
			exec('ls '.$mibdir.' | grep -v traplist.txt',$output);
224
		}
225
		//$i=0;$listFiles='';while (isset($output[$i])) $listFiles.=$output[$i++];
226
		//$this->view->fileList=explode(' ',$listFiles);
227
		$this->view->fileList=$output;
228
		
229
		// Zend form 
230
		$this->view->form= new UploadForm();
231
		//$this->view->form= new Form('upload-form');
232
		
233
		
234
	}
235
236
	/** UI options */
237
	public function uimgtAction()
238
	{
239
	    $this->prepareTabs()->activate('uimgt');
240
	    
241
	    $this->view->setError='';
242
	    $this->view->setOKMsg='';
243
	    
244
	    //max_rows=25&row_update=update
245
	    if ( $this->getRequest()->getParam('max_rows',NULL) !== NULL )
246
	    {
247
	        $maxRows = $this->getRequest()->getParam('max_rows');
248
	        if (!preg_match('/^[0-9]+$/', $maxRows) || $maxRows < 1)
249
	        {
250
	            $this->view->setError='Max rows must be a number';
251
	        }
252
	        else
253
	        {
254
	            $this->setitemListDisplay($maxRows);
255
	            $this->view->setOKMsg='Set max rows to ' . $maxRows;
256
	        }
257
	    }
258
	    
259
	    if ( $this->getRequest()->getParam('add_category',NULL) !== NULL )
260
	    {
261
	        $addCat = $this->getRequest()->getParam('add_category');
262
            $this->addHandlersCategory($addCat);
263
	    }
264
	    
265
	    if ( $this->getRequest()->getPost('type',NULL) !== NULL )
266
	    {
267
	        $type = $this->getRequest()->getPost('type',NULL);
268
	        $index = $this->getRequest()->getPost('index',NULL);
269
	        $newname = $this->getRequest()->getPost('newname',NULL);
270
271
	        if (!preg_match('/^[0-9]+$/', $index) || $index < 1)
272
	            $this->_helper->json(array('status'=>'Bad index'));
273
	        
274
	        switch ($type)
275
	        {
276
	            case 'delete':
277
	                $this->delHandlersCategory($index);
278
	                $this->_helper->json(array('status'=>'OK'));
279
	                return;
280
	                break;
0 ignored issues
show
Unused Code introduced by
break is not strictly necessary here and could be removed.

The break statement is not necessary if it is preceded for example by a return statement:

switch ($x) {
    case 1:
        return 'foo';
        break; // This break is not necessary and can be left off.
}

If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.

Loading history...
281
	            case 'rename':
282
	                $this->renameHandlersCategory($index, $newname);
283
	                $this->_helper->json(array('status'=>'OK'));
284
	                return;
285
	                break;
286
	            default:
287
	                $this->_helper->json(array('status'=>'Unknwon command'));
288
	                return;
289
	                break;
290
	        }
291
	    }
292
	    
293
	    $this->view->maxRows = $this->itemListDisplay();
294
	    
295
	    $this->view->categories = $this->getHandlersCategory();
296
	    
297
	    
298
	    
299
	}
300
	
301
	/** Create services and templates
302
	 *  Create template for trap service
303
	 * 
304
	 */
305
	public function servicesAction()
306
	{
307
		$this->prepareTabs()->activate('services');
308
		
309
		/*if (!$this->isDirectorInstalled())
310
		{
311
			$this->displayExitError("Status -> Services","Director is not installed, template & services install are not available");
312
		}
313
		*/
314
		// Check if data was sent :
315
		$postData=$this->getRequest()->getPost();
316
		$this->view->templateForm_output='';
317
		if (isset($postData['template_name']) && isset($postData['template_revert_time']))
318
		{
319
			$template_create = 'icingacli director service create --json \'{ "check_command": "dummy", ';
320
			$template_create .= '"check_interval": "' .$postData['template_revert_time']. '", "check_timeout": "20", "disabled": false, "enable_active_checks": true, "enable_event_handler": true, "enable_notifications": true, "enable_passive_checks": true, "enable_perfdata": true, "max_check_attempts": "1", ';
321
			$template_create .= '"object_name": "'.$postData['template_name'].'", "object_type": "template", "retry_interval": "'.$postData['template_revert_time'].'"}\'';
322
			$output=array();
323
			$ret_code=0;
324
			exec($template_create,$output,$ret_code);
325
			if ($ret_code != 0)
326
			{
327
				$this->displayExitError("Status -> Services","Error creating template : ".$output[0].'<br>Command was : '.$template_create);
328
			}
329
			exec('icingacli director config deploy',$output,$ret_code);
330
			$this->view->templateForm_output='Template '.$postData['template_name']. ' created';
331
		}
332
		
333
		// template creation form
334
		$this->view->templateForm_URL=Url::fromRequest()->__toString();
335
		$this->view->templateForm_name="trapdirector_main_template";
336
		$this->view->templateForm_interval="3600";
337
	}
338
    
339
	/**
340
	 * Plugins display and activation
341
	 */
342
	public function pluginsAction()
343
	{
344
	    $this->prepareTabs()->activate('plugins');
345
	    
346
	    require_once($this->Module()->getBaseDir() .'/bin/trap_class.php');
347
	    $icingaweb2_etc=$this->Config()->get('config', 'icingaweb2_etc');
348
	    $Trap = new Trap($icingaweb2_etc,4);
349
	    
350
	    $this->view->pluginLoaded = htmlentities($Trap->pluginClass->registerAllPlugins(false));
351
	    
352
	    $enabledPlugins = $Trap->pluginClass->getEnabledPlugins();
353
354
	    $pluginList = $Trap->pluginClass->pluginList();
355
	    
356
	    // Plugin list and fill function name list
357
	    $functionList=array();
358
	    $this->view->pluginArray=array();
359
	    foreach ($pluginList as $plugin)
360
	    {
361
	        $pluginDetails=$Trap->pluginClass->pluginDetails($plugin);
362
	        $pluginDetails->enabled =  (in_array($plugin, $enabledPlugins)) ? true : false;
363
	        $pluginDetails->catchAllTraps = ($pluginDetails->catchAllTraps === true )? 'Yes' : 'No';
364
	        $pluginDetails->processTraps = ($pluginDetails->processTraps === true )? 'Yes' : 'No';
365
	        $pluginDetails->description = htmlentities($pluginDetails->description);
366
	        $pluginDetails->description = preg_replace('/\n/','<br>',$pluginDetails->description);
367
	        array_push($this->view->pluginArray, $pluginDetails);
368
	        // Get functions for function details
369
	        foreach ($pluginDetails->funcArray as $function)
370
	        {
371
	            array_push($functionList,$function);
372
	        }
373
	    }
374
	    
375
	    // Function list with details
376
	    $this->view->functionList=array();
377
	    foreach ($functionList as $function)
378
	    {
379
	        $functionDetail = $Trap->pluginClass->getFunctionDetails($function);
380
	        $functionDetail->params = htmlentities($functionDetail->params);
381
	        $functionDetail->description = htmlentities($functionDetail->description);
382
	        $functionDetail->description = preg_replace('/\n/','<br>',$functionDetail->description);
383
	        array_push($this->view->functionList, $functionDetail);
384
	    }
385
386
	}
387
	
388
	protected function prepareTabs()
389
	{
390
		return $this->getTabs()->add('status', array(
391
			'label' => $this->translate('Status'),
392
			'url'   => $this->getModuleConfig()->urlPath() . '/status')
393
		)->add('mib', array(
394
			'label' => $this->translate('MIB Management'),
395
			'url'   => $this->getModuleConfig()->urlPath() . '/status/mib')
396
	    )->add('uimgt', array(
397
	        'label' => $this->translate('UI Configuration'),
398
	        'url'   => $this->getModuleConfig()->urlPath() . '/status/uimgt')
399
        )->add('services', array(
400
			'label' => $this->translate('Services management'),
401
			'url'   => $this->getModuleConfig()->urlPath() . '/status/services')
402
	    )->add('plugins', array(
403
	        'label' => $this->translate('Plugins management'),
404
	        'url'   => $this->getModuleConfig()->urlPath() . '/status/plugins')
405
	    );
406
	} 
407
}
408
409
// TODO : see if useless 
410
class UploadForm extends Form
411
{ 
412
    public function __construct($options = null) 
413
    {
414
        parent::__construct($options);
415
        $this->addElements2();
416
    }
417
418
    public function addElements2()
419
    {
420
        // File Input
421
        $file = new File('mib-file');
422
        $file->setLabel('Mib upload');
423
             //->setAttrib('multiple', null);
424
        $this->addElement($file);
425
		$button = new Submit("upload",array('ignore'=>false));
426
		$this->addElement($button);//->setIgnore(false);
427
    }
428
}
429