Skip to content

Calculations

Calculations is a standard configuration interface to define the handling of the Meta Metrics defined in the Collections interface. These Meta Metrics use Perl-syntax code to do special processing on the metric data. An example of a meta-metric is the creation of a total inbound bandwidth metric, where the metric data for all inbound interfaces is summed up and saved as a separate metric.

Refer to the Standard Configuration Interface guide for details on interacting with the grid and form.

This user interface calls REST methods from api/metric/calculations.

The UI path for this interface is Configuration -> Metrics -> Calculations.

Form Fields

  • Name - The name of the calculation.

  • Description - The description of the calculation.

  • Status - The state of the calculation.

  • Collections - The collections selected here will have the metrics retrieved and be processed by the calculation.

  • Policy - The Perl based processing logic of the calculation.

Policy Code Toolbar

  • Line Numbers - Toggle on/off line numbers.

  • Check Syntax - Run Perl syntax checking on content

  • Search - Search code.

  • Previous - Previous result for current search.

  • Next - Next result for current search.

  • Replace - Search and replace code.

  • Replace All - Search and replace all in code.

Meta

Default Calculations

  • Total Bandwidth Consolidation

    $Log->Message('INFO', " -> Total Interface Bandwidth -> Log Received Data:\n" . Dumper($Data) . "\n-------------------\n");
    
    # This is an example consolidation policy.  It consolidates the bandwidth on all interfaces on
    # a device into a single MetricType called "Interface Total Bandwidth".
    
    my $DBH = undef;
    my $MetricTypeID = FindMetricTypeID({
        DBH           => \$DBH,
        StorageHash   => $MetricHash,
        Name          => "Interface Total Bandwidth",
        FormatID      => 1,
        Direction     => 0,
        Unit          => "Bits Per Second",
        UnitDivision  => 1000,
        Abbreviation  => "b/s",
        TopNTypeID    => 0,
        TopNScopeID   => 0,
        MetricGroupID => 1,
        Create        => 1
    });
    
    my $InstanceName = $Data->{Collection}->{Name};
    my $CollectionID = $Data->{Collection}->{ID};
    my $DeviceID     = 0;
    my $InstanceID   = 0;
    my $MetricID     = 0;
    my $PollInterval = 0;
    my $Value        = 0;
    my $Maximum      = 0;
    my $Status       = 0;
    my $PolledTime   = 0;
    my $Error;
    
    foreach my $MetricID (keys %{$Data->{'Metrics'}}) {
        # Exclude 0 Max and unavailable metrics
        if ((int($Data->{Metrics}->{$MetricID}->{Maximum}) > 0) && (int($Data->{Metrics}->{$MetricID}->{State}) > 0)) {
            $Value       += $Data->{Metrics}->{$MetricID}->{Value};
            $Maximum     += $Data->{Metrics}->{$MetricID}->{Maximum};
            $DeviceID     = $Data->{Metrics}->{$MetricID}->{DeviceID};
            $PollInterval = $Data->{Metrics}->{$MetricID}->{PollTime};
            $PolledTime   = $Data->{Metrics}->{$MetricID}->{Time}; 
            $Status       = 1;
        }
    }
    
    # DeviceID set based on metrics
    if (int($DeviceID) == 0) {
        $Log->Message('ERROR', " -> Total Interface Bandwidth -> Missing DeviceID for Collection [$InstanceName].");
    }
     else {
        # Find InstanceID
        $InstanceID = FindInstanceID({
            DBH         => \$DBH,
            StorageHash => $MetricHash,
            Name        => $InstanceName,
            DeviceID    => $DeviceID,
            TypeID      => 0,
            Create      => 1
        });
    
        if (int($InstanceID) == 0) {
            $Log->Message('ERROR', " -> Total Interface Bandwidth -> Missing InstanceID for Collection [$InstanceName] on DeviceID=[$DeviceID].");
        }
        else {
            # Find MetricID
            $MetricID = FindMetricID({
                DBH          => \$DBH,
                StorageHash  => $MetricHash,
                DeviceID     => $DeviceID,
                InstanceID   => $InstanceID,
                MetricTypeID => $MetricTypeID,
                Factor       => 1,
                Max          => $Maximum,
                PollInterval => $PollInterval,
                Create       => 1
            });
    
            if (int($MetricID) > 0) {
                # Store Metric Value
                $DataQueue->enqueue($MetricID . ':' . $Value . ':' . $Status . ':' . $PolledTime);
            }
        }
    }