 5978a0b8f5
			
		
	
	5978a0b8f5
	
	
	
		
			
			- Agent roles and coordination features - Chat API integration testing - New configuration and workspace management 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			100 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
|    Copyright The containerd Authors.
 | |
| 
 | |
|    Licensed under the Apache License, Version 2.0 (the "License");
 | |
|    you may not use this file except in compliance with the License.
 | |
|    You may obtain a copy of the License at
 | |
| 
 | |
|        http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
|    Unless required by applicable law or agreed to in writing, software
 | |
|    distributed under the License is distributed on an "AS IS" BASIS,
 | |
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|    See the License for the specific language governing permissions and
 | |
|    limitations under the License.
 | |
| */
 | |
| 
 | |
| package cgroups
 | |
| 
 | |
| import (
 | |
| 	"os"
 | |
| 
 | |
| 	v1 "github.com/containerd/cgroups/stats/v1"
 | |
| 	specs "github.com/opencontainers/runtime-spec/specs-go"
 | |
| )
 | |
| 
 | |
| type procType = string
 | |
| 
 | |
| const (
 | |
| 	cgroupProcs    procType = "cgroup.procs"
 | |
| 	cgroupTasks    procType = "tasks"
 | |
| 	defaultDirPerm          = 0755
 | |
| )
 | |
| 
 | |
| // defaultFilePerm is a var so that the test framework can change the filemode
 | |
| // of all files created when the tests are running.  The difference between the
 | |
| // tests and real world use is that files like "cgroup.procs" will exist when writing
 | |
| // to a read cgroup filesystem and do not exist prior when running in the tests.
 | |
| // this is set to a non 0 value in the test code
 | |
| var defaultFilePerm = os.FileMode(0)
 | |
| 
 | |
| type Process struct {
 | |
| 	// Subsystem is the name of the subsystem that the process / task is in.
 | |
| 	Subsystem Name
 | |
| 	// Pid is the process id of the process / task.
 | |
| 	Pid int
 | |
| 	// Path is the full path of the subsystem and location that the process / task is in.
 | |
| 	Path string
 | |
| }
 | |
| 
 | |
| type Task = Process
 | |
| 
 | |
| // Cgroup handles interactions with the individual groups to perform
 | |
| // actions on them as them main interface to this cgroup package
 | |
| type Cgroup interface {
 | |
| 	// New creates a new cgroup under the calling cgroup
 | |
| 	New(string, *specs.LinuxResources) (Cgroup, error)
 | |
| 	// Add adds a process to the cgroup (cgroup.procs). Without additional arguments,
 | |
| 	// the process is added to all the cgroup subsystems. When giving Add a list of
 | |
| 	// subsystem names, the process is only added to those subsystems, provided that
 | |
| 	// they are active in the targeted cgroup.
 | |
| 	Add(Process, ...Name) error
 | |
| 	// AddProc adds the process with the given id to the cgroup (cgroup.procs).
 | |
| 	// Without additional arguments, the process with the given id is added to all
 | |
| 	// the cgroup subsystems. When giving AddProc a list of subsystem names, the process
 | |
| 	// id is only added to those subsystems, provided that they are active in the targeted
 | |
| 	// cgroup.
 | |
| 	AddProc(uint64, ...Name) error
 | |
| 	// AddTask adds a process to the cgroup (tasks). Without additional arguments, the
 | |
| 	// task is added to all the cgroup subsystems. When giving AddTask a list of subsystem
 | |
| 	// names, the task is only added to those subsystems, provided that they are active in
 | |
| 	// the targeted cgroup.
 | |
| 	AddTask(Process, ...Name) error
 | |
| 	// Delete removes the cgroup as a whole
 | |
| 	Delete() error
 | |
| 	// MoveTo moves all the processes under the calling cgroup to the provided one
 | |
| 	// subsystems are moved one at a time
 | |
| 	MoveTo(Cgroup) error
 | |
| 	// Stat returns the stats for all subsystems in the cgroup
 | |
| 	Stat(...ErrorHandler) (*v1.Metrics, error)
 | |
| 	// Update updates all the subsystems with the provided resource changes
 | |
| 	Update(resources *specs.LinuxResources) error
 | |
| 	// Processes returns all the processes in a select subsystem for the cgroup
 | |
| 	Processes(Name, bool) ([]Process, error)
 | |
| 	// Tasks returns all the tasks in a select subsystem for the cgroup
 | |
| 	Tasks(Name, bool) ([]Task, error)
 | |
| 	// Freeze freezes or pauses all processes inside the cgroup
 | |
| 	Freeze() error
 | |
| 	// Thaw thaw or resumes all processes inside the cgroup
 | |
| 	Thaw() error
 | |
| 	// OOMEventFD returns the memory subsystem's event fd for OOM events
 | |
| 	OOMEventFD() (uintptr, error)
 | |
| 	// RegisterMemoryEvent returns the memory subsystems event fd for whatever memory event was
 | |
| 	// registered for. Can alternatively register for the oom event with this method.
 | |
| 	RegisterMemoryEvent(MemoryEvent) (uintptr, error)
 | |
| 	// State returns the cgroups current state
 | |
| 	State() State
 | |
| 	// Subsystems returns all the subsystems in the cgroup
 | |
| 	Subsystems() []Subsystem
 | |
| }
 |