librenms/librenms

View on GitHub
LibreNMS/Data/Store/Rrd.php

Summary

Maintainability
D
2 days
Test Coverage

File Rrd.php has 386 lines of code (exceeds 250 allowed). Consider refactoring.
Open

<?php
/**
 * Rrd.php
 *
 * -Description-
Severity: Minor
Found in LibreNMS/Data/Store/Rrd.php - About 5 hrs to fix

    Rrd has 29 functions (exceeds 20 allowed). Consider refactoring.
    Open

    class Rrd extends BaseDatastore
    {
        private $disabled = false;
    
        /** @var Proc */
    Severity: Minor
    Found in LibreNMS/Data/Store/Rrd.php - About 3 hrs to fix

      The class Rrd has an overall complexity of 94 which is very high. The configured complexity threshold is 50.
      Open

      class Rrd extends BaseDatastore
      {
          private $disabled = false;
      
          /** @var Proc */
      Severity: Minor
      Found in LibreNMS/Data/Store/Rrd.php by phpmd

      The class Rrd has 20 public methods. Consider refactoring Rrd to keep number of public methods under 10.
      Open

      class Rrd extends BaseDatastore
      {
          private $disabled = false;
      
          /** @var Proc */
      Severity: Minor
      Found in LibreNMS/Data/Store/Rrd.php by phpmd

      TooManyPublicMethods

      Since: 0.1

      A class with too many public methods is probably a good suspect for refactoring, in order to reduce its complexity and find a way to have more fine grained objects.

      By default it ignores methods starting with 'get' or 'set'.

      Example

      Source https://phpmd.org/rules/codesize.html#toomanypublicmethods

      Method command has 30 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          private function command($command, $filename, $options)
          {
              $stat = Measurement::start($this->coalesceStatisticType($command));
              $output = null;
      
      
      Severity: Minor
      Found in LibreNMS/Data/Store/Rrd.php - About 1 hr to fix

        Method tune has 29 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

            public function tune($type, $filename, $max)
            {
                $fields = [];
                if ($type === 'port') {
                    if ($max < 10000000) {
        Severity: Minor
        Found in LibreNMS/Data/Store/Rrd.php - About 1 hr to fix

          Method graph has 29 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              public function graph(string $options, array $env = null): string
              {
                  $process = new Process([Config::get('rrdtool', 'rrdtool'), '-'], $this->rrd_dir, $env);
                  $process->setTimeout(300);
                  $process->setIdleTimeout(300);
          Severity: Minor
          Found in LibreNMS/Data/Store/Rrd.php - About 1 hr to fix

            Method put has 26 lines of code (exceeds 25 allowed). Consider refactoring.
            Open

                public function put($device, $measurement, $tags, $fields)
                {
                    $rrd_name = isset($tags['rrd_name']) ? $tags['rrd_name'] : $measurement;
                    $step = isset($tags['rrd_step']) ? $tags['rrd_step'] : $this->step;
                    if (! empty($tags['rrd_oldname'])) {
            Severity: Minor
            Found in LibreNMS/Data/Store/Rrd.php - About 1 hr to fix

              Function buildCommand has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
              Open

                  public function buildCommand($command, $filename, $options)
                  {
                      if ($command == 'create') {
                          // <1.4.3 doesn't support -O, so make sure the file doesn't exist
                          if (version_compare($this->version, '1.4.3', '<')) {
              Severity: Minor
              Found in LibreNMS/Data/Store/Rrd.php - About 55 mins to fix

              Cognitive Complexity

              Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

              A method's cognitive complexity is based on a few simple rules:

              • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
              • Code is considered more complex for each "break in the linear flow of the code"
              • Code is considered more complex when "flow breaking structures are nested"

              Further reading

              Function command has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
              Open

                  private function command($command, $filename, $options)
                  {
                      $stat = Measurement::start($this->coalesceStatisticType($command));
                      $output = null;
              
              
              Severity: Minor
              Found in LibreNMS/Data/Store/Rrd.php - About 55 mins to fix

              Cognitive Complexity

              Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

              A method's cognitive complexity is based on a few simple rules:

              • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
              • Code is considered more complex for each "break in the linear flow of the code"
              • Code is considered more complex when "flow breaking structures are nested"

              Further reading

              Function getRrdApplicationArrays has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
              Open

                  public function getRrdApplicationArrays($device, $app_id, $app_name, $category = null)
                  {
                      $entries = [];
                      $separator = '-';
              
              
              Severity: Minor
              Found in LibreNMS/Data/Store/Rrd.php - About 45 mins to fix

              Cognitive Complexity

              Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

              A method's cognitive complexity is based on a few simple rules:

              • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
              • Code is considered more complex for each "break in the linear flow of the code"
              • Code is considered more complex when "flow breaking structures are nested"

              Further reading

              Consider simplifying this complex logical expression.
              Open

                      if ($this->rrdcached &&
                          ! ($command == 'create' && version_compare($this->version, '1.5.5', '<')) &&
                          ! ($command == 'tune' && $this->rrdcached && version_compare($this->version, '1.5', '<'))
                      ) {
                          // only relative paths if using rrdcached
              Severity: Major
              Found in LibreNMS/Data/Store/Rrd.php - About 40 mins to fix

                Function update has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
                Open

                    public function update($filename, $data)
                    {
                        $values = [];
                        // Do some sanitation on the data if passed as an array.
                
                
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php - About 35 mins to fix

                Cognitive Complexity

                Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

                A method's cognitive complexity is based on a few simple rules:

                • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
                • Code is considered more complex for each "break in the linear flow of the code"
                • Code is considered more complex when "flow breaking structures are nested"

                Further reading

                Function put has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
                Open

                    public function put($device, $measurement, $tags, $fields)
                    {
                        $rrd_name = isset($tags['rrd_name']) ? $tags['rrd_name'] : $measurement;
                        $step = isset($tags['rrd_step']) ? $tags['rrd_step'] : $this->step;
                        if (! empty($tags['rrd_oldname'])) {
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php - About 25 mins to fix

                Cognitive Complexity

                Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

                A method's cognitive complexity is based on a few simple rules:

                • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
                • Code is considered more complex for each "break in the linear flow of the code"
                • Code is considered more complex when "flow breaking structures are nested"

                Further reading

                Function renameFile has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
                Open

                    public function renameFile($device, $oldname, $newname)
                    {
                        $oldrrd = self::name($device['hostname'], $oldname);
                        $newrrd = self::name($device['hostname'], $newname);
                        if (is_file($oldrrd) && ! is_file($newrrd)) {
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php - About 25 mins to fix

                Cognitive Complexity

                Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

                A method's cognitive complexity is based on a few simple rules:

                • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
                • Code is considered more complex for each "break in the linear flow of the code"
                • Code is considered more complex when "flow breaking structures are nested"

                Further reading

                The method buildCommand() has a Cyclomatic Complexity of 10. The configured cyclomatic complexity threshold is 10.
                Open

                    public function buildCommand($command, $filename, $options)
                    {
                        if ($command == 'create') {
                            // <1.4.3 doesn't support -O, so make sure the file doesn't exist
                            if (version_compare($this->version, '1.4.3', '<')) {
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                CyclomaticComplexity

                Since: 0.1

                Complexity is determined by the number of decision points in a method plus one for the method entry. The decision points are 'if', 'while', 'for', and 'case labels'. Generally, 1-4 is low complexity, 5-7 indicates moderate complexity, 8-10 is high complexity, and 11+ is very high complexity.

                Example

                // Cyclomatic Complexity = 11
                class Foo {
                1   public function example() {
                2       if ($a == $b) {
                3           if ($a1 == $b1) {
                                fiddle();
                4           } elseif ($a2 == $b2) {
                                fiddle();
                            } else {
                                fiddle();
                            }
                5       } elseif ($c == $d) {
                6           while ($c == $d) {
                                fiddle();
                            }
                7        } elseif ($e == $f) {
                8           for ($n = 0; $n < $h; $n++) {
                                fiddle();
                            }
                        } else {
                            switch ($z) {
                9               case 1:
                                    fiddle();
                                    break;
                10              case 2:
                                    fiddle();
                                    break;
                11              case 3:
                                    fiddle();
                                    break;
                                default:
                                    fiddle();
                                    break;
                            }
                        }
                    }
                }

                Source https://phpmd.org/rules/codesize.html#cyclomaticcomplexity

                The method init has a boolean flag argument $dual_process, which is a certain sign of a Single Responsibility Principle violation.
                Open

                    public function init($dual_process = true)
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                BooleanArgumentFlag

                Since: 1.4.0

                A boolean flag argument is a reliable indicator for a violation of the Single Responsibility Principle (SRP). You can fix this problem by extracting the logic in the boolean flag into its own class or method.

                Example

                class Foo {
                    public function bar($flag = true) {
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#booleanargumentflag

                The method checkRrdExists uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                        } else {
                            return is_file($filename);
                        }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                The method renameFile uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                        } else {
                            // we don't need to rename the file
                            return true;
                        }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                The method put uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                        } else {
                            $rrd = self::name($device['hostname'], $rrd_name);
                        }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                The method getRrdFiles uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                        } else {
                            $rrddir = $this->dirFromHost($device['hostname']);
                            $pattern = sprintf('%s/*.rrd', $rrddir);
                            $rrd_files_array = glob($pattern);
                        }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                Avoid assigning values to variables in if clauses and the like (line '585', column '14').
                Open

                    public function graph(string $options, array $env = null): string
                    {
                        $process = new Process([Config::get('rrdtool', 'rrdtool'), '-'], $this->rrd_dir, $env);
                        $process->setTimeout(300);
                        $process->setIdleTimeout(300);
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                IfStatementAssignment

                Since: 2.7.0

                Assignments in if clauses and the like are considered a code smell. Assignments in PHP return the right operand as their result. In many cases, this is an expected behavior, but can lead to many difficult to spot bugs, especially when the right operand could result in zero, null or an empty string and the like.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($foo = 'bar') { // possible typo
                            // ...
                        }
                        if ($baz = 0) { // always false
                            // ...
                        }
                    }
                }

                Source http://phpmd.org/rules/cleancode.html#ifstatementassignment

                The method update uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                        } else {
                            return 'Bad options passed to rrdtool_update';
                        }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                The method getRrdApplicationArrays uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                        } else {
                            $pattern = sprintf('%s-%s-%s', 'app', $app_name, $app_id);
                        }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                The method renameFile uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                            } else {
                                log_event("Failed to rename $oldrrd to $newrrd", $device, 'poller', 5);
                
                                return false;
                            }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                The method command uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                        } else {
                            Log::error('rrdtool could not start');
                        }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                The method buildCommand uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
                Open

                            } else {
                                $options .= ' -O';
                            }
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                ElseExpression

                Since: 1.4.0

                An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

                Example

                class Foo
                {
                    public function bar($flag)
                    {
                        if ($flag) {
                            // one branch
                        } else {
                            // another branch
                        }
                    }
                }

                Source https://phpmd.org/rules/cleancode.html#elseexpression

                The property $async_process is not named in camelCase.
                Open

                class Rrd extends BaseDatastore
                {
                    private $disabled = false;
                
                    /** @var Proc */
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                CamelCasePropertyName

                Since: 0.2

                It is considered best practice to use the camelCase notation to name attributes.

                Example

                class ClassName {
                    protected $property_name;
                }

                Source

                The property $rrd_dir is not named in camelCase.
                Open

                class Rrd extends BaseDatastore
                {
                    private $disabled = false;
                
                    /** @var Proc */
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                CamelCasePropertyName

                Since: 0.2

                It is considered best practice to use the camelCase notation to name attributes.

                Example

                class ClassName {
                    protected $property_name;
                }

                Source

                The property $sync_process is not named in camelCase.
                Open

                class Rrd extends BaseDatastore
                {
                    private $disabled = false;
                
                    /** @var Proc */
                Severity: Minor
                Found in LibreNMS/Data/Store/Rrd.php by phpmd

                CamelCasePropertyName

                Since: 0.2

                It is considered best practice to use the camelCase notation to name attributes.

                Example

                class ClassName {
                    protected $property_name;
                }

                Source

                There are no issues that match your filters.

                Category
                Status