yao/trace/types/events.go
Max 47a35b7e63 Refactor trace manager for improved state management and concurrency
- Replaced the previous node and space management with a channel-based state management system in `manager.go`, enhancing concurrency handling.
- Implemented methods for loading and saving trace updates to disk in `local/driver.go` and `store/driver.go`, allowing for persistent state across sessions.
- Updated subscription handling in `subscription.go` to streamline the process of broadcasting updates to active subscribers.
- Enhanced node and trace status management, including cancellation and completion states, to provide better control over trace execution.
- Adjusted related tests to ensure compatibility with the new state management approach.
2025-11-18 18:08:20 +08:00

97 lines
2.6 KiB
Go

package types
// Helper functions and methods to create event data
// ToStartData converts TraceNode to NodeStartData (single node)
func (n *TraceNode) ToStartData() *NodeStartData {
return &NodeStartData{Node: n}
}
// NodesToStartData creates NodeStartData for multiple nodes (parallel operations)
func NodesToStartData(nodes []*TraceNode) *NodeStartData {
return &NodeStartData{Nodes: nodes}
}
// ToCompleteData converts TraceNode to NodeCompleteData
func (n *TraceNode) ToCompleteData() *NodeCompleteData {
return &NodeCompleteData{
NodeID: n.ID,
Status: CompleteStatusSuccess,
EndTime: n.EndTime,
Duration: (n.EndTime - n.StartTime) * 1000, // Convert to milliseconds
Output: n.Output,
}
}
// ToFailedData converts TraceNode to NodeFailedData
func (n *TraceNode) ToFailedData(err error) *NodeFailedData {
return &NodeFailedData{
NodeID: n.ID,
Status: CompleteStatusFailed,
EndTime: n.EndTime,
Duration: (n.EndTime - n.StartTime) * 1000, // Convert to milliseconds
Error: err.Error(),
}
}
// ToMemoryAddData creates MemoryAddData for a space key-value operation
func (s *TraceSpace) ToMemoryAddData(key string, value any, timestamp int64) *MemoryAddData {
item := MemoryItem{
ID: key,
Type: s.ID, // Space ID as type
Content: value,
Timestamp: timestamp,
}
// Use Label as title if available
if s.Label != "" {
item.Title = s.Label
}
return &MemoryAddData{
Type: s.ID,
Item: item,
}
}
// NewTraceInitData creates init event data
func NewTraceInitData(traceID string, rootNode *TraceNode, agentName ...string) *TraceInitData {
data := &TraceInitData{
TraceID: traceID,
RootNode: rootNode,
}
if len(agentName) > 0 {
data.AgentName = agentName[0]
}
return data
}
// NewTraceCompleteData creates trace complete event data
func NewTraceCompleteData(traceID string, totalDuration int64) *TraceCompleteData {
return &TraceCompleteData{
TraceID: traceID,
Status: TraceStatusCompleted,
TotalDuration: totalDuration,
}
}
// NewSpaceDeletedData creates space deleted event data
func NewSpaceDeletedData(spaceID string) *SpaceDeletedData {
return &SpaceDeletedData{
SpaceID: spaceID,
}
}
// NewMemoryDeleteData creates memory delete event data (single key)
func NewMemoryDeleteData(spaceID, key string) *MemoryDeleteData {
return &MemoryDeleteData{
SpaceID: spaceID,
Key: key,
}
}
// NewMemoryDeleteAllData creates memory delete event data (all keys cleared)
func NewMemoryDeleteAllData(spaceID string) *MemoryDeleteData {
return &MemoryDeleteData{
SpaceID: spaceID,
Cleared: true,
}
}