Passed
Push — master ( 4fd4ae...300cc7 )
by Patrick
02:12
created

Mib::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 4
dl 0
loc 6
rs 10
1
<?php
2
3
namespace Trapdirector;
4
5
use Trapdirector\Logging;
6
use Trapdirector\Database;
7
use PDO;
8
use Exception;
9
use Icinga\Module\TrapDirector\Config\TrapModuleConfig;
10
11
class Mib
12
{
13
    
14
    protected $logging; //< logging class
15
    protected $trapsDB; //< Database class
16
    
17
    public $snmptranslate;
18
    public $snmptranslateDirs;
19
    
20
    private $dbOidAll; //< All oid in database;
21
    private $dbOidIndex; //< Index of oid in dbOidAll
22
    private $objectsAll; //< output lines of snmptranslate list
23
    private $trapObjectsIndex; //< array of traps objects (as OID)
24
    
25
    private $oidDesc=array(); //< $oid,$mib,$name,$type,$textConv,$dispHint,$syntax,$type_enum,$description=NULL
26
27
    // Timing vars for update
28
    private $timing=array();
29
    
30
    /**
31
     * Setup Mib Class
32
     * @param Logging $logClass : where to log
33
     * @param Database $dbClass : Database
34
     */
35
    function __construct($logClass,$dbClass,$snmptrans,$snmptransdir)
36
    {
37
        $this->logging=$logClass;
38
        $this->trapsDB=$dbClass;
39
        $this->snmptranslate=$snmptrans;
40
        $this->snmptranslateDirs=$snmptransdir;
41
42
    }
43
    
44
    /**
45
     * Update object in DB with object in dbOidIndex if name/mib/type has changed.
46
     * @return number : 0=unchanged, 1 = changed, 2=created
47
     */
48
    private function update_oid_update()
49
    {
50
        
51
        $db_conn=$this->trapsDB->db_connect_trap();
52
        
53
        if ($this->dbOidIndex[$this->oidDesc['oid']]['key'] == -1)
54
        { // newly created.
55
            return 0;
56
        }
57
        $oidIndex=$this->dbOidIndex[$this->oidDesc['oid']]['key']; // Get index in dbOidAll
58
        $dbOid=$this->dbOidAll[$oidIndex]; // Get array of element
59
        if ( $this->oidDesc['name'] != $dbOid['name'] ||
60
            $this->oidDesc['mib'] != $dbOid['mib'] ||
61
            $this->oidDesc['type'] !=$dbOid['type']
62
            )
63
        { // Do update
64
            $sql='UPDATE '.$this->trapsDB->dbPrefix.'mib_cache SET '.
65
                'name = :name , type = :type , mib = :mib , textual_convention = :tc , display_hint = :display_hint'.
66
                ', syntax = :syntax, type_enum = :type_enum, description = :description '.
67
                ' WHERE id= :id';
68
            $sqlQuery=$db_conn->prepare($sql);
69
            
70
            $sqlParam=array(
71
                ':name' => $this->oidDesc['name'],
72
                ':type' => $this->oidDesc['type'],
73
                ':mib' => $this->oidDesc['mib'],
74
                ':tc' =>  $this->oidDesc['textconv']??'null',
75
                ':display_hint' => $this->oidDesc['dispHint']??'null' ,
76
                ':syntax' => $this->oidDesc['syntax']==null??'null',
77
                ':type_enum' => $this->oidDesc['type_enum']??'null',
78
                ':description' => $this->oidDesc['description']??'null',
79
                ':id' => $this->dbOidAll[$this->dbOidIndex[$this->oidDesc['oid']]['id']]
80
            );
81
            
82
            if ($sqlQuery->execute($sqlParam) === false) {
83
                $this->logging->log('Error in query : ' . $sql,ERROR,'');
84
            }
85
            $this->logging->log('Trap updated : '.$this->oidDesc['name'] . ' / OID : '.$this->oidDesc['oid'],DEBUG );
86
            return 1;
87
        }
88
        else
89
        {
90
            $this->logging->log('Trap unchanged : '.$this->oidDesc['name'] . ' / OID : '.$this->oidDesc['oid'],DEBUG );
91
            return 0;
92
        }
93
    }
94
95
    /**
96
     * Create object in DB with object in dbOidIndex
97
     * @return number : 0=unchanged, 1 = changed, 2=created
98
     */
99
    private function update_oid_create()
100
    {
101
        // Insert data
102
        
103
        $db_conn=$this->trapsDB->db_connect_trap();
104
        $sql='INSERT INTO '.$this->trapsDB->dbPrefix.'mib_cache '.
105
            '(oid, name, type , mib, textual_convention, display_hint '.
106
            ', syntax, type_enum , description ) ' .
107
            'values (:oid, :name , :type ,:mib ,:tc , :display_hint'.
108
            ', :syntax, :type_enum, :description )';
109
        
110
        if ($this->trapsDB->trapDBType == 'pgsql') $sql .= 'RETURNING id';
111
        
112
        $sqlQuery=$db_conn->prepare($sql);
113
        
114
        $sqlParam=array(
115
            ':oid' => $this->oidDesc['oid'],
116
            ':name' => $this->oidDesc['name'],
117
            ':type' => $this->oidDesc['type'],
118
            ':mib' => $this->oidDesc['mib'],
119
            ':tc' =>  $this->oidDesc['textconv']??'null',
120
            ':display_hint' => $this->oidDesc['dispHint']??'null',
121
            ':syntax' => $this->oidDesc['syntax']??'null',
122
            ':type_enum' => $this->oidDesc['type_enum']??'null',
123
            ':description' => $this->oidDesc['description']??'null'
124
        );
125
        
126
        if ($sqlQuery->execute($sqlParam) === false) {
127
            $this->logging->log('Error in query : ' . $sql,1,'');
128
        }
129
        
130
        switch ($this->trapsDB->trapDBType)
131
        {
132
            case 'pgsql':
133
                // Get last id to insert oid/values in secondary table
134
                if (($inserted_id_ret=$sqlQuery->fetch(PDO::FETCH_ASSOC)) === false) {
135
                    $this->logging->log('Error getting id - pgsql - ',1,'');
136
                }
137
                if (! isset($inserted_id_ret['id'])) {
138
                    $this->logging->log('Error getting id - pgsql - empty.',ERROR);
139
                    return 0;
140
                }
141
                $this->dbOidIndex[$this->oidDesc['oid']]['id']=$inserted_id_ret['id'];
142
                break;
143
            case 'mysql':
144
                // Get last id to insert oid/values in secondary table
145
                $sql='SELECT LAST_INSERT_ID();';
146
                if (($ret_code=$db_conn->query($sql)) === false) {
147
                    $this->logging->log('Erreur getting id - mysql - ',ERROR);
148
                    return 0;
149
                }
150
                
151
                $inserted_id=$ret_code->fetch(PDO::FETCH_ASSOC)['LAST_INSERT_ID()'];
152
                if ($inserted_id==false) throw new Exception("Weird SQL error : last_insert_id returned false : open issue");
153
                $this->dbOidIndex[$this->oidDesc['oid']]['id']=$inserted_id;
154
                break;
155
            default:
156
                $this->logging->log('Error SQL type Unknown : '.$this->trapsDB->trapDBType,ERROR);
157
                return 0;
158
        }
159
        
160
        // Set as newly created.
161
        $this->dbOidIndex[$this->oidDesc['oid']]['key']=-1;
162
        return 2;
163
    }
164
    
165
    /**
166
     * Update or add an OID to database uses $this->dbOidIndex for mem cache
167
     * and $this->oidDesc doe data
168
     * @return number : 0=unchanged, 1 = changed, 2=created
169
     */
170
    public function update_oid()
171
    {
172
        $db_conn=$this->trapsDB->db_connect_trap();
173
        // Quote description.
174
        $this->oidDesc['description']=$db_conn->quote($this->oidDesc['description']);
175
        
176
        if (isset($this->dbOidIndex[$this->oidDesc['oid']]))
177
        { // oid exists in db, so update
178
            return $this->update_oid_update();
179
        }
180
        // create new OID.
181
        return $this->update_oid_create();
182
183
    }
184
    
185
/**
186
 * get all objects for a trap.
187
 * @param integer $trapId
188
 * @return array : array of cached objects
189
 */    
190
    private function cache_db_objects($trapId)
191
    {
192
        $dbObjects=array(); // cache of objects for trap in db
193
        $db_conn=$this->trapsDB->db_connect_trap();
194
        // Get all objects
195
        $sql='SELECT * FROM '.$this->trapsDB->dbPrefix.'mib_cache_trap_object where trap_id='.$trapId.';';
196
        $this->logging->log('SQL query get all traps: '.$sql,DEBUG );
197
        if (($ret_code=$db_conn->query($sql)) === false) {
198
            $this->logging->log('No result in query : ' . $sql,1,'');
199
        }
200
        $dbObjectsRaw=$ret_code->fetchAll();
201
        
202
        foreach ($dbObjectsRaw as $val)
203
        {
204
            $dbObjects[$val['object_id']]=1;
205
        }
206
        return $dbObjects;
207
    }
208
209
/**
210
 * Get object details & mib , returns snmptranslate output
211
 * @param string $object : object name
212
 * @param string $trapmib : mib of trap
213
 * @return NULL|array : null if not found, or output of snmptranslate
214
 */
215
    private function get_object_details($object,$trapmib)
216
    {
217
        $match=$snmptrans=array();
218
        $retVal=0;
219
        $this->oidDesc['mib']=$trapmib;
220
        exec($this->snmptranslate . ' -m ALL -M +'.$this->snmptranslateDirs.
221
            ' -On -Td '.$this->oidDesc['mib'].'::'.$object . ' 2>/dev/null',$snmptrans,$retVal);
222
        if ($retVal!=0)
223
        {
224
            // Maybe not trap mib, search with IR
225
            exec($this->snmptranslate . ' -m ALL -M +'.$this->snmptranslateDirs.
226
                ' -IR '.$object . ' 2>/dev/null',$snmptrans,$retVal);
227
            if ($retVal != 0 || !preg_match('/(.*)::(.*)/',$snmptrans[0],$match))
228
            { // Not found -> continue with warning
229
                $this->logging->log('Error finding trap object : '.$trapmib.'::'.$object,2,'');
230
                return null;
231
            }
232
            $this->oidDesc['mib']=$match[1];
233
            
234
            // Do the snmptranslate again.
235
            exec($this->snmptranslate . ' -m ALL -M +'.$this->snmptranslateDirs.
236
                ' -On -Td '.$this->oidDesc['mib'].'::'.$object,$snmptrans,$retVal);
237
            if ($retVal!=0) {
238
                $this->logging->log('Error finding trap object : '.$this->oidDesc['mib'].'::'.$object,2,'');
239
                return null;
240
            }
241
            
242
        }
243
        return $snmptrans;
244
    }
245
246
/**
247
 * Parse snmptranslate output and set  $this->oidDesc with elements 
248
 * @param array $snmptrans : multi line output of snmptrans
249
 */
250
    private function parse_object($snmptrans)
251
    {
252
        $tmpdesc=''; // For multiline description
253
        $indesc=false; // true if currently inside multiline description
254
        $match=array();
255
        
256
        foreach ($snmptrans as $line)
257
        {
258
            if ($indesc===true)
259
            {
260
                $line=preg_replace('/[\t ]+/',' ',$line);
261
                if (preg_match('/(.*)"$/', $line,$match))
262
                {
263
                    $this->oidDesc['description'] = $tmpdesc . $match[1];
264
                    $indesc=false;
265
                }
266
                $tmpdesc.=$line;
267
                continue;
268
            }
269
            if (preg_match('/^\.[0-9\.]+$/', $line))
270
            {
271
                $this->oidDesc['oid']=$line;
272
                continue;
273
            }
274
            if (preg_match('/^[\t ]+SYNTAX[\t ]+([^{]*) \{(.*)\}/',$line,$match))
275
            {
276
                $this->oidDesc['syntax']=$match[1];
277
                $this->oidDesc['type_enum']=$match[2];
278
                continue;
279
            }
280
            if (preg_match('/^[\t ]+SYNTAX[\t ]+(.*)/',$line,$match))
281
            {
282
                $this->oidDesc['syntax']=$match[1];
283
                continue;
284
            }
285
            if (preg_match('/^[\t ]+DISPLAY-HINT[\t ]+"(.*)"/',$line,$match))
286
            {
287
                $this->oidDesc['dispHint']=$match[1];
288
                continue;
289
            }
290
            if (preg_match('/^[\t ]+DESCRIPTION[\t ]+"(.*)"/',$line,$match))
291
            {
292
                $this->oidDesc['description']=$match[1];
293
                continue;
294
            }
295
            if (preg_match('/^[\t ]+DESCRIPTION[\t ]+"(.*)/',$line,$match))
296
            {
297
                $tmpdesc=$match[1];
298
                $indesc=true;
299
                continue;
300
            }
301
            if (preg_match('/^[\t ]+-- TEXTUAL CONVENTION[\t ]+(.*)/',$line,$match))
302
            {
303
                $this->oidDesc['textconv']=$match[1];
304
                continue;
305
            }
306
        }
307
    }
308
309
    /**
310
     * create or update (with check_existing = true) objects of trap
311
     * @param string $trapOID : trap oid
312
     * @param string $trapmib : mib of trap
313
     * @param array $objects : array of objects name (without MIB)
314
     * @param bool $check_existing : check instead of create
315
     */
316
    public function trap_objects($trapOID,$trapmib,$objects,$check_existing)
317
    {              
318
        $trapId = $this->dbOidIndex[$trapOID]['id']; // Get id of trap
319
        
320
        if ($check_existing === true)
321
        {
322
            $dbObjects=$this->cache_db_objects($trapId);
323
        }
324
        
325
        foreach ($objects as $object)
326
        {
327
            
328
            $this->reset_oidDesc();
329
            
330
            $snmptrans=$this->get_object_details($object, $trapmib); // Get object mib & details
1 ignored issue
show
Bug introduced by
Are you sure the assignment to $snmptrans is correct as $this->get_object_details($object, $trapmib) targeting Trapdirector\Mib::get_object_details() seems to always return null.

This check looks for function or method calls that always return null and whose return value is assigned to a variable.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
$object = $a->getObject();

The method getObject() can return nothing but null, so it makes no sense to assign that value to a variable.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
331
            if ($snmptrans === null) continue; // object not found
332
            
333
            $this->parse_object($snmptrans);
334
335
            $this->oidDesc['name'] = $object;
336
            
337
            $this->logging->log("Adding object ".$this->oidDesc['name']." : ".$this->oidDesc['oid']." / ".$this->oidDesc['syntax']." / ".$this->oidDesc['type_enum']." / ".$this->oidDesc['dispHint']." / ".$this->oidDesc['textconv'],DEBUG );
338
339
            // Update
340
            $this->update_oid();
341
            
342
            if (isset($dbObjects[$this->dbOidIndex[$this->oidDesc['oid']]['id']]))
343
            {   // if link exists, continue
344
                $dbObjects[$this->dbOidIndex[$this->oidDesc['oid']]['id']]=2;
345
                continue;
346
            }
347
            if ($check_existing === true)
348
            {
349
                // TODO : check link trap - objects exists, mark them.
350
            }
351
            // Associate in object table
352
            $db_conn=$this->trapsDB->db_connect_trap();
353
            $sql='INSERT INTO '.$this->trapsDB->dbPrefix.'mib_cache_trap_object (trap_id,object_id) '.
354
                'values (:trap_id, :object_id)';
355
            $sqlQuery=$db_conn->prepare($sql);
356
            $sqlParam=array(
357
                ':trap_id' => $trapId,
358
                ':object_id' => $this->dbOidIndex[$this->oidDesc['oid']]['id'],
359
            );
360
            
361
            if ($sqlQuery->execute($sqlParam) === false) {
362
                $this->logging->log('Error adding trap object : ' . $sql . ' / ' . $trapId . '/'. $this->dbOidIndex[$this->oidDesc['oid']]['id'] ,1,'');
363
            }
364
        }
365
        if ($check_existing === true)
366
        {
367
            // TODO : remove link trap - objects that wasn't marked.
368
        }
369
        
370
    }
371
372
    private function reset_oidDesc()
373
    {
374
        $this->oidDesc['oid']=null;
375
        $this->oidDesc['name']=null;
376
        $this->oidDesc['type']=null;
377
        $this->oidDesc['mib']=null;
378
        $this->oidDesc['textconv']=null;
379
        $this->oidDesc['dispHint'] =null;
380
        $this->oidDesc['syntax']=null;
381
        $this->oidDesc['type_enum']=null;
382
        $this->oidDesc['description']=null;
383
    }
384
    
385
    /**
386
     * Fills $this->objectsAll with all mibs from snmptranslate
387
     * @return integer : number of elements 
388
     */
389
    private function load_mibs_snmptranslate()
390
    {
391
        $retVal=0;
392
        // Get all mib objects from all mibs
393
        $snmpCommand=$this->snmptranslate . ' -m ALL -M +'.$this->snmptranslateDirs.' -On -Tto 2>/dev/null';
394
        $this->logging->log('Getting all traps : '.$snmpCommand,DEBUG );
395
        unset($this->objectsAll);
396
        exec($snmpCommand,$this->objectsAll,$retVal);
397
        if ($retVal!=0)
398
        {
399
            $this->logging->log('error executing snmptranslate',ERROR,'');
400
        }
401
        // Count elements to show progress
402
        $numElements=count($this->objectsAll);
403
        $this->logging->log('Total snmp objects returned by snmptranslate : '.$numElements,INFO );
404
        return $numElements;
405
    }
406
407
    /**
408
     * load all mib objects db in dbOidAll (raw) and index in dbOidIndex
409
     */
410
    private function load_mibs_from_db()
411
    {
412
        // Get all mibs from databse to have a memory index
413
        
414
        $db_conn=$this->trapsDB->db_connect_trap();
415
        
416
        $sql='SELECT * from '.$this->trapsDB->dbPrefix.'mib_cache;';
417
        $this->logging->log('SQL query : '.$sql,DEBUG );
418
        if (($ret_code=$db_conn->query($sql)) === false) {
419
            $this->logging->log('No result in query : ' . $sql,ERROR,'');
420
        }
421
        $this->dbOidAll=$ret_code->fetchAll();
422
        $this->dbOidIndex=array();
423
        // Create the index for db;
424
        foreach($this->dbOidAll as $key=>$val)
425
        {
426
            $this->dbOidIndex[$val['oid']]['key']=$key;
427
            $this->dbOidIndex[$val['oid']]['id']=$val['id'];
428
        }
429
    }
430
431
    /**
432
     * Reset all update timers & count to zero
433
     */
434
    private function reset_update_timers()
435
    {
436
        $this->timing['base_parse_time']=0;
437
        $this->timing['base_check_time']=0;
438
        $this->timing['type0_check_time']=0;
439
        $this->timing['nottrap_time']=0;
440
        $this->timing['update_time']=0;
441
        $this->timing['objects_time']=0;
442
        $this->timing['base_parse_num']=0;
443
        $this->timing['base_check_num']=0;
444
        $this->timing['type0_check_num']=0;
445
        $this->timing['nottrap_num']=0;
446
        $this->timing['update_num']=0;
447
        $this->timing['objects_num']=0;
448
        $this->timing['num_traps']=0;
449
    }
450
451
    /**
452
     * Detect if $this->objectsAll[$curElement] is a trap 
453
     * @param integer $curElement
454
     * @param bool $onlyTraps : set to false to get all and not only traps.
455
     * @return boolean : false if it's a trap , true if not
456
     */
457
    private function detect_trap($curElement,$onlyTraps)
458
    {
459
        // Get oid or pass if not found
460
        if (!preg_match('/^\.[0-9\.]+$/',$this->objectsAll[$curElement]))
461
        {
462
            $this->timing['base_parse_time'] += microtime(true) - $this->timing['base_time'];
463
            $this->timing['base_parse_num'] ++;
464
            return true;
465
        }
466
        $this->oidDesc['oid']=$this->objectsAll[$curElement];
467
        
468
        // get next line
469
        $curElement++;
470
        $match=$snmptrans=array();
471
        if (!preg_match('/ +([^\(]+)\(.+\) type=([0-9]+)( tc=([0-9]+))?( hint=(.+))?/',
472
            $this->objectsAll[$curElement],$match))
473
        {
474
            $this->timing['base_check_time'] += microtime(true) - $this->timing['base_time'];
475
            $this->timing['base_check_num']++;
476
            return true;
477
        }
478
        
479
        $this->oidDesc['name']=$match[1]; // Name
480
        $this->oidDesc['type']=$match[2]; // type (21=trap, 0: may be trap, else : not trap
481
        
482
        if ($this->oidDesc['type']==0) // object type=0 : check if v1 trap
483
        {
484
            // Check if next is suboid -> in that case is cannot be a trap
485
            if (preg_match("/^".$this->oidDesc['oid']."/",$this->objectsAll[$curElement+1]))
486
            {
487
                $this->timing['type0_check_time'] += microtime(true) - $this->timing['base_time'];
488
                $this->timing['type0_check_num']++;
489
                return true;
490
            }
491
            unset($snmptrans);
492
            $retVal=0;
493
            exec($this->snmptranslate . ' -m ALL -M +'.$this->snmptranslateDirs.
494
                ' -Td '.$this->oidDesc['oid'] . ' | grep OBJECTS ',$snmptrans,$retVal);
495
            if ($retVal!=0)
496
            {
497
                $this->timing['type0_check_time'] += microtime(true) - $this->timing['base_time'];
498
                $this->timing['type0_check_num']++;
499
                return true;
500
            }
501
            //echo "\n v1 trap found : $this->oidDesc['oid'] \n";
502
            // Force as trap.
503
            $this->oidDesc['type']=21;
504
        }
505
        if ($onlyTraps===true && $this->oidDesc['type']!=21) // if only traps and not a trap, continue
506
        {
507
            $this->timing['nottrap_time'] += microtime(true) - $this->timing['base_time'];
508
            $this->timing['nottrap_num']++;
509
            return true;
510
        }
511
        return false;
512
    }
513
   
514
    /**
515
     * get_trap_mib_description
516
     * @return array|null : array of snmptranslate output or null on error
517
    **/
518
    private function get_trap_mib_description()
519
    {
520
        $retVal=0;
521
        $match=$snmptrans=array();
522
        exec($this->snmptranslate . ' -m ALL -M +'.$this->snmptranslateDirs.
523
            ' -Td '.$this->oidDesc['oid'],$snmptrans,$retVal);
524
        if ($retVal!=0)
525
        {
526
            $this->logging->log('error executing snmptranslate',ERROR);
527
            return $snmptrans;
528
        }
529
        
530
        if (!preg_match('/^(.*)::/',$snmptrans[0],$match))
531
        {
532
            $this->logging->log('Error getting mib from trap '.$this->oidDesc['oid'].' : ' . $snmptrans[0],ERROR);
533
            return $snmptrans;
534
        }
535
        $this->oidDesc['mib']=$match[1];
536
        
537
        $numLine=1;
538
        while (isset($snmptrans[$numLine]) && !preg_match('/^[\t ]+DESCRIPTION[\t ]+"(.*)/',$snmptrans[$numLine],$match)) $numLine++;
539
        if (isset($snmptrans[$numLine]))
540
        {
541
            $snmptrans[$numLine] = preg_replace('/^[\t ]+DESCRIPTION[\t ]+"/','',$snmptrans[$numLine]);
542
            
543
            while (isset($snmptrans[$numLine]) && !preg_match('/"/',$snmptrans[$numLine]))
544
            {
545
                $this->oidDesc['description'].=preg_replace('/[\t ]+/',' ',$snmptrans[$numLine]);
546
                $numLine++;
547
            }
548
            if (isset($snmptrans[$numLine])) {
549
                $this->oidDesc['description'].=preg_replace('/".*/','',$snmptrans[$numLine]);
550
                $this->oidDesc['description']=preg_replace('/[\t ]+/',' ',$this->oidDesc['description']);
551
            }
552
            
553
        }
554
        return $snmptrans;
555
    }
556
557
    /**
558
     * Get trap objects
559
     * @param array $snmptrans : output of snmptranslate for TrapModuleConfig
560
     * @return array|null : array of objects or null if not found
561
    **/
562
    private function get_trap_objects($snmptrans)
563
    {
564
        $objectName=null;
565
        $match=array();
566
        foreach ($snmptrans as $line)
567
        {
568
            if (preg_match('/OBJECTS.*\{([^\}]+)\}/',$line,$match))
569
            {
570
                $objectName=$match[1];
571
            }
572
        }
573
        if ($objectName == null)
574
        {
575
            $this->logging->log('No objects for ' . $this->oidDesc['oid'],DEBUG);
576
            $this->timing['objects_time'] += microtime(true) - $this->timing['base_time'];
577
            return null;
578
        }
579
        
580
        $trapObjects=array();
581
        while (preg_match('/ *([^ ,]+) *,* */',$objectName,$match))
582
        {
583
            array_push($trapObjects,$match[1]);
584
            $objectName=preg_replace('/'.$match[0].'/','',$objectName);
585
        }
586
        return $trapObjects;
587
    }
588
    
589
    /**
590
     * Cache mib in database
591
     * @param boolean $display_progress : Display progress on standard output
592
     * @param boolean $check_change : Force check of trap params & objects
593
     * @param boolean $onlyTraps : only cache traps and objects (true) or all (false)
594
     * @param string $startOID : only cache under startOID (NOT IMPLEMENTED)
595
     */
596
    public function update_mib_database($display_progress=false,$check_change=false,$onlyTraps=true,$startOID='.1')
0 ignored issues
show
Unused Code introduced by
The parameter $startOID is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

596
    public function update_mib_database($display_progress=false,$check_change=false,$onlyTraps=true,/** @scrutinizer ignore-unused */ $startOID='.1')

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
597
    {
598
        // Global Timing
599
        $timeTaken = microtime(true);
600
        
601
        $numElements=$this->load_mibs_snmptranslate(); // Load objectsAll
602
        
603
        $this->load_mibs_from_db(); // Load from db dbOidAll & dbOidIndex
604
        
605
        $step=$basestep=$numElements/10; // output display of % done
606
        $num_step=0;
607
        $timeFiveSec = microtime(true); // Used for display a '.' every <n> seconds
608
        
609
        // Create index for trap objects
610
        $this->trapObjectsIndex=array();
611
        
612
        // detailed timing (time_* vars)
613
        $this->reset_update_timers();
614
        
615
        for ($curElement=0;$curElement < $numElements;$curElement++)
616
        {
617
            $this->timing['base_time']= microtime(true);
618
            if ($display_progress)
619
            {
620
                if ((microtime(true)-$timeFiveSec) > 2)
621
                { // echo a . every 2 sec
622
                    echo '.';
623
                    $timeFiveSec = microtime(true);
624
                }
625
                if ($curElement>$step)
626
                { // display progress
627
                    $num_step++;
628
                    $step+=$basestep;   
629
                    echo "\n" . ($num_step*10). '% : ';
630
                }
631
            }
632
            
633
            $this->reset_oidDesc();
634
            if ($this->detect_trap($curElement,$onlyTraps)===true)
635
            {
636
                continue;
637
            }
638
            
639
            $this->timing['num_traps']++;
640
            
641
            $this->logging->log('Found trap : '.$this->oidDesc['name'] . ' / OID : '.$this->oidDesc['oid'],INFO );
642
            if ($display_progress) echo '#'; // echo a # when trap found
643
644
            // get trap objects & source MIB
645
            
646
            $snmptrans=$this->get_trap_mib_description(); // get MIB & description
647
648
649
            $update=$this->update_oid(); // Do update of trap.
650
            
651
            $this->timing['update_time'] += microtime(true) - $this->timing['base_time'];
652
            $this->timing['update_num']++;
653
            
654
            $this->timing['base_time']= microtime(true); // Reset to check object time
655
            
656
            if (($update==0) && ($check_change===false))
657
            { // Trapd didn't change & force check disabled
658
                $this->timing['objects_time'] += microtime(true) - $this->timing['base_time'];
659
                if ($display_progress) echo "C";
660
                continue;
661
            }
662
            
663
            $trapObjects=$this->get_trap_objects($snmptrans); // Get trap objects from snmptranslate output            
664
            if ($trapObjects == null)
665
            {
666
                continue;
667
            }
668
           
669
            $this->trap_objects($this->oidDesc['oid'], $this->oidDesc['mib'], $trapObjects, false);
670
            
671
            $this->timing['objects_time'] += microtime(true) - $this->timing['base_time'];
672
            $this->timing['objects_num']++;
673
        }
674
        
675
        if ($display_progress)
676
        {
677
            echo "\nNumber of processed traps :  ". $this->timing['num_traps'] ."\n";
678
            echo "\nParsing : " . number_format($this->timing['base_parse_time']+$this->timing['base_check_time'],1) ." sec / " . ($this->timing['base_parse_num']+ $this->timing['base_check_num'])  . " occurences\n";
679
            echo "Detecting traps : " . number_format($this->timing['type0_check_time']+$this->timing['nottrap_time'],1) . " sec / " . ($this->timing['type0_check_num']+$this->timing['nottrap_num']) ." occurences\n";
680
            echo "Trap processing (".$this->timing['update_num']."): ".number_format($this->timing['update_time'],1)." sec , ";
681
            echo "Objects processing (".$this->timing['objects_num'].") : ".number_format($this->timing['objects_time'],1)." sec \n";
682
            
683
            $timeTaken=microtime(true) - $timeTaken;
684
            echo "Global time : ".round($timeTaken)." seconds\n";
685
        }
686
    }
687
    
688
    
689
}