firehol/netdata

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

Summary

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

package nsd

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

const (
    prioQueries = module.Priority + iota
    prioQueriesByType
    prioQueriesByOpcode
    prioQueriesByClass
    prioQueriesByProtocol

    prioAnswersByRcode

    prioErrors

    prioDrops

    prioZones
    prioZoneTransfersRequests
    prioZoneTransferMemory

    prioDatabaseSize

    prioUptime
)

var charts = module.Charts{
    queriesChart.Copy(),
    queriesByTypeChart.Copy(),
    queriesByOpcodeChart.Copy(),
    queriesByClassChart.Copy(),
    queriesByProtocolChart.Copy(),

    answersByRcodeChart.Copy(),

    zonesChart.Copy(),
    zoneTransfersRequestsChart.Copy(),
    zoneTransferMemoryChart.Copy(),

    databaseSizeChart.Copy(),

    errorsChart.Copy(),

    dropsChart.Copy(),

    uptimeChart.Copy(),
}

var (
    queriesChart = module.Chart{
        ID:       "queries",
        Title:    "Queries",
        Units:    "queries/s",
        Fam:      "queries",
        Ctx:      "nsd.queries",
        Priority: prioQueries,
        Dims: module.Dims{
            {ID: "num.queries", Name: "queries", Algo: module.Incremental},
        },
    }
    queriesByTypeChart = func() module.Chart {
        chart := module.Chart{
            ID:       "queries_by_type",
            Title:    "Queries Type",
            Units:    "queries/s",
            Fam:      "queries",
            Ctx:      "nsd.queries_by_type",
            Priority: prioQueriesByType,
            Type:     module.Stacked,
        }
        for _, v := range queryTypes {
            name := v
            if s, ok := queryTypeNumberMap[v]; ok {
                name = s
            }
            chart.Dims = append(chart.Dims, &module.Dim{
                ID:   "num.type." + v,
                Name: name,
                Algo: module.Incremental,
            })
        }
        return chart
    }()
    queriesByOpcodeChart = func() module.Chart {
        chart := module.Chart{
            ID:       "queries_by_opcode",
            Title:    "Queries Opcode",
            Units:    "queries/s",
            Fam:      "queries",
            Ctx:      "nsd.queries_by_opcode",
            Priority: prioQueriesByOpcode,
            Type:     module.Stacked,
        }
        for _, v := range queryOpcodes {
            chart.Dims = append(chart.Dims, &module.Dim{
                ID:   "num.opcode." + v,
                Name: v,
                Algo: module.Incremental,
            })
        }
        return chart
    }()
    queriesByClassChart = func() module.Chart {
        chart := module.Chart{
            ID:       "queries_by_class",
            Title:    "Queries Class",
            Units:    "queries/s",
            Fam:      "queries",
            Ctx:      "nsd.queries_by_class",
            Priority: prioQueriesByClass,
            Type:     module.Stacked,
        }
        for _, v := range queryClasses {
            chart.Dims = append(chart.Dims, &module.Dim{
                ID:   "num.class." + v,
                Name: v,
                Algo: module.Incremental,
            })
        }
        return chart
    }()
    queriesByProtocolChart = module.Chart{
        ID:       "queries_by_protocol",
        Title:    "Queries Protocol",
        Units:    "queries/s",
        Fam:      "queries",
        Ctx:      "nsd.queries_by_protocol",
        Priority: prioQueriesByProtocol,
        Type:     module.Stacked,
        Dims: module.Dims{
            {ID: "num.udp", Name: "udp", Algo: module.Incremental},
            {ID: "num.udp6", Name: "udp6", Algo: module.Incremental},
            {ID: "num.tcp", Name: "tcp", Algo: module.Incremental},
            {ID: "num.tcp6", Name: "tcp6", Algo: module.Incremental},
            {ID: "num.tls", Name: "tls", Algo: module.Incremental},
            {ID: "num.tls6", Name: "tls6", Algo: module.Incremental},
        },
    }

    answersByRcodeChart = func() module.Chart {
        chart := module.Chart{
            ID:       "answers_by_rcode",
            Title:    "Answers Rcode",
            Units:    "answers/s",
            Fam:      "answers",
            Ctx:      "nsd.answers_by_rcode",
            Priority: prioAnswersByRcode,
            Type:     module.Stacked,
        }
        for _, v := range answerRcodes {
            chart.Dims = append(chart.Dims, &module.Dim{
                ID:   "num.rcode." + v,
                Name: v,
                Algo: module.Incremental,
            })
        }
        return chart
    }()

    errorsChart = module.Chart{
        ID:       "errors",
        Title:    "Errors",
        Units:    "errors/s",
        Fam:      "errors",
        Ctx:      "nsd.errors",
        Priority: prioErrors,
        Dims: module.Dims{
            {ID: "num.rxerr", Name: "query", Algo: module.Incremental},
            {ID: "num.txerr", Name: "answer", Mul: -1, Algo: module.Incremental},
        },
    }

    dropsChart = module.Chart{
        ID:       "drops",
        Title:    "Drops",
        Units:    "drops/s",
        Fam:      "drops",
        Ctx:      "nsd.drops",
        Priority: prioDrops,
        Dims: module.Dims{
            {ID: "num.dropped", Name: "query", Algo: module.Incremental},
        },
    }

    zonesChart = module.Chart{
        ID:       "zones",
        Title:    "Zones",
        Units:    "zones",
        Fam:      "zones",
        Ctx:      "nsd.zones",
        Priority: prioZones,
        Dims: module.Dims{
            {ID: "zone.master", Name: "master"},
            {ID: "zone.slave", Name: "slave"},
        },
    }
    zoneTransfersRequestsChart = module.Chart{
        ID:       "zone_transfers_requests",
        Title:    "Zone Transfers",
        Units:    "requests/s",
        Fam:      "zones",
        Ctx:      "nsd.zone_transfers_requests",
        Priority: prioZoneTransfersRequests,
        Dims: module.Dims{
            {ID: "num.raxfr", Name: "AXFR", Algo: module.Incremental},
            {ID: "num.rixfr", Name: "IXFR", Algo: module.Incremental},
        },
    }
    zoneTransferMemoryChart = module.Chart{
        ID:       "zone_transfer_memory",
        Title:    "Zone Transfer Memory",
        Units:    "bytes",
        Fam:      "zones",
        Ctx:      "nsd.zone_transfer_memory",
        Priority: prioZoneTransferMemory,
        Dims: module.Dims{
            {ID: "size.xfrd.mem", Name: "used"},
        },
    }

    databaseSizeChart = module.Chart{
        ID:       "database_size",
        Title:    "Database Size",
        Units:    "bytes",
        Fam:      "database",
        Ctx:      "nsd.database_size",
        Priority: prioDatabaseSize,
        Dims: module.Dims{
            {ID: "size.db.disk", Name: "disk"},
            {ID: "size.db.mem", Name: "mem"},
        },
    }

    uptimeChart = module.Chart{
        ID:       "uptime",
        Title:    "Uptime",
        Units:    "seconds",
        Fam:      "uptime",
        Ctx:      "nsd.uptime",
        Priority: prioUptime,
        Dims: module.Dims{
            {ID: "time.boot", Name: "uptime"},
        },
    }
)