mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package process
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
// Context is a wrapper around context.Context and contains the current pid for this context
|
|
type Context struct {
|
|
context.Context
|
|
pid IDType
|
|
}
|
|
|
|
// GetPID returns the PID for this context
|
|
func (c *Context) GetPID() IDType {
|
|
return c.pid
|
|
}
|
|
|
|
// GetParent returns the parent process context (if any)
|
|
func (c *Context) GetParent() *Context {
|
|
return GetContext(c.Context)
|
|
}
|
|
|
|
// Value is part of the interface for context.Context. We mostly defer to the internal context - but we return this in response to the ProcessContextKey
|
|
func (c *Context) Value(key any) any {
|
|
if key == ProcessContextKey {
|
|
return c
|
|
}
|
|
return c.Context.Value(key)
|
|
}
|
|
|
|
// ProcessContextKey is the key under which process contexts are stored
|
|
var ProcessContextKey any = "process_context"
|
|
|
|
// GetContext will return a process context if one exists
|
|
func GetContext(ctx context.Context) *Context {
|
|
if pCtx, ok := ctx.(*Context); ok {
|
|
return pCtx
|
|
}
|
|
pCtxInterface := ctx.Value(ProcessContextKey)
|
|
if pCtxInterface == nil {
|
|
return nil
|
|
}
|
|
if pCtx, ok := pCtxInterface.(*Context); ok {
|
|
return pCtx
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetPID returns the PID for this context
|
|
func GetPID(ctx context.Context) IDType {
|
|
pCtx := GetContext(ctx)
|
|
if pCtx == nil {
|
|
return ""
|
|
}
|
|
return pCtx.GetPID()
|
|
}
|
|
|
|
// GetParentPID returns the ParentPID for this context
|
|
func GetParentPID(ctx context.Context) IDType {
|
|
var parentPID IDType
|
|
if parentProcess := GetContext(ctx); parentProcess != nil {
|
|
parentPID = parentProcess.GetPID()
|
|
}
|
|
return parentPID
|
|
}
|