firehol/netdata

View on GitHub
src/go/plugin/go.d/modules/chrony/charts.go

Summary

Maintainability
A
2 hrs
Test Coverage
// SPDX-License-Identifier: GPL-3.0-or-later

package chrony

import (
    "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module"
)

const (
    prioStratum = module.Priority + iota
    prioCurrentCorrection
    prioRootDelay
    prioRootDispersion
    prioLastOffset
    prioRmsOffset
    prioFrequency
    prioResidualFrequency
    prioSkew
    prioUpdateInterval
    prioRefMeasurementTime
    prioLeapStatus
    prioActivity
    //prioNTPPackets
    //prioCommandPackets
    //prioNKEConnections
    //prioClientLogRecords
)

var charts = module.Charts{
    stratumChart.Copy(),

    currentCorrectionChart.Copy(),

    rootDelayChart.Copy(),
    rootDispersionChart.Copy(),

    lastOffsetChart.Copy(),
    rmsOffsetChart.Copy(),

    frequencyChart.Copy(),
    residualFrequencyChart.Copy(),

    skewChart.Copy(),

    updateIntervalChart.Copy(),
    refMeasurementTimeChart.Copy(),

    leapStatusChart.Copy(),

    activityChart.Copy(),
}

// Tracking charts
var (
    stratumChart = module.Chart{
        ID:       "stratum",
        Title:    "Distance to the reference clock",
        Units:    "level",
        Fam:      "stratum",
        Ctx:      "chrony.stratum",
        Priority: prioStratum,
        Dims: module.Dims{
            {ID: "stratum", Name: "stratum"},
        },
    }

    currentCorrectionChart = module.Chart{
        ID:       "current_correction",
        Title:    "Current correction",
        Units:    "seconds",
        Fam:      "correction",
        Ctx:      "chrony.current_correction",
        Priority: prioCurrentCorrection,
        Dims: module.Dims{
            {ID: "current_correction", Div: scaleFactor},
        },
    }

    rootDelayChart = module.Chart{
        ID:       "root_delay",
        Title:    "Network path delay to stratum-1",
        Units:    "seconds",
        Fam:      "root",
        Ctx:      "chrony.root_delay",
        Priority: prioRootDelay,
        Dims: module.Dims{
            {ID: "root_delay", Div: scaleFactor},
        },
    }
    rootDispersionChart = module.Chart{
        ID:       "root_dispersion",
        Title:    "Dispersion accumulated back to stratum-1",
        Units:    "seconds",
        Fam:      "root",
        Ctx:      "chrony.root_dispersion",
        Priority: prioRootDispersion,
        Dims: module.Dims{
            {ID: "root_dispersion", Div: scaleFactor},
        },
    }

    lastOffsetChart = module.Chart{
        ID:       "last_offset",
        Title:    "Offset on the last clock update",
        Units:    "seconds",
        Fam:      "offset",
        Ctx:      "chrony.last_offset",
        Priority: prioLastOffset,
        Dims: module.Dims{
            {ID: "last_offset", Name: "offset", Div: scaleFactor},
        },
    }
    rmsOffsetChart = module.Chart{
        ID:       "rms_offset",
        Title:    "Long-term average of the offset value",
        Units:    "seconds",
        Fam:      "offset",
        Ctx:      "chrony.rms_offset",
        Priority: prioRmsOffset,
        Dims: module.Dims{
            {ID: "rms_offset", Name: "offset", Div: scaleFactor},
        },
    }

    frequencyChart = module.Chart{
        ID:       "frequency",
        Title:    "Frequency",
        Units:    "ppm",
        Fam:      "frequency",
        Ctx:      "chrony.frequency",
        Priority: prioFrequency,
        Dims: module.Dims{
            {ID: "frequency", Div: scaleFactor},
        },
    }
    residualFrequencyChart = module.Chart{
        ID:       "residual_frequency",
        Title:    "Residual frequency",
        Units:    "ppm",
        Fam:      "frequency",
        Ctx:      "chrony.residual_frequency",
        Priority: prioResidualFrequency,
        Dims: module.Dims{
            {ID: "residual_frequency", Div: scaleFactor},
        },
    }

    skewChart = module.Chart{
        ID:       "skew",
        Title:    "Skew",
        Units:    "ppm",
        Fam:      "frequency",
        Ctx:      "chrony.skew",
        Priority: prioSkew,
        Dims: module.Dims{
            {ID: "skew", Div: scaleFactor},
        },
    }

    updateIntervalChart = module.Chart{
        ID:       "update_interval",
        Title:    "Interval between the last two clock updates",
        Units:    "seconds",
        Fam:      "updates",
        Ctx:      "chrony.update_interval",
        Priority: prioUpdateInterval,
        Dims: module.Dims{
            {ID: "update_interval", Div: scaleFactor},
        },
    }
    refMeasurementTimeChart = module.Chart{
        ID:       "ref_measurement_time",
        Title:    "Time since the last measurement",
        Units:    "seconds",
        Fam:      "updates",
        Ctx:      "chrony.ref_measurement_time",
        Priority: prioRefMeasurementTime,
        Dims: module.Dims{
            {ID: "ref_measurement_time"},
        },
    }

    leapStatusChart = module.Chart{
        ID:       "leap_status",
        Title:    "Leap status",
        Units:    "status",
        Fam:      "leap status",
        Ctx:      "chrony.leap_status",
        Priority: prioLeapStatus,
        Dims: module.Dims{
            {ID: "leap_status_normal", Name: "normal"},
            {ID: "leap_status_insert_second", Name: "insert_second"},
            {ID: "leap_status_delete_second", Name: "delete_second"},
            {ID: "leap_status_unsynchronised", Name: "unsynchronised"},
        },
    }
)

// Activity charts
var (
    activityChart = module.Chart{
        ID:       "activity",
        Title:    "Peers activity",
        Units:    "sources",
        Fam:      "activity",
        Ctx:      "chrony.activity",
        Type:     module.Stacked,
        Priority: prioActivity,
        Dims: module.Dims{
            {ID: "online_sources", Name: "online"},
            {ID: "offline_sources", Name: "offline"},
            {ID: "burst_online_sources", Name: "burst_online"},
            {ID: "burst_offline_sources", Name: "burst_offline"},
            {ID: "unresolved_sources", Name: "unresolved"},
        },
    }
)

//var serverStatsVer1Charts = module.Charts{
//    ntpPacketsChart.Copy(),
//    commandPacketsChart.Copy(),
//    clientLogRecordsChart.Copy(),
//}
//
//var serverStatsVer2Charts = module.Charts{
//    ntpPacketsChart.Copy(),
//    commandPacketsChart.Copy(),
//    clientLogRecordsChart.Copy(),
//    nkeConnectionChart.Copy(),
//}
//
//var serverStatsVer3Charts = module.Charts{
//    ntpPacketsChart.Copy(),
//    commandPacketsChart.Copy(),
//    clientLogRecordsChart.Copy(),
//    nkeConnectionChart.Copy(),
//}
//
//var serverStatsVer4Charts = module.Charts{
//    ntpPacketsChart.Copy(),
//    commandPacketsChart.Copy(),
//    clientLogRecordsChart.Copy(),
//    nkeConnectionChart.Copy(),
//}

// ServerStats charts
//var (
//    ntpPacketsChart = module.Chart{
//        ID:       "ntp_packets",
//        Title:    "NTP packets",
//        Units:    "packets/s",
//        Fam:      "client requests",
//        Ctx:      "chrony.ntp_packets",
//        Type:     module.Stacked,
//        Priority: prioNTPPackets,
//        Dims: module.Dims{
//            {ID: "ntp_packets_received", Name: "received", Algo: module.Incremental},
//            {ID: "ntp_packets_dropped", Name: "dropped", Algo: module.Incremental},
//        },
//    }
//    commandPacketsChart = module.Chart{
//        ID:       "command_packets",
//        Title:    "Command packets",
//        Units:    "packets/s",
//        Fam:      "client requests",
//        Ctx:      "chrony.command_packets",
//        Type:     module.Stacked,
//        Priority: prioCommandPackets,
//        Dims: module.Dims{
//            {ID: "command_packets_received", Name: "received", Algo: module.Incremental},
//            {ID: "command_packets_dropped", Name: "dropped", Algo: module.Incremental},
//        },
//    }
//    nkeConnectionChart = module.Chart{
//        ID:       "nke_connections",
//        Title:    "NTS-KE connections",
//        Units:    "connections/s",
//        Fam:      "client requests",
//        Ctx:      "chrony.nke_connections",
//        Type:     module.Stacked,
//        Priority: prioNKEConnections,
//        Dims: module.Dims{
//            {ID: "nke_connections_accepted", Name: "accepted", Algo: module.Incremental},
//            {ID: "nke_connections_dropped", Name: "dropped", Algo: module.Incremental},
//        },
//    }
//    clientLogRecordsChart = module.Chart{
//        ID:       "client_log_records",
//        Title:    "Client log records",
//        Units:    "records/s",
//        Fam:      "client requests",
//        Ctx:      "chrony.client_log_records",
//        Type:     module.Stacked,
//        Priority: prioClientLogRecords,
//        Dims: module.Dims{
//            {ID: "client_log_records_dropped", Name: "dropped", Algo: module.Incremental},
//        },
//    }
//)

//func (c *Chrony) addServerStatsCharts(stats *serverStats) {
//    var err error
//
//    switch {
//    case stats.v1 != nil:
//        err = c.Charts().Add(*serverStatsVer1Charts.Copy()...)
//    case stats.v2 != nil:
//        err = c.Charts().Add(*serverStatsVer2Charts.Copy()...)
//    case stats.v3 != nil:
//        err = c.Charts().Add(*serverStatsVer3Charts.Copy()...)
//    case stats.v4 != nil:
//        err = c.Charts().Add(*serverStatsVer4Charts.Copy()...)
//    default:
//        err = errors.New("unknown stats chart")
//    }
//
//    if err != nil {
//        c.Warning(err)
//    }
//}