mirror of https://github.com/coder/coder.git
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package agent
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"tailscale.com/util/clientmetric"
|
|
|
|
"github.com/coder/coder/codersdk/agentsdk"
|
|
)
|
|
|
|
func collectMetrics() []agentsdk.AgentMetric {
|
|
// Tailscale metrics
|
|
metrics := clientmetric.Metrics()
|
|
collected := make([]agentsdk.AgentMetric, 0, len(metrics))
|
|
for _, m := range metrics {
|
|
if isIgnoredMetric(m.Name()) {
|
|
continue
|
|
}
|
|
|
|
collected = append(collected, agentsdk.AgentMetric{
|
|
Name: m.Name(),
|
|
Type: asMetricType(m.Type()),
|
|
Value: float64(m.Value()),
|
|
})
|
|
}
|
|
return collected
|
|
}
|
|
|
|
// isIgnoredMetric checks if the metric should be ignored, as Coder agent doesn't use related features.
|
|
// Expected metric families: magicsock_*, derp_*, tstun_*, netcheck_*, portmap_*, etc.
|
|
func isIgnoredMetric(metricName string) bool {
|
|
if strings.HasPrefix(metricName, "dns_") ||
|
|
strings.HasPrefix(metricName, "controlclient_") ||
|
|
strings.HasPrefix(metricName, "peerapi_") ||
|
|
strings.HasPrefix(metricName, "profiles_") ||
|
|
strings.HasPrefix(metricName, "tstun_") {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func asMetricType(typ clientmetric.Type) agentsdk.AgentMetricType {
|
|
switch typ {
|
|
case clientmetric.TypeGauge:
|
|
return agentsdk.AgentMetricTypeGauge
|
|
case clientmetric.TypeCounter:
|
|
return agentsdk.AgentMetricTypeCounter
|
|
default:
|
|
panic(fmt.Sprintf("unknown metric type: %d", typ))
|
|
}
|
|
}
|