diff --git a/docs/docs.go b/docs/docs.go index 01d929c2..71b0cc22 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -2479,6 +2479,7 @@ const docTemplate = `{ "type": "boolean" }, "force_gc": { + "description": "deprecated, use MemoryLimit instead", "type": "integer", "format": "int" }, @@ -2641,6 +2642,17 @@ const docTemplate = `{ } } }, + "resources": { + "type": "object", + "properties": { + "max_cpu_usage": { + "type": "number" + }, + "max_memory_usage": { + "type": "number" + } + } + }, "router": { "type": "object", "properties": { @@ -3707,6 +3719,9 @@ const docTemplate = `{ }, "max": { "type": "number" + }, + "ncpu": { + "type": "number" } } }, @@ -4498,6 +4513,7 @@ const docTemplate = `{ "type": "boolean" }, "force_gc": { + "description": "deprecated, use MemoryLimit instead", "type": "integer", "format": "int" }, @@ -4660,6 +4676,17 @@ const docTemplate = `{ } } }, + "resources": { + "type": "object", + "properties": { + "max_cpu_usage": { + "type": "number" + }, + "max_memory_usage": { + "type": "number" + } + } + }, "router": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index 422bf784..bf9b3e7d 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -2472,6 +2472,7 @@ "type": "boolean" }, "force_gc": { + "description": "deprecated, use MemoryLimit instead", "type": "integer", "format": "int" }, @@ -2634,6 +2635,17 @@ } } }, + "resources": { + "type": "object", + "properties": { + "max_cpu_usage": { + "type": "number" + }, + "max_memory_usage": { + "type": "number" + } + } + }, "router": { "type": "object", "properties": { @@ -3700,6 +3712,9 @@ }, "max": { "type": "number" + }, + "ncpu": { + "type": "number" } } }, @@ -4491,6 +4506,7 @@ "type": "boolean" }, "force_gc": { + "description": "deprecated, use MemoryLimit instead", "type": "integer", "format": "int" }, @@ -4653,6 +4669,17 @@ } } }, + "resources": { + "type": "object", + "properties": { + "max_cpu_usage": { + "type": "number" + }, + "max_memory_usage": { + "type": "number" + } + } + }, "router": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 31d81087..8b4ac91f 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -146,6 +146,7 @@ definitions: auto_max_procs: type: boolean force_gc: + description: deprecated, use MemoryLimit instead format: int type: integer memory_limit_mbytes: @@ -256,6 +257,13 @@ definitions: format: int type: integer type: object + resources: + properties: + max_cpu_usage: + type: number + max_memory_usage: + type: number + type: object router: properties: blocked_prefixes: @@ -974,6 +982,8 @@ definitions: type: number max: type: number + ncpu: + type: number type: object api.ProcessUsageMemory: properties: @@ -1575,6 +1585,7 @@ definitions: auto_max_procs: type: boolean force_gc: + description: deprecated, use MemoryLimit instead format: int type: integer memory_limit_mbytes: @@ -1685,6 +1696,13 @@ definitions: format: int type: integer type: object + resources: + properties: + max_cpu_usage: + type: number + max_memory_usage: + type: number + type: object router: properties: blocked_prefixes: diff --git a/ffmpeg/parse/parser.go b/ffmpeg/parse/parser.go index f18aa335..66bf02b7 100644 --- a/ffmpeg/parse/parser.go +++ b/ffmpeg/parse/parser.go @@ -573,6 +573,7 @@ func (p *parser) parseAVstreamProgress(line string) error { func (p *parser) Stop(state string, pusage process.Usage) { usage := Usage{} + usage.CPU.NCPU = pusage.CPU.NCPU usage.CPU.Average = pusage.CPU.Average usage.CPU.Max = pusage.CPU.Max usage.CPU.Limit = pusage.CPU.Limit diff --git a/ffmpeg/parse/types.go b/ffmpeg/parse/types.go index b19dff8a..18d4464f 100644 --- a/ffmpeg/parse/types.go +++ b/ffmpeg/parse/types.go @@ -324,6 +324,7 @@ type AVstream struct { type Usage struct { CPU struct { + NCPU float64 Average float64 Max float64 Limit float64 diff --git a/http/api/process.go b/http/api/process.go index b73238aa..79531fe1 100644 --- a/http/api/process.go +++ b/http/api/process.go @@ -229,6 +229,7 @@ func (s *ProcessState) Unmarshal(state *app.State) { s.Memory = state.Memory s.CPU = toNumber(state.CPU) s.Resources.CPU = ProcessUsageCPU{ + NCPU: toNumber(state.Resources.CPU.NCPU), Current: toNumber(state.Resources.CPU.Current), Average: toNumber(state.Resources.CPU.Average), Max: toNumber(state.Resources.CPU.Max), @@ -246,6 +247,7 @@ func (s *ProcessState) Unmarshal(state *app.State) { } type ProcessUsageCPU struct { + NCPU json.Number `json:"ncpu" swaggertype:"number" jsonschema:"type=number"` Current json.Number `json:"cur" swaggertype:"number" jsonschema:"type=number"` Average json.Number `json:"avg" swaggertype:"number" jsonschema:"type=number"` Max json.Number `json:"max" swaggertype:"number" jsonschema:"type=number"` diff --git a/http/api/report.go b/http/api/report.go index 19168da8..7d683d45 100644 --- a/http/api/report.go +++ b/http/api/report.go @@ -55,6 +55,7 @@ func (report *ProcessReport) Unmarshal(l *app.Log) { ExitState: h.ExitState, Resources: &ProcessUsage{ CPU: ProcessUsageCPU{ + NCPU: toNumber(h.Usage.CPU.NCPU), Average: toNumber(h.Usage.CPU.Average), Max: toNumber(h.Usage.CPU.Max), Limit: toNumber(h.Usage.CPU.Limit), diff --git a/process/process.go b/process/process.go index 791bc00d..847e340f 100644 --- a/process/process.go +++ b/process/process.go @@ -81,6 +81,7 @@ type Status struct { Time time.Time // Time is the time of the last change of the state CommandArgs []string // Currently running command arguments CPU struct { + NCPU float64 // Number of logical CPUs Current float64 // Currently consumed CPU in percent Average float64 // Average consumed CPU in percent Max float64 // Max. consumed CPU in percent @@ -432,14 +433,10 @@ func (p *process) Status() Status { Reconnect: time.Duration(-1), Duration: time.Since(stateTime), Time: stateTime, + CPU: usage.CPU, Memory: usage.Memory, } - s.CPU.Current = usage.CPU.Current - s.CPU.Average = usage.CPU.Average - s.CPU.Max = usage.CPU.Max - s.CPU.Limit = usage.CPU.Limit - s.CommandArgs = make([]string, len(p.args)) copy(s.CommandArgs, p.args) diff --git a/restream/app/process.go b/restream/app/process.go index b1c30a0c..7bfef3be 100644 --- a/restream/app/process.go +++ b/restream/app/process.go @@ -165,10 +165,11 @@ type State struct { } type ProcessUsageCPU struct { - Current float64 // percent 0-100 - Average float64 // percent 0-100 - Max float64 // percent 0-100 - Limit float64 // percent 0-100 + NCPU float64 // Number of logical CPUs + Current float64 // percent 0-100*ncpu + Average float64 // percent 0-100*ncpu + Max float64 // percent 0-100*ncpu + Limit float64 // percent 0-100*ncpu } type ProcessUsageMemory struct { diff --git a/restream/restream.go b/restream/restream.go index 719aab1e..e5c51d32 100644 --- a/restream/restream.go +++ b/restream/restream.go @@ -1409,7 +1409,7 @@ func (r *restream) GetProcessState(id string) (*app.State, error) { state.States.Marshal(status.States) state.Time = status.Time.Unix() state.Memory = status.Memory.Current - state.CPU = status.CPU.Current + state.CPU = status.CPU.Current / status.CPU.NCPU state.Resources.CPU = status.CPU state.Resources.Memory = status.Memory state.Duration = status.Duration.Round(10 * time.Millisecond).Seconds() @@ -1587,6 +1587,7 @@ func (r *restream) GetProcessLog(id string) (*app.Log, error) { ExitState: h.ExitState, Usage: app.ProcessUsage{ CPU: app.ProcessUsageCPU{ + NCPU: h.Usage.CPU.NCPU, Average: h.Usage.CPU.Average, Max: h.Usage.CPU.Max, Limit: h.Usage.CPU.Limit,