b98a362de5
Behavioral changes: - postgres_db: reorder default processors (cut first), prevent overwriting completed status - qdrant_db: fix scroll pagination exit condition (next.is_none()) - job_worker: add idempotency guards for face trace / TKG build; better error logging - main.rs: add LineWriter for stdout buffering Remaining diff is cargo fmt reformatting (line wrapping, import ordering).
106 lines
3.2 KiB
Rust
106 lines
3.2 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct TkgOperationLog {
|
|
pub id: i64,
|
|
pub file_uuid: String,
|
|
pub operation: String,
|
|
pub node_type: Option<String>,
|
|
pub edge_type: Option<String>,
|
|
pub nodes_created: i32,
|
|
pub nodes_updated: i32,
|
|
pub nodes_deleted: i32,
|
|
pub edges_created: i32,
|
|
pub edges_updated: i32,
|
|
pub edges_deleted: i32,
|
|
pub status: String,
|
|
pub error_message: Option<String>,
|
|
pub started_at: String,
|
|
pub completed_at: Option<String>,
|
|
pub properties: Option<serde_json::Value>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Default)]
|
|
pub struct TkgNodeStats {
|
|
pub created: i32,
|
|
pub updated: i32,
|
|
pub deleted: i32,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Default)]
|
|
pub struct TkgEdgeStats {
|
|
pub created: i32,
|
|
pub updated: i32,
|
|
pub deleted: i32,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Default)]
|
|
pub struct TkgBuildStats {
|
|
pub face_track_nodes: i32,
|
|
pub gaze_track_nodes: i32,
|
|
pub lip_track_nodes: i32,
|
|
pub text_region_nodes: i32,
|
|
pub appearance_trace_nodes: i32,
|
|
pub accessory_nodes: i32,
|
|
pub object_nodes: i32,
|
|
pub hand_nodes: i32,
|
|
pub speaker_nodes: i32,
|
|
pub co_occurrence_edges: i32,
|
|
pub speaker_face_edges: i32,
|
|
pub face_face_edges: i32,
|
|
pub mutual_gaze_edges: i32,
|
|
pub lip_sync_edges: i32,
|
|
pub has_appearance_edges: i32,
|
|
pub wears_edges: i32,
|
|
pub hand_object_edges: i32,
|
|
}
|
|
|
|
impl TkgBuildStats {
|
|
pub fn total_nodes(&self) -> i32 {
|
|
self.face_track_nodes
|
|
+ self.gaze_track_nodes
|
|
+ self.lip_track_nodes
|
|
+ self.text_region_nodes
|
|
+ self.appearance_trace_nodes
|
|
+ self.accessory_nodes
|
|
+ self.object_nodes
|
|
+ self.hand_nodes
|
|
+ self.speaker_nodes
|
|
}
|
|
|
|
pub fn total_edges(&self) -> i32 {
|
|
self.co_occurrence_edges
|
|
+ self.speaker_face_edges
|
|
+ self.face_face_edges
|
|
+ self.mutual_gaze_edges
|
|
+ self.lip_sync_edges
|
|
+ self.has_appearance_edges
|
|
+ self.wears_edges
|
|
+ self.hand_object_edges
|
|
}
|
|
|
|
pub fn to_json(&self) -> serde_json::Value {
|
|
serde_json::json!({
|
|
"face_track_nodes": self.face_track_nodes,
|
|
"gaze_track_nodes": self.gaze_track_nodes,
|
|
"lip_track_nodes": self.lip_track_nodes,
|
|
"text_region_nodes": self.text_region_nodes,
|
|
"appearance_trace_nodes": self.appearance_trace_nodes,
|
|
"accessory_nodes": self.accessory_nodes,
|
|
"object_nodes": self.object_nodes,
|
|
"hand_nodes": self.hand_nodes,
|
|
"speaker_nodes": self.speaker_nodes,
|
|
"co_occurrence_edges": self.co_occurrence_edges,
|
|
"speaker_face_edges": self.speaker_face_edges,
|
|
"face_face_edges": self.face_face_edges,
|
|
"mutual_gaze_edges": self.mutual_gaze_edges,
|
|
"lip_sync_edges": self.lip_sync_edges,
|
|
"has_appearance_edges": self.has_appearance_edges,
|
|
"wears_edges": self.wears_edges,
|
|
"hand_object_edges": self.hand_object_edges,
|
|
"total_nodes": self.total_nodes(),
|
|
"total_edges": self.total_edges(),
|
|
})
|
|
}
|
|
}
|