70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import { defineSchema, defineTable } from "convex/server";
|
|
import { v } from "convex/values";
|
|
|
|
export default defineSchema({
|
|
daemonDefinitions: defineTable({
|
|
daemonId: v.string(),
|
|
name: v.string(),
|
|
desiredState: v.union(v.literal("online"), v.literal("offline")),
|
|
agentOsConfig: v.any(),
|
|
configVersion: v.number(),
|
|
createdAt: v.number(),
|
|
updatedAt: v.number(),
|
|
}).index("by_daemonId", ["daemonId"]),
|
|
daemonPresence: defineTable({
|
|
daemonId: v.string(),
|
|
sessionId: v.string(),
|
|
status: v.union(
|
|
v.literal("online"),
|
|
v.literal("draining"),
|
|
v.literal("offline")
|
|
),
|
|
hostname: v.string(),
|
|
platform: v.string(),
|
|
architecture: v.string(),
|
|
version: v.string(),
|
|
startedAt: v.number(),
|
|
lastHeartbeatAt: v.number(),
|
|
})
|
|
.index("by_daemonId", ["daemonId"])
|
|
.index("by_sessionId", ["sessionId"]),
|
|
daemonCommands: defineTable({
|
|
daemonId: v.string(),
|
|
method: v.string(),
|
|
args: v.any(),
|
|
actorKey: v.array(v.string()),
|
|
status: v.union(
|
|
v.literal("queued"),
|
|
v.literal("claimed"),
|
|
v.literal("running"),
|
|
v.literal("succeeded"),
|
|
v.literal("failed"),
|
|
v.literal("cancelled")
|
|
),
|
|
attempts: v.number(),
|
|
claimedBySessionId: v.optional(v.string()),
|
|
leaseExpiresAt: v.optional(v.number()),
|
|
createdAt: v.number(),
|
|
updatedAt: v.number(),
|
|
startedAt: v.optional(v.number()),
|
|
completedAt: v.optional(v.number()),
|
|
result: v.optional(v.any()),
|
|
error: v.optional(v.string()),
|
|
})
|
|
.index("by_daemonId_and_status", ["daemonId", "status"])
|
|
.index("by_status_and_leaseExpiresAt", ["status", "leaseExpiresAt"]),
|
|
daemonCommandEvents: defineTable({
|
|
daemonId: v.string(),
|
|
commandId: v.optional(v.id("daemonCommands")),
|
|
kind: v.string(),
|
|
data: v.any(),
|
|
createdAt: v.number(),
|
|
})
|
|
.index("by_daemonId_and_createdAt", ["daemonId", "createdAt"])
|
|
.index("by_commandId_and_createdAt", ["commandId", "createdAt"]),
|
|
todos: defineTable({
|
|
text: v.string(),
|
|
completed: v.boolean(),
|
|
}),
|
|
});
|