gadget/gadget-code/src/models/drone-monitor.ts
Rob Colbert cc6d3b901a refactor gadget-code model interfaces to @gadget/api
Moved all Mongoose model interfaces to @gadget/api to commonize the data
structures being passed around the system as JSON objects via HTTP and
Socket.IO.
2026-04-28 12:42:32 -04:00

45 lines
1.4 KiB
TypeScript

// src/models/drone-monitor.ts
// Copyright (C) 2026 Robert Colbert <rob.colbert@openplatform.us>
// All Rights Reserved
import { Types, Schema, model } from "mongoose";
import { IDroneMonitor, IMemoryMonitor } from "@gadget/api";
export const MemoryMonitorSchema = new Schema<IMemoryMonitor>({
count: { type: Number, default: 0, required: true },
bytes: { type: Number, default: 0, required: true },
});
export const DroneMonitorSchema = new Schema<IDroneMonitor>({
registration: { type: Types.ObjectId, required: true, index: 1 },
timestamp: { type: Date, required: true, index: -1 },
memory: {
rss: { type: Number, required: true },
v8: {
heapTotal: { type: Number, required: true },
heapUsed: { type: Number, required: true },
heapExternal: { type: Number, required: true, default: 0 },
},
os: {
total: { type: Number, required: true },
free: { type: Number, required: true },
},
ai: {
subagents: { type: MemoryMonitorSchema, required: true },
fileOperations: { type: MemoryMonitorSchema, required: true },
toolCalls: { type: MemoryMonitorSchema, required: true },
},
logs: { type: MemoryMonitorSchema, required: true },
},
});
export const DroneMonitor = model<IDroneMonitor>(
"DroneMonitor",
DroneMonitorSchema,
);
export default DroneMonitor;
(async () => {
await DroneMonitor.syncIndexes();
})();