mirror of
https://github.com/criyle/go-judge.git
synced 2025-09-26 22:39:12 +08:00
metrics: fix build on other platforms
Some checks failed
Build / Goreleaser (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, darwin) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, linux) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, windows) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, darwin) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, linux) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, windows) (push) Has been cancelled
Some checks failed
Build / Goreleaser (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, darwin) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, linux) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, windows) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, darwin) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, linux) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, windows) (push) Has been cancelled
This commit is contained in:
parent
052a482697
commit
e7228aefbe
@ -2,16 +2,12 @@ package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/criyle/go-judge/cmd/go-judge/config"
|
||||
"github.com/criyle/go-judge/env/pool"
|
||||
"github.com/criyle/go-judge/envexec"
|
||||
"github.com/criyle/go-judge/filestore"
|
||||
"github.com/criyle/go-judge/worker"
|
||||
"github.com/criyle/go-sandbox/pkg/cgroup"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
@ -21,7 +17,6 @@ const (
|
||||
filestoreSubsystem = "file"
|
||||
environmentSubsystem = "environment"
|
||||
workerSubsystem = "worker"
|
||||
cgroupSubsystem = "cgroup"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -269,106 +264,3 @@ func newMetricsWorker(w worker.Worker) worker.Worker {
|
||||
prometheus.MustRegister(rt)
|
||||
return rt
|
||||
}
|
||||
|
||||
var _ prometheus.Collector = &cgroupMetrics{}
|
||||
|
||||
type cgroupMetrics struct {
|
||||
cgroup cgroup.Cgroup
|
||||
cgroupCPU *prometheus.Desc
|
||||
cgroupMemory *prometheus.Desc
|
||||
cgroupMaxMemory *prometheus.Desc
|
||||
}
|
||||
|
||||
// Collect implements prometheus.Collector.
|
||||
func (c *cgroupMetrics) Collect(ch chan<- prometheus.Metric) {
|
||||
if u, err := c.cgroup.CPUUsage(); err == nil {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.cgroupCPU, prometheus.CounterValue, time.Duration(u).Seconds(),
|
||||
)
|
||||
}
|
||||
if m, err := c.cgroup.MemoryUsage(); err == nil {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.cgroupMemory, prometheus.GaugeValue, float64(m),
|
||||
)
|
||||
}
|
||||
if m, err := c.cgroup.MemoryMaxUsage(); err == nil {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.cgroupMaxMemory, prometheus.GaugeValue, float64(m),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Describe implements prometheus.Collector.
|
||||
func (c *cgroupMetrics) Describe(ch chan<- *prometheus.Desc) {
|
||||
prometheus.DescribeByCollect(c, ch)
|
||||
}
|
||||
|
||||
func newCgroupMetrics(cg cgroup.Cgroup, label string) *cgroupMetrics {
|
||||
cgroupCPU := prometheus.NewDesc(
|
||||
prometheus.BuildFQName(metricsNamespace, cgroupSubsystem, "cpu_seconds"),
|
||||
"CPU usage of the cgroup", nil, prometheus.Labels{"type": label},
|
||||
)
|
||||
cgroupMemory := prometheus.NewDesc(
|
||||
prometheus.BuildFQName(metricsNamespace, cgroupSubsystem, "memory_bytes"),
|
||||
"Memory usage of the cgroup", nil, prometheus.Labels{"type": label},
|
||||
)
|
||||
cgroupMaxMemory := prometheus.NewDesc(
|
||||
prometheus.BuildFQName(metricsNamespace, cgroupSubsystem, "memory_max_bytes"),
|
||||
"Maximum memory usage of the cgroup", nil, prometheus.Labels{"type": label},
|
||||
)
|
||||
rt := &cgroupMetrics{
|
||||
cgroup: cg,
|
||||
cgroupCPU: cgroupCPU,
|
||||
cgroupMemory: cgroupMemory,
|
||||
cgroupMaxMemory: cgroupMaxMemory,
|
||||
}
|
||||
prometheus.MustRegister(rt)
|
||||
return rt
|
||||
}
|
||||
|
||||
func initCgroupMetrics(conf *config.Config, param map[string]any) {
|
||||
if !conf.EnableMetrics {
|
||||
return
|
||||
}
|
||||
t, ok := param["cgroupType"]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
ct, ok := t.(int)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
if ct != cgroup.TypeV1 && ct != cgroup.TypeV2 {
|
||||
return
|
||||
}
|
||||
|
||||
prefix, err := cgroup.GetCurrentCgroupPrefix()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// current cgroup is xxx/api, get the dir
|
||||
prefix = path.Dir(prefix)
|
||||
control, err := cgroup.GetAvailableControllerWithPrefix(prefix)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
cg, err := cgroup.New(prefix, control)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
newCgroupMetrics(cg, "all")
|
||||
|
||||
apiCg, err := cg.New("api")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
newCgroupMetrics(apiCg, "controller")
|
||||
|
||||
containersCg, err := cgroup.New(path.Join(prefix, "containers"), control)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
newCgroupMetrics(containersCg, "containers")
|
||||
}
|
||||
|
115
cmd/go-judge/metrics_linux.go
Normal file
115
cmd/go-judge/metrics_linux.go
Normal file
@ -0,0 +1,115 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"path"
|
||||
"time"
|
||||
|
||||
"github.com/criyle/go-judge/cmd/go-judge/config"
|
||||
"github.com/criyle/go-sandbox/pkg/cgroup"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
const cgroupSubsystem = "cgroup"
|
||||
|
||||
var _ prometheus.Collector = &cgroupMetrics{}
|
||||
|
||||
type cgroupMetrics struct {
|
||||
cgroup cgroup.Cgroup
|
||||
cgroupCPU *prometheus.Desc
|
||||
cgroupMemory *prometheus.Desc
|
||||
cgroupMaxMemory *prometheus.Desc
|
||||
}
|
||||
|
||||
// Collect implements prometheus.Collector.
|
||||
func (c *cgroupMetrics) Collect(ch chan<- prometheus.Metric) {
|
||||
if u, err := c.cgroup.CPUUsage(); err == nil {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.cgroupCPU, prometheus.CounterValue, time.Duration(u).Seconds(),
|
||||
)
|
||||
}
|
||||
if m, err := c.cgroup.MemoryUsage(); err == nil {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.cgroupMemory, prometheus.GaugeValue, float64(m),
|
||||
)
|
||||
}
|
||||
if m, err := c.cgroup.MemoryMaxUsage(); err == nil {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.cgroupMaxMemory, prometheus.GaugeValue, float64(m),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Describe implements prometheus.Collector.
|
||||
func (c *cgroupMetrics) Describe(ch chan<- *prometheus.Desc) {
|
||||
prometheus.DescribeByCollect(c, ch)
|
||||
}
|
||||
|
||||
func newCgroupMetrics(cg cgroup.Cgroup, label string) *cgroupMetrics {
|
||||
cgroupCPU := prometheus.NewDesc(
|
||||
prometheus.BuildFQName(metricsNamespace, cgroupSubsystem, "cpu_seconds"),
|
||||
"CPU usage of the cgroup", nil, prometheus.Labels{"type": label},
|
||||
)
|
||||
cgroupMemory := prometheus.NewDesc(
|
||||
prometheus.BuildFQName(metricsNamespace, cgroupSubsystem, "memory_bytes"),
|
||||
"Memory usage of the cgroup", nil, prometheus.Labels{"type": label},
|
||||
)
|
||||
cgroupMaxMemory := prometheus.NewDesc(
|
||||
prometheus.BuildFQName(metricsNamespace, cgroupSubsystem, "memory_max_bytes"),
|
||||
"Maximum memory usage of the cgroup", nil, prometheus.Labels{"type": label},
|
||||
)
|
||||
rt := &cgroupMetrics{
|
||||
cgroup: cg,
|
||||
cgroupCPU: cgroupCPU,
|
||||
cgroupMemory: cgroupMemory,
|
||||
cgroupMaxMemory: cgroupMaxMemory,
|
||||
}
|
||||
prometheus.MustRegister(rt)
|
||||
return rt
|
||||
}
|
||||
|
||||
func initCgroupMetrics(conf *config.Config, param map[string]any) {
|
||||
if !conf.EnableMetrics {
|
||||
return
|
||||
}
|
||||
t, ok := param["cgroupType"]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
ct, ok := t.(int)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
if ct != cgroup.TypeV1 && ct != cgroup.TypeV2 {
|
||||
return
|
||||
}
|
||||
|
||||
prefix, err := cgroup.GetCurrentCgroupPrefix()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// current cgroup is xxx/api, get the dir
|
||||
prefix = path.Dir(prefix)
|
||||
control, err := cgroup.GetAvailableControllerWithPrefix(prefix)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
cg, err := cgroup.New(prefix, control)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
newCgroupMetrics(cg, "all")
|
||||
|
||||
apiCg, err := cg.New("api")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
newCgroupMetrics(apiCg, "controller")
|
||||
|
||||
containersCg, err := cgroup.New(path.Join(prefix, "containers"), control)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
newCgroupMetrics(containersCg, "containers")
|
||||
}
|
8
cmd/go-judge/metrics_others.go
Normal file
8
cmd/go-judge/metrics_others.go
Normal file
@ -0,0 +1,8 @@
|
||||
//go:build !linux
|
||||
|
||||
package main
|
||||
|
||||
import "github.com/criyle/go-judge/cmd/go-judge/config"
|
||||
|
||||
func initCgroupMetrics(conf *config.Config, param map[string]any) {
|
||||
}
|
2
go.mod
2
go.mod
@ -30,7 +30,7 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/BurntSushi/toml v1.4.0 // indirect
|
||||
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/bytedance/sonic v1.13.2 // indirect
|
||||
github.com/bytedance/sonic/loader v0.2.4 // indirect
|
||||
|
4
go.sum
4
go.sum
@ -1,7 +1,7 @@
|
||||
cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
|
||||
cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
|
||||
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
|
||||
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ=
|
||||
|
Loading…
Reference in New Issue
Block a user