mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-02-03 22:18:39 +00:00
This commit extends the documentation effort by adding detailed explanatory comments to key CLI components and core functionality throughout the cmd/ directory. The changes focus on explaining WHY certain logic is needed, not just WHAT the code does, improving code maintainability and helping developers understand complex business decisions. Key improvements: - Main entry points: Document CLI initialization, logging setup, and cache configuration with reasoning for design decisions - DNS proxy core: Explain DNS proxy constants, data structures, and core processing pipeline for handling DNS queries - Service management: Document service command structure, configuration patterns, and platform-specific service handling - Logging infrastructure: Explain log buffer management, level encoders, and log formatting decisions for different use cases - Metrics and monitoring: Document Prometheus metrics structure, HTTP endpoints, and conditional metric collection for performance - Network handling: Explain Linux-specific network interface filtering, virtual interface detection, and DNS configuration management - Hostname validation: Document RFC1123 compliance and DNS naming standards for system compatibility - Mobile integration: Explain HTTP retry logic, fallback mechanisms, and mobile platform integration patterns - Connection management: Document connection wrapper design to prevent log pollution during process lifecycle Technical details: - Added explanatory comments to 11 additional files in cmd/cli/ - Maintained consistent documentation style and format - Preserved all existing functionality while improving code clarity - Enhanced understanding of complex business logic and platform-specific behavior These comments help future developers understand the reasoning behind complex decisions, making the codebase more maintainable and reducing the risk of incorrect modifications during maintenance.
67 lines
2.6 KiB
Go
67 lines
2.6 KiB
Go
package cli
|
|
|
|
import "github.com/prometheus/client_golang/prometheus"
|
|
|
|
// Prometheus metrics label constants for consistent labeling across all metrics
|
|
// These ensure standardized metric labeling for monitoring and alerting
|
|
const (
|
|
metricsLabelListener = "listener"
|
|
metricsLabelClientSourceIP = "client_source_ip"
|
|
metricsLabelClientMac = "client_mac"
|
|
metricsLabelClientHostname = "client_hostname"
|
|
metricsLabelUpstream = "upstream"
|
|
metricsLabelRRType = "rr_type"
|
|
metricsLabelRCode = "rcode"
|
|
)
|
|
|
|
// statsVersion represent ctrld version.
|
|
// This metric provides version information for monitoring and debugging
|
|
var statsVersion = prometheus.NewCounterVec(prometheus.CounterOpts{
|
|
Name: "ctrld_build_info",
|
|
Help: "Version of ctrld process.",
|
|
}, []string{"gitref", "goversion", "version"})
|
|
|
|
// statsTimeStart represents start time of ctrld service.
|
|
// This metric tracks service uptime and helps with monitoring service restarts
|
|
var statsTimeStart = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "ctrld_time_seconds",
|
|
Help: "Start time of the ctrld process since unix epoch in seconds.",
|
|
})
|
|
|
|
// statsQueriesCountLabels defines the labels for query count metrics
|
|
// These labels provide detailed breakdown of DNS query statistics
|
|
var statsQueriesCountLabels = []string{
|
|
metricsLabelListener,
|
|
metricsLabelClientSourceIP,
|
|
metricsLabelClientMac,
|
|
metricsLabelClientHostname,
|
|
metricsLabelUpstream,
|
|
metricsLabelRRType,
|
|
metricsLabelRCode,
|
|
}
|
|
|
|
// statsQueriesCount counts total number of queries.
|
|
// This provides comprehensive DNS query statistics for monitoring and alerting
|
|
var statsQueriesCount = prometheus.NewCounterVec(prometheus.CounterOpts{
|
|
Name: "ctrld_queries_count",
|
|
Help: "Total number of queries.",
|
|
}, statsQueriesCountLabels)
|
|
|
|
// statsClientQueriesCount counts total number of queries of a client.
|
|
//
|
|
// The labels "client_source_ip", "client_mac", "client_hostname" are unbounded,
|
|
// thus this stat is highly inefficient if there are many devices.
|
|
// This metric should be used carefully in high-client environments
|
|
var statsClientQueriesCount = prometheus.NewCounterVec(prometheus.CounterOpts{
|
|
Name: "ctrld_client_queries_count",
|
|
Help: "Total number queries of a client.",
|
|
}, []string{metricsLabelClientSourceIP, metricsLabelClientMac, metricsLabelClientHostname})
|
|
|
|
// WithLabelValuesInc increases prometheus counter by 1 if query stats is enabled.
|
|
// This provides conditional metric collection to avoid performance impact when metrics are disabled
|
|
func (p *prog) WithLabelValuesInc(c *prometheus.CounterVec, lvs ...string) {
|
|
if p.metricsQueryStats.Load() {
|
|
c.WithLabelValues(lvs...).Inc()
|
|
}
|
|
}
|