diff --git a/.gitignore b/.gitignore index a540450..160d9e6 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ lerna-debug.log* *.swo *~ dist/* - -# local env (contains API keys) + +# local env (contains API keys) /.env +.reasonix/* \ No newline at end of file diff --git a/generated/prisma/browser.ts b/generated/prisma/browser.ts index 3212bb9..94120b6 100644 --- a/generated/prisma/browser.ts +++ b/generated/prisma/browser.ts @@ -52,6 +52,21 @@ export type News = Prisma.NewsModel * */ export type Alert = Prisma.AlertModel +/** + * Model ServerNode + * + */ +export type ServerNode = Prisma.ServerNodeModel +/** + * Model ServerNodeHistory + * + */ +export type ServerNodeHistory = Prisma.ServerNodeHistoryModel +/** + * Model ServiceCheck + * + */ +export type ServiceCheck = Prisma.ServiceCheckModel /** * Model Econ_SowInventory * diff --git a/generated/prisma/client.ts b/generated/prisma/client.ts index 1786db5..b6057bb 100644 --- a/generated/prisma/client.ts +++ b/generated/prisma/client.ts @@ -76,6 +76,21 @@ export type News = Prisma.NewsModel * */ export type Alert = Prisma.AlertModel +/** + * Model ServerNode + * + */ +export type ServerNode = Prisma.ServerNodeModel +/** + * Model ServerNodeHistory + * + */ +export type ServerNodeHistory = Prisma.ServerNodeHistoryModel +/** + * Model ServiceCheck + * + */ +export type ServiceCheck = Prisma.ServiceCheckModel /** * Model Econ_SowInventory * diff --git a/generated/prisma/commonInputTypes.ts b/generated/prisma/commonInputTypes.ts index ad63da1..8eadb9c 100644 --- a/generated/prisma/commonInputTypes.ts +++ b/generated/prisma/commonInputTypes.ts @@ -205,6 +205,56 @@ export type StringNullableFilter<$PrismaModel = never> = { not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null } +export type SortOrderInput = { + sort: Prisma.SortOrder + nulls?: Prisma.NullsOrder +} + +export type StringNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null + in?: string[] | null + notIn?: string[] | null + lt?: string | Prisma.StringFieldRefInput<$PrismaModel> + lte?: string | Prisma.StringFieldRefInput<$PrismaModel> + gt?: string | Prisma.StringFieldRefInput<$PrismaModel> + gte?: string | Prisma.StringFieldRefInput<$PrismaModel> + contains?: string | Prisma.StringFieldRefInput<$PrismaModel> + startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel> + endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel> + search?: string + not?: Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null + _count?: Prisma.NestedIntNullableFilter<$PrismaModel> + _min?: Prisma.NestedStringNullableFilter<$PrismaModel> + _max?: Prisma.NestedStringNullableFilter<$PrismaModel> +} + +export type BigIntFilter<$PrismaModel = never> = { + equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + in?: bigint[] | number[] + notIn?: bigint[] | number[] + lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + gte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + not?: Prisma.NestedBigIntFilter<$PrismaModel> | bigint | number +} + +export type BigIntWithAggregatesFilter<$PrismaModel = never> = { + equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + in?: bigint[] | number[] + notIn?: bigint[] | number[] + lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + gte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + not?: Prisma.NestedBigIntWithAggregatesFilter<$PrismaModel> | bigint | number + _count?: Prisma.NestedIntFilter<$PrismaModel> + _avg?: Prisma.NestedFloatFilter<$PrismaModel> + _sum?: Prisma.NestedBigIntFilter<$PrismaModel> + _min?: Prisma.NestedBigIntFilter<$PrismaModel> + _max?: Prisma.NestedBigIntFilter<$PrismaModel> +} + export type JsonNullableFilter<$PrismaModel = never> = | Prisma.PatchUndefined< Prisma.Either>, Exclude>, 'path'>>, @@ -229,29 +279,6 @@ export type JsonNullableFilterBase<$PrismaModel = never> = { not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter } -export type SortOrderInput = { - sort: Prisma.SortOrder - nulls?: Prisma.NullsOrder -} - -export type StringNullableWithAggregatesFilter<$PrismaModel = never> = { - equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null - in?: string[] | null - notIn?: string[] | null - lt?: string | Prisma.StringFieldRefInput<$PrismaModel> - lte?: string | Prisma.StringFieldRefInput<$PrismaModel> - gt?: string | Prisma.StringFieldRefInput<$PrismaModel> - gte?: string | Prisma.StringFieldRefInput<$PrismaModel> - contains?: string | Prisma.StringFieldRefInput<$PrismaModel> - startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel> - endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel> - search?: string - not?: Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null - _count?: Prisma.NestedIntNullableFilter<$PrismaModel> - _min?: Prisma.NestedStringNullableFilter<$PrismaModel> - _max?: Prisma.NestedStringNullableFilter<$PrismaModel> -} - export type JsonNullableWithAggregatesFilter<$PrismaModel = never> = | Prisma.PatchUndefined< Prisma.Either>, Exclude>, 'path'>>, @@ -472,6 +499,33 @@ export type NestedIntNullableFilter<$PrismaModel = never> = { not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null } +export type NestedBigIntFilter<$PrismaModel = never> = { + equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + in?: bigint[] | number[] + notIn?: bigint[] | number[] + lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + gte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + not?: Prisma.NestedBigIntFilter<$PrismaModel> | bigint | number +} + +export type NestedBigIntWithAggregatesFilter<$PrismaModel = never> = { + equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + in?: bigint[] | number[] + notIn?: bigint[] | number[] + lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + gte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel> + not?: Prisma.NestedBigIntWithAggregatesFilter<$PrismaModel> | bigint | number + _count?: Prisma.NestedIntFilter<$PrismaModel> + _avg?: Prisma.NestedFloatFilter<$PrismaModel> + _sum?: Prisma.NestedBigIntFilter<$PrismaModel> + _min?: Prisma.NestedBigIntFilter<$PrismaModel> + _max?: Prisma.NestedBigIntFilter<$PrismaModel> +} + export type NestedJsonNullableFilter<$PrismaModel = never> = | Prisma.PatchUndefined< Prisma.Either>, Exclude>, 'path'>>, diff --git a/generated/prisma/internal/class.ts b/generated/prisma/internal/class.ts index 19bd89a..1076c79 100644 --- a/generated/prisma/internal/class.ts +++ b/generated/prisma/internal/class.ts @@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = { "clientVersion": "7.7.0", "engineVersion": "75cbdc1eb7150937890ad5465d861175c6624711", "activeProvider": "mysql", - "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Get a free hosted Postgres database in seconds: `npx create-db`\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"mysql\"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n name String\n email String @unique\n password String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Article {\n id Int @id @default(autoincrement())\n title String\n slug String @unique\n content String\n date String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Strategy {\n id Int @id @default(autoincrement())\n name String\n description String\n data Json\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Indicator {\n id Int @id @default(autoincrement())\n name String @unique\n groupName String\n title String @default(\"\")\n unit String @default(\"\")\n source String @default(\"\")\n frequency String @default(\"month\") // year | quarter | month | day\n hidden Boolean @default(false) // true = 数据/脚本保留, 但不在前端展示\n points IndicatorPoint[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel IndicatorPoint {\n id Int @id @default(autoincrement())\n indicatorId Int\n indicator Indicator @relation(fields: [indicatorId], references: [id], onDelete: Cascade)\n period String // \"2024\" | \"2024-Q1\" | \"2024-01\" | \"2024-01-15\"\n value Float\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([indicatorId, period])\n}\n\n// 新闻: 每天 3 点由 mx_finance_search_news 拉取, 按影响大小排序, 累加多日供首页无限滚动\nmodel News {\n id Int @id @default(autoincrement())\n title String\n summary String @default(\"\")\n source String @default(\"\")\n url String @default(\"\")\n publishedAt DateTime\n impactRank Int\n createdAt DateTime @default(now())\n\n @@unique([title, publishedAt])\n @@index([publishedAt])\n}\n\n// 报警: refresh 写库时比对同 (indicatorName, period) 的跨源数据, 差异超阈值记录\nmodel Alert {\n id Int @id @default(autoincrement())\n indicatorName String\n period String\n valueA Float\n valueB Float\n sourceA String\n sourceB String\n diff Float\n diffRatio Float\n createdAt DateTime @default(now())\n\n @@index([createdAt])\n}\n\nmodel Econ_SowInventory {\n id Int @id @default(autoincrement())\n month String @unique\n inventory Int // 能繁母猪数量(万头)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel ScraperCache {\n id Int @id @default(autoincrement())\n scraperName String @unique // 爬虫名称,如:sow-inventory\n lastDataHash String? // 上次数据指纹\n lastUpdateAt DateTime // 上次更新时间\n metadata Json? // 其他元数据\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", + "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Get a free hosted Postgres database in seconds: `npx create-db`\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"mysql\"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n name String\n email String @unique\n password String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Article {\n id Int @id @default(autoincrement())\n title String\n slug String @unique\n content String\n date String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Strategy {\n id Int @id @default(autoincrement())\n name String\n description String\n data Json\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Indicator {\n id Int @id @default(autoincrement())\n name String @unique\n groupName String\n title String @default(\"\")\n unit String @default(\"\")\n source String @default(\"\")\n frequency String @default(\"month\") // year | quarter | month | day\n hidden Boolean @default(false) // true = 数据/脚本保留, 但不在前端展示\n points IndicatorPoint[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel IndicatorPoint {\n id Int @id @default(autoincrement())\n indicatorId Int\n indicator Indicator @relation(fields: [indicatorId], references: [id], onDelete: Cascade)\n period String // \"2024\" | \"2024-Q1\" | \"2024-01\" | \"2024-01-15\"\n value Float\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([indicatorId, period])\n}\n\n// 新闻: 每天 3 点由 mx_finance_search_news 拉取, 按影响大小排序, 累加多日供首页无限滚动\nmodel News {\n id Int @id @default(autoincrement())\n title String\n summary String @default(\"\")\n content String? @db.Text\n source String @default(\"\")\n url String @default(\"\")\n publishedAt DateTime\n impactRank Int\n createdAt DateTime @default(now())\n\n @@unique([title, publishedAt])\n @@index([publishedAt])\n}\n\n// 报警: refresh 写库时比对同 (indicatorName, period) 的跨源数据, 差异超阈值记录\nmodel Alert {\n id Int @id @default(autoincrement())\n indicatorName String\n period String\n valueA Float\n valueB Float\n sourceA String\n sourceB String\n diff Float\n diffRatio Float\n createdAt DateTime @default(now())\n\n @@index([createdAt])\n}\n\n// 服务器监控: 对接 komari 公开 API\nmodel ServerNode {\n id Int @id @default(autoincrement())\n uuid String @unique\n name String\n cpuName String @default(\"\")\n os String @default(\"\")\n region String @default(\"\")\n memTotal BigInt @default(0)\n diskTotal BigInt @default(0)\n cpuCores Int @default(0)\n // 最新实时快照\n cpuUsage Float @default(0)\n ramUsed BigInt @default(0)\n swapUsed BigInt @default(0)\n load1 Float @default(0)\n load5 Float @default(0)\n load15 Float @default(0)\n diskUsed BigInt @default(0)\n netIn BigInt @default(0)\n netOut BigInt @default(0)\n uptime BigInt @default(0)\n process Int @default(0)\n connections Int @default(0)\n status String @default(\"unknown\") // online | offline | unknown\n recordedAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// 时序历史: 每节点每分钟一条 (komari records 1 分钟粒度)\nmodel ServerNodeHistory {\n id Int @id @default(autoincrement())\n uuid String\n period DateTime\n cpu Float @default(0)\n ram BigInt @default(0)\n load Float @default(0)\n disk BigInt @default(0)\n netIn BigInt @default(0)\n netOut BigInt @default(0)\n process Int @default(0)\n connections Int @default(0)\n createdAt DateTime @default(now())\n\n @@unique([uuid, period])\n @@index([uuid, period])\n}\n\n// 服务健康检查: 本应用自检 (健康端点 / DB / 第三方)\nmodel ServiceCheck {\n id Int @id @default(autoincrement())\n name String @unique\n url String\n status String @default(\"unknown\") // up | down | unknown\n latencyMs Int @default(0)\n message String @default(\"\")\n lastCheckAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Econ_SowInventory {\n id Int @id @default(autoincrement())\n month String @unique\n inventory Int // 能繁母猪数量(万头)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel ScraperCache {\n id Int @id @default(autoincrement())\n scraperName String @unique // 爬虫名称,如:sow-inventory\n lastDataHash String? // 上次数据指纹\n lastUpdateAt DateTime // 上次更新时间\n metadata Json? // 其他元数据\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n", "runtimeDataModel": { "models": {}, "enums": {}, @@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = { } } -config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Article\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Strategy\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Indicator\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"unit\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"frequency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"hidden\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"points\",\"kind\":\"object\",\"type\":\"IndicatorPoint\",\"relationName\":\"IndicatorToIndicatorPoint\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"IndicatorPoint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicatorId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicator\",\"kind\":\"object\",\"type\":\"Indicator\",\"relationName\":\"IndicatorToIndicatorPoint\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"News\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"publishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"impactRank\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Alert\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicatorName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"valueA\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"valueB\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"sourceA\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sourceB\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"diff\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"diffRatio\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Econ_SowInventory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"month\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"inventory\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ScraperCache\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"scraperName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastDataHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastUpdateAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Article\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Strategy\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Indicator\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"unit\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"frequency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"hidden\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"points\",\"kind\":\"object\",\"type\":\"IndicatorPoint\",\"relationName\":\"IndicatorToIndicatorPoint\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"IndicatorPoint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicatorId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicator\",\"kind\":\"object\",\"type\":\"Indicator\",\"relationName\":\"IndicatorToIndicatorPoint\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"News\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"publishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"impactRank\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Alert\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicatorName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"valueA\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"valueB\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"sourceA\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sourceB\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"diff\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"diffRatio\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServerNode\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"uuid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cpuName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"os\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"region\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"memTotal\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"diskTotal\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"cpuCores\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cpuUsage\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"ramUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"swapUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"load1\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"load5\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"load15\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"diskUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netIn\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netOut\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"uptime\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"process\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"connections\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"recordedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServerNodeHistory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"uuid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"cpu\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"ram\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"load\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"disk\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netIn\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netOut\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"process\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"connections\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServiceCheck\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latencyMs\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"message\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastCheckAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Econ_SowInventory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"month\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"inventory\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ScraperCache\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"scraperName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastDataHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastUpdateAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.updateOne\",\"User.updateMany\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Article.findUnique\",\"Article.findUniqueOrThrow\",\"Article.findFirst\",\"Article.findFirstOrThrow\",\"Article.findMany\",\"Article.createOne\",\"Article.createMany\",\"Article.updateOne\",\"Article.updateMany\",\"Article.upsertOne\",\"Article.deleteOne\",\"Article.deleteMany\",\"Article.groupBy\",\"Article.aggregate\",\"Strategy.findUnique\",\"Strategy.findUniqueOrThrow\",\"Strategy.findFirst\",\"Strategy.findFirstOrThrow\",\"Strategy.findMany\",\"Strategy.createOne\",\"Strategy.createMany\",\"Strategy.updateOne\",\"Strategy.updateMany\",\"Strategy.upsertOne\",\"Strategy.deleteOne\",\"Strategy.deleteMany\",\"Strategy.groupBy\",\"Strategy.aggregate\",\"indicator\",\"points\",\"Indicator.findUnique\",\"Indicator.findUniqueOrThrow\",\"Indicator.findFirst\",\"Indicator.findFirstOrThrow\",\"Indicator.findMany\",\"Indicator.createOne\",\"Indicator.createMany\",\"Indicator.updateOne\",\"Indicator.updateMany\",\"Indicator.upsertOne\",\"Indicator.deleteOne\",\"Indicator.deleteMany\",\"Indicator.groupBy\",\"Indicator.aggregate\",\"IndicatorPoint.findUnique\",\"IndicatorPoint.findUniqueOrThrow\",\"IndicatorPoint.findFirst\",\"IndicatorPoint.findFirstOrThrow\",\"IndicatorPoint.findMany\",\"IndicatorPoint.createOne\",\"IndicatorPoint.createMany\",\"IndicatorPoint.updateOne\",\"IndicatorPoint.updateMany\",\"IndicatorPoint.upsertOne\",\"IndicatorPoint.deleteOne\",\"IndicatorPoint.deleteMany\",\"IndicatorPoint.groupBy\",\"IndicatorPoint.aggregate\",\"News.findUnique\",\"News.findUniqueOrThrow\",\"News.findFirst\",\"News.findFirstOrThrow\",\"News.findMany\",\"News.createOne\",\"News.createMany\",\"News.updateOne\",\"News.updateMany\",\"News.upsertOne\",\"News.deleteOne\",\"News.deleteMany\",\"News.groupBy\",\"News.aggregate\",\"Alert.findUnique\",\"Alert.findUniqueOrThrow\",\"Alert.findFirst\",\"Alert.findFirstOrThrow\",\"Alert.findMany\",\"Alert.createOne\",\"Alert.createMany\",\"Alert.updateOne\",\"Alert.updateMany\",\"Alert.upsertOne\",\"Alert.deleteOne\",\"Alert.deleteMany\",\"Alert.groupBy\",\"Alert.aggregate\",\"Econ_SowInventory.findUnique\",\"Econ_SowInventory.findUniqueOrThrow\",\"Econ_SowInventory.findFirst\",\"Econ_SowInventory.findFirstOrThrow\",\"Econ_SowInventory.findMany\",\"Econ_SowInventory.createOne\",\"Econ_SowInventory.createMany\",\"Econ_SowInventory.updateOne\",\"Econ_SowInventory.updateMany\",\"Econ_SowInventory.upsertOne\",\"Econ_SowInventory.deleteOne\",\"Econ_SowInventory.deleteMany\",\"Econ_SowInventory.groupBy\",\"Econ_SowInventory.aggregate\",\"ScraperCache.findUnique\",\"ScraperCache.findUniqueOrThrow\",\"ScraperCache.findFirst\",\"ScraperCache.findFirstOrThrow\",\"ScraperCache.findMany\",\"ScraperCache.createOne\",\"ScraperCache.createMany\",\"ScraperCache.updateOne\",\"ScraperCache.updateMany\",\"ScraperCache.upsertOne\",\"ScraperCache.deleteOne\",\"ScraperCache.deleteMany\",\"ScraperCache.groupBy\",\"ScraperCache.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"scraperName\",\"lastDataHash\",\"lastUpdateAt\",\"metadata\",\"createdAt\",\"updatedAt\",\"equals\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"in\",\"notIn\",\"contains\",\"startsWith\",\"endsWith\",\"search\",\"month\",\"inventory\",\"indicatorName\",\"period\",\"valueA\",\"valueB\",\"sourceA\",\"sourceB\",\"diff\",\"diffRatio\",\"title\",\"summary\",\"source\",\"url\",\"publishedAt\",\"impactRank\",\"title_publishedAt\",\"indicatorId\",\"value\",\"name\",\"groupName\",\"unit\",\"frequency\",\"hidden\",\"every\",\"some\",\"none\",\"indicatorId_period\",\"description\",\"slug\",\"content\",\"date\",\"email\",\"password\",\"is\",\"isNot\",\"_relevance\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "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_AQAgjAEAAP4BADCNAQAAQwAQjgEAAP4BADCPAQIA0wEAIZQBQADWAQAhlQFAANYBACG7AQEA1AEAIcQBAQDUAQAhAwAAADIAIAMAAEIAMBIAAEMAIAMAAAAyACADAAAzADAEAAAvACAONwAA-gEAIIwBAAD4AQAwjQEAAE4AEI4BAAD4AQAwjwECAAAAAZQBQADnAQAhlQFAAOcBACGyAQEA5QEAIbQBAQDlAQAhuwEBAAAAAbwBAQDlAQAhvQEBAOUBACG-AQEA5QEAIb8BIAD5AQAhAQAAAEYAIAo2AAD9AQAgjAEAAPwBADCNAQAASAAQjgEAAPwBADCPAQIA5AEAIZQBQADnAQAhlQFAAOcBACGrAQEA5QEAIbkBAgDkAQAhugEIAO8BACECNgAAwgIAIMwBAADDAgAgCzYAAP0BACCMAQAA_AEAMI0BAABIABCOAQAA_AEAMI8BAgAAAAGUAUAA5wEAIZUBQADnAQAhqwEBAOUBACG5AQIA5AEAIboBCADvAQAhwwEAAPsBACADAAAASAAgAwAASQAwBAAASgAgAQAAAEgAIAEAAABGACAONwAA-gEAIIwBAAD4AQAwjQEAAE4AEI4BAAD4AQAwjwECAOQBACGUAUAA5wEAIZUBQADnAQAhsgEBAOUBACG0AQEA5QEAIbsBAQDlAQAhvAEBAOUBACG9AQEA5QEAIb4BAQDlAQAhvwEgAPkBACECNwAAwAIAIMwBAADBAgAgAwAAAE4AIAMAAE8AMAQAAEYAIAMAAABOACADAABPADAEAABGACADAAAATgAgAwAATwAwBAAARgAgCzcAAL8CACCPAQIAAAABlAFAAAAAAZUBQAAAAAGyAQEAAAABtAEBAAAAAbsBAQAAAAG8AQEAAAABvQEBAAAAAb4BAQAAAAG_ASAAAAABAQgAAFMAIAqPAQIAAAABlAFAAAAAAZUBQAAAAAGyAQEAAAABtAEBAAAAAbsBAQAAAAG8AQEAAAABvQEBAAAAAb4BAQAAAAG_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_AQAwBAAAuwEAIAMAAAC-AQAgAwAAvwEAMAQAALsBACAHjwECAAAAAZABAQAAAAGRAQEAAAABkgFAAAAAAZMBgAAAAAGUAUAAAAABlQFAAAAAAQEIAADDAQAgB48BAgAAAAGQAQEAAAABkQEBAAAAAZIBQAAAAAGTAYAAAAABlAFAAAAAAZUBQAAAAAEBCAAAxQEAMAePAQIAkAIAIZABAQCNAgAhkQEBAI4CACGSAUAAjwIAIZMBgAAAAAGUAUAAjwIAIZUBQACPAgAhAgAAALsBACAIAADHAQAgB48BAgCQAgAhkAEBAI0CACGRAQEAjgIAIZIBQACPAgAhkwGAAAAAAZQBQACPAgAhlQFAAI8CACECAAAAvgEAIAgAAMkBACADAAAAuwEAIA0AAMMBACAOAADHAQAgAQAAALsBACABAAAAvgEAIAcTAACIAgAgFAAAiQIAIBUAAIwCACAWAACLAgAgFwAAigIAIJEBAACHAgAgkwEAAIcCACAKjAEAANIBADCNAQAAzwEAEI4BAADSAQAwjwECANMBACGQAQEA1AEAIZEBAQDVAQAhkgFAANYBACGTAQAA1wEAIJQBQADWAQAhlQFAANYBACEDAAAAvgEAIAMAAM4BADASAADPAQAgAwAAAL4BACADAAC_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_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_ASAAAAABAgAAAEYAIA0AANcCACADAAAATgAgDQAA1wIAIA4AANsCACAMAAAATgAgCAAA2wIAII8BAgCQAgAhlAFAAI8CACGVAUAAjwIAIbIBAQCNAgAhtAEBAI0CACG7AQEAjQIAIbwBAQCNAgAhvQEBAI0CACG-AQEAjQIAIb8BIACxAgAhCo8BAgCQAgAhlAFAAI8CACGVAUAAjwIAIbIBAQCNAgAhtAEBAI0CACG7AQEAjQIAIbwBAQCNAgAhvQEBAI0CACG-AQEAjQIAIb8BIACxAgAhAAAFEwAEFAAFFQAGFgAHFwAIAAAAAAAFEwAEFAAFFQAGFgAHFwAIAAUTAAwUAA0VAA4WAA8XABAAAAAAAAUTAAwUAA0VAA4WAA8XABAABRMAFBQAFRUAFhYAFxcAGAAAAAAABRMAFBQAFRUAFhYAFxcAGAITABw3SxsBNgAaATdMAAUTAB4UAB8VACAWACEXACIAAAAAAAUTAB4UAB8VACAWACEXACIFEwAlFAAmFQAnFgAoFwApAAAAAAAFEwAlFAAmFQAnFgAoFwApAAUTAC0UAC4VAC8WADAXADEAAAAAAAUTAC0UAC4VAC8WADAXADEABRMANRQANhUANxYAOBcAOQAAAAAABRMANRQANhUANxYAOBcAOQAFEwA9FAA-FQA_FgBAFwBBAAAAAAAFEwA9FAA-FQA_FgBAFwBBAAUTAEUUAEYVAEcWAEgXAEkAAAAAAAUTAEUUAEYVAEcWAEgXAEkBAgECAwEFBgEGBwEHCAEJCgEKDAILDgEMEAIPEQEQEgEREwIYFgMZFwkaGQobGgocHQodHgoeHwofIQogIwIhJQoiJwIjKAokKQolKgImLQsnLhEoMBIpMRIqNBIrNRIsNhItOBIuOgIvPBIwPgIxPxIyQBIzQQI0RBM1RRk4Rxo5TRo6UBo7URo8Uho9VBo-VgI_WBpAWgJBWxpCXBpDXQJEYB1FYSNGYhtHYxtIZBtJZRtKZhtLaBtMagJNbBtObgJPbxtQcBtRcQJSdCRTdSpUdytVeCtWeytXfCtYfStZfytagQECW4MBK1yFAQJdhgErXocBK1-IAQJgiwEsYYwBMmKOATNjjwEzZJIBM2WTATNmlAEzZ5YBM2iYAQJpmgEzapwBAmudATNsngEzbZ8BAm6iATRvowE6cKUBO3GmATtyqQE7c6oBO3SrATt1rQE7dq8BAnexATt4swECebQBO3q1ATt7tgECfLkBPH26AUJ-vAFDf70BQ4ABwAFDgQHBAUOCAcIBQ4MBxAFDhAHGAQKFAcgBQ4YBygEChwHLAUOIAcwBQ4kBzQECigHQAUSLAdEBSg" + strings: JSON.parse("[\"where\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.updateOne\",\"User.updateMany\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Article.findUnique\",\"Article.findUniqueOrThrow\",\"Article.findFirst\",\"Article.findFirstOrThrow\",\"Article.findMany\",\"Article.createOne\",\"Article.createMany\",\"Article.updateOne\",\"Article.updateMany\",\"Article.upsertOne\",\"Article.deleteOne\",\"Article.deleteMany\",\"Article.groupBy\",\"Article.aggregate\",\"Strategy.findUnique\",\"Strategy.findUniqueOrThrow\",\"Strategy.findFirst\",\"Strategy.findFirstOrThrow\",\"Strategy.findMany\",\"Strategy.createOne\",\"Strategy.createMany\",\"Strategy.updateOne\",\"Strategy.updateMany\",\"Strategy.upsertOne\",\"Strategy.deleteOne\",\"Strategy.deleteMany\",\"Strategy.groupBy\",\"Strategy.aggregate\",\"indicator\",\"points\",\"Indicator.findUnique\",\"Indicator.findUniqueOrThrow\",\"Indicator.findFirst\",\"Indicator.findFirstOrThrow\",\"Indicator.findMany\",\"Indicator.createOne\",\"Indicator.createMany\",\"Indicator.updateOne\",\"Indicator.updateMany\",\"Indicator.upsertOne\",\"Indicator.deleteOne\",\"Indicator.deleteMany\",\"Indicator.groupBy\",\"Indicator.aggregate\",\"IndicatorPoint.findUnique\",\"IndicatorPoint.findUniqueOrThrow\",\"IndicatorPoint.findFirst\",\"IndicatorPoint.findFirstOrThrow\",\"IndicatorPoint.findMany\",\"IndicatorPoint.createOne\",\"IndicatorPoint.createMany\",\"IndicatorPoint.updateOne\",\"IndicatorPoint.updateMany\",\"IndicatorPoint.upsertOne\",\"IndicatorPoint.deleteOne\",\"IndicatorPoint.deleteMany\",\"IndicatorPoint.groupBy\",\"IndicatorPoint.aggregate\",\"News.findUnique\",\"News.findUniqueOrThrow\",\"News.findFirst\",\"News.findFirstOrThrow\",\"News.findMany\",\"News.createOne\",\"News.createMany\",\"News.updateOne\",\"News.updateMany\",\"News.upsertOne\",\"News.deleteOne\",\"News.deleteMany\",\"News.groupBy\",\"News.aggregate\",\"Alert.findUnique\",\"Alert.findUniqueOrThrow\",\"Alert.findFirst\",\"Alert.findFirstOrThrow\",\"Alert.findMany\",\"Alert.createOne\",\"Alert.createMany\",\"Alert.updateOne\",\"Alert.updateMany\",\"Alert.upsertOne\",\"Alert.deleteOne\",\"Alert.deleteMany\",\"Alert.groupBy\",\"Alert.aggregate\",\"ServerNode.findUnique\",\"ServerNode.findUniqueOrThrow\",\"ServerNode.findFirst\",\"ServerNode.findFirstOrThrow\",\"ServerNode.findMany\",\"ServerNode.createOne\",\"ServerNode.createMany\",\"ServerNode.updateOne\",\"ServerNode.updateMany\",\"ServerNode.upsertOne\",\"ServerNode.deleteOne\",\"ServerNode.deleteMany\",\"ServerNode.groupBy\",\"ServerNode.aggregate\",\"ServerNodeHistory.findUnique\",\"ServerNodeHistory.findUniqueOrThrow\",\"ServerNodeHistory.findFirst\",\"ServerNodeHistory.findFirstOrThrow\",\"ServerNodeHistory.findMany\",\"ServerNodeHistory.createOne\",\"ServerNodeHistory.createMany\",\"ServerNodeHistory.updateOne\",\"ServerNodeHistory.updateMany\",\"ServerNodeHistory.upsertOne\",\"ServerNodeHistory.deleteOne\",\"ServerNodeHistory.deleteMany\",\"ServerNodeHistory.groupBy\",\"ServerNodeHistory.aggregate\",\"ServiceCheck.findUnique\",\"ServiceCheck.findUniqueOrThrow\",\"ServiceCheck.findFirst\",\"ServiceCheck.findFirstOrThrow\",\"ServiceCheck.findMany\",\"ServiceCheck.createOne\",\"ServiceCheck.createMany\",\"ServiceCheck.updateOne\",\"ServiceCheck.updateMany\",\"ServiceCheck.upsertOne\",\"ServiceCheck.deleteOne\",\"ServiceCheck.deleteMany\",\"ServiceCheck.groupBy\",\"ServiceCheck.aggregate\",\"Econ_SowInventory.findUnique\",\"Econ_SowInventory.findUniqueOrThrow\",\"Econ_SowInventory.findFirst\",\"Econ_SowInventory.findFirstOrThrow\",\"Econ_SowInventory.findMany\",\"Econ_SowInventory.createOne\",\"Econ_SowInventory.createMany\",\"Econ_SowInventory.updateOne\",\"Econ_SowInventory.updateMany\",\"Econ_SowInventory.upsertOne\",\"Econ_SowInventory.deleteOne\",\"Econ_SowInventory.deleteMany\",\"Econ_SowInventory.groupBy\",\"Econ_SowInventory.aggregate\",\"ScraperCache.findUnique\",\"ScraperCache.findUniqueOrThrow\",\"ScraperCache.findFirst\",\"ScraperCache.findFirstOrThrow\",\"ScraperCache.findMany\",\"ScraperCache.createOne\",\"ScraperCache.createMany\",\"ScraperCache.updateOne\",\"ScraperCache.updateMany\",\"ScraperCache.upsertOne\",\"ScraperCache.deleteOne\",\"ScraperCache.deleteMany\",\"ScraperCache.groupBy\",\"ScraperCache.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"scraperName\",\"lastDataHash\",\"lastUpdateAt\",\"metadata\",\"createdAt\",\"updatedAt\",\"equals\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"in\",\"notIn\",\"contains\",\"startsWith\",\"endsWith\",\"search\",\"month\",\"inventory\",\"name\",\"url\",\"status\",\"latencyMs\",\"message\",\"lastCheckAt\",\"uuid\",\"period\",\"cpu\",\"ram\",\"load\",\"disk\",\"netIn\",\"netOut\",\"process\",\"connections\",\"uuid_period\",\"cpuName\",\"os\",\"region\",\"memTotal\",\"diskTotal\",\"cpuCores\",\"cpuUsage\",\"ramUsed\",\"swapUsed\",\"load1\",\"load5\",\"load15\",\"diskUsed\",\"uptime\",\"recordedAt\",\"indicatorName\",\"valueA\",\"valueB\",\"sourceA\",\"sourceB\",\"diff\",\"diffRatio\",\"title\",\"summary\",\"content\",\"source\",\"publishedAt\",\"impactRank\",\"title_publishedAt\",\"indicatorId\",\"value\",\"groupName\",\"unit\",\"frequency\",\"hidden\",\"every\",\"some\",\"none\",\"indicatorId_period\",\"description\",\"slug\",\"date\",\"email\",\"password\",\"is\",\"isNot\",\"_relevance\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "vgNiqAEJtgEAANYCADC3AQAABAAQuAEAANYCADC5AQIAAAABvgFAAKwCACG_AUAArAIAIdQBAQCqAgAhjwIBAAAAAZACAQCqAgAhAQAAAAEAIAEAAAABACAJtgEAANYCADC3AQAABAAQuAEAANYCADC5AQIAqQIAIb4BQACsAgAhvwFAAKwCACHUAQEAqgIAIY8CAQCqAgAhkAIBAKoCACEBkwIAALgDACADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAMAAAAEACADAAAFADAEAAABACAGuQECAAAAAb4BQAAAAAG_AUAAAAAB1AEBAAAAAY8CAQAAAAGQAgEAAAABAQgAAAkAIAa5AQIAAAABvgFAAAAAAb8BQAAAAAHUAQEAAAABjwIBAAAAAZACAQAAAAEBCAAACwAwBrkBAgDgAgAhvgFAAN8CACG_AUAA3wIAIdQBAQDdAgAhjwIBAN0CACGQAgEA3QIAIQIAAAABACAIAAANACAGuQECAOACACG-AUAA3wIAIb8BQADfAgAh1AEBAN0CACGPAgEA3QIAIZACAQDdAgAhAgAAAAQAIAgAAA8AIAMAAAABACANAAAJACAOAAANACABAAAAAQAgAQAAAAQAIAUTAACzAwAgFAAAtAMAIBUAALcDACAWAAC2AwAgFwAAtQMAIAm2AQAA1QIAMLcBAAAVABC4AQAA1QIAMLkBAgCYAgAhvgFAAJsCACG_AUAAmwIAIdQBAQCZAgAhjwIBAJkCACGQAgEAmQIAIQMAAAAEACADAAAUADASAAAVACADAAAABAAgAwAABQAwBAAAAQAgCrYBAADUAgAwtwEAABsAELgBAADUAgAwuQECAAAAAb4BQACsAgAhvwFAAKwCACH7AQEAqgIAIf0BAQCqAgAhjQIBAAAAAY4CAQCqAgAhAQAAABgAIAEAAAAYACAKtgEAANQCADC3AQAAGwAQuAEAANQCADC5AQIAqQIAIb4BQACsAgAhvwFAAKwCACH7AQEAqgIAIf0BAQCqAgAhjQIBAKoCACGOAgEAqgIAIQGTAgAAsgMAIAMAAAAbACADAAAcADAEAAAYACADAAAAGwAgAwAAHAAwBAAAGAAgAwAAABsAIAMAABwAMAQAABgAIAe5AQIAAAABvgFAAAAAAb8BQAAAAAH7AQEAAAAB_QEBAAAAAY0CAQAAAAGOAgEAAAABAQgAACAAIAe5AQIAAAABvgFAAAAAAb8BQAAAAAH7AQEAAAAB_QEBAAAAAY0CAQAAAAGOAgEAAAABAQgAACIAMAe5AQIA4AIAIb4BQADfAgAhvwFAAN8CACH7AQEA3QIAIf0BAQDdAgAhjQIBAN0CACGOAgEA3QIAIQIAAAAYACAIAAAkACAHuQECAOACACG-AUAA3wIAIb8BQADfAgAh-wEBAN0CACH9AQEA3QIAIY0CAQDdAgAhjgIBAN0CACECAAAAGwAgCAAAJgAgAwAAABgAIA0AACAAIA4AACQAIAEAAAAYACABAAAAGwAgBRMAAK0DACAUAACuAwAgFQAAsQMAIBYAALADACAXAACvAwAgCrYBAADTAgAwtwEAACwAELgBAADTAgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh-wEBAJkCACH9AQEAmQIAIY0CAQCZAgAhjgIBAJkCACEDAAAAGwAgAwAAKwAwEgAALAAgAwAAABsAIAMAABwAMAQAABgAIAkIAADSAgAgtgEAANECADC3AQAAMgAQuAEAANECADC5AQIAAAABvgFAAKwCACG_AUAArAIAIdQBAQCqAgAhjAIBAKoCACEBAAAALwAgAQAAAC8AIAkIAADSAgAgtgEAANECADC3AQAAMgAQuAEAANECADC5AQIAqQIAIb4BQACsAgAhvwFAAKwCACHUAQEAqgIAIYwCAQCqAgAhAZMCAACsAwAgAwAAADIAIAMAADMAMAQAAC8AIAMAAAAyACADAAAzADAEAAAvACADAAAAMgAgAwAAMwAwBAAALwAgBgiAAAAAAbkBAgAAAAG-AUAAAAABvwFAAAAAAdQBAQAAAAGMAgEAAAABAQgAADcAIAYIgAAAAAG5AQIAAAABvgFAAAAAAb8BQAAAAAHUAQEAAAABjAIBAAAAAQEIAAA5ADAGCIAAAAABuQECAOACACG-AUAA3wIAIb8BQADfAgAh1AEBAN0CACGMAgEA3QIAIQIAAAAvACAIAAA7ACAGCIAAAAABuQECAOACACG-AUAA3wIAIb8BQADfAgAh1AEBAN0CACGMAgEA3QIAIQIAAAAyACAIAAA9ACADAAAALwAgDQAANwAgDgAAOwAgAQAAAC8AIAEAAAAyACAFEwAApwMAIBQAAKgDACAVAACrAwAgFgAAqgMAIBcAAKkDACAJCAAAzwIAILYBAADOAgAwtwEAAEMAELgBAADOAgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh1AEBAJkCACGMAgEAmQIAIQMAAAAyACADAABCADASAABDACADAAAAMgAgAwAAMwAwBAAALwAgDjcAAMoCACC2AQAAyAIAMLcBAABOABC4AQAAyAIAMLkBAgAAAAG-AUAArAIAIb8BQACsAgAh1AEBAAAAAfsBAQCqAgAh_gEBAKoCACGEAgEAqgIAIYUCAQCqAgAhhgIBAKoCACGHAiAAyQIAIQEAAABGACAKNgAAzQIAILYBAADMAgAwtwEAAEgAELgBAADMAgAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh2wEBAKoCACGCAgIAqQIAIYMCCAC5AgAhAjYAAKUDACCTAgAApgMAIAs2AADNAgAgtgEAAMwCADC3AQAASAAQuAEAAMwCADC5AQIAAAABvgFAAKwCACG_AUAArAIAIdsBAQCqAgAhggICAKkCACGDAggAuQIAIYsCAADLAgAgAwAAAEgAIAMAAEkAMAQAAEoAIAEAAABIACABAAAARgAgDjcAAMoCACC2AQAAyAIAMLcBAABOABC4AQAAyAIAMLkBAgCpAgAhvgFAAKwCACG_AUAArAIAIdQBAQCqAgAh-wEBAKoCACH-AQEAqgIAIYQCAQCqAgAhhQIBAKoCACGGAgEAqgIAIYcCIADJAgAhAjcAAKMDACCTAgAApAMAIAMAAABOACADAABPADAEAABGACADAAAATgAgAwAATwAwBAAARgAgAwAAAE4AIAMAAE8AMAQAAEYAIAs3AACiAwAguQECAAAAAb4BQAAAAAG_AUAAAAAB1AEBAAAAAfsBAQAAAAH-AQEAAAABhAIBAAAAAYUCAQAAAAGGAgEAAAABhwIgAAAAAQEIAABTACAKuQECAAAAAb4BQAAAAAG_AUAAAAAB1AEBAAAAAfsBAQAAAAH-AQEAAAABhAIBAAAAAYUCAQAAAAGGAgEAAAABhwIgAAAAAQEIAABVADALNwAAlQMAILkBAgDgAgAhvgFAAN8CACG_AUAA3wIAIdQBAQDdAgAh-wEBAN0CACH-AQEA3QIAIYQCAQDdAgAhhQIBAN0CACGGAgEA3QIAIYcCIACUAwAhAgAAAEYAIAgAAFcAIAq5AQIA4AIAIb4BQADfAgAhvwFAAN8CACHUAQEA3QIAIfsBAQDdAgAh_gEBAN0CACGEAgEA3QIAIYUCAQDdAgAhhgIBAN0CACGHAiAAlAMAIQIAAABOACAIAABZACADAAAARgAgDQAAUwAgDgAAVwAgAQAAAEYAIAEAAABOACAFEwAAjwMAIBQAAJADACAVAACTAwAgFgAAkgMAIBcAAJEDACANtgEAAMQCADC3AQAAXwAQuAEAAMQCADC5AQIAmAIAIb4BQACbAgAhvwFAAJsCACHUAQEAmQIAIfsBAQCZAgAh_gEBAJkCACGEAgEAmQIAIYUCAQCZAgAhhgIBAJkCACGHAiAAxQIAIQMAAABOACADAABeADASAABfACADAAAATgAgAwAATwAwBAAARgAgAQAAAEoAIAEAAABKACADAAAASAAgAwAASQAwBAAASgAgAwAAAEgAIAMAAEkAMAQAAEoAIAMAAABIACADAABJADAEAABKACAHNgAAjgMAILkBAgAAAAG-AUAAAAABvwFAAAAAAdsBAQAAAAGCAgIAAAABgwIIAAAAAQEIAABnACAGuQECAAAAAb4BQAAAAAG_AUAAAAAB2wEBAAAAAYICAgAAAAGDAggAAAABAQgAAGkAMAc2AACNAwAguQECAOACACG-AUAA3wIAIb8BQADfAgAh2wEBAN0CACGCAgIA4AIAIYMCCADzAgAhAgAAAEoAIAgAAGsAIAa5AQIA4AIAIb4BQADfAgAhvwFAAN8CACHbAQEA3QIAIYICAgDgAgAhgwIIAPMCACECAAAASAAgCAAAbQAgAwAAAEoAIA0AAGcAIA4AAGsAIAEAAABKACABAAAASAAgBRMAAIgDACAUAACJAwAgFQAAjAMAIBYAAIsDACAXAACKAwAgCbYBAADDAgAwtwEAAHMAELgBAADDAgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh2wEBAJkCACGCAgIAmAIAIYMCCACzAgAhAwAAAEgAIAMAAHIAMBIAAHMAIAMAAABIACADAABJADAEAABKACANtgEAAMECADC3AQAAeQAQuAEAAMECADC5AQIAAAABvgFAAKwCACHVAQEAqgIAIfsBAQCqAgAh_AEBAKoCACH9AQEAqwIAIf4BAQCqAgAh_wFAAKwCACGAAgIAqQIAIYECAADCAgAgAQAAAHYAIAEAAAB2ACAMtgEAAMECADC3AQAAeQAQuAEAAMECADC5AQIAqQIAIb4BQACsAgAh1QEBAKoCACH7AQEAqgIAIfwBAQCqAgAh_QEBAKsCACH-AQEAqgIAIf8BQACsAgAhgAICAKkCACEC_QEAANcCACCTAgAAhwMAIAMAAAB5ACADAAB6ADAEAAB2ACADAAAAeQAgAwAAegAwBAAAdgAgAwAAAHkAIAMAAHoAMAQAAHYAIAm5AQIAAAABvgFAAAAAAdUBAQAAAAH7AQEAAAAB_AEBAAAAAf0BAQAAAAH-AQEAAAAB_wFAAAAAAYACAgAAAAEBCAAAfgAgCbkBAgAAAAG-AUAAAAAB1QEBAAAAAfsBAQAAAAH8AQEAAAAB_QEBAAAAAf4BAQAAAAH_AUAAAAABgAICAAAAAQEIAACAAQAwCbkBAgDgAgAhvgFAAN8CACHVAQEA3QIAIfsBAQDdAgAh_AEBAN0CACH9AQEA3gIAIf4BAQDdAgAh_wFAAN8CACGAAgIA4AIAIQIAAAB2ACAIAACCAQAgCbkBAgDgAgAhvgFAAN8CACHVAQEA3QIAIfsBAQDdAgAh_AEBAN0CACH9AQEA3gIAIf4BAQDdAgAh_wFAAN8CACGAAgIA4AIAIQIAAAB5ACAIAACEAQAgAwAAAHYAIA0AAH4AIA4AAIIBACABAAAAdgAgAQAAAHkAIAYTAACCAwAgFAAAgwMAIBUAAIYDACAWAACFAwAgFwAAhAMAIP0BAADXAgAgDLYBAADAAgAwtwEAAIoBABC4AQAAwAIAMLkBAgCYAgAhvgFAAJsCACHVAQEAmQIAIfsBAQCZAgAh_AEBAJkCACH9AQEAmgIAIf4BAQCZAgAh_wFAAJsCACGAAgIAmAIAIQMAAAB5ACADAACJAQAwEgAAigEAIAMAAAB5ACADAAB6ADAEAAB2ACANtgEAAL8CADC3AQAAkAEAELgBAAC_AgAwuQECAAAAAb4BQACsAgAh2wEBAKoCACH0AQEAqgIAIfUBCAC5AgAh9gEIALkCACH3AQEAqgIAIfgBAQCqAgAh-QEIALkCACH6AQgAuQIAIQEAAACNAQAgAQAAAI0BACANtgEAAL8CADC3AQAAkAEAELgBAAC_AgAwuQECAKkCACG-AUAArAIAIdsBAQCqAgAh9AEBAKoCACH1AQgAuQIAIfYBCAC5AgAh9wEBAKoCACH4AQEAqgIAIfkBCAC5AgAh-gEIALkCACEBkwIAAIEDACADAAAAkAEAIAMAAJEBADAEAACNAQAgAwAAAJABACADAACRAQAwBAAAjQEAIAMAAACQAQAgAwAAkQEAMAQAAI0BACAKuQECAAAAAb4BQAAAAAHbAQEAAAAB9AEBAAAAAfUBCAAAAAH2AQgAAAAB9wEBAAAAAfgBAQAAAAH5AQgAAAAB-gEIAAAAAQEIAACVAQAgCrkBAgAAAAG-AUAAAAAB2wEBAAAAAfQBAQAAAAH1AQgAAAAB9gEIAAAAAfcBAQAAAAH4AQEAAAAB-QEIAAAAAfoBCAAAAAEBCAAAlwEAMAq5AQIA4AIAIb4BQADfAgAh2wEBAN0CACH0AQEA3QIAIfUBCADzAgAh9gEIAPMCACH3AQEA3QIAIfgBAQDdAgAh-QEIAPMCACH6AQgA8wIAIQIAAACNAQAgCAAAmQEAIAq5AQIA4AIAIb4BQADfAgAh2wEBAN0CACH0AQEA3QIAIfUBCADzAgAh9gEIAPMCACH3AQEA3QIAIfgBAQDdAgAh-QEIAPMCACH6AQgA8wIAIQIAAACQAQAgCAAAmwEAIAMAAACNAQAgDQAAlQEAIA4AAJkBACABAAAAjQEAIAEAAACQAQAgBRMAAPwCACAUAAD9AgAgFQAAgAMAIBYAAP8CACAXAAD-AgAgDbYBAAC-AgAwtwEAAKEBABC4AQAAvgIAMLkBAgCYAgAhvgFAAJsCACHbAQEAmQIAIfQBAQCZAgAh9QEIALMCACH2AQgAswIAIfcBAQCZAgAh-AEBAJkCACH5AQgAswIAIfoBCACzAgAhAwAAAJABACADAACgAQAwEgAAoQEAIAMAAACQAQAgAwAAkQEAMAQAAI0BACActgEAAL0CADC3AQAApwEAELgBAAC9AgAwuQECAAAAAb4BQACsAgAhvwFAAKwCACHUAQEAqgIAIdYBAQCqAgAh2gEBAAAAAeABBAC6AgAh4QEEALoCACHiAQIAqQIAIeMBAgCpAgAh5QEBAKoCACHmAQEAqgIAIecBAQCqAgAh6AEEALoCACHpAQQAugIAIeoBAgCpAgAh6wEIALkCACHsAQQAugIAIe0BBAC6AgAh7gEIALkCACHvAQgAuQIAIfABCAC5AgAh8QEEALoCACHyAQQAugIAIfMBQACsAgAhAQAAAKQBACABAAAApAEAIBy2AQAAvQIAMLcBAACnAQAQuAEAAL0CADC5AQIAqQIAIb4BQACsAgAhvwFAAKwCACHUAQEAqgIAIdYBAQCqAgAh2gEBAKoCACHgAQQAugIAIeEBBAC6AgAh4gECAKkCACHjAQIAqQIAIeUBAQCqAgAh5gEBAKoCACHnAQEAqgIAIegBBAC6AgAh6QEEALoCACHqAQIAqQIAIesBCAC5AgAh7AEEALoCACHtAQQAugIAIe4BCAC5AgAh7wEIALkCACHwAQgAuQIAIfEBBAC6AgAh8gEEALoCACHzAUAArAIAIQGTAgAA-wIAIAMAAACnAQAgAwAAqAEAMAQAAKQBACADAAAApwEAIAMAAKgBADAEAACkAQAgAwAAAKcBACADAACoAQAwBAAApAEAIBm5AQIAAAABvgFAAAAAAb8BQAAAAAHUAQEAAAAB1gEBAAAAAdoBAQAAAAHgAQQAAAAB4QEEAAAAAeIBAgAAAAHjAQIAAAAB5QEBAAAAAeYBAQAAAAHnAQEAAAAB6AEEAAAAAekBBAAAAAHqAQIAAAAB6wEIAAAAAewBBAAAAAHtAQQAAAAB7gEIAAAAAe8BCAAAAAHwAQgAAAAB8QEEAAAAAfIBBAAAAAHzAUAAAAABAQgAAKwBACAZuQECAAAAAb4BQAAAAAG_AUAAAAAB1AEBAAAAAdYBAQAAAAHaAQEAAAAB4AEEAAAAAeEBBAAAAAHiAQIAAAAB4wECAAAAAeUBAQAAAAHmAQEAAAAB5wEBAAAAAegBBAAAAAHpAQQAAAAB6gECAAAAAesBCAAAAAHsAQQAAAAB7QEEAAAAAe4BCAAAAAHvAQgAAAAB8AEIAAAAAfEBBAAAAAHyAQQAAAAB8wFAAAAAAQEIAACuAQAwGbkBAgDgAgAhvgFAAN8CACG_AUAA3wIAIdQBAQDdAgAh1gEBAN0CACHaAQEA3QIAIeABBAD0AgAh4QEEAPQCACHiAQIA4AIAIeMBAgDgAgAh5QEBAN0CACHmAQEA3QIAIecBAQDdAgAh6AEEAPQCACHpAQQA9AIAIeoBAgDgAgAh6wEIAPMCACHsAQQA9AIAIe0BBAD0AgAh7gEIAPMCACHvAQgA8wIAIfABCADzAgAh8QEEAPQCACHyAQQA9AIAIfMBQADfAgAhAgAAAKQBACAIAACwAQAgGbkBAgDgAgAhvgFAAN8CACG_AUAA3wIAIdQBAQDdAgAh1gEBAN0CACHaAQEA3QIAIeABBAD0AgAh4QEEAPQCACHiAQIA4AIAIeMBAgDgAgAh5QEBAN0CACHmAQEA3QIAIecBAQDdAgAh6AEEAPQCACHpAQQA9AIAIeoBAgDgAgAh6wEIAPMCACHsAQQA9AIAIe0BBAD0AgAh7gEIAPMCACHvAQgA8wIAIfABCADzAgAh8QEEAPQCACHyAQQA9AIAIfMBQADfAgAhAgAAAKcBACAIAACyAQAgAwAAAKQBACANAACsAQAgDgAAsAEAIAEAAACkAQAgAQAAAKcBACAFEwAA9gIAIBQAAPcCACAVAAD6AgAgFgAA-QIAIBcAAPgCACActgEAALwCADC3AQAAuAEAELgBAAC8AgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh1AEBAJkCACHWAQEAmQIAIdoBAQCZAgAh4AEEALQCACHhAQQAtAIAIeIBAgCYAgAh4wECAJgCACHlAQEAmQIAIeYBAQCZAgAh5wEBAJkCACHoAQQAtAIAIekBBAC0AgAh6gECAJgCACHrAQgAswIAIewBBAC0AgAh7QEEALQCACHuAQgAswIAIe8BCACzAgAh8AEIALMCACHxAQQAtAIAIfIBBAC0AgAh8wFAAJsCACEDAAAApwEAIAMAALcBADASAAC4AQAgAwAAAKcBACADAACoAQAwBAAApAEAIBC2AQAAuAIAMLcBAAC-AQAQuAEAALgCADC5AQIAAAABvgFAAKwCACHaAQEAqgIAIdsBQACsAgAh3AEIALkCACHdAQQAugIAId4BCAC5AgAh3wEEALoCACHgAQQAugIAIeEBBAC6AgAh4gECAKkCACHjAQIAqQIAIeQBAAC7AgAgAQAAALsBACABAAAAuwEAIA-2AQAAuAIAMLcBAAC-AQAQuAEAALgCADC5AQIAqQIAIb4BQACsAgAh2gEBAKoCACHbAUAArAIAIdwBCAC5AgAh3QEEALoCACHeAQgAuQIAId8BBAC6AgAh4AEEALoCACHhAQQAugIAIeIBAgCpAgAh4wECAKkCACEBkwIAAPUCACADAAAAvgEAIAMAAL8BADAEAAC7AQAgAwAAAL4BACADAAC_AQAwBAAAuwEAIAMAAAC-AQAgAwAAvwEAMAQAALsBACAMuQECAAAAAb4BQAAAAAHaAQEAAAAB2wFAAAAAAdwBCAAAAAHdAQQAAAAB3gEIAAAAAd8BBAAAAAHgAQQAAAAB4QEEAAAAAeIBAgAAAAHjAQIAAAABAQgAAMMBACAMuQECAAAAAb4BQAAAAAHaAQEAAAAB2wFAAAAAAdwBCAAAAAHdAQQAAAAB3gEIAAAAAd8BBAAAAAHgAQQAAAAB4QEEAAAAAeIBAgAAAAHjAQIAAAABAQgAAMUBADAMuQECAOACACG-AUAA3wIAIdoBAQDdAgAh2wFAAN8CACHcAQgA8wIAId0BBAD0AgAh3gEIAPMCACHfAQQA9AIAIeABBAD0AgAh4QEEAPQCACHiAQIA4AIAIeMBAgDgAgAhAgAAALsBACAIAADHAQAgDLkBAgDgAgAhvgFAAN8CACHaAQEA3QIAIdsBQADfAgAh3AEIAPMCACHdAQQA9AIAId4BCADzAgAh3wEEAPQCACHgAQQA9AIAIeEBBAD0AgAh4gECAOACACHjAQIA4AIAIQIAAAC-AQAgCAAAyQEAIAMAAAC7AQAgDQAAwwEAIA4AAMcBACABAAAAuwEAIAEAAAC-AQAgBRMAAO4CACAUAADvAgAgFQAA8gIAIBYAAPECACAXAADwAgAgD7YBAACyAgAwtwEAAM8BABC4AQAAsgIAMLkBAgCYAgAhvgFAAJsCACHaAQEAmQIAIdsBQACbAgAh3AEIALMCACHdAQQAtAIAId4BCACzAgAh3wEEALQCACHgAQQAtAIAIeEBBAC0AgAh4gECAJgCACHjAQIAmAIAIQMAAAC-AQAgAwAAzgEAMBIAAM8BACADAAAAvgEAIAMAAL8BADAEAAC7AQAgDLYBAACxAgAwtwEAANUBABC4AQAAsQIAMLkBAgAAAAG-AUAArAIAIb8BQACsAgAh1AEBAAAAAdUBAQCqAgAh1gEBAKoCACHXAQIAqQIAIdgBAQCqAgAh2QFAAKwCACEBAAAA0gEAIAEAAADSAQAgDLYBAACxAgAwtwEAANUBABC4AQAAsQIAMLkBAgCpAgAhvgFAAKwCACG_AUAArAIAIdQBAQCqAgAh1QEBAKoCACHWAQEAqgIAIdcBAgCpAgAh2AEBAKoCACHZAUAArAIAIQGTAgAA7QIAIAMAAADVAQAgAwAA1gEAMAQAANIBACADAAAA1QEAIAMAANYBADAEAADSAQAgAwAAANUBACADAADWAQAwBAAA0gEAIAm5AQIAAAABvgFAAAAAAb8BQAAAAAHUAQEAAAAB1QEBAAAAAdYBAQAAAAHXAQIAAAAB2AEBAAAAAdkBQAAAAAEBCAAA2gEAIAm5AQIAAAABvgFAAAAAAb8BQAAAAAHUAQEAAAAB1QEBAAAAAdYBAQAAAAHXAQIAAAAB2AEBAAAAAdkBQAAAAAEBCAAA3AEAMAm5AQIA4AIAIb4BQADfAgAhvwFAAN8CACHUAQEA3QIAIdUBAQDdAgAh1gEBAN0CACHXAQIA4AIAIdgBAQDdAgAh2QFAAN8CACECAAAA0gEAIAgAAN4BACAJuQECAOACACG-AUAA3wIAIb8BQADfAgAh1AEBAN0CACHVAQEA3QIAIdYBAQDdAgAh1wECAOACACHYAQEA3QIAIdkBQADfAgAhAgAAANUBACAIAADgAQAgAwAAANIBACANAADaAQAgDgAA3gEAIAEAAADSAQAgAQAAANUBACAFEwAA6AIAIBQAAOkCACAVAADsAgAgFgAA6wIAIBcAAOoCACAMtgEAALACADC3AQAA5gEAELgBAACwAgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh1AEBAJkCACHVAQEAmQIAIdYBAQCZAgAh1wECAJgCACHYAQEAmQIAIdkBQACbAgAhAwAAANUBACADAADlAQAwEgAA5gEAIAMAAADVAQAgAwAA1gEAMAQAANIBACAItgEAAK8CADC3AQAA7AEAELgBAACvAgAwuQECAAAAAb4BQACsAgAhvwFAAKwCACHSAQEAAAAB0wECAKkCACEBAAAA6QEAIAEAAADpAQAgCLYBAACvAgAwtwEAAOwBABC4AQAArwIAMLkBAgCpAgAhvgFAAKwCACG_AUAArAIAIdIBAQCqAgAh0wECAKkCACEBkwIAAOcCACADAAAA7AEAIAMAAO0BADAEAADpAQAgAwAAAOwBACADAADtAQAwBAAA6QEAIAMAAADsAQAgAwAA7QEAMAQAAOkBACAFuQECAAAAAb4BQAAAAAG_AUAAAAAB0gEBAAAAAdMBAgAAAAEBCAAA8QEAIAW5AQIAAAABvgFAAAAAAb8BQAAAAAHSAQEAAAAB0wECAAAAAQEIAADzAQAwBbkBAgDgAgAhvgFAAN8CACG_AUAA3wIAIdIBAQDdAgAh0wECAOACACECAAAA6QEAIAgAAPUBACAFuQECAOACACG-AUAA3wIAIb8BQADfAgAh0gEBAN0CACHTAQIA4AIAIQIAAADsAQAgCAAA9wEAIAMAAADpAQAgDQAA8QEAIA4AAPUBACABAAAA6QEAIAEAAADsAQAgBRMAAOICACAUAADjAgAgFQAA5gIAIBYAAOUCACAXAADkAgAgCLYBAACuAgAwtwEAAP0BABC4AQAArgIAMLkBAgCYAgAhvgFAAJsCACG_AUAAmwIAIdIBAQCZAgAh0wECAJgCACEDAAAA7AEAIAMAAPwBADASAAD9AQAgAwAAAOwBACADAADtAQAwBAAA6QEAIAq2AQAAqAIAMLcBAACDAgAQuAEAAKgCADC5AQIAAAABugEBAAAAAbsBAQCrAgAhvAFAAKwCACG9AQAArQIAIL4BQACsAgAhvwFAAKwCACEBAAAAgAIAIAEAAACAAgAgCrYBAACoAgAwtwEAAIMCABC4AQAAqAIAMLkBAgCpAgAhugEBAKoCACG7AQEAqwIAIbwBQACsAgAhvQEAAK0CACC-AUAArAIAIb8BQACsAgAhA7sBAADXAgAgvQEAANcCACCTAgAA4QIAIAMAAACDAgAgAwAAhAIAMAQAAIACACADAAAAgwIAIAMAAIQCADAEAACAAgAgAwAAAIMCACADAACEAgAwBAAAgAIAIAe5AQIAAAABugEBAAAAAbsBAQAAAAG8AUAAAAABvQGAAAAAAb4BQAAAAAG_AUAAAAABAQgAAIgCACAHuQECAAAAAboBAQAAAAG7AQEAAAABvAFAAAAAAb0BgAAAAAG-AUAAAAABvwFAAAAAAQEIAACKAgAwB7kBAgDgAgAhugEBAN0CACG7AQEA3gIAIbwBQADfAgAhvQGAAAAAAb4BQADfAgAhvwFAAN8CACECAAAAgAIAIAgAAIwCACAHuQECAOACACG6AQEA3QIAIbsBAQDeAgAhvAFAAN8CACG9AYAAAAABvgFAAN8CACG_AUAA3wIAIQIAAACDAgAgCAAAjgIAIAMAAACAAgAgDQAAiAIAIA4AAIwCACABAAAAgAIAIAEAAACDAgAgBxMAANgCACAUAADZAgAgFQAA3AIAIBYAANsCACAXAADaAgAguwEAANcCACC9AQAA1wIAIAq2AQAAlwIAMLcBAACUAgAQuAEAAJcCADC5AQIAmAIAIboBAQCZAgAhuwEBAJoCACG8AUAAmwIAIb0BAACcAgAgvgFAAJsCACG_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_AUAAmwIAIdIBAQCZAgAh0wECAJgCACEItgEAAK8CADC3AQAA7AEAELgBAACvAgAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh0gEBAKoCACHTAQIAqQIAIQy2AQAAsAIAMLcBAADmAQAQuAEAALACADC5AQIAmAIAIb4BQACbAgAhvwFAAJsCACHUAQEAmQIAIdUBAQCZAgAh1gEBAJkCACHXAQIAmAIAIdgBAQCZAgAh2QFAAJsCACEMtgEAALECADC3AQAA1QEAELgBAACxAgAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh1AEBAKoCACHVAQEAqgIAIdYBAQCqAgAh1wECAKkCACHYAQEAqgIAIdkBQACsAgAhD7YBAACyAgAwtwEAAM8BABC4AQAAsgIAMLkBAgCYAgAhvgFAAJsCACHaAQEAmQIAIdsBQACbAgAh3AEIALMCACHdAQQAtAIAId4BCACzAgAh3wEEALQCACHgAQQAtAIAIeEBBAC0AgAh4gECAJgCACHjAQIAmAIAIQ0TAACgAgAgFAAApwIAIBUAAKcCACAWAACnAgAgFwAApwIAIMABCAAAAAHHAQgAAAAByAEIAAAAAckBCAAAAAHKAQgAAAABywEIALcCACHMAQgAAAAEzQEIAAAABA0TAACgAgAgFAAApwIAIBUAALYCACAWAAC2AgAgFwAAtgIAIMABBAAAAAHHAQQAAAAByAEEAAAAAckBBAAAAAHKAQQAAAABywEEALUCACHMAQQAAAAEzQEEAAAABA0TAACgAgAgFAAApwIAIBUAALYCACAWAAC2AgAgFwAAtgIAIMABBAAAAAHHAQQAAAAByAEEAAAAAckBBAAAAAHKAQQAAAABywEEALUCACHMAQQAAAAEzQEEAAAABAjAAQQAAAABxwEEAAAAAcgBBAAAAAHJAQQAAAABygEEAAAAAcsBBAC2AgAhzAEEAAAABM0BBAAAAAQNEwAAoAIAIBQAAKcCACAVAACnAgAgFgAApwIAIBcAAKcCACDAAQgAAAABxwEIAAAAAcgBCAAAAAHJAQgAAAABygEIAAAAAcsBCAC3AgAhzAEIAAAABM0BCAAAAAQPtgEAALgCADC3AQAAvgEAELgBAAC4AgAwuQECAKkCACG-AUAArAIAIdoBAQCqAgAh2wFAAKwCACHcAQgAuQIAId0BBAC6AgAh3gEIALkCACHfAQQAugIAIeABBAC6AgAh4QEEALoCACHiAQIAqQIAIeMBAgCpAgAhCMABCAAAAAHHAQgAAAAByAEIAAAAAckBCAAAAAHKAQgAAAABywEIAKcCACHMAQgAAAAEzQEIAAAABAjAAQQAAAABxwEEAAAAAcgBBAAAAAHJAQQAAAABygEEAAAAAcsBBAC2AgAhzAEEAAAABM0BBAAAAAQC2gEBAAAAAdsBQAAAAAEctgEAALwCADC3AQAAuAEAELgBAAC8AgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh1AEBAJkCACHWAQEAmQIAIdoBAQCZAgAh4AEEALQCACHhAQQAtAIAIeIBAgCYAgAh4wECAJgCACHlAQEAmQIAIeYBAQCZAgAh5wEBAJkCACHoAQQAtAIAIekBBAC0AgAh6gECAJgCACHrAQgAswIAIewBBAC0AgAh7QEEALQCACHuAQgAswIAIe8BCACzAgAh8AEIALMCACHxAQQAtAIAIfIBBAC0AgAh8wFAAJsCACEctgEAAL0CADC3AQAApwEAELgBAAC9AgAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh1AEBAKoCACHWAQEAqgIAIdoBAQCqAgAh4AEEALoCACHhAQQAugIAIeIBAgCpAgAh4wECAKkCACHlAQEAqgIAIeYBAQCqAgAh5wEBAKoCACHoAQQAugIAIekBBAC6AgAh6gECAKkCACHrAQgAuQIAIewBBAC6AgAh7QEEALoCACHuAQgAuQIAIe8BCAC5AgAh8AEIALkCACHxAQQAugIAIfIBBAC6AgAh8wFAAKwCACENtgEAAL4CADC3AQAAoQEAELgBAAC-AgAwuQECAJgCACG-AUAAmwIAIdsBAQCZAgAh9AEBAJkCACH1AQgAswIAIfYBCACzAgAh9wEBAJkCACH4AQEAmQIAIfkBCACzAgAh-gEIALMCACENtgEAAL8CADC3AQAAkAEAELgBAAC_AgAwuQECAKkCACG-AUAArAIAIdsBAQCqAgAh9AEBAKoCACH1AQgAuQIAIfYBCAC5AgAh9wEBAKoCACH4AQEAqgIAIfkBCAC5AgAh-gEIALkCACEMtgEAAMACADC3AQAAigEAELgBAADAAgAwuQECAJgCACG-AUAAmwIAIdUBAQCZAgAh-wEBAJkCACH8AQEAmQIAIf0BAQCaAgAh_gEBAJkCACH_AUAAmwIAIYACAgCYAgAhDLYBAADBAgAwtwEAAHkAELgBAADBAgAwuQECAKkCACG-AUAArAIAIdUBAQCqAgAh-wEBAKoCACH8AQEAqgIAIf0BAQCrAgAh_gEBAKoCACH_AUAArAIAIYACAgCpAgAhAvsBAQAAAAH_AUAAAAABCbYBAADDAgAwtwEAAHMAELgBAADDAgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh2wEBAJkCACGCAgIAmAIAIYMCCACzAgAhDbYBAADEAgAwtwEAAF8AELgBAADEAgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh1AEBAJkCACH7AQEAmQIAIf4BAQCZAgAhhAIBAJkCACGFAgEAmQIAIYYCAQCZAgAhhwIgAMUCACEFEwAAoAIAIBYAAMcCACAXAADHAgAgwAEgAAAAAcsBIADGAgAhBRMAAKACACAWAADHAgAgFwAAxwIAIMABIAAAAAHLASAAxgIAIQLAASAAAAABywEgAMcCACEONwAAygIAILYBAADIAgAwtwEAAE4AELgBAADIAgAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh1AEBAKoCACH7AQEAqgIAIf4BAQCqAgAhhAIBAKoCACGFAgEAqgIAIYYCAQCqAgAhhwIgAMkCACECwAEgAAAAAcsBIADHAgAhA4gCAABIACCJAgAASAAgigIAAEgAIALbAQEAAAABggICAAAAAQo2AADNAgAgtgEAAMwCADC3AQAASAAQuAEAAMwCADC5AQIAqQIAIb4BQACsAgAhvwFAAKwCACHbAQEAqgIAIYICAgCpAgAhgwIIALkCACEQNwAAygIAILYBAADIAgAwtwEAAE4AELgBAADIAgAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh1AEBAKoCACH7AQEAqgIAIf4BAQCqAgAhhAIBAKoCACGFAgEAqgIAIYYCAQCqAgAhhwIgAMkCACGRAgAATgAgkgIAAE4AIAkIAADPAgAgtgEAAM4CADC3AQAAQwAQuAEAAM4CADC5AQIAmAIAIb4BQACbAgAhvwFAAJsCACHUAQEAmQIAIYwCAQCZAgAhDxMAAKACACAWAADQAgAgFwAA0AIAIMABgAAAAAHBAQEAAAABwgEBAAAAAcMBAQAAAAHEAYAAAAABxQGAAAAAAcYBgAAAAAHHAYAAAAAByAGAAAAAAckBgAAAAAHKAYAAAAABywGAAAAAAQzAAYAAAAABwQEBAAAAAcIBAQAAAAHDAQEAAAABxAGAAAAAAcUBgAAAAAHGAYAAAAABxwGAAAAAAcgBgAAAAAHJAYAAAAABygGAAAAAAcsBgAAAAAEJCAAA0gIAILYBAADRAgAwtwEAADIAELgBAADRAgAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh1AEBAKoCACGMAgEAqgIAIQzAAYAAAAABwQEBAAAAAcIBAQAAAAHDAQEAAAABxAGAAAAAAcUBgAAAAAHGAYAAAAABxwGAAAAAAcgBgAAAAAHJAYAAAAABygGAAAAAAcsBgAAAAAEKtgEAANMCADC3AQAALAAQuAEAANMCADC5AQIAmAIAIb4BQACbAgAhvwFAAJsCACH7AQEAmQIAIf0BAQCZAgAhjQIBAJkCACGOAgEAmQIAIQq2AQAA1AIAMLcBAAAbABC4AQAA1AIAMLkBAgCpAgAhvgFAAKwCACG_AUAArAIAIfsBAQCqAgAh_QEBAKoCACGNAgEAqgIAIY4CAQCqAgAhCbYBAADVAgAwtwEAABUAELgBAADVAgAwuQECAJgCACG-AUAAmwIAIb8BQACbAgAh1AEBAJkCACGPAgEAmQIAIZACAQCZAgAhCbYBAADWAgAwtwEAAAQAELgBAADWAgAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh1AEBAKoCACGPAgEAqgIAIZACAQCqAgAhAAAAAAAAAZcCAQAAAAEBlwIBAAAAAQGXAkAAAAABBZcCAgAAAAGdAgIAAAABngICAAAAAZ8CAgAAAAGgAgIAAAABAdEBAQAAAAEAAAAAAAHRAQEAAAABAAAAAAAB0QEBAAAAAQAAAAAABZcCCAAAAAGdAggAAAABngIIAAAAAZ8CCAAAAAGgAggAAAABBZcCBAAAAAGdAgQAAAABngIEAAAAAZ8CBAAAAAGgAgQAAAABAdEBAQAAAAEAAAAAAAHRAQEAAAABAAAAAAAB0QEBAAAAAQAAAAAAAdEBAQAAAAEAAAAAAAUNAAC6AwAgDgAAvQMAIJQCAAC7AwAglQIAALwDACCaAgAARgAgAw0AALoDACCUAgAAuwMAIJoCAABGACAAAAAAAAGXAiAAAAABCw0AAJYDADAOAACbAwAwlAIAAJcDADCVAgAAmAMAMJYCAACZAwAglwIAAJoDADCYAgAAmgMAMJkCAACaAwAwmgIAAJoDADCbAgAAnAMAMJwCAACdAwAwBbkBAgAAAAG-AUAAAAABvwFAAAAAAdsBAQAAAAGDAggAAAABAgAAAEoAIA0AAKEDACADAAAASgAgDQAAoQMAIA4AAKADACABCAAAuQMAMAs2AADNAgAgtgEAAMwCADC3AQAASAAQuAEAAMwCADC5AQIAAAABvgFAAKwCACG_AUAArAIAIdsBAQCqAgAhggICAKkCACGDAggAuQIAIYsCAADLAgAgAgAAAEoAIAgAAKADACACAAAAngMAIAgAAJ8DACAJtgEAAJ0DADC3AQAAngMAELgBAACdAwAwuQECAKkCACG-AUAArAIAIb8BQACsAgAh2wEBAKoCACGCAgIAqQIAIYMCCAC5AgAhCbYBAACdAwAwtwEAAJ4DABC4AQAAnQMAMLkBAgCpAgAhvgFAAKwCACG_AUAArAIAIdsBAQCqAgAhggICAKkCACGDAggAuQIAIQW5AQIA4AIAIb4BQADfAgAhvwFAAN8CACHbAQEA3QIAIYMCCADzAgAhBbkBAgDgAgAhvgFAAN8CACG_AUAA3wIAIdsBAQDdAgAhgwIIAPMCACEFuQECAAAAAb4BQAAAAAG_AUAAAAAB2wEBAAAAAYMCCAAAAAEEDQAAlgMAMJQCAACXAwAwlgIAAJkDACCaAgAAmgMAMAAB0QEBAAAAAQI3AACjAwAgkwIAAKQDACAB0QEBAAAAAQAAAAAAAdEBAQAAAAEAAAAAAAHRAQEAAAABAAAAAAAB0QEBAAAAAQW5AQIAAAABvgFAAAAAAb8BQAAAAAHbAQEAAAABgwIIAAAAAQq5AQIAAAABvgFAAAAAAb8BQAAAAAHUAQEAAAAB-wEBAAAAAf4BAQAAAAGEAgEAAAABhQIBAAAAAYYCAQAAAAGHAiAAAAABAgAAAEYAIA0AALoDACADAAAATgAgDQAAugMAIA4AAL4DACAMAAAATgAgCAAAvgMAILkBAgDgAgAhvgFAAN8CACG_AUAA3wIAIdQBAQDdAgAh-wEBAN0CACH-AQEA3QIAIYQCAQDdAgAhhQIBAN0CACGGAgEA3QIAIYcCIACUAwAhCrkBAgDgAgAhvgFAAN8CACG_AUAA3wIAIdQBAQDdAgAh-wEBAN0CACH-AQEA3QIAIYQCAQDdAgAhhQIBAN0CACGGAgEA3QIAIYcCIACUAwAhAAAFEwAEFAAFFQAGFgAHFwAIAAAAAAAFEwAEFAAFFQAGFgAHFwAIAAUTAAwUAA0VAA4WAA8XABAAAAAAAAUTAAwUAA0VAA4WAA8XABAABRMAFBQAFRUAFhYAFxcAGAAAAAAABRMAFBQAFRUAFhYAFxcAGAITABw3SxsBNgAaATdMAAUTAB4UAB8VACAWACEXACIAAAAAAAUTAB4UAB8VACAWACEXACIFEwAlFAAmFQAnFgAoFwApAAAAAAAFEwAlFAAmFQAnFgAoFwApAAUTAC0UAC4VAC8WADAXADEAAAAAAAUTAC0UAC4VAC8WADAXADEABRMANRQANhUANxYAOBcAOQAAAAAABRMANRQANhUANxYAOBcAOQAFEwA9FAA-FQA_FgBAFwBBAAAAAAAFEwA9FAA-FQA_FgBAFwBBAAUTAEUUAEYVAEcWAEgXAEkAAAAAAAUTAEUUAEYVAEcWAEgXAEkABRMATRQAThUATxYAUBcAUQAAAAAABRMATRQAThUATxYAUBcAUQAFEwBVFABWFQBXFgBYFwBZAAAAAAAFEwBVFABWFQBXFgBYFwBZAAUTAF0UAF4VAF8WAGAXAGEAAAAAAAUTAF0UAF4VAF8WAGAXAGEBAgECAwEFBgEGBwEHCAEJCgEKDAILDgEMEAIPEQEQEgEREwIYFgMZFwkaGQobGgocHQodHgoeHwofIQogIwIhJQoiJwIjKAokKQolKgImLQsnLhEoMBIpMRIqNBIrNRIsNhItOBIuOgIvPBIwPgIxPxIyQBIzQQI0RBM1RRk4Rxo5TRo6UBo7URo8Uho9VBo-VgI_WBpAWgJBWxpCXBpDXQJEYB1FYSNGYhtHYxtIZBtJZRtKZhtLaBtMagJNbBtObgJPbxtQcBtRcQJSdCRTdSpUdytVeCtWeytXfCtYfStZfytagQECW4MBK1yFAQJdhgErXocBK1-IAQJgiwEsYYwBMmKOATNjjwEzZJIBM2WTATNmlAEzZ5YBM2iYAQJpmgEzapwBAmudATNsngEzbZ8BAm6iATRvowE6cKUBO3GmATtyqQE7c6oBO3SrATt1rQE7dq8BAnexATt4swECebQBO3q1ATt7tgECfLkBPH26AUJ-vAFDf70BQ4ABwAFDgQHBAUOCAcIBQ4MBxAFDhAHGAQKFAcgBQ4YBygEChwHLAUOIAcwBQ4kBzQECigHQAUSLAdEBSowB0wFLjQHUAUuOAdcBS48B2AFLkAHZAUuRAdsBS5IB3QECkwHfAUuUAeEBApUB4gFLlgHjAUuXAeQBApgB5wFMmQHoAVKaAeoBU5sB6wFTnAHuAVOdAe8BU54B8AFTnwHyAVOgAfQBAqEB9gFTogH4AQKjAfkBU6QB-gFTpQH7AQKmAf4BVKcB_wFaqAGBAlupAYICW6oBhQJbqwGGAlusAYcCW60BiQJbrgGLAgKvAY0CW7ABjwICsQGQAluyAZECW7MBkgICtAGVAly1AZYCYg" } async function decodeBase64AsWasm(wasmBase64: string): Promise { @@ -258,6 +258,36 @@ export interface PrismaClient< */ get alert(): Prisma.AlertDelegate; + /** + * `prisma.serverNode`: Exposes CRUD operations for the **ServerNode** model. + * Example usage: + * ```ts + * // Fetch zero or more ServerNodes + * const serverNodes = await prisma.serverNode.findMany() + * ``` + */ + get serverNode(): Prisma.ServerNodeDelegate; + + /** + * `prisma.serverNodeHistory`: Exposes CRUD operations for the **ServerNodeHistory** model. + * Example usage: + * ```ts + * // Fetch zero or more ServerNodeHistories + * const serverNodeHistories = await prisma.serverNodeHistory.findMany() + * ``` + */ + get serverNodeHistory(): Prisma.ServerNodeHistoryDelegate; + + /** + * `prisma.serviceCheck`: Exposes CRUD operations for the **ServiceCheck** model. + * Example usage: + * ```ts + * // Fetch zero or more ServiceChecks + * const serviceChecks = await prisma.serviceCheck.findMany() + * ``` + */ + get serviceCheck(): Prisma.ServiceCheckDelegate; + /** * `prisma.econ_SowInventory`: Exposes CRUD operations for the **Econ_SowInventory** model. * Example usage: diff --git a/generated/prisma/internal/prismaNamespace.ts b/generated/prisma/internal/prismaNamespace.ts index 1d7164f..314f1dc 100644 --- a/generated/prisma/internal/prismaNamespace.ts +++ b/generated/prisma/internal/prismaNamespace.ts @@ -391,6 +391,9 @@ export const ModelName = { IndicatorPoint: 'IndicatorPoint', News: 'News', Alert: 'Alert', + ServerNode: 'ServerNode', + ServerNodeHistory: 'ServerNodeHistory', + ServiceCheck: 'ServiceCheck', Econ_SowInventory: 'Econ_SowInventory', ScraperCache: 'ScraperCache' } as const @@ -408,7 +411,7 @@ export type TypeMap + fields: Prisma.ServerNodeFieldRefs + operations: { + findUnique: { + args: Prisma.ServerNodeFindUniqueArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ServerNodeFindUniqueOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findFirst: { + args: Prisma.ServerNodeFindFirstArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ServerNodeFindFirstOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findMany: { + args: Prisma.ServerNodeFindManyArgs + result: runtime.Types.Utils.PayloadToResult[] + } + create: { + args: Prisma.ServerNodeCreateArgs + result: runtime.Types.Utils.PayloadToResult + } + createMany: { + args: Prisma.ServerNodeCreateManyArgs + result: BatchPayload + } + delete: { + args: Prisma.ServerNodeDeleteArgs + result: runtime.Types.Utils.PayloadToResult + } + update: { + args: Prisma.ServerNodeUpdateArgs + result: runtime.Types.Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ServerNodeDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ServerNodeUpdateManyArgs + result: BatchPayload + } + upsert: { + args: Prisma.ServerNodeUpsertArgs + result: runtime.Types.Utils.PayloadToResult + } + aggregate: { + args: Prisma.ServerNodeAggregateArgs + result: runtime.Types.Utils.Optional + } + groupBy: { + args: Prisma.ServerNodeGroupByArgs + result: runtime.Types.Utils.Optional[] + } + count: { + args: Prisma.ServerNodeCountArgs + result: runtime.Types.Utils.Optional | number + } + } + } + ServerNodeHistory: { + payload: Prisma.$ServerNodeHistoryPayload + fields: Prisma.ServerNodeHistoryFieldRefs + operations: { + findUnique: { + args: Prisma.ServerNodeHistoryFindUniqueArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ServerNodeHistoryFindUniqueOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findFirst: { + args: Prisma.ServerNodeHistoryFindFirstArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ServerNodeHistoryFindFirstOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findMany: { + args: Prisma.ServerNodeHistoryFindManyArgs + result: runtime.Types.Utils.PayloadToResult[] + } + create: { + args: Prisma.ServerNodeHistoryCreateArgs + result: runtime.Types.Utils.PayloadToResult + } + createMany: { + args: Prisma.ServerNodeHistoryCreateManyArgs + result: BatchPayload + } + delete: { + args: Prisma.ServerNodeHistoryDeleteArgs + result: runtime.Types.Utils.PayloadToResult + } + update: { + args: Prisma.ServerNodeHistoryUpdateArgs + result: runtime.Types.Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ServerNodeHistoryDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ServerNodeHistoryUpdateManyArgs + result: BatchPayload + } + upsert: { + args: Prisma.ServerNodeHistoryUpsertArgs + result: runtime.Types.Utils.PayloadToResult + } + aggregate: { + args: Prisma.ServerNodeHistoryAggregateArgs + result: runtime.Types.Utils.Optional + } + groupBy: { + args: Prisma.ServerNodeHistoryGroupByArgs + result: runtime.Types.Utils.Optional[] + } + count: { + args: Prisma.ServerNodeHistoryCountArgs + result: runtime.Types.Utils.Optional | number + } + } + } + ServiceCheck: { + payload: Prisma.$ServiceCheckPayload + fields: Prisma.ServiceCheckFieldRefs + operations: { + findUnique: { + args: Prisma.ServiceCheckFindUniqueArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ServiceCheckFindUniqueOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findFirst: { + args: Prisma.ServiceCheckFindFirstArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ServiceCheckFindFirstOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findMany: { + args: Prisma.ServiceCheckFindManyArgs + result: runtime.Types.Utils.PayloadToResult[] + } + create: { + args: Prisma.ServiceCheckCreateArgs + result: runtime.Types.Utils.PayloadToResult + } + createMany: { + args: Prisma.ServiceCheckCreateManyArgs + result: BatchPayload + } + delete: { + args: Prisma.ServiceCheckDeleteArgs + result: runtime.Types.Utils.PayloadToResult + } + update: { + args: Prisma.ServiceCheckUpdateArgs + result: runtime.Types.Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ServiceCheckDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ServiceCheckUpdateManyArgs + result: BatchPayload + } + upsert: { + args: Prisma.ServiceCheckUpsertArgs + result: runtime.Types.Utils.PayloadToResult + } + aggregate: { + args: Prisma.ServiceCheckAggregateArgs + result: runtime.Types.Utils.Optional + } + groupBy: { + args: Prisma.ServiceCheckGroupByArgs + result: runtime.Types.Utils.Optional[] + } + count: { + args: Prisma.ServiceCheckCountArgs + result: runtime.Types.Utils.Optional | number + } + } + } Econ_SowInventory: { payload: Prisma.$Econ_SowInventoryPayload fields: Prisma.Econ_SowInventoryFieldRefs @@ -1114,6 +1315,7 @@ export const NewsScalarFieldEnum = { id: 'id', title: 'title', summary: 'summary', + content: 'content', source: 'source', url: 'url', publishedAt: 'publishedAt', @@ -1140,6 +1342,70 @@ export const AlertScalarFieldEnum = { export type AlertScalarFieldEnum = (typeof AlertScalarFieldEnum)[keyof typeof AlertScalarFieldEnum] +export const ServerNodeScalarFieldEnum = { + id: 'id', + uuid: 'uuid', + name: 'name', + cpuName: 'cpuName', + os: 'os', + region: 'region', + memTotal: 'memTotal', + diskTotal: 'diskTotal', + cpuCores: 'cpuCores', + cpuUsage: 'cpuUsage', + ramUsed: 'ramUsed', + swapUsed: 'swapUsed', + load1: 'load1', + load5: 'load5', + load15: 'load15', + diskUsed: 'diskUsed', + netIn: 'netIn', + netOut: 'netOut', + uptime: 'uptime', + process: 'process', + connections: 'connections', + status: 'status', + recordedAt: 'recordedAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +} as const + +export type ServerNodeScalarFieldEnum = (typeof ServerNodeScalarFieldEnum)[keyof typeof ServerNodeScalarFieldEnum] + + +export const ServerNodeHistoryScalarFieldEnum = { + id: 'id', + uuid: 'uuid', + period: 'period', + cpu: 'cpu', + ram: 'ram', + load: 'load', + disk: 'disk', + netIn: 'netIn', + netOut: 'netOut', + process: 'process', + connections: 'connections', + createdAt: 'createdAt' +} as const + +export type ServerNodeHistoryScalarFieldEnum = (typeof ServerNodeHistoryScalarFieldEnum)[keyof typeof ServerNodeHistoryScalarFieldEnum] + + +export const ServiceCheckScalarFieldEnum = { + id: 'id', + name: 'name', + url: 'url', + status: 'status', + latencyMs: 'latencyMs', + message: 'message', + lastCheckAt: 'lastCheckAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +} as const + +export type ServiceCheckScalarFieldEnum = (typeof ServiceCheckScalarFieldEnum)[keyof typeof ServiceCheckScalarFieldEnum] + + export const Econ_SowInventoryScalarFieldEnum = { id: 'id', month: 'month', @@ -1250,9 +1516,18 @@ export const IndicatorPointOrderByRelevanceFieldEnum = { export type IndicatorPointOrderByRelevanceFieldEnum = (typeof IndicatorPointOrderByRelevanceFieldEnum)[keyof typeof IndicatorPointOrderByRelevanceFieldEnum] +export const NullsOrder = { + first: 'first', + last: 'last' +} as const + +export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] + + export const NewsOrderByRelevanceFieldEnum = { title: 'title', summary: 'summary', + content: 'content', source: 'source', url: 'url' } as const @@ -1270,6 +1545,35 @@ export const AlertOrderByRelevanceFieldEnum = { export type AlertOrderByRelevanceFieldEnum = (typeof AlertOrderByRelevanceFieldEnum)[keyof typeof AlertOrderByRelevanceFieldEnum] +export const ServerNodeOrderByRelevanceFieldEnum = { + uuid: 'uuid', + name: 'name', + cpuName: 'cpuName', + os: 'os', + region: 'region', + status: 'status' +} as const + +export type ServerNodeOrderByRelevanceFieldEnum = (typeof ServerNodeOrderByRelevanceFieldEnum)[keyof typeof ServerNodeOrderByRelevanceFieldEnum] + + +export const ServerNodeHistoryOrderByRelevanceFieldEnum = { + uuid: 'uuid' +} as const + +export type ServerNodeHistoryOrderByRelevanceFieldEnum = (typeof ServerNodeHistoryOrderByRelevanceFieldEnum)[keyof typeof ServerNodeHistoryOrderByRelevanceFieldEnum] + + +export const ServiceCheckOrderByRelevanceFieldEnum = { + name: 'name', + url: 'url', + status: 'status', + message: 'message' +} as const + +export type ServiceCheckOrderByRelevanceFieldEnum = (typeof ServiceCheckOrderByRelevanceFieldEnum)[keyof typeof ServiceCheckOrderByRelevanceFieldEnum] + + export const Econ_SowInventoryOrderByRelevanceFieldEnum = { month: 'month' } as const @@ -1277,14 +1581,6 @@ export const Econ_SowInventoryOrderByRelevanceFieldEnum = { export type Econ_SowInventoryOrderByRelevanceFieldEnum = (typeof Econ_SowInventoryOrderByRelevanceFieldEnum)[keyof typeof Econ_SowInventoryOrderByRelevanceFieldEnum] -export const NullsOrder = { - first: 'first', - last: 'last' -} as const - -export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] - - export const ScraperCacheOrderByRelevanceFieldEnum = { scraperName: 'scraperName', lastDataHash: 'lastDataHash' @@ -1347,6 +1643,13 @@ export type BooleanFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float'> + +/** + * Reference to a field of type 'BigInt' + */ +export type BigIntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'BigInt'> + + /** * Batch Payload for updateMany & deleteMany & createMany */ @@ -1449,6 +1752,9 @@ export type GlobalOmitConfig = { indicatorPoint?: Prisma.IndicatorPointOmit news?: Prisma.NewsOmit alert?: Prisma.AlertOmit + serverNode?: Prisma.ServerNodeOmit + serverNodeHistory?: Prisma.ServerNodeHistoryOmit + serviceCheck?: Prisma.ServiceCheckOmit econ_SowInventory?: Prisma.Econ_SowInventoryOmit scraperCache?: Prisma.ScraperCacheOmit } diff --git a/generated/prisma/internal/prismaNamespaceBrowser.ts b/generated/prisma/internal/prismaNamespaceBrowser.ts index 14263c9..d7a51ac 100644 --- a/generated/prisma/internal/prismaNamespaceBrowser.ts +++ b/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -58,6 +58,9 @@ export const ModelName = { IndicatorPoint: 'IndicatorPoint', News: 'News', Alert: 'Alert', + ServerNode: 'ServerNode', + ServerNodeHistory: 'ServerNodeHistory', + ServiceCheck: 'ServiceCheck', Econ_SowInventory: 'Econ_SowInventory', ScraperCache: 'ScraperCache' } as const @@ -147,6 +150,7 @@ export const NewsScalarFieldEnum = { id: 'id', title: 'title', summary: 'summary', + content: 'content', source: 'source', url: 'url', publishedAt: 'publishedAt', @@ -173,6 +177,70 @@ export const AlertScalarFieldEnum = { export type AlertScalarFieldEnum = (typeof AlertScalarFieldEnum)[keyof typeof AlertScalarFieldEnum] +export const ServerNodeScalarFieldEnum = { + id: 'id', + uuid: 'uuid', + name: 'name', + cpuName: 'cpuName', + os: 'os', + region: 'region', + memTotal: 'memTotal', + diskTotal: 'diskTotal', + cpuCores: 'cpuCores', + cpuUsage: 'cpuUsage', + ramUsed: 'ramUsed', + swapUsed: 'swapUsed', + load1: 'load1', + load5: 'load5', + load15: 'load15', + diskUsed: 'diskUsed', + netIn: 'netIn', + netOut: 'netOut', + uptime: 'uptime', + process: 'process', + connections: 'connections', + status: 'status', + recordedAt: 'recordedAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +} as const + +export type ServerNodeScalarFieldEnum = (typeof ServerNodeScalarFieldEnum)[keyof typeof ServerNodeScalarFieldEnum] + + +export const ServerNodeHistoryScalarFieldEnum = { + id: 'id', + uuid: 'uuid', + period: 'period', + cpu: 'cpu', + ram: 'ram', + load: 'load', + disk: 'disk', + netIn: 'netIn', + netOut: 'netOut', + process: 'process', + connections: 'connections', + createdAt: 'createdAt' +} as const + +export type ServerNodeHistoryScalarFieldEnum = (typeof ServerNodeHistoryScalarFieldEnum)[keyof typeof ServerNodeHistoryScalarFieldEnum] + + +export const ServiceCheckScalarFieldEnum = { + id: 'id', + name: 'name', + url: 'url', + status: 'status', + latencyMs: 'latencyMs', + message: 'message', + lastCheckAt: 'lastCheckAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +} as const + +export type ServiceCheckScalarFieldEnum = (typeof ServiceCheckScalarFieldEnum)[keyof typeof ServiceCheckScalarFieldEnum] + + export const Econ_SowInventoryScalarFieldEnum = { id: 'id', month: 'month', @@ -283,9 +351,18 @@ export const IndicatorPointOrderByRelevanceFieldEnum = { export type IndicatorPointOrderByRelevanceFieldEnum = (typeof IndicatorPointOrderByRelevanceFieldEnum)[keyof typeof IndicatorPointOrderByRelevanceFieldEnum] +export const NullsOrder = { + first: 'first', + last: 'last' +} as const + +export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] + + export const NewsOrderByRelevanceFieldEnum = { title: 'title', summary: 'summary', + content: 'content', source: 'source', url: 'url' } as const @@ -303,6 +380,35 @@ export const AlertOrderByRelevanceFieldEnum = { export type AlertOrderByRelevanceFieldEnum = (typeof AlertOrderByRelevanceFieldEnum)[keyof typeof AlertOrderByRelevanceFieldEnum] +export const ServerNodeOrderByRelevanceFieldEnum = { + uuid: 'uuid', + name: 'name', + cpuName: 'cpuName', + os: 'os', + region: 'region', + status: 'status' +} as const + +export type ServerNodeOrderByRelevanceFieldEnum = (typeof ServerNodeOrderByRelevanceFieldEnum)[keyof typeof ServerNodeOrderByRelevanceFieldEnum] + + +export const ServerNodeHistoryOrderByRelevanceFieldEnum = { + uuid: 'uuid' +} as const + +export type ServerNodeHistoryOrderByRelevanceFieldEnum = (typeof ServerNodeHistoryOrderByRelevanceFieldEnum)[keyof typeof ServerNodeHistoryOrderByRelevanceFieldEnum] + + +export const ServiceCheckOrderByRelevanceFieldEnum = { + name: 'name', + url: 'url', + status: 'status', + message: 'message' +} as const + +export type ServiceCheckOrderByRelevanceFieldEnum = (typeof ServiceCheckOrderByRelevanceFieldEnum)[keyof typeof ServiceCheckOrderByRelevanceFieldEnum] + + export const Econ_SowInventoryOrderByRelevanceFieldEnum = { month: 'month' } as const @@ -310,14 +416,6 @@ export const Econ_SowInventoryOrderByRelevanceFieldEnum = { export type Econ_SowInventoryOrderByRelevanceFieldEnum = (typeof Econ_SowInventoryOrderByRelevanceFieldEnum)[keyof typeof Econ_SowInventoryOrderByRelevanceFieldEnum] -export const NullsOrder = { - first: 'first', - last: 'last' -} as const - -export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] - - export const ScraperCacheOrderByRelevanceFieldEnum = { scraperName: 'scraperName', lastDataHash: 'lastDataHash' diff --git a/generated/prisma/models.ts b/generated/prisma/models.ts index 0234ad0..54302c0 100644 --- a/generated/prisma/models.ts +++ b/generated/prisma/models.ts @@ -15,6 +15,9 @@ export type * from './models/Indicator.ts' export type * from './models/IndicatorPoint.ts' export type * from './models/News.ts' export type * from './models/Alert.ts' +export type * from './models/ServerNode.ts' +export type * from './models/ServerNodeHistory.ts' +export type * from './models/ServiceCheck.ts' export type * from './models/Econ_SowInventory.ts' export type * from './models/ScraperCache.ts' export type * from './commonInputTypes.ts' \ No newline at end of file diff --git a/generated/prisma/models/News.ts b/generated/prisma/models/News.ts index 00eb288..371f28c 100644 --- a/generated/prisma/models/News.ts +++ b/generated/prisma/models/News.ts @@ -40,6 +40,7 @@ export type NewsMinAggregateOutputType = { id: number | null title: string | null summary: string | null + content: string | null source: string | null url: string | null publishedAt: Date | null @@ -51,6 +52,7 @@ export type NewsMaxAggregateOutputType = { id: number | null title: string | null summary: string | null + content: string | null source: string | null url: string | null publishedAt: Date | null @@ -62,6 +64,7 @@ export type NewsCountAggregateOutputType = { id: number title: number summary: number + content: number source: number url: number publishedAt: number @@ -85,6 +88,7 @@ export type NewsMinAggregateInputType = { id?: true title?: true summary?: true + content?: true source?: true url?: true publishedAt?: true @@ -96,6 +100,7 @@ export type NewsMaxAggregateInputType = { id?: true title?: true summary?: true + content?: true source?: true url?: true publishedAt?: true @@ -107,6 +112,7 @@ export type NewsCountAggregateInputType = { id?: true title?: true summary?: true + content?: true source?: true url?: true publishedAt?: true @@ -205,6 +211,7 @@ export type NewsGroupByOutputType = { id: number title: string summary: string + content: string | null source: string url: string publishedAt: Date @@ -239,6 +246,7 @@ export type NewsWhereInput = { id?: Prisma.IntFilter<"News"> | number title?: Prisma.StringFilter<"News"> | string summary?: Prisma.StringFilter<"News"> | string + content?: Prisma.StringNullableFilter<"News"> | string | null source?: Prisma.StringFilter<"News"> | string url?: Prisma.StringFilter<"News"> | string publishedAt?: Prisma.DateTimeFilter<"News"> | Date | string @@ -250,6 +258,7 @@ export type NewsOrderByWithRelationInput = { id?: Prisma.SortOrder title?: Prisma.SortOrder summary?: Prisma.SortOrder + content?: Prisma.SortOrderInput | Prisma.SortOrder source?: Prisma.SortOrder url?: Prisma.SortOrder publishedAt?: Prisma.SortOrder @@ -266,6 +275,7 @@ export type NewsWhereUniqueInput = Prisma.AtLeast<{ NOT?: Prisma.NewsWhereInput | Prisma.NewsWhereInput[] title?: Prisma.StringFilter<"News"> | string summary?: Prisma.StringFilter<"News"> | string + content?: Prisma.StringNullableFilter<"News"> | string | null source?: Prisma.StringFilter<"News"> | string url?: Prisma.StringFilter<"News"> | string publishedAt?: Prisma.DateTimeFilter<"News"> | Date | string @@ -277,6 +287,7 @@ export type NewsOrderByWithAggregationInput = { id?: Prisma.SortOrder title?: Prisma.SortOrder summary?: Prisma.SortOrder + content?: Prisma.SortOrderInput | Prisma.SortOrder source?: Prisma.SortOrder url?: Prisma.SortOrder publishedAt?: Prisma.SortOrder @@ -296,6 +307,7 @@ export type NewsScalarWhereWithAggregatesInput = { id?: Prisma.IntWithAggregatesFilter<"News"> | number title?: Prisma.StringWithAggregatesFilter<"News"> | string summary?: Prisma.StringWithAggregatesFilter<"News"> | string + content?: Prisma.StringNullableWithAggregatesFilter<"News"> | string | null source?: Prisma.StringWithAggregatesFilter<"News"> | string url?: Prisma.StringWithAggregatesFilter<"News"> | string publishedAt?: Prisma.DateTimeWithAggregatesFilter<"News"> | Date | string @@ -306,6 +318,7 @@ export type NewsScalarWhereWithAggregatesInput = { export type NewsCreateInput = { title: string summary?: string + content?: string | null source?: string url?: string publishedAt: Date | string @@ -317,6 +330,7 @@ export type NewsUncheckedCreateInput = { id?: number title: string summary?: string + content?: string | null source?: string url?: string publishedAt: Date | string @@ -327,6 +341,7 @@ export type NewsUncheckedCreateInput = { export type NewsUpdateInput = { title?: Prisma.StringFieldUpdateOperationsInput | string summary?: Prisma.StringFieldUpdateOperationsInput | string + content?: Prisma.NullableStringFieldUpdateOperationsInput | string | null source?: Prisma.StringFieldUpdateOperationsInput | string url?: Prisma.StringFieldUpdateOperationsInput | string publishedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string @@ -338,6 +353,7 @@ export type NewsUncheckedUpdateInput = { id?: Prisma.IntFieldUpdateOperationsInput | number title?: Prisma.StringFieldUpdateOperationsInput | string summary?: Prisma.StringFieldUpdateOperationsInput | string + content?: Prisma.NullableStringFieldUpdateOperationsInput | string | null source?: Prisma.StringFieldUpdateOperationsInput | string url?: Prisma.StringFieldUpdateOperationsInput | string publishedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string @@ -349,6 +365,7 @@ export type NewsCreateManyInput = { id?: number title: string summary?: string + content?: string | null source?: string url?: string publishedAt: Date | string @@ -359,6 +376,7 @@ export type NewsCreateManyInput = { export type NewsUpdateManyMutationInput = { title?: Prisma.StringFieldUpdateOperationsInput | string summary?: Prisma.StringFieldUpdateOperationsInput | string + content?: Prisma.NullableStringFieldUpdateOperationsInput | string | null source?: Prisma.StringFieldUpdateOperationsInput | string url?: Prisma.StringFieldUpdateOperationsInput | string publishedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string @@ -370,6 +388,7 @@ export type NewsUncheckedUpdateManyInput = { id?: Prisma.IntFieldUpdateOperationsInput | number title?: Prisma.StringFieldUpdateOperationsInput | string summary?: Prisma.StringFieldUpdateOperationsInput | string + content?: Prisma.NullableStringFieldUpdateOperationsInput | string | null source?: Prisma.StringFieldUpdateOperationsInput | string url?: Prisma.StringFieldUpdateOperationsInput | string publishedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string @@ -392,6 +411,7 @@ export type NewsCountOrderByAggregateInput = { id?: Prisma.SortOrder title?: Prisma.SortOrder summary?: Prisma.SortOrder + content?: Prisma.SortOrder source?: Prisma.SortOrder url?: Prisma.SortOrder publishedAt?: Prisma.SortOrder @@ -408,6 +428,7 @@ export type NewsMaxOrderByAggregateInput = { id?: Prisma.SortOrder title?: Prisma.SortOrder summary?: Prisma.SortOrder + content?: Prisma.SortOrder source?: Prisma.SortOrder url?: Prisma.SortOrder publishedAt?: Prisma.SortOrder @@ -419,6 +440,7 @@ export type NewsMinOrderByAggregateInput = { id?: Prisma.SortOrder title?: Prisma.SortOrder summary?: Prisma.SortOrder + content?: Prisma.SortOrder source?: Prisma.SortOrder url?: Prisma.SortOrder publishedAt?: Prisma.SortOrder @@ -431,12 +453,17 @@ export type NewsSumOrderByAggregateInput = { impactRank?: Prisma.SortOrder } +export type NullableStringFieldUpdateOperationsInput = { + set?: string | null +} + export type NewsSelect = runtime.Types.Extensions.GetSelect<{ id?: boolean title?: boolean summary?: boolean + content?: boolean source?: boolean url?: boolean publishedAt?: boolean @@ -450,6 +477,7 @@ export type NewsSelectScalar = { id?: boolean title?: boolean summary?: boolean + content?: boolean source?: boolean url?: boolean publishedAt?: boolean @@ -457,7 +485,7 @@ export type NewsSelectScalar = { createdAt?: boolean } -export type NewsOmit = runtime.Types.Extensions.GetOmit<"id" | "title" | "summary" | "source" | "url" | "publishedAt" | "impactRank" | "createdAt", ExtArgs["result"]["news"]> +export type NewsOmit = runtime.Types.Extensions.GetOmit<"id" | "title" | "summary" | "content" | "source" | "url" | "publishedAt" | "impactRank" | "createdAt", ExtArgs["result"]["news"]> export type $NewsPayload = { name: "News" @@ -466,6 +494,7 @@ export type $NewsPayload readonly title: Prisma.FieldRef<"News", 'String'> readonly summary: Prisma.FieldRef<"News", 'String'> + readonly content: Prisma.FieldRef<"News", 'String'> readonly source: Prisma.FieldRef<"News", 'String'> readonly url: Prisma.FieldRef<"News", 'String'> readonly publishedAt: Prisma.FieldRef<"News", 'DateTime'> diff --git a/generated/prisma/models/ScraperCache.ts b/generated/prisma/models/ScraperCache.ts index 036e742..3affd10 100644 --- a/generated/prisma/models/ScraperCache.ts +++ b/generated/prisma/models/ScraperCache.ts @@ -391,10 +391,6 @@ export type ScraperCacheSumOrderByAggregateInput = { id?: Prisma.SortOrder } -export type NullableStringFieldUpdateOperationsInput = { - set?: string | null -} - export type ScraperCacheSelect = runtime.Types.Extensions.GetSelect<{ diff --git a/generated/prisma/models/ServerNode.ts b/generated/prisma/models/ServerNode.ts new file mode 100644 index 0000000..78ad387 --- /dev/null +++ b/generated/prisma/models/ServerNode.ts @@ -0,0 +1,1702 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file exports the `ServerNode` model and its related types. + * + * 🟢 You can import this file directly. + */ +import type * as runtime from "@prisma/client/runtime/client" +import type * as $Enums from "../enums.ts" +import type * as Prisma from "../internal/prismaNamespace.ts" + +/** + * Model ServerNode + * + */ +export type ServerNodeModel = runtime.Types.Result.DefaultSelection + +export type AggregateServerNode = { + _count: ServerNodeCountAggregateOutputType | null + _avg: ServerNodeAvgAggregateOutputType | null + _sum: ServerNodeSumAggregateOutputType | null + _min: ServerNodeMinAggregateOutputType | null + _max: ServerNodeMaxAggregateOutputType | null +} + +export type ServerNodeAvgAggregateOutputType = { + id: number | null + memTotal: number | null + diskTotal: number | null + cpuCores: number | null + cpuUsage: number | null + ramUsed: number | null + swapUsed: number | null + load1: number | null + load5: number | null + load15: number | null + diskUsed: number | null + netIn: number | null + netOut: number | null + uptime: number | null + process: number | null + connections: number | null +} + +export type ServerNodeSumAggregateOutputType = { + id: number | null + memTotal: bigint | null + diskTotal: bigint | null + cpuCores: number | null + cpuUsage: number | null + ramUsed: bigint | null + swapUsed: bigint | null + load1: number | null + load5: number | null + load15: number | null + diskUsed: bigint | null + netIn: bigint | null + netOut: bigint | null + uptime: bigint | null + process: number | null + connections: number | null +} + +export type ServerNodeMinAggregateOutputType = { + id: number | null + uuid: string | null + name: string | null + cpuName: string | null + os: string | null + region: string | null + memTotal: bigint | null + diskTotal: bigint | null + cpuCores: number | null + cpuUsage: number | null + ramUsed: bigint | null + swapUsed: bigint | null + load1: number | null + load5: number | null + load15: number | null + diskUsed: bigint | null + netIn: bigint | null + netOut: bigint | null + uptime: bigint | null + process: number | null + connections: number | null + status: string | null + recordedAt: Date | null + createdAt: Date | null + updatedAt: Date | null +} + +export type ServerNodeMaxAggregateOutputType = { + id: number | null + uuid: string | null + name: string | null + cpuName: string | null + os: string | null + region: string | null + memTotal: bigint | null + diskTotal: bigint | null + cpuCores: number | null + cpuUsage: number | null + ramUsed: bigint | null + swapUsed: bigint | null + load1: number | null + load5: number | null + load15: number | null + diskUsed: bigint | null + netIn: bigint | null + netOut: bigint | null + uptime: bigint | null + process: number | null + connections: number | null + status: string | null + recordedAt: Date | null + createdAt: Date | null + updatedAt: Date | null +} + +export type ServerNodeCountAggregateOutputType = { + id: number + uuid: number + name: number + cpuName: number + os: number + region: number + memTotal: number + diskTotal: number + cpuCores: number + cpuUsage: number + ramUsed: number + swapUsed: number + load1: number + load5: number + load15: number + diskUsed: number + netIn: number + netOut: number + uptime: number + process: number + connections: number + status: number + recordedAt: number + createdAt: number + updatedAt: number + _all: number +} + + +export type ServerNodeAvgAggregateInputType = { + id?: true + memTotal?: true + diskTotal?: true + cpuCores?: true + cpuUsage?: true + ramUsed?: true + swapUsed?: true + load1?: true + load5?: true + load15?: true + diskUsed?: true + netIn?: true + netOut?: true + uptime?: true + process?: true + connections?: true +} + +export type ServerNodeSumAggregateInputType = { + id?: true + memTotal?: true + diskTotal?: true + cpuCores?: true + cpuUsage?: true + ramUsed?: true + swapUsed?: true + load1?: true + load5?: true + load15?: true + diskUsed?: true + netIn?: true + netOut?: true + uptime?: true + process?: true + connections?: true +} + +export type ServerNodeMinAggregateInputType = { + id?: true + uuid?: true + name?: true + cpuName?: true + os?: true + region?: true + memTotal?: true + diskTotal?: true + cpuCores?: true + cpuUsage?: true + ramUsed?: true + swapUsed?: true + load1?: true + load5?: true + load15?: true + diskUsed?: true + netIn?: true + netOut?: true + uptime?: true + process?: true + connections?: true + status?: true + recordedAt?: true + createdAt?: true + updatedAt?: true +} + +export type ServerNodeMaxAggregateInputType = { + id?: true + uuid?: true + name?: true + cpuName?: true + os?: true + region?: true + memTotal?: true + diskTotal?: true + cpuCores?: true + cpuUsage?: true + ramUsed?: true + swapUsed?: true + load1?: true + load5?: true + load15?: true + diskUsed?: true + netIn?: true + netOut?: true + uptime?: true + process?: true + connections?: true + status?: true + recordedAt?: true + createdAt?: true + updatedAt?: true +} + +export type ServerNodeCountAggregateInputType = { + id?: true + uuid?: true + name?: true + cpuName?: true + os?: true + region?: true + memTotal?: true + diskTotal?: true + cpuCores?: true + cpuUsage?: true + ramUsed?: true + swapUsed?: true + load1?: true + load5?: true + load15?: true + diskUsed?: true + netIn?: true + netOut?: true + uptime?: true + process?: true + connections?: true + status?: true + recordedAt?: true + createdAt?: true + updatedAt?: true + _all?: true +} + +export type ServerNodeAggregateArgs = { + /** + * Filter which ServerNode to aggregate. + */ + where?: Prisma.ServerNodeWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServerNodes to fetch. + */ + orderBy?: Prisma.ServerNodeOrderByWithRelationInput | Prisma.ServerNodeOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: Prisma.ServerNodeWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServerNodes from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServerNodes. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned ServerNodes + **/ + _count?: true | ServerNodeCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: ServerNodeAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: ServerNodeSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ServerNodeMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ServerNodeMaxAggregateInputType +} + +export type GetServerNodeAggregateType = { + [P in keyof T & keyof AggregateServerNode]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType +} + + + + +export type ServerNodeGroupByArgs = { + where?: Prisma.ServerNodeWhereInput + orderBy?: Prisma.ServerNodeOrderByWithAggregationInput | Prisma.ServerNodeOrderByWithAggregationInput[] + by: Prisma.ServerNodeScalarFieldEnum[] | Prisma.ServerNodeScalarFieldEnum + having?: Prisma.ServerNodeScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ServerNodeCountAggregateInputType | true + _avg?: ServerNodeAvgAggregateInputType + _sum?: ServerNodeSumAggregateInputType + _min?: ServerNodeMinAggregateInputType + _max?: ServerNodeMaxAggregateInputType +} + +export type ServerNodeGroupByOutputType = { + id: number + uuid: string + name: string + cpuName: string + os: string + region: string + memTotal: bigint + diskTotal: bigint + cpuCores: number + cpuUsage: number + ramUsed: bigint + swapUsed: bigint + load1: number + load5: number + load15: number + diskUsed: bigint + netIn: bigint + netOut: bigint + uptime: bigint + process: number + connections: number + status: string + recordedAt: Date + createdAt: Date + updatedAt: Date + _count: ServerNodeCountAggregateOutputType | null + _avg: ServerNodeAvgAggregateOutputType | null + _sum: ServerNodeSumAggregateOutputType | null + _min: ServerNodeMinAggregateOutputType | null + _max: ServerNodeMaxAggregateOutputType | null +} + +export type GetServerNodeGroupByPayload = Prisma.PrismaPromise< + Array< + Prisma.PickEnumerable & + { + [P in ((keyof T) & (keyof ServerNodeGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType + } + > + > + + + +export type ServerNodeWhereInput = { + AND?: Prisma.ServerNodeWhereInput | Prisma.ServerNodeWhereInput[] + OR?: Prisma.ServerNodeWhereInput[] + NOT?: Prisma.ServerNodeWhereInput | Prisma.ServerNodeWhereInput[] + id?: Prisma.IntFilter<"ServerNode"> | number + uuid?: Prisma.StringFilter<"ServerNode"> | string + name?: Prisma.StringFilter<"ServerNode"> | string + cpuName?: Prisma.StringFilter<"ServerNode"> | string + os?: Prisma.StringFilter<"ServerNode"> | string + region?: Prisma.StringFilter<"ServerNode"> | string + memTotal?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + diskTotal?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + cpuCores?: Prisma.IntFilter<"ServerNode"> | number + cpuUsage?: Prisma.FloatFilter<"ServerNode"> | number + ramUsed?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + swapUsed?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + load1?: Prisma.FloatFilter<"ServerNode"> | number + load5?: Prisma.FloatFilter<"ServerNode"> | number + load15?: Prisma.FloatFilter<"ServerNode"> | number + diskUsed?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + netIn?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + netOut?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + uptime?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + process?: Prisma.IntFilter<"ServerNode"> | number + connections?: Prisma.IntFilter<"ServerNode"> | number + status?: Prisma.StringFilter<"ServerNode"> | string + recordedAt?: Prisma.DateTimeFilter<"ServerNode"> | Date | string + createdAt?: Prisma.DateTimeFilter<"ServerNode"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"ServerNode"> | Date | string +} + +export type ServerNodeOrderByWithRelationInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + name?: Prisma.SortOrder + cpuName?: Prisma.SortOrder + os?: Prisma.SortOrder + region?: Prisma.SortOrder + memTotal?: Prisma.SortOrder + diskTotal?: Prisma.SortOrder + cpuCores?: Prisma.SortOrder + cpuUsage?: Prisma.SortOrder + ramUsed?: Prisma.SortOrder + swapUsed?: Prisma.SortOrder + load1?: Prisma.SortOrder + load5?: Prisma.SortOrder + load15?: Prisma.SortOrder + diskUsed?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + uptime?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + status?: Prisma.SortOrder + recordedAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder + _relevance?: Prisma.ServerNodeOrderByRelevanceInput +} + +export type ServerNodeWhereUniqueInput = Prisma.AtLeast<{ + id?: number + uuid?: string + AND?: Prisma.ServerNodeWhereInput | Prisma.ServerNodeWhereInput[] + OR?: Prisma.ServerNodeWhereInput[] + NOT?: Prisma.ServerNodeWhereInput | Prisma.ServerNodeWhereInput[] + name?: Prisma.StringFilter<"ServerNode"> | string + cpuName?: Prisma.StringFilter<"ServerNode"> | string + os?: Prisma.StringFilter<"ServerNode"> | string + region?: Prisma.StringFilter<"ServerNode"> | string + memTotal?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + diskTotal?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + cpuCores?: Prisma.IntFilter<"ServerNode"> | number + cpuUsage?: Prisma.FloatFilter<"ServerNode"> | number + ramUsed?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + swapUsed?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + load1?: Prisma.FloatFilter<"ServerNode"> | number + load5?: Prisma.FloatFilter<"ServerNode"> | number + load15?: Prisma.FloatFilter<"ServerNode"> | number + diskUsed?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + netIn?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + netOut?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + uptime?: Prisma.BigIntFilter<"ServerNode"> | bigint | number + process?: Prisma.IntFilter<"ServerNode"> | number + connections?: Prisma.IntFilter<"ServerNode"> | number + status?: Prisma.StringFilter<"ServerNode"> | string + recordedAt?: Prisma.DateTimeFilter<"ServerNode"> | Date | string + createdAt?: Prisma.DateTimeFilter<"ServerNode"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"ServerNode"> | Date | string +}, "id" | "uuid"> + +export type ServerNodeOrderByWithAggregationInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + name?: Prisma.SortOrder + cpuName?: Prisma.SortOrder + os?: Prisma.SortOrder + region?: Prisma.SortOrder + memTotal?: Prisma.SortOrder + diskTotal?: Prisma.SortOrder + cpuCores?: Prisma.SortOrder + cpuUsage?: Prisma.SortOrder + ramUsed?: Prisma.SortOrder + swapUsed?: Prisma.SortOrder + load1?: Prisma.SortOrder + load5?: Prisma.SortOrder + load15?: Prisma.SortOrder + diskUsed?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + uptime?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + status?: Prisma.SortOrder + recordedAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder + _count?: Prisma.ServerNodeCountOrderByAggregateInput + _avg?: Prisma.ServerNodeAvgOrderByAggregateInput + _max?: Prisma.ServerNodeMaxOrderByAggregateInput + _min?: Prisma.ServerNodeMinOrderByAggregateInput + _sum?: Prisma.ServerNodeSumOrderByAggregateInput +} + +export type ServerNodeScalarWhereWithAggregatesInput = { + AND?: Prisma.ServerNodeScalarWhereWithAggregatesInput | Prisma.ServerNodeScalarWhereWithAggregatesInput[] + OR?: Prisma.ServerNodeScalarWhereWithAggregatesInput[] + NOT?: Prisma.ServerNodeScalarWhereWithAggregatesInput | Prisma.ServerNodeScalarWhereWithAggregatesInput[] + id?: Prisma.IntWithAggregatesFilter<"ServerNode"> | number + uuid?: Prisma.StringWithAggregatesFilter<"ServerNode"> | string + name?: Prisma.StringWithAggregatesFilter<"ServerNode"> | string + cpuName?: Prisma.StringWithAggregatesFilter<"ServerNode"> | string + os?: Prisma.StringWithAggregatesFilter<"ServerNode"> | string + region?: Prisma.StringWithAggregatesFilter<"ServerNode"> | string + memTotal?: Prisma.BigIntWithAggregatesFilter<"ServerNode"> | bigint | number + diskTotal?: Prisma.BigIntWithAggregatesFilter<"ServerNode"> | bigint | number + cpuCores?: Prisma.IntWithAggregatesFilter<"ServerNode"> | number + cpuUsage?: Prisma.FloatWithAggregatesFilter<"ServerNode"> | number + ramUsed?: Prisma.BigIntWithAggregatesFilter<"ServerNode"> | bigint | number + swapUsed?: Prisma.BigIntWithAggregatesFilter<"ServerNode"> | bigint | number + load1?: Prisma.FloatWithAggregatesFilter<"ServerNode"> | number + load5?: Prisma.FloatWithAggregatesFilter<"ServerNode"> | number + load15?: Prisma.FloatWithAggregatesFilter<"ServerNode"> | number + diskUsed?: Prisma.BigIntWithAggregatesFilter<"ServerNode"> | bigint | number + netIn?: Prisma.BigIntWithAggregatesFilter<"ServerNode"> | bigint | number + netOut?: Prisma.BigIntWithAggregatesFilter<"ServerNode"> | bigint | number + uptime?: Prisma.BigIntWithAggregatesFilter<"ServerNode"> | bigint | number + process?: Prisma.IntWithAggregatesFilter<"ServerNode"> | number + connections?: Prisma.IntWithAggregatesFilter<"ServerNode"> | number + status?: Prisma.StringWithAggregatesFilter<"ServerNode"> | string + recordedAt?: Prisma.DateTimeWithAggregatesFilter<"ServerNode"> | Date | string + createdAt?: Prisma.DateTimeWithAggregatesFilter<"ServerNode"> | Date | string + updatedAt?: Prisma.DateTimeWithAggregatesFilter<"ServerNode"> | Date | string +} + +export type ServerNodeCreateInput = { + uuid: string + name: string + cpuName?: string + os?: string + region?: string + memTotal?: bigint | number + diskTotal?: bigint | number + cpuCores?: number + cpuUsage?: number + ramUsed?: bigint | number + swapUsed?: bigint | number + load1?: number + load5?: number + load15?: number + diskUsed?: bigint | number + netIn?: bigint | number + netOut?: bigint | number + uptime?: bigint | number + process?: number + connections?: number + status?: string + recordedAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string +} + +export type ServerNodeUncheckedCreateInput = { + id?: number + uuid: string + name: string + cpuName?: string + os?: string + region?: string + memTotal?: bigint | number + diskTotal?: bigint | number + cpuCores?: number + cpuUsage?: number + ramUsed?: bigint | number + swapUsed?: bigint | number + load1?: number + load5?: number + load15?: number + diskUsed?: bigint | number + netIn?: bigint | number + netOut?: bigint | number + uptime?: bigint | number + process?: number + connections?: number + status?: string + recordedAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string +} + +export type ServerNodeUpdateInput = { + uuid?: Prisma.StringFieldUpdateOperationsInput | string + name?: Prisma.StringFieldUpdateOperationsInput | string + cpuName?: Prisma.StringFieldUpdateOperationsInput | string + os?: Prisma.StringFieldUpdateOperationsInput | string + region?: Prisma.StringFieldUpdateOperationsInput | string + memTotal?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + diskTotal?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + cpuCores?: Prisma.IntFieldUpdateOperationsInput | number + cpuUsage?: Prisma.FloatFieldUpdateOperationsInput | number + ramUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + swapUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + load1?: Prisma.FloatFieldUpdateOperationsInput | number + load5?: Prisma.FloatFieldUpdateOperationsInput | number + load15?: Prisma.FloatFieldUpdateOperationsInput | number + diskUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netIn?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netOut?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + uptime?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + process?: Prisma.IntFieldUpdateOperationsInput | number + connections?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.StringFieldUpdateOperationsInput | string + recordedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServerNodeUncheckedUpdateInput = { + id?: Prisma.IntFieldUpdateOperationsInput | number + uuid?: Prisma.StringFieldUpdateOperationsInput | string + name?: Prisma.StringFieldUpdateOperationsInput | string + cpuName?: Prisma.StringFieldUpdateOperationsInput | string + os?: Prisma.StringFieldUpdateOperationsInput | string + region?: Prisma.StringFieldUpdateOperationsInput | string + memTotal?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + diskTotal?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + cpuCores?: Prisma.IntFieldUpdateOperationsInput | number + cpuUsage?: Prisma.FloatFieldUpdateOperationsInput | number + ramUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + swapUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + load1?: Prisma.FloatFieldUpdateOperationsInput | number + load5?: Prisma.FloatFieldUpdateOperationsInput | number + load15?: Prisma.FloatFieldUpdateOperationsInput | number + diskUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netIn?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netOut?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + uptime?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + process?: Prisma.IntFieldUpdateOperationsInput | number + connections?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.StringFieldUpdateOperationsInput | string + recordedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServerNodeCreateManyInput = { + id?: number + uuid: string + name: string + cpuName?: string + os?: string + region?: string + memTotal?: bigint | number + diskTotal?: bigint | number + cpuCores?: number + cpuUsage?: number + ramUsed?: bigint | number + swapUsed?: bigint | number + load1?: number + load5?: number + load15?: number + diskUsed?: bigint | number + netIn?: bigint | number + netOut?: bigint | number + uptime?: bigint | number + process?: number + connections?: number + status?: string + recordedAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string +} + +export type ServerNodeUpdateManyMutationInput = { + uuid?: Prisma.StringFieldUpdateOperationsInput | string + name?: Prisma.StringFieldUpdateOperationsInput | string + cpuName?: Prisma.StringFieldUpdateOperationsInput | string + os?: Prisma.StringFieldUpdateOperationsInput | string + region?: Prisma.StringFieldUpdateOperationsInput | string + memTotal?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + diskTotal?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + cpuCores?: Prisma.IntFieldUpdateOperationsInput | number + cpuUsage?: Prisma.FloatFieldUpdateOperationsInput | number + ramUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + swapUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + load1?: Prisma.FloatFieldUpdateOperationsInput | number + load5?: Prisma.FloatFieldUpdateOperationsInput | number + load15?: Prisma.FloatFieldUpdateOperationsInput | number + diskUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netIn?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netOut?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + uptime?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + process?: Prisma.IntFieldUpdateOperationsInput | number + connections?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.StringFieldUpdateOperationsInput | string + recordedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServerNodeUncheckedUpdateManyInput = { + id?: Prisma.IntFieldUpdateOperationsInput | number + uuid?: Prisma.StringFieldUpdateOperationsInput | string + name?: Prisma.StringFieldUpdateOperationsInput | string + cpuName?: Prisma.StringFieldUpdateOperationsInput | string + os?: Prisma.StringFieldUpdateOperationsInput | string + region?: Prisma.StringFieldUpdateOperationsInput | string + memTotal?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + diskTotal?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + cpuCores?: Prisma.IntFieldUpdateOperationsInput | number + cpuUsage?: Prisma.FloatFieldUpdateOperationsInput | number + ramUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + swapUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + load1?: Prisma.FloatFieldUpdateOperationsInput | number + load5?: Prisma.FloatFieldUpdateOperationsInput | number + load15?: Prisma.FloatFieldUpdateOperationsInput | number + diskUsed?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netIn?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netOut?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + uptime?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + process?: Prisma.IntFieldUpdateOperationsInput | number + connections?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.StringFieldUpdateOperationsInput | string + recordedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServerNodeOrderByRelevanceInput = { + fields: Prisma.ServerNodeOrderByRelevanceFieldEnum | Prisma.ServerNodeOrderByRelevanceFieldEnum[] + sort: Prisma.SortOrder + search: string +} + +export type ServerNodeCountOrderByAggregateInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + name?: Prisma.SortOrder + cpuName?: Prisma.SortOrder + os?: Prisma.SortOrder + region?: Prisma.SortOrder + memTotal?: Prisma.SortOrder + diskTotal?: Prisma.SortOrder + cpuCores?: Prisma.SortOrder + cpuUsage?: Prisma.SortOrder + ramUsed?: Prisma.SortOrder + swapUsed?: Prisma.SortOrder + load1?: Prisma.SortOrder + load5?: Prisma.SortOrder + load15?: Prisma.SortOrder + diskUsed?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + uptime?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + status?: Prisma.SortOrder + recordedAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type ServerNodeAvgOrderByAggregateInput = { + id?: Prisma.SortOrder + memTotal?: Prisma.SortOrder + diskTotal?: Prisma.SortOrder + cpuCores?: Prisma.SortOrder + cpuUsage?: Prisma.SortOrder + ramUsed?: Prisma.SortOrder + swapUsed?: Prisma.SortOrder + load1?: Prisma.SortOrder + load5?: Prisma.SortOrder + load15?: Prisma.SortOrder + diskUsed?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + uptime?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder +} + +export type ServerNodeMaxOrderByAggregateInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + name?: Prisma.SortOrder + cpuName?: Prisma.SortOrder + os?: Prisma.SortOrder + region?: Prisma.SortOrder + memTotal?: Prisma.SortOrder + diskTotal?: Prisma.SortOrder + cpuCores?: Prisma.SortOrder + cpuUsage?: Prisma.SortOrder + ramUsed?: Prisma.SortOrder + swapUsed?: Prisma.SortOrder + load1?: Prisma.SortOrder + load5?: Prisma.SortOrder + load15?: Prisma.SortOrder + diskUsed?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + uptime?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + status?: Prisma.SortOrder + recordedAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type ServerNodeMinOrderByAggregateInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + name?: Prisma.SortOrder + cpuName?: Prisma.SortOrder + os?: Prisma.SortOrder + region?: Prisma.SortOrder + memTotal?: Prisma.SortOrder + diskTotal?: Prisma.SortOrder + cpuCores?: Prisma.SortOrder + cpuUsage?: Prisma.SortOrder + ramUsed?: Prisma.SortOrder + swapUsed?: Prisma.SortOrder + load1?: Prisma.SortOrder + load5?: Prisma.SortOrder + load15?: Prisma.SortOrder + diskUsed?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + uptime?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + status?: Prisma.SortOrder + recordedAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type ServerNodeSumOrderByAggregateInput = { + id?: Prisma.SortOrder + memTotal?: Prisma.SortOrder + diskTotal?: Prisma.SortOrder + cpuCores?: Prisma.SortOrder + cpuUsage?: Prisma.SortOrder + ramUsed?: Prisma.SortOrder + swapUsed?: Prisma.SortOrder + load1?: Prisma.SortOrder + load5?: Prisma.SortOrder + load15?: Prisma.SortOrder + diskUsed?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + uptime?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder +} + +export type BigIntFieldUpdateOperationsInput = { + set?: bigint | number + increment?: bigint | number + decrement?: bigint | number + multiply?: bigint | number + divide?: bigint | number +} + + + +export type ServerNodeSelect = runtime.Types.Extensions.GetSelect<{ + id?: boolean + uuid?: boolean + name?: boolean + cpuName?: boolean + os?: boolean + region?: boolean + memTotal?: boolean + diskTotal?: boolean + cpuCores?: boolean + cpuUsage?: boolean + ramUsed?: boolean + swapUsed?: boolean + load1?: boolean + load5?: boolean + load15?: boolean + diskUsed?: boolean + netIn?: boolean + netOut?: boolean + uptime?: boolean + process?: boolean + connections?: boolean + status?: boolean + recordedAt?: boolean + createdAt?: boolean + updatedAt?: boolean +}, ExtArgs["result"]["serverNode"]> + + + +export type ServerNodeSelectScalar = { + id?: boolean + uuid?: boolean + name?: boolean + cpuName?: boolean + os?: boolean + region?: boolean + memTotal?: boolean + diskTotal?: boolean + cpuCores?: boolean + cpuUsage?: boolean + ramUsed?: boolean + swapUsed?: boolean + load1?: boolean + load5?: boolean + load15?: boolean + diskUsed?: boolean + netIn?: boolean + netOut?: boolean + uptime?: boolean + process?: boolean + connections?: boolean + status?: boolean + recordedAt?: boolean + createdAt?: boolean + updatedAt?: boolean +} + +export type ServerNodeOmit = runtime.Types.Extensions.GetOmit<"id" | "uuid" | "name" | "cpuName" | "os" | "region" | "memTotal" | "diskTotal" | "cpuCores" | "cpuUsage" | "ramUsed" | "swapUsed" | "load1" | "load5" | "load15" | "diskUsed" | "netIn" | "netOut" | "uptime" | "process" | "connections" | "status" | "recordedAt" | "createdAt" | "updatedAt", ExtArgs["result"]["serverNode"]> + +export type $ServerNodePayload = { + name: "ServerNode" + objects: {} + scalars: runtime.Types.Extensions.GetPayloadResult<{ + id: number + uuid: string + name: string + cpuName: string + os: string + region: string + memTotal: bigint + diskTotal: bigint + cpuCores: number + cpuUsage: number + ramUsed: bigint + swapUsed: bigint + load1: number + load5: number + load15: number + diskUsed: bigint + netIn: bigint + netOut: bigint + uptime: bigint + process: number + connections: number + status: string + recordedAt: Date + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["serverNode"]> + composites: {} +} + +export type ServerNodeGetPayload = runtime.Types.Result.GetResult + +export type ServerNodeCountArgs = + Omit & { + select?: ServerNodeCountAggregateInputType | true + } + +export interface ServerNodeDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['ServerNode'], meta: { name: 'ServerNode' } } + /** + * Find zero or one ServerNode that matches the filter. + * @param {ServerNodeFindUniqueArgs} args - Arguments to find a ServerNode + * @example + * // Get one ServerNode + * const serverNode = await prisma.serverNode.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeClient, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one ServerNode that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ServerNodeFindUniqueOrThrowArgs} args - Arguments to find a ServerNode + * @example + * // Get one ServerNode + * const serverNode = await prisma.serverNode.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeClient, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ServerNode that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeFindFirstArgs} args - Arguments to find a ServerNode + * @example + * // Get one ServerNode + * const serverNode = await prisma.serverNode.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeClient, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ServerNode that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeFindFirstOrThrowArgs} args - Arguments to find a ServerNode + * @example + * // Get one ServerNode + * const serverNode = await prisma.serverNode.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeClient, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more ServerNodes that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all ServerNodes + * const serverNodes = await prisma.serverNode.findMany() + * + * // Get first 10 ServerNodes + * const serverNodes = await prisma.serverNode.findMany({ take: 10 }) + * + * // Only select the `id` + * const serverNodeWithIdOnly = await prisma.serverNode.findMany({ select: { id: true } }) + * + */ + findMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions>> + + /** + * Create a ServerNode. + * @param {ServerNodeCreateArgs} args - Arguments to create a ServerNode. + * @example + * // Create one ServerNode + * const ServerNode = await prisma.serverNode.create({ + * data: { + * // ... data to create a ServerNode + * } + * }) + * + */ + create(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeClient, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many ServerNodes. + * @param {ServerNodeCreateManyArgs} args - Arguments to create many ServerNodes. + * @example + * // Create many ServerNodes + * const serverNode = await prisma.serverNode.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Delete a ServerNode. + * @param {ServerNodeDeleteArgs} args - Arguments to delete one ServerNode. + * @example + * // Delete one ServerNode + * const ServerNode = await prisma.serverNode.delete({ + * where: { + * // ... filter to delete one ServerNode + * } + * }) + * + */ + delete(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeClient, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one ServerNode. + * @param {ServerNodeUpdateArgs} args - Arguments to update one ServerNode. + * @example + * // Update one ServerNode + * const serverNode = await prisma.serverNode.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeClient, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more ServerNodes. + * @param {ServerNodeDeleteManyArgs} args - Arguments to filter ServerNodes to delete. + * @example + * // Delete a few ServerNodes + * const { count } = await prisma.serverNode.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ServerNodes. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many ServerNodes + * const serverNode = await prisma.serverNode.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Create or update one ServerNode. + * @param {ServerNodeUpsertArgs} args - Arguments to update or create a ServerNode. + * @example + * // Update or create a ServerNode + * const serverNode = await prisma.serverNode.upsert({ + * create: { + * // ... data to create a ServerNode + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the ServerNode we want to update + * } + * }) + */ + upsert(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeClient, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of ServerNodes. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeCountArgs} args - Arguments to filter ServerNodes to count. + * @example + * // Count the number of ServerNodes + * const count = await prisma.serverNode.count({ + * where: { + * // ... the filter for the ServerNodes we want to count + * } + * }) + **/ + count( + args?: Prisma.Subset, + ): Prisma.PrismaPromise< + T extends runtime.Types.Utils.Record<'select', any> + ? T['select'] extends true + ? number + : Prisma.GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a ServerNode. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Prisma.Subset): Prisma.PrismaPromise> + + /** + * Group by ServerNode. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends ServerNodeGroupByArgs, + HasSelectOrTake extends Prisma.Or< + Prisma.Extends<'skip', Prisma.Keys>, + Prisma.Extends<'take', Prisma.Keys> + >, + OrderByArg extends Prisma.True extends HasSelectOrTake + ? { orderBy: ServerNodeGroupByArgs['orderBy'] } + : { orderBy?: ServerNodeGroupByArgs['orderBy'] }, + OrderFields extends Prisma.ExcludeUnderscoreKeys>>, + ByFields extends Prisma.MaybeTupleToUnion, + ByValid extends Prisma.Has, + HavingFields extends Prisma.GetHavingFields, + HavingValid extends Prisma.Has, + ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, + InputErrors extends ByEmpty extends Prisma.True + ? `Error: "by" must not be empty.` + : HavingValid extends Prisma.False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: Prisma.SubsetIntersection & InputErrors): {} extends InputErrors ? GetServerNodeGroupByPayload : Prisma.PrismaPromise +/** + * Fields of the ServerNode model + */ +readonly fields: ServerNodeFieldRefs; +} + +/** + * The delegate class that acts as a "Promise-like" for ServerNode. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ +export interface Prisma__ServerNodeClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): runtime.Types.Utils.JsPromise +} + + + + +/** + * Fields of the ServerNode model + */ +export interface ServerNodeFieldRefs { + readonly id: Prisma.FieldRef<"ServerNode", 'Int'> + readonly uuid: Prisma.FieldRef<"ServerNode", 'String'> + readonly name: Prisma.FieldRef<"ServerNode", 'String'> + readonly cpuName: Prisma.FieldRef<"ServerNode", 'String'> + readonly os: Prisma.FieldRef<"ServerNode", 'String'> + readonly region: Prisma.FieldRef<"ServerNode", 'String'> + readonly memTotal: Prisma.FieldRef<"ServerNode", 'BigInt'> + readonly diskTotal: Prisma.FieldRef<"ServerNode", 'BigInt'> + readonly cpuCores: Prisma.FieldRef<"ServerNode", 'Int'> + readonly cpuUsage: Prisma.FieldRef<"ServerNode", 'Float'> + readonly ramUsed: Prisma.FieldRef<"ServerNode", 'BigInt'> + readonly swapUsed: Prisma.FieldRef<"ServerNode", 'BigInt'> + readonly load1: Prisma.FieldRef<"ServerNode", 'Float'> + readonly load5: Prisma.FieldRef<"ServerNode", 'Float'> + readonly load15: Prisma.FieldRef<"ServerNode", 'Float'> + readonly diskUsed: Prisma.FieldRef<"ServerNode", 'BigInt'> + readonly netIn: Prisma.FieldRef<"ServerNode", 'BigInt'> + readonly netOut: Prisma.FieldRef<"ServerNode", 'BigInt'> + readonly uptime: Prisma.FieldRef<"ServerNode", 'BigInt'> + readonly process: Prisma.FieldRef<"ServerNode", 'Int'> + readonly connections: Prisma.FieldRef<"ServerNode", 'Int'> + readonly status: Prisma.FieldRef<"ServerNode", 'String'> + readonly recordedAt: Prisma.FieldRef<"ServerNode", 'DateTime'> + readonly createdAt: Prisma.FieldRef<"ServerNode", 'DateTime'> + readonly updatedAt: Prisma.FieldRef<"ServerNode", 'DateTime'> +} + + +// Custom InputTypes +/** + * ServerNode findUnique + */ +export type ServerNodeFindUniqueArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * Filter, which ServerNode to fetch. + */ + where: Prisma.ServerNodeWhereUniqueInput +} + +/** + * ServerNode findUniqueOrThrow + */ +export type ServerNodeFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * Filter, which ServerNode to fetch. + */ + where: Prisma.ServerNodeWhereUniqueInput +} + +/** + * ServerNode findFirst + */ +export type ServerNodeFindFirstArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * Filter, which ServerNode to fetch. + */ + where?: Prisma.ServerNodeWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServerNodes to fetch. + */ + orderBy?: Prisma.ServerNodeOrderByWithRelationInput | Prisma.ServerNodeOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ServerNodes. + */ + cursor?: Prisma.ServerNodeWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServerNodes from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServerNodes. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServerNodes. + */ + distinct?: Prisma.ServerNodeScalarFieldEnum | Prisma.ServerNodeScalarFieldEnum[] +} + +/** + * ServerNode findFirstOrThrow + */ +export type ServerNodeFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * Filter, which ServerNode to fetch. + */ + where?: Prisma.ServerNodeWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServerNodes to fetch. + */ + orderBy?: Prisma.ServerNodeOrderByWithRelationInput | Prisma.ServerNodeOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ServerNodes. + */ + cursor?: Prisma.ServerNodeWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServerNodes from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServerNodes. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServerNodes. + */ + distinct?: Prisma.ServerNodeScalarFieldEnum | Prisma.ServerNodeScalarFieldEnum[] +} + +/** + * ServerNode findMany + */ +export type ServerNodeFindManyArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * Filter, which ServerNodes to fetch. + */ + where?: Prisma.ServerNodeWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServerNodes to fetch. + */ + orderBy?: Prisma.ServerNodeOrderByWithRelationInput | Prisma.ServerNodeOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing ServerNodes. + */ + cursor?: Prisma.ServerNodeWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServerNodes from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServerNodes. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServerNodes. + */ + distinct?: Prisma.ServerNodeScalarFieldEnum | Prisma.ServerNodeScalarFieldEnum[] +} + +/** + * ServerNode create + */ +export type ServerNodeCreateArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * The data needed to create a ServerNode. + */ + data: Prisma.XOR +} + +/** + * ServerNode createMany + */ +export type ServerNodeCreateManyArgs = { + /** + * The data used to create many ServerNodes. + */ + data: Prisma.ServerNodeCreateManyInput | Prisma.ServerNodeCreateManyInput[] + skipDuplicates?: boolean +} + +/** + * ServerNode update + */ +export type ServerNodeUpdateArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * The data needed to update a ServerNode. + */ + data: Prisma.XOR + /** + * Choose, which ServerNode to update. + */ + where: Prisma.ServerNodeWhereUniqueInput +} + +/** + * ServerNode updateMany + */ +export type ServerNodeUpdateManyArgs = { + /** + * The data used to update ServerNodes. + */ + data: Prisma.XOR + /** + * Filter which ServerNodes to update + */ + where?: Prisma.ServerNodeWhereInput + /** + * Limit how many ServerNodes to update. + */ + limit?: number +} + +/** + * ServerNode upsert + */ +export type ServerNodeUpsertArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * The filter to search for the ServerNode to update in case it exists. + */ + where: Prisma.ServerNodeWhereUniqueInput + /** + * In case the ServerNode found by the `where` argument doesn't exist, create a new ServerNode with this data. + */ + create: Prisma.XOR + /** + * In case the ServerNode was found with the provided `where` argument, update it with this data. + */ + update: Prisma.XOR +} + +/** + * ServerNode delete + */ +export type ServerNodeDeleteArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null + /** + * Filter which ServerNode to delete. + */ + where: Prisma.ServerNodeWhereUniqueInput +} + +/** + * ServerNode deleteMany + */ +export type ServerNodeDeleteManyArgs = { + /** + * Filter which ServerNodes to delete + */ + where?: Prisma.ServerNodeWhereInput + /** + * Limit how many ServerNodes to delete. + */ + limit?: number +} + +/** + * ServerNode without action + */ +export type ServerNodeDefaultArgs = { + /** + * Select specific fields to fetch from the ServerNode + */ + select?: Prisma.ServerNodeSelect | null + /** + * Omit specific fields from the ServerNode + */ + omit?: Prisma.ServerNodeOmit | null +} diff --git a/generated/prisma/models/ServerNodeHistory.ts b/generated/prisma/models/ServerNodeHistory.ts new file mode 100644 index 0000000..23cb1dc --- /dev/null +++ b/generated/prisma/models/ServerNodeHistory.ts @@ -0,0 +1,1320 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file exports the `ServerNodeHistory` model and its related types. + * + * 🟢 You can import this file directly. + */ +import type * as runtime from "@prisma/client/runtime/client" +import type * as $Enums from "../enums.ts" +import type * as Prisma from "../internal/prismaNamespace.ts" + +/** + * Model ServerNodeHistory + * + */ +export type ServerNodeHistoryModel = runtime.Types.Result.DefaultSelection + +export type AggregateServerNodeHistory = { + _count: ServerNodeHistoryCountAggregateOutputType | null + _avg: ServerNodeHistoryAvgAggregateOutputType | null + _sum: ServerNodeHistorySumAggregateOutputType | null + _min: ServerNodeHistoryMinAggregateOutputType | null + _max: ServerNodeHistoryMaxAggregateOutputType | null +} + +export type ServerNodeHistoryAvgAggregateOutputType = { + id: number | null + cpu: number | null + ram: number | null + load: number | null + disk: number | null + netIn: number | null + netOut: number | null + process: number | null + connections: number | null +} + +export type ServerNodeHistorySumAggregateOutputType = { + id: number | null + cpu: number | null + ram: bigint | null + load: number | null + disk: bigint | null + netIn: bigint | null + netOut: bigint | null + process: number | null + connections: number | null +} + +export type ServerNodeHistoryMinAggregateOutputType = { + id: number | null + uuid: string | null + period: Date | null + cpu: number | null + ram: bigint | null + load: number | null + disk: bigint | null + netIn: bigint | null + netOut: bigint | null + process: number | null + connections: number | null + createdAt: Date | null +} + +export type ServerNodeHistoryMaxAggregateOutputType = { + id: number | null + uuid: string | null + period: Date | null + cpu: number | null + ram: bigint | null + load: number | null + disk: bigint | null + netIn: bigint | null + netOut: bigint | null + process: number | null + connections: number | null + createdAt: Date | null +} + +export type ServerNodeHistoryCountAggregateOutputType = { + id: number + uuid: number + period: number + cpu: number + ram: number + load: number + disk: number + netIn: number + netOut: number + process: number + connections: number + createdAt: number + _all: number +} + + +export type ServerNodeHistoryAvgAggregateInputType = { + id?: true + cpu?: true + ram?: true + load?: true + disk?: true + netIn?: true + netOut?: true + process?: true + connections?: true +} + +export type ServerNodeHistorySumAggregateInputType = { + id?: true + cpu?: true + ram?: true + load?: true + disk?: true + netIn?: true + netOut?: true + process?: true + connections?: true +} + +export type ServerNodeHistoryMinAggregateInputType = { + id?: true + uuid?: true + period?: true + cpu?: true + ram?: true + load?: true + disk?: true + netIn?: true + netOut?: true + process?: true + connections?: true + createdAt?: true +} + +export type ServerNodeHistoryMaxAggregateInputType = { + id?: true + uuid?: true + period?: true + cpu?: true + ram?: true + load?: true + disk?: true + netIn?: true + netOut?: true + process?: true + connections?: true + createdAt?: true +} + +export type ServerNodeHistoryCountAggregateInputType = { + id?: true + uuid?: true + period?: true + cpu?: true + ram?: true + load?: true + disk?: true + netIn?: true + netOut?: true + process?: true + connections?: true + createdAt?: true + _all?: true +} + +export type ServerNodeHistoryAggregateArgs = { + /** + * Filter which ServerNodeHistory to aggregate. + */ + where?: Prisma.ServerNodeHistoryWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServerNodeHistories to fetch. + */ + orderBy?: Prisma.ServerNodeHistoryOrderByWithRelationInput | Prisma.ServerNodeHistoryOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: Prisma.ServerNodeHistoryWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServerNodeHistories from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServerNodeHistories. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned ServerNodeHistories + **/ + _count?: true | ServerNodeHistoryCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: ServerNodeHistoryAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: ServerNodeHistorySumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ServerNodeHistoryMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ServerNodeHistoryMaxAggregateInputType +} + +export type GetServerNodeHistoryAggregateType = { + [P in keyof T & keyof AggregateServerNodeHistory]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType +} + + + + +export type ServerNodeHistoryGroupByArgs = { + where?: Prisma.ServerNodeHistoryWhereInput + orderBy?: Prisma.ServerNodeHistoryOrderByWithAggregationInput | Prisma.ServerNodeHistoryOrderByWithAggregationInput[] + by: Prisma.ServerNodeHistoryScalarFieldEnum[] | Prisma.ServerNodeHistoryScalarFieldEnum + having?: Prisma.ServerNodeHistoryScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ServerNodeHistoryCountAggregateInputType | true + _avg?: ServerNodeHistoryAvgAggregateInputType + _sum?: ServerNodeHistorySumAggregateInputType + _min?: ServerNodeHistoryMinAggregateInputType + _max?: ServerNodeHistoryMaxAggregateInputType +} + +export type ServerNodeHistoryGroupByOutputType = { + id: number + uuid: string + period: Date + cpu: number + ram: bigint + load: number + disk: bigint + netIn: bigint + netOut: bigint + process: number + connections: number + createdAt: Date + _count: ServerNodeHistoryCountAggregateOutputType | null + _avg: ServerNodeHistoryAvgAggregateOutputType | null + _sum: ServerNodeHistorySumAggregateOutputType | null + _min: ServerNodeHistoryMinAggregateOutputType | null + _max: ServerNodeHistoryMaxAggregateOutputType | null +} + +export type GetServerNodeHistoryGroupByPayload = Prisma.PrismaPromise< + Array< + Prisma.PickEnumerable & + { + [P in ((keyof T) & (keyof ServerNodeHistoryGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType + } + > + > + + + +export type ServerNodeHistoryWhereInput = { + AND?: Prisma.ServerNodeHistoryWhereInput | Prisma.ServerNodeHistoryWhereInput[] + OR?: Prisma.ServerNodeHistoryWhereInput[] + NOT?: Prisma.ServerNodeHistoryWhereInput | Prisma.ServerNodeHistoryWhereInput[] + id?: Prisma.IntFilter<"ServerNodeHistory"> | number + uuid?: Prisma.StringFilter<"ServerNodeHistory"> | string + period?: Prisma.DateTimeFilter<"ServerNodeHistory"> | Date | string + cpu?: Prisma.FloatFilter<"ServerNodeHistory"> | number + ram?: Prisma.BigIntFilter<"ServerNodeHistory"> | bigint | number + load?: Prisma.FloatFilter<"ServerNodeHistory"> | number + disk?: Prisma.BigIntFilter<"ServerNodeHistory"> | bigint | number + netIn?: Prisma.BigIntFilter<"ServerNodeHistory"> | bigint | number + netOut?: Prisma.BigIntFilter<"ServerNodeHistory"> | bigint | number + process?: Prisma.IntFilter<"ServerNodeHistory"> | number + connections?: Prisma.IntFilter<"ServerNodeHistory"> | number + createdAt?: Prisma.DateTimeFilter<"ServerNodeHistory"> | Date | string +} + +export type ServerNodeHistoryOrderByWithRelationInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + period?: Prisma.SortOrder + cpu?: Prisma.SortOrder + ram?: Prisma.SortOrder + load?: Prisma.SortOrder + disk?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + _relevance?: Prisma.ServerNodeHistoryOrderByRelevanceInput +} + +export type ServerNodeHistoryWhereUniqueInput = Prisma.AtLeast<{ + id?: number + uuid_period?: Prisma.ServerNodeHistoryUuidPeriodCompoundUniqueInput + AND?: Prisma.ServerNodeHistoryWhereInput | Prisma.ServerNodeHistoryWhereInput[] + OR?: Prisma.ServerNodeHistoryWhereInput[] + NOT?: Prisma.ServerNodeHistoryWhereInput | Prisma.ServerNodeHistoryWhereInput[] + uuid?: Prisma.StringFilter<"ServerNodeHistory"> | string + period?: Prisma.DateTimeFilter<"ServerNodeHistory"> | Date | string + cpu?: Prisma.FloatFilter<"ServerNodeHistory"> | number + ram?: Prisma.BigIntFilter<"ServerNodeHistory"> | bigint | number + load?: Prisma.FloatFilter<"ServerNodeHistory"> | number + disk?: Prisma.BigIntFilter<"ServerNodeHistory"> | bigint | number + netIn?: Prisma.BigIntFilter<"ServerNodeHistory"> | bigint | number + netOut?: Prisma.BigIntFilter<"ServerNodeHistory"> | bigint | number + process?: Prisma.IntFilter<"ServerNodeHistory"> | number + connections?: Prisma.IntFilter<"ServerNodeHistory"> | number + createdAt?: Prisma.DateTimeFilter<"ServerNodeHistory"> | Date | string +}, "id" | "uuid_period"> + +export type ServerNodeHistoryOrderByWithAggregationInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + period?: Prisma.SortOrder + cpu?: Prisma.SortOrder + ram?: Prisma.SortOrder + load?: Prisma.SortOrder + disk?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + _count?: Prisma.ServerNodeHistoryCountOrderByAggregateInput + _avg?: Prisma.ServerNodeHistoryAvgOrderByAggregateInput + _max?: Prisma.ServerNodeHistoryMaxOrderByAggregateInput + _min?: Prisma.ServerNodeHistoryMinOrderByAggregateInput + _sum?: Prisma.ServerNodeHistorySumOrderByAggregateInput +} + +export type ServerNodeHistoryScalarWhereWithAggregatesInput = { + AND?: Prisma.ServerNodeHistoryScalarWhereWithAggregatesInput | Prisma.ServerNodeHistoryScalarWhereWithAggregatesInput[] + OR?: Prisma.ServerNodeHistoryScalarWhereWithAggregatesInput[] + NOT?: Prisma.ServerNodeHistoryScalarWhereWithAggregatesInput | Prisma.ServerNodeHistoryScalarWhereWithAggregatesInput[] + id?: Prisma.IntWithAggregatesFilter<"ServerNodeHistory"> | number + uuid?: Prisma.StringWithAggregatesFilter<"ServerNodeHistory"> | string + period?: Prisma.DateTimeWithAggregatesFilter<"ServerNodeHistory"> | Date | string + cpu?: Prisma.FloatWithAggregatesFilter<"ServerNodeHistory"> | number + ram?: Prisma.BigIntWithAggregatesFilter<"ServerNodeHistory"> | bigint | number + load?: Prisma.FloatWithAggregatesFilter<"ServerNodeHistory"> | number + disk?: Prisma.BigIntWithAggregatesFilter<"ServerNodeHistory"> | bigint | number + netIn?: Prisma.BigIntWithAggregatesFilter<"ServerNodeHistory"> | bigint | number + netOut?: Prisma.BigIntWithAggregatesFilter<"ServerNodeHistory"> | bigint | number + process?: Prisma.IntWithAggregatesFilter<"ServerNodeHistory"> | number + connections?: Prisma.IntWithAggregatesFilter<"ServerNodeHistory"> | number + createdAt?: Prisma.DateTimeWithAggregatesFilter<"ServerNodeHistory"> | Date | string +} + +export type ServerNodeHistoryCreateInput = { + uuid: string + period: Date | string + cpu?: number + ram?: bigint | number + load?: number + disk?: bigint | number + netIn?: bigint | number + netOut?: bigint | number + process?: number + connections?: number + createdAt?: Date | string +} + +export type ServerNodeHistoryUncheckedCreateInput = { + id?: number + uuid: string + period: Date | string + cpu?: number + ram?: bigint | number + load?: number + disk?: bigint | number + netIn?: bigint | number + netOut?: bigint | number + process?: number + connections?: number + createdAt?: Date | string +} + +export type ServerNodeHistoryUpdateInput = { + uuid?: Prisma.StringFieldUpdateOperationsInput | string + period?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + cpu?: Prisma.FloatFieldUpdateOperationsInput | number + ram?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + load?: Prisma.FloatFieldUpdateOperationsInput | number + disk?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netIn?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netOut?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + process?: Prisma.IntFieldUpdateOperationsInput | number + connections?: Prisma.IntFieldUpdateOperationsInput | number + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServerNodeHistoryUncheckedUpdateInput = { + id?: Prisma.IntFieldUpdateOperationsInput | number + uuid?: Prisma.StringFieldUpdateOperationsInput | string + period?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + cpu?: Prisma.FloatFieldUpdateOperationsInput | number + ram?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + load?: Prisma.FloatFieldUpdateOperationsInput | number + disk?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netIn?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netOut?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + process?: Prisma.IntFieldUpdateOperationsInput | number + connections?: Prisma.IntFieldUpdateOperationsInput | number + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServerNodeHistoryCreateManyInput = { + id?: number + uuid: string + period: Date | string + cpu?: number + ram?: bigint | number + load?: number + disk?: bigint | number + netIn?: bigint | number + netOut?: bigint | number + process?: number + connections?: number + createdAt?: Date | string +} + +export type ServerNodeHistoryUpdateManyMutationInput = { + uuid?: Prisma.StringFieldUpdateOperationsInput | string + period?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + cpu?: Prisma.FloatFieldUpdateOperationsInput | number + ram?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + load?: Prisma.FloatFieldUpdateOperationsInput | number + disk?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netIn?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netOut?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + process?: Prisma.IntFieldUpdateOperationsInput | number + connections?: Prisma.IntFieldUpdateOperationsInput | number + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServerNodeHistoryUncheckedUpdateManyInput = { + id?: Prisma.IntFieldUpdateOperationsInput | number + uuid?: Prisma.StringFieldUpdateOperationsInput | string + period?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + cpu?: Prisma.FloatFieldUpdateOperationsInput | number + ram?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + load?: Prisma.FloatFieldUpdateOperationsInput | number + disk?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netIn?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + netOut?: Prisma.BigIntFieldUpdateOperationsInput | bigint | number + process?: Prisma.IntFieldUpdateOperationsInput | number + connections?: Prisma.IntFieldUpdateOperationsInput | number + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServerNodeHistoryOrderByRelevanceInput = { + fields: Prisma.ServerNodeHistoryOrderByRelevanceFieldEnum | Prisma.ServerNodeHistoryOrderByRelevanceFieldEnum[] + sort: Prisma.SortOrder + search: string +} + +export type ServerNodeHistoryUuidPeriodCompoundUniqueInput = { + uuid: string + period: Date | string +} + +export type ServerNodeHistoryCountOrderByAggregateInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + period?: Prisma.SortOrder + cpu?: Prisma.SortOrder + ram?: Prisma.SortOrder + load?: Prisma.SortOrder + disk?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + createdAt?: Prisma.SortOrder +} + +export type ServerNodeHistoryAvgOrderByAggregateInput = { + id?: Prisma.SortOrder + cpu?: Prisma.SortOrder + ram?: Prisma.SortOrder + load?: Prisma.SortOrder + disk?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder +} + +export type ServerNodeHistoryMaxOrderByAggregateInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + period?: Prisma.SortOrder + cpu?: Prisma.SortOrder + ram?: Prisma.SortOrder + load?: Prisma.SortOrder + disk?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + createdAt?: Prisma.SortOrder +} + +export type ServerNodeHistoryMinOrderByAggregateInput = { + id?: Prisma.SortOrder + uuid?: Prisma.SortOrder + period?: Prisma.SortOrder + cpu?: Prisma.SortOrder + ram?: Prisma.SortOrder + load?: Prisma.SortOrder + disk?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder + createdAt?: Prisma.SortOrder +} + +export type ServerNodeHistorySumOrderByAggregateInput = { + id?: Prisma.SortOrder + cpu?: Prisma.SortOrder + ram?: Prisma.SortOrder + load?: Prisma.SortOrder + disk?: Prisma.SortOrder + netIn?: Prisma.SortOrder + netOut?: Prisma.SortOrder + process?: Prisma.SortOrder + connections?: Prisma.SortOrder +} + + + +export type ServerNodeHistorySelect = runtime.Types.Extensions.GetSelect<{ + id?: boolean + uuid?: boolean + period?: boolean + cpu?: boolean + ram?: boolean + load?: boolean + disk?: boolean + netIn?: boolean + netOut?: boolean + process?: boolean + connections?: boolean + createdAt?: boolean +}, ExtArgs["result"]["serverNodeHistory"]> + + + +export type ServerNodeHistorySelectScalar = { + id?: boolean + uuid?: boolean + period?: boolean + cpu?: boolean + ram?: boolean + load?: boolean + disk?: boolean + netIn?: boolean + netOut?: boolean + process?: boolean + connections?: boolean + createdAt?: boolean +} + +export type ServerNodeHistoryOmit = runtime.Types.Extensions.GetOmit<"id" | "uuid" | "period" | "cpu" | "ram" | "load" | "disk" | "netIn" | "netOut" | "process" | "connections" | "createdAt", ExtArgs["result"]["serverNodeHistory"]> + +export type $ServerNodeHistoryPayload = { + name: "ServerNodeHistory" + objects: {} + scalars: runtime.Types.Extensions.GetPayloadResult<{ + id: number + uuid: string + period: Date + cpu: number + ram: bigint + load: number + disk: bigint + netIn: bigint + netOut: bigint + process: number + connections: number + createdAt: Date + }, ExtArgs["result"]["serverNodeHistory"]> + composites: {} +} + +export type ServerNodeHistoryGetPayload = runtime.Types.Result.GetResult + +export type ServerNodeHistoryCountArgs = + Omit & { + select?: ServerNodeHistoryCountAggregateInputType | true + } + +export interface ServerNodeHistoryDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['ServerNodeHistory'], meta: { name: 'ServerNodeHistory' } } + /** + * Find zero or one ServerNodeHistory that matches the filter. + * @param {ServerNodeHistoryFindUniqueArgs} args - Arguments to find a ServerNodeHistory + * @example + * // Get one ServerNodeHistory + * const serverNodeHistory = await prisma.serverNodeHistory.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeHistoryClient, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one ServerNodeHistory that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ServerNodeHistoryFindUniqueOrThrowArgs} args - Arguments to find a ServerNodeHistory + * @example + * // Get one ServerNodeHistory + * const serverNodeHistory = await prisma.serverNodeHistory.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeHistoryClient, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ServerNodeHistory that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeHistoryFindFirstArgs} args - Arguments to find a ServerNodeHistory + * @example + * // Get one ServerNodeHistory + * const serverNodeHistory = await prisma.serverNodeHistory.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeHistoryClient, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ServerNodeHistory that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeHistoryFindFirstOrThrowArgs} args - Arguments to find a ServerNodeHistory + * @example + * // Get one ServerNodeHistory + * const serverNodeHistory = await prisma.serverNodeHistory.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeHistoryClient, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more ServerNodeHistories that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeHistoryFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all ServerNodeHistories + * const serverNodeHistories = await prisma.serverNodeHistory.findMany() + * + * // Get first 10 ServerNodeHistories + * const serverNodeHistories = await prisma.serverNodeHistory.findMany({ take: 10 }) + * + * // Only select the `id` + * const serverNodeHistoryWithIdOnly = await prisma.serverNodeHistory.findMany({ select: { id: true } }) + * + */ + findMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions>> + + /** + * Create a ServerNodeHistory. + * @param {ServerNodeHistoryCreateArgs} args - Arguments to create a ServerNodeHistory. + * @example + * // Create one ServerNodeHistory + * const ServerNodeHistory = await prisma.serverNodeHistory.create({ + * data: { + * // ... data to create a ServerNodeHistory + * } + * }) + * + */ + create(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeHistoryClient, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many ServerNodeHistories. + * @param {ServerNodeHistoryCreateManyArgs} args - Arguments to create many ServerNodeHistories. + * @example + * // Create many ServerNodeHistories + * const serverNodeHistory = await prisma.serverNodeHistory.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Delete a ServerNodeHistory. + * @param {ServerNodeHistoryDeleteArgs} args - Arguments to delete one ServerNodeHistory. + * @example + * // Delete one ServerNodeHistory + * const ServerNodeHistory = await prisma.serverNodeHistory.delete({ + * where: { + * // ... filter to delete one ServerNodeHistory + * } + * }) + * + */ + delete(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeHistoryClient, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one ServerNodeHistory. + * @param {ServerNodeHistoryUpdateArgs} args - Arguments to update one ServerNodeHistory. + * @example + * // Update one ServerNodeHistory + * const serverNodeHistory = await prisma.serverNodeHistory.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeHistoryClient, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more ServerNodeHistories. + * @param {ServerNodeHistoryDeleteManyArgs} args - Arguments to filter ServerNodeHistories to delete. + * @example + * // Delete a few ServerNodeHistories + * const { count } = await prisma.serverNodeHistory.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ServerNodeHistories. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeHistoryUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many ServerNodeHistories + * const serverNodeHistory = await prisma.serverNodeHistory.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Create or update one ServerNodeHistory. + * @param {ServerNodeHistoryUpsertArgs} args - Arguments to update or create a ServerNodeHistory. + * @example + * // Update or create a ServerNodeHistory + * const serverNodeHistory = await prisma.serverNodeHistory.upsert({ + * create: { + * // ... data to create a ServerNodeHistory + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the ServerNodeHistory we want to update + * } + * }) + */ + upsert(args: Prisma.SelectSubset>): Prisma.Prisma__ServerNodeHistoryClient, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of ServerNodeHistories. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeHistoryCountArgs} args - Arguments to filter ServerNodeHistories to count. + * @example + * // Count the number of ServerNodeHistories + * const count = await prisma.serverNodeHistory.count({ + * where: { + * // ... the filter for the ServerNodeHistories we want to count + * } + * }) + **/ + count( + args?: Prisma.Subset, + ): Prisma.PrismaPromise< + T extends runtime.Types.Utils.Record<'select', any> + ? T['select'] extends true + ? number + : Prisma.GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a ServerNodeHistory. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeHistoryAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Prisma.Subset): Prisma.PrismaPromise> + + /** + * Group by ServerNodeHistory. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServerNodeHistoryGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends ServerNodeHistoryGroupByArgs, + HasSelectOrTake extends Prisma.Or< + Prisma.Extends<'skip', Prisma.Keys>, + Prisma.Extends<'take', Prisma.Keys> + >, + OrderByArg extends Prisma.True extends HasSelectOrTake + ? { orderBy: ServerNodeHistoryGroupByArgs['orderBy'] } + : { orderBy?: ServerNodeHistoryGroupByArgs['orderBy'] }, + OrderFields extends Prisma.ExcludeUnderscoreKeys>>, + ByFields extends Prisma.MaybeTupleToUnion, + ByValid extends Prisma.Has, + HavingFields extends Prisma.GetHavingFields, + HavingValid extends Prisma.Has, + ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, + InputErrors extends ByEmpty extends Prisma.True + ? `Error: "by" must not be empty.` + : HavingValid extends Prisma.False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: Prisma.SubsetIntersection & InputErrors): {} extends InputErrors ? GetServerNodeHistoryGroupByPayload : Prisma.PrismaPromise +/** + * Fields of the ServerNodeHistory model + */ +readonly fields: ServerNodeHistoryFieldRefs; +} + +/** + * The delegate class that acts as a "Promise-like" for ServerNodeHistory. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ +export interface Prisma__ServerNodeHistoryClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): runtime.Types.Utils.JsPromise +} + + + + +/** + * Fields of the ServerNodeHistory model + */ +export interface ServerNodeHistoryFieldRefs { + readonly id: Prisma.FieldRef<"ServerNodeHistory", 'Int'> + readonly uuid: Prisma.FieldRef<"ServerNodeHistory", 'String'> + readonly period: Prisma.FieldRef<"ServerNodeHistory", 'DateTime'> + readonly cpu: Prisma.FieldRef<"ServerNodeHistory", 'Float'> + readonly ram: Prisma.FieldRef<"ServerNodeHistory", 'BigInt'> + readonly load: Prisma.FieldRef<"ServerNodeHistory", 'Float'> + readonly disk: Prisma.FieldRef<"ServerNodeHistory", 'BigInt'> + readonly netIn: Prisma.FieldRef<"ServerNodeHistory", 'BigInt'> + readonly netOut: Prisma.FieldRef<"ServerNodeHistory", 'BigInt'> + readonly process: Prisma.FieldRef<"ServerNodeHistory", 'Int'> + readonly connections: Prisma.FieldRef<"ServerNodeHistory", 'Int'> + readonly createdAt: Prisma.FieldRef<"ServerNodeHistory", 'DateTime'> +} + + +// Custom InputTypes +/** + * ServerNodeHistory findUnique + */ +export type ServerNodeHistoryFindUniqueArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * Filter, which ServerNodeHistory to fetch. + */ + where: Prisma.ServerNodeHistoryWhereUniqueInput +} + +/** + * ServerNodeHistory findUniqueOrThrow + */ +export type ServerNodeHistoryFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * Filter, which ServerNodeHistory to fetch. + */ + where: Prisma.ServerNodeHistoryWhereUniqueInput +} + +/** + * ServerNodeHistory findFirst + */ +export type ServerNodeHistoryFindFirstArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * Filter, which ServerNodeHistory to fetch. + */ + where?: Prisma.ServerNodeHistoryWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServerNodeHistories to fetch. + */ + orderBy?: Prisma.ServerNodeHistoryOrderByWithRelationInput | Prisma.ServerNodeHistoryOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ServerNodeHistories. + */ + cursor?: Prisma.ServerNodeHistoryWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServerNodeHistories from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServerNodeHistories. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServerNodeHistories. + */ + distinct?: Prisma.ServerNodeHistoryScalarFieldEnum | Prisma.ServerNodeHistoryScalarFieldEnum[] +} + +/** + * ServerNodeHistory findFirstOrThrow + */ +export type ServerNodeHistoryFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * Filter, which ServerNodeHistory to fetch. + */ + where?: Prisma.ServerNodeHistoryWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServerNodeHistories to fetch. + */ + orderBy?: Prisma.ServerNodeHistoryOrderByWithRelationInput | Prisma.ServerNodeHistoryOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ServerNodeHistories. + */ + cursor?: Prisma.ServerNodeHistoryWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServerNodeHistories from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServerNodeHistories. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServerNodeHistories. + */ + distinct?: Prisma.ServerNodeHistoryScalarFieldEnum | Prisma.ServerNodeHistoryScalarFieldEnum[] +} + +/** + * ServerNodeHistory findMany + */ +export type ServerNodeHistoryFindManyArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * Filter, which ServerNodeHistories to fetch. + */ + where?: Prisma.ServerNodeHistoryWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServerNodeHistories to fetch. + */ + orderBy?: Prisma.ServerNodeHistoryOrderByWithRelationInput | Prisma.ServerNodeHistoryOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing ServerNodeHistories. + */ + cursor?: Prisma.ServerNodeHistoryWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServerNodeHistories from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServerNodeHistories. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServerNodeHistories. + */ + distinct?: Prisma.ServerNodeHistoryScalarFieldEnum | Prisma.ServerNodeHistoryScalarFieldEnum[] +} + +/** + * ServerNodeHistory create + */ +export type ServerNodeHistoryCreateArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * The data needed to create a ServerNodeHistory. + */ + data: Prisma.XOR +} + +/** + * ServerNodeHistory createMany + */ +export type ServerNodeHistoryCreateManyArgs = { + /** + * The data used to create many ServerNodeHistories. + */ + data: Prisma.ServerNodeHistoryCreateManyInput | Prisma.ServerNodeHistoryCreateManyInput[] + skipDuplicates?: boolean +} + +/** + * ServerNodeHistory update + */ +export type ServerNodeHistoryUpdateArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * The data needed to update a ServerNodeHistory. + */ + data: Prisma.XOR + /** + * Choose, which ServerNodeHistory to update. + */ + where: Prisma.ServerNodeHistoryWhereUniqueInput +} + +/** + * ServerNodeHistory updateMany + */ +export type ServerNodeHistoryUpdateManyArgs = { + /** + * The data used to update ServerNodeHistories. + */ + data: Prisma.XOR + /** + * Filter which ServerNodeHistories to update + */ + where?: Prisma.ServerNodeHistoryWhereInput + /** + * Limit how many ServerNodeHistories to update. + */ + limit?: number +} + +/** + * ServerNodeHistory upsert + */ +export type ServerNodeHistoryUpsertArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * The filter to search for the ServerNodeHistory to update in case it exists. + */ + where: Prisma.ServerNodeHistoryWhereUniqueInput + /** + * In case the ServerNodeHistory found by the `where` argument doesn't exist, create a new ServerNodeHistory with this data. + */ + create: Prisma.XOR + /** + * In case the ServerNodeHistory was found with the provided `where` argument, update it with this data. + */ + update: Prisma.XOR +} + +/** + * ServerNodeHistory delete + */ +export type ServerNodeHistoryDeleteArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null + /** + * Filter which ServerNodeHistory to delete. + */ + where: Prisma.ServerNodeHistoryWhereUniqueInput +} + +/** + * ServerNodeHistory deleteMany + */ +export type ServerNodeHistoryDeleteManyArgs = { + /** + * Filter which ServerNodeHistories to delete + */ + where?: Prisma.ServerNodeHistoryWhereInput + /** + * Limit how many ServerNodeHistories to delete. + */ + limit?: number +} + +/** + * ServerNodeHistory without action + */ +export type ServerNodeHistoryDefaultArgs = { + /** + * Select specific fields to fetch from the ServerNodeHistory + */ + select?: Prisma.ServerNodeHistorySelect | null + /** + * Omit specific fields from the ServerNodeHistory + */ + omit?: Prisma.ServerNodeHistoryOmit | null +} diff --git a/generated/prisma/models/ServiceCheck.ts b/generated/prisma/models/ServiceCheck.ts new file mode 100644 index 0000000..2dcc2eb --- /dev/null +++ b/generated/prisma/models/ServiceCheck.ts @@ -0,0 +1,1194 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file exports the `ServiceCheck` model and its related types. + * + * 🟢 You can import this file directly. + */ +import type * as runtime from "@prisma/client/runtime/client" +import type * as $Enums from "../enums.ts" +import type * as Prisma from "../internal/prismaNamespace.ts" + +/** + * Model ServiceCheck + * + */ +export type ServiceCheckModel = runtime.Types.Result.DefaultSelection + +export type AggregateServiceCheck = { + _count: ServiceCheckCountAggregateOutputType | null + _avg: ServiceCheckAvgAggregateOutputType | null + _sum: ServiceCheckSumAggregateOutputType | null + _min: ServiceCheckMinAggregateOutputType | null + _max: ServiceCheckMaxAggregateOutputType | null +} + +export type ServiceCheckAvgAggregateOutputType = { + id: number | null + latencyMs: number | null +} + +export type ServiceCheckSumAggregateOutputType = { + id: number | null + latencyMs: number | null +} + +export type ServiceCheckMinAggregateOutputType = { + id: number | null + name: string | null + url: string | null + status: string | null + latencyMs: number | null + message: string | null + lastCheckAt: Date | null + createdAt: Date | null + updatedAt: Date | null +} + +export type ServiceCheckMaxAggregateOutputType = { + id: number | null + name: string | null + url: string | null + status: string | null + latencyMs: number | null + message: string | null + lastCheckAt: Date | null + createdAt: Date | null + updatedAt: Date | null +} + +export type ServiceCheckCountAggregateOutputType = { + id: number + name: number + url: number + status: number + latencyMs: number + message: number + lastCheckAt: number + createdAt: number + updatedAt: number + _all: number +} + + +export type ServiceCheckAvgAggregateInputType = { + id?: true + latencyMs?: true +} + +export type ServiceCheckSumAggregateInputType = { + id?: true + latencyMs?: true +} + +export type ServiceCheckMinAggregateInputType = { + id?: true + name?: true + url?: true + status?: true + latencyMs?: true + message?: true + lastCheckAt?: true + createdAt?: true + updatedAt?: true +} + +export type ServiceCheckMaxAggregateInputType = { + id?: true + name?: true + url?: true + status?: true + latencyMs?: true + message?: true + lastCheckAt?: true + createdAt?: true + updatedAt?: true +} + +export type ServiceCheckCountAggregateInputType = { + id?: true + name?: true + url?: true + status?: true + latencyMs?: true + message?: true + lastCheckAt?: true + createdAt?: true + updatedAt?: true + _all?: true +} + +export type ServiceCheckAggregateArgs = { + /** + * Filter which ServiceCheck to aggregate. + */ + where?: Prisma.ServiceCheckWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServiceChecks to fetch. + */ + orderBy?: Prisma.ServiceCheckOrderByWithRelationInput | Prisma.ServiceCheckOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: Prisma.ServiceCheckWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServiceChecks from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServiceChecks. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned ServiceChecks + **/ + _count?: true | ServiceCheckCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: ServiceCheckAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: ServiceCheckSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ServiceCheckMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ServiceCheckMaxAggregateInputType +} + +export type GetServiceCheckAggregateType = { + [P in keyof T & keyof AggregateServiceCheck]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType +} + + + + +export type ServiceCheckGroupByArgs = { + where?: Prisma.ServiceCheckWhereInput + orderBy?: Prisma.ServiceCheckOrderByWithAggregationInput | Prisma.ServiceCheckOrderByWithAggregationInput[] + by: Prisma.ServiceCheckScalarFieldEnum[] | Prisma.ServiceCheckScalarFieldEnum + having?: Prisma.ServiceCheckScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ServiceCheckCountAggregateInputType | true + _avg?: ServiceCheckAvgAggregateInputType + _sum?: ServiceCheckSumAggregateInputType + _min?: ServiceCheckMinAggregateInputType + _max?: ServiceCheckMaxAggregateInputType +} + +export type ServiceCheckGroupByOutputType = { + id: number + name: string + url: string + status: string + latencyMs: number + message: string + lastCheckAt: Date + createdAt: Date + updatedAt: Date + _count: ServiceCheckCountAggregateOutputType | null + _avg: ServiceCheckAvgAggregateOutputType | null + _sum: ServiceCheckSumAggregateOutputType | null + _min: ServiceCheckMinAggregateOutputType | null + _max: ServiceCheckMaxAggregateOutputType | null +} + +export type GetServiceCheckGroupByPayload = Prisma.PrismaPromise< + Array< + Prisma.PickEnumerable & + { + [P in ((keyof T) & (keyof ServiceCheckGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType + } + > + > + + + +export type ServiceCheckWhereInput = { + AND?: Prisma.ServiceCheckWhereInput | Prisma.ServiceCheckWhereInput[] + OR?: Prisma.ServiceCheckWhereInput[] + NOT?: Prisma.ServiceCheckWhereInput | Prisma.ServiceCheckWhereInput[] + id?: Prisma.IntFilter<"ServiceCheck"> | number + name?: Prisma.StringFilter<"ServiceCheck"> | string + url?: Prisma.StringFilter<"ServiceCheck"> | string + status?: Prisma.StringFilter<"ServiceCheck"> | string + latencyMs?: Prisma.IntFilter<"ServiceCheck"> | number + message?: Prisma.StringFilter<"ServiceCheck"> | string + lastCheckAt?: Prisma.DateTimeFilter<"ServiceCheck"> | Date | string + createdAt?: Prisma.DateTimeFilter<"ServiceCheck"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"ServiceCheck"> | Date | string +} + +export type ServiceCheckOrderByWithRelationInput = { + id?: Prisma.SortOrder + name?: Prisma.SortOrder + url?: Prisma.SortOrder + status?: Prisma.SortOrder + latencyMs?: Prisma.SortOrder + message?: Prisma.SortOrder + lastCheckAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder + _relevance?: Prisma.ServiceCheckOrderByRelevanceInput +} + +export type ServiceCheckWhereUniqueInput = Prisma.AtLeast<{ + id?: number + name?: string + AND?: Prisma.ServiceCheckWhereInput | Prisma.ServiceCheckWhereInput[] + OR?: Prisma.ServiceCheckWhereInput[] + NOT?: Prisma.ServiceCheckWhereInput | Prisma.ServiceCheckWhereInput[] + url?: Prisma.StringFilter<"ServiceCheck"> | string + status?: Prisma.StringFilter<"ServiceCheck"> | string + latencyMs?: Prisma.IntFilter<"ServiceCheck"> | number + message?: Prisma.StringFilter<"ServiceCheck"> | string + lastCheckAt?: Prisma.DateTimeFilter<"ServiceCheck"> | Date | string + createdAt?: Prisma.DateTimeFilter<"ServiceCheck"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"ServiceCheck"> | Date | string +}, "id" | "name"> + +export type ServiceCheckOrderByWithAggregationInput = { + id?: Prisma.SortOrder + name?: Prisma.SortOrder + url?: Prisma.SortOrder + status?: Prisma.SortOrder + latencyMs?: Prisma.SortOrder + message?: Prisma.SortOrder + lastCheckAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder + _count?: Prisma.ServiceCheckCountOrderByAggregateInput + _avg?: Prisma.ServiceCheckAvgOrderByAggregateInput + _max?: Prisma.ServiceCheckMaxOrderByAggregateInput + _min?: Prisma.ServiceCheckMinOrderByAggregateInput + _sum?: Prisma.ServiceCheckSumOrderByAggregateInput +} + +export type ServiceCheckScalarWhereWithAggregatesInput = { + AND?: Prisma.ServiceCheckScalarWhereWithAggregatesInput | Prisma.ServiceCheckScalarWhereWithAggregatesInput[] + OR?: Prisma.ServiceCheckScalarWhereWithAggregatesInput[] + NOT?: Prisma.ServiceCheckScalarWhereWithAggregatesInput | Prisma.ServiceCheckScalarWhereWithAggregatesInput[] + id?: Prisma.IntWithAggregatesFilter<"ServiceCheck"> | number + name?: Prisma.StringWithAggregatesFilter<"ServiceCheck"> | string + url?: Prisma.StringWithAggregatesFilter<"ServiceCheck"> | string + status?: Prisma.StringWithAggregatesFilter<"ServiceCheck"> | string + latencyMs?: Prisma.IntWithAggregatesFilter<"ServiceCheck"> | number + message?: Prisma.StringWithAggregatesFilter<"ServiceCheck"> | string + lastCheckAt?: Prisma.DateTimeWithAggregatesFilter<"ServiceCheck"> | Date | string + createdAt?: Prisma.DateTimeWithAggregatesFilter<"ServiceCheck"> | Date | string + updatedAt?: Prisma.DateTimeWithAggregatesFilter<"ServiceCheck"> | Date | string +} + +export type ServiceCheckCreateInput = { + name: string + url: string + status?: string + latencyMs?: number + message?: string + lastCheckAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string +} + +export type ServiceCheckUncheckedCreateInput = { + id?: number + name: string + url: string + status?: string + latencyMs?: number + message?: string + lastCheckAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string +} + +export type ServiceCheckUpdateInput = { + name?: Prisma.StringFieldUpdateOperationsInput | string + url?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.StringFieldUpdateOperationsInput | string + latencyMs?: Prisma.IntFieldUpdateOperationsInput | number + message?: Prisma.StringFieldUpdateOperationsInput | string + lastCheckAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServiceCheckUncheckedUpdateInput = { + id?: Prisma.IntFieldUpdateOperationsInput | number + name?: Prisma.StringFieldUpdateOperationsInput | string + url?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.StringFieldUpdateOperationsInput | string + latencyMs?: Prisma.IntFieldUpdateOperationsInput | number + message?: Prisma.StringFieldUpdateOperationsInput | string + lastCheckAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServiceCheckCreateManyInput = { + id?: number + name: string + url: string + status?: string + latencyMs?: number + message?: string + lastCheckAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string +} + +export type ServiceCheckUpdateManyMutationInput = { + name?: Prisma.StringFieldUpdateOperationsInput | string + url?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.StringFieldUpdateOperationsInput | string + latencyMs?: Prisma.IntFieldUpdateOperationsInput | number + message?: Prisma.StringFieldUpdateOperationsInput | string + lastCheckAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServiceCheckUncheckedUpdateManyInput = { + id?: Prisma.IntFieldUpdateOperationsInput | number + name?: Prisma.StringFieldUpdateOperationsInput | string + url?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.StringFieldUpdateOperationsInput | string + latencyMs?: Prisma.IntFieldUpdateOperationsInput | number + message?: Prisma.StringFieldUpdateOperationsInput | string + lastCheckAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type ServiceCheckOrderByRelevanceInput = { + fields: Prisma.ServiceCheckOrderByRelevanceFieldEnum | Prisma.ServiceCheckOrderByRelevanceFieldEnum[] + sort: Prisma.SortOrder + search: string +} + +export type ServiceCheckCountOrderByAggregateInput = { + id?: Prisma.SortOrder + name?: Prisma.SortOrder + url?: Prisma.SortOrder + status?: Prisma.SortOrder + latencyMs?: Prisma.SortOrder + message?: Prisma.SortOrder + lastCheckAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type ServiceCheckAvgOrderByAggregateInput = { + id?: Prisma.SortOrder + latencyMs?: Prisma.SortOrder +} + +export type ServiceCheckMaxOrderByAggregateInput = { + id?: Prisma.SortOrder + name?: Prisma.SortOrder + url?: Prisma.SortOrder + status?: Prisma.SortOrder + latencyMs?: Prisma.SortOrder + message?: Prisma.SortOrder + lastCheckAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type ServiceCheckMinOrderByAggregateInput = { + id?: Prisma.SortOrder + name?: Prisma.SortOrder + url?: Prisma.SortOrder + status?: Prisma.SortOrder + latencyMs?: Prisma.SortOrder + message?: Prisma.SortOrder + lastCheckAt?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type ServiceCheckSumOrderByAggregateInput = { + id?: Prisma.SortOrder + latencyMs?: Prisma.SortOrder +} + + + +export type ServiceCheckSelect = runtime.Types.Extensions.GetSelect<{ + id?: boolean + name?: boolean + url?: boolean + status?: boolean + latencyMs?: boolean + message?: boolean + lastCheckAt?: boolean + createdAt?: boolean + updatedAt?: boolean +}, ExtArgs["result"]["serviceCheck"]> + + + +export type ServiceCheckSelectScalar = { + id?: boolean + name?: boolean + url?: boolean + status?: boolean + latencyMs?: boolean + message?: boolean + lastCheckAt?: boolean + createdAt?: boolean + updatedAt?: boolean +} + +export type ServiceCheckOmit = runtime.Types.Extensions.GetOmit<"id" | "name" | "url" | "status" | "latencyMs" | "message" | "lastCheckAt" | "createdAt" | "updatedAt", ExtArgs["result"]["serviceCheck"]> + +export type $ServiceCheckPayload = { + name: "ServiceCheck" + objects: {} + scalars: runtime.Types.Extensions.GetPayloadResult<{ + id: number + name: string + url: string + status: string + latencyMs: number + message: string + lastCheckAt: Date + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["serviceCheck"]> + composites: {} +} + +export type ServiceCheckGetPayload = runtime.Types.Result.GetResult + +export type ServiceCheckCountArgs = + Omit & { + select?: ServiceCheckCountAggregateInputType | true + } + +export interface ServiceCheckDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['ServiceCheck'], meta: { name: 'ServiceCheck' } } + /** + * Find zero or one ServiceCheck that matches the filter. + * @param {ServiceCheckFindUniqueArgs} args - Arguments to find a ServiceCheck + * @example + * // Get one ServiceCheck + * const serviceCheck = await prisma.serviceCheck.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: Prisma.SelectSubset>): Prisma.Prisma__ServiceCheckClient, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one ServiceCheck that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ServiceCheckFindUniqueOrThrowArgs} args - Arguments to find a ServiceCheck + * @example + * // Get one ServiceCheck + * const serviceCheck = await prisma.serviceCheck.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: Prisma.SelectSubset>): Prisma.Prisma__ServiceCheckClient, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ServiceCheck that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServiceCheckFindFirstArgs} args - Arguments to find a ServiceCheck + * @example + * // Get one ServiceCheck + * const serviceCheck = await prisma.serviceCheck.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: Prisma.SelectSubset>): Prisma.Prisma__ServiceCheckClient, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ServiceCheck that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServiceCheckFindFirstOrThrowArgs} args - Arguments to find a ServiceCheck + * @example + * // Get one ServiceCheck + * const serviceCheck = await prisma.serviceCheck.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: Prisma.SelectSubset>): Prisma.Prisma__ServiceCheckClient, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more ServiceChecks that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServiceCheckFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all ServiceChecks + * const serviceChecks = await prisma.serviceCheck.findMany() + * + * // Get first 10 ServiceChecks + * const serviceChecks = await prisma.serviceCheck.findMany({ take: 10 }) + * + * // Only select the `id` + * const serviceCheckWithIdOnly = await prisma.serviceCheck.findMany({ select: { id: true } }) + * + */ + findMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions>> + + /** + * Create a ServiceCheck. + * @param {ServiceCheckCreateArgs} args - Arguments to create a ServiceCheck. + * @example + * // Create one ServiceCheck + * const ServiceCheck = await prisma.serviceCheck.create({ + * data: { + * // ... data to create a ServiceCheck + * } + * }) + * + */ + create(args: Prisma.SelectSubset>): Prisma.Prisma__ServiceCheckClient, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many ServiceChecks. + * @param {ServiceCheckCreateManyArgs} args - Arguments to create many ServiceChecks. + * @example + * // Create many ServiceChecks + * const serviceCheck = await prisma.serviceCheck.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Delete a ServiceCheck. + * @param {ServiceCheckDeleteArgs} args - Arguments to delete one ServiceCheck. + * @example + * // Delete one ServiceCheck + * const ServiceCheck = await prisma.serviceCheck.delete({ + * where: { + * // ... filter to delete one ServiceCheck + * } + * }) + * + */ + delete(args: Prisma.SelectSubset>): Prisma.Prisma__ServiceCheckClient, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one ServiceCheck. + * @param {ServiceCheckUpdateArgs} args - Arguments to update one ServiceCheck. + * @example + * // Update one ServiceCheck + * const serviceCheck = await prisma.serviceCheck.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: Prisma.SelectSubset>): Prisma.Prisma__ServiceCheckClient, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more ServiceChecks. + * @param {ServiceCheckDeleteManyArgs} args - Arguments to filter ServiceChecks to delete. + * @example + * // Delete a few ServiceChecks + * const { count } = await prisma.serviceCheck.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ServiceChecks. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServiceCheckUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many ServiceChecks + * const serviceCheck = await prisma.serviceCheck.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Create or update one ServiceCheck. + * @param {ServiceCheckUpsertArgs} args - Arguments to update or create a ServiceCheck. + * @example + * // Update or create a ServiceCheck + * const serviceCheck = await prisma.serviceCheck.upsert({ + * create: { + * // ... data to create a ServiceCheck + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the ServiceCheck we want to update + * } + * }) + */ + upsert(args: Prisma.SelectSubset>): Prisma.Prisma__ServiceCheckClient, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of ServiceChecks. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServiceCheckCountArgs} args - Arguments to filter ServiceChecks to count. + * @example + * // Count the number of ServiceChecks + * const count = await prisma.serviceCheck.count({ + * where: { + * // ... the filter for the ServiceChecks we want to count + * } + * }) + **/ + count( + args?: Prisma.Subset, + ): Prisma.PrismaPromise< + T extends runtime.Types.Utils.Record<'select', any> + ? T['select'] extends true + ? number + : Prisma.GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a ServiceCheck. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServiceCheckAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Prisma.Subset): Prisma.PrismaPromise> + + /** + * Group by ServiceCheck. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ServiceCheckGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends ServiceCheckGroupByArgs, + HasSelectOrTake extends Prisma.Or< + Prisma.Extends<'skip', Prisma.Keys>, + Prisma.Extends<'take', Prisma.Keys> + >, + OrderByArg extends Prisma.True extends HasSelectOrTake + ? { orderBy: ServiceCheckGroupByArgs['orderBy'] } + : { orderBy?: ServiceCheckGroupByArgs['orderBy'] }, + OrderFields extends Prisma.ExcludeUnderscoreKeys>>, + ByFields extends Prisma.MaybeTupleToUnion, + ByValid extends Prisma.Has, + HavingFields extends Prisma.GetHavingFields, + HavingValid extends Prisma.Has, + ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, + InputErrors extends ByEmpty extends Prisma.True + ? `Error: "by" must not be empty.` + : HavingValid extends Prisma.False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: Prisma.SubsetIntersection & InputErrors): {} extends InputErrors ? GetServiceCheckGroupByPayload : Prisma.PrismaPromise +/** + * Fields of the ServiceCheck model + */ +readonly fields: ServiceCheckFieldRefs; +} + +/** + * The delegate class that acts as a "Promise-like" for ServiceCheck. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ +export interface Prisma__ServiceCheckClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): runtime.Types.Utils.JsPromise +} + + + + +/** + * Fields of the ServiceCheck model + */ +export interface ServiceCheckFieldRefs { + readonly id: Prisma.FieldRef<"ServiceCheck", 'Int'> + readonly name: Prisma.FieldRef<"ServiceCheck", 'String'> + readonly url: Prisma.FieldRef<"ServiceCheck", 'String'> + readonly status: Prisma.FieldRef<"ServiceCheck", 'String'> + readonly latencyMs: Prisma.FieldRef<"ServiceCheck", 'Int'> + readonly message: Prisma.FieldRef<"ServiceCheck", 'String'> + readonly lastCheckAt: Prisma.FieldRef<"ServiceCheck", 'DateTime'> + readonly createdAt: Prisma.FieldRef<"ServiceCheck", 'DateTime'> + readonly updatedAt: Prisma.FieldRef<"ServiceCheck", 'DateTime'> +} + + +// Custom InputTypes +/** + * ServiceCheck findUnique + */ +export type ServiceCheckFindUniqueArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * Filter, which ServiceCheck to fetch. + */ + where: Prisma.ServiceCheckWhereUniqueInput +} + +/** + * ServiceCheck findUniqueOrThrow + */ +export type ServiceCheckFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * Filter, which ServiceCheck to fetch. + */ + where: Prisma.ServiceCheckWhereUniqueInput +} + +/** + * ServiceCheck findFirst + */ +export type ServiceCheckFindFirstArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * Filter, which ServiceCheck to fetch. + */ + where?: Prisma.ServiceCheckWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServiceChecks to fetch. + */ + orderBy?: Prisma.ServiceCheckOrderByWithRelationInput | Prisma.ServiceCheckOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ServiceChecks. + */ + cursor?: Prisma.ServiceCheckWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServiceChecks from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServiceChecks. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServiceChecks. + */ + distinct?: Prisma.ServiceCheckScalarFieldEnum | Prisma.ServiceCheckScalarFieldEnum[] +} + +/** + * ServiceCheck findFirstOrThrow + */ +export type ServiceCheckFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * Filter, which ServiceCheck to fetch. + */ + where?: Prisma.ServiceCheckWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServiceChecks to fetch. + */ + orderBy?: Prisma.ServiceCheckOrderByWithRelationInput | Prisma.ServiceCheckOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ServiceChecks. + */ + cursor?: Prisma.ServiceCheckWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServiceChecks from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServiceChecks. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServiceChecks. + */ + distinct?: Prisma.ServiceCheckScalarFieldEnum | Prisma.ServiceCheckScalarFieldEnum[] +} + +/** + * ServiceCheck findMany + */ +export type ServiceCheckFindManyArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * Filter, which ServiceChecks to fetch. + */ + where?: Prisma.ServiceCheckWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ServiceChecks to fetch. + */ + orderBy?: Prisma.ServiceCheckOrderByWithRelationInput | Prisma.ServiceCheckOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing ServiceChecks. + */ + cursor?: Prisma.ServiceCheckWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ServiceChecks from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ServiceChecks. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ServiceChecks. + */ + distinct?: Prisma.ServiceCheckScalarFieldEnum | Prisma.ServiceCheckScalarFieldEnum[] +} + +/** + * ServiceCheck create + */ +export type ServiceCheckCreateArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * The data needed to create a ServiceCheck. + */ + data: Prisma.XOR +} + +/** + * ServiceCheck createMany + */ +export type ServiceCheckCreateManyArgs = { + /** + * The data used to create many ServiceChecks. + */ + data: Prisma.ServiceCheckCreateManyInput | Prisma.ServiceCheckCreateManyInput[] + skipDuplicates?: boolean +} + +/** + * ServiceCheck update + */ +export type ServiceCheckUpdateArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * The data needed to update a ServiceCheck. + */ + data: Prisma.XOR + /** + * Choose, which ServiceCheck to update. + */ + where: Prisma.ServiceCheckWhereUniqueInput +} + +/** + * ServiceCheck updateMany + */ +export type ServiceCheckUpdateManyArgs = { + /** + * The data used to update ServiceChecks. + */ + data: Prisma.XOR + /** + * Filter which ServiceChecks to update + */ + where?: Prisma.ServiceCheckWhereInput + /** + * Limit how many ServiceChecks to update. + */ + limit?: number +} + +/** + * ServiceCheck upsert + */ +export type ServiceCheckUpsertArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * The filter to search for the ServiceCheck to update in case it exists. + */ + where: Prisma.ServiceCheckWhereUniqueInput + /** + * In case the ServiceCheck found by the `where` argument doesn't exist, create a new ServiceCheck with this data. + */ + create: Prisma.XOR + /** + * In case the ServiceCheck was found with the provided `where` argument, update it with this data. + */ + update: Prisma.XOR +} + +/** + * ServiceCheck delete + */ +export type ServiceCheckDeleteArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null + /** + * Filter which ServiceCheck to delete. + */ + where: Prisma.ServiceCheckWhereUniqueInput +} + +/** + * ServiceCheck deleteMany + */ +export type ServiceCheckDeleteManyArgs = { + /** + * Filter which ServiceChecks to delete + */ + where?: Prisma.ServiceCheckWhereInput + /** + * Limit how many ServiceChecks to delete. + */ + limit?: number +} + +/** + * ServiceCheck without action + */ +export type ServiceCheckDefaultArgs = { + /** + * Select specific fields to fetch from the ServiceCheck + */ + select?: Prisma.ServiceCheckSelect | null + /** + * Omit specific fields from the ServiceCheck + */ + omit?: Prisma.ServiceCheckOmit | null +} diff --git a/package-lock.json b/package-lock.json index 1c0d62d..9a27e40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,8 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.26.0", - "recharts": "^3.8.1" + "recharts": "^3.8.1", + "ws": "^8.21.2" }, "devDependencies": { "@tauri-apps/api": "^2.0.0", @@ -6360,6 +6361,27 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/ws": { + "version": "8.21.2", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.21.2.tgz", + "integrity": "sha512-54dMVAo4WIe6SKy3vBgN+9bJZqqQ8IMRevAkOLQALhi49qkkQDQfWdAZ8KQlXiEabw88ARXXdUrlvtbKQX+aKw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 2b5ff7f..3198258 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,8 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.26.0", - "recharts": "^3.8.1" + "recharts": "^3.8.1", + "ws": "^8.21.2" }, "devDependencies": { "@tauri-apps/api": "^2.0.0", diff --git a/prisma/migrations/20260806140000_monitors/migration.sql b/prisma/migrations/20260806140000_monitors/migration.sql new file mode 100644 index 0000000..cc08bec --- /dev/null +++ b/prisma/migrations/20260806140000_monitors/migration.sql @@ -0,0 +1,68 @@ +-- 服务器监控 + 服务健康检查 +-- CreateTable +CREATE TABLE `ServerNode` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `uuid` VARCHAR(191) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `cpuName` VARCHAR(191) NOT NULL DEFAULT '', + `os` VARCHAR(191) NOT NULL DEFAULT '', + `region` VARCHAR(191) NOT NULL DEFAULT '', + `memTotal` BIGINT NOT NULL DEFAULT 0, + `diskTotal` BIGINT NOT NULL DEFAULT 0, + `cpuCores` INTEGER NOT NULL DEFAULT 0, + `cpuUsage` DOUBLE NOT NULL DEFAULT 0, + `ramUsed` BIGINT NOT NULL DEFAULT 0, + `swapUsed` BIGINT NOT NULL DEFAULT 0, + `load1` DOUBLE NOT NULL DEFAULT 0, + `load5` DOUBLE NOT NULL DEFAULT 0, + `load15` DOUBLE NOT NULL DEFAULT 0, + `diskUsed` BIGINT NOT NULL DEFAULT 0, + `netIn` BIGINT NOT NULL DEFAULT 0, + `netOut` BIGINT NOT NULL DEFAULT 0, + `uptime` BIGINT NOT NULL DEFAULT 0, + `process` INTEGER NOT NULL DEFAULT 0, + `connections` INTEGER NOT NULL DEFAULT 0, + `status` VARCHAR(191) NOT NULL DEFAULT 'unknown', + `recordedAt` DATETIME(3) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + + UNIQUE INDEX `ServerNode_uuid_key`(`uuid`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `ServerNodeHistory` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `uuid` VARCHAR(191) NOT NULL, + `period` DATETIME(3) NOT NULL, + `cpu` DOUBLE NOT NULL DEFAULT 0, + `ram` BIGINT NOT NULL DEFAULT 0, + `load` DOUBLE NOT NULL DEFAULT 0, + `disk` BIGINT NOT NULL DEFAULT 0, + `netIn` BIGINT NOT NULL DEFAULT 0, + `netOut` BIGINT NOT NULL DEFAULT 0, + `process` INTEGER NOT NULL DEFAULT 0, + `connections` INTEGER NOT NULL DEFAULT 0, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + + UNIQUE INDEX `ServerNodeHistory_uuid_period_key`(`uuid`, `period`), + INDEX `ServerNodeHistory_uuid_period_idx`(`uuid`, `period`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `ServiceCheck` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `name` VARCHAR(191) NOT NULL, + `url` VARCHAR(191) NOT NULL, + `status` VARCHAR(191) NOT NULL DEFAULT 'unknown', + `latencyMs` INTEGER NOT NULL DEFAULT 0, + `message` VARCHAR(191) NOT NULL DEFAULT '', + `lastCheckAt` DATETIME(3) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + + UNIQUE INDEX `ServiceCheck_name_key`(`name`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/prisma/migrations/20260806150000_add_news_content/migration.sql b/prisma/migrations/20260806150000_add_news_content/migration.sql new file mode 100644 index 0000000..143486d --- /dev/null +++ b/prisma/migrations/20260806150000_add_news_content/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable (news.content 全文, 须在 news_and_alerts 建表之后执行) +ALTER TABLE `News` ADD COLUMN `content` TEXT NULL; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml index 3dd816e..592fc0b 100644 --- a/prisma/migrations/migration_lock.toml +++ b/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ -# Please do not edit this file manually -# It should be added in your version-control system (e.g., Git) -provider = "mysql" +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "mysql" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ec10a8d..2500fa1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -72,6 +72,7 @@ model News { id Int @id @default(autoincrement()) title String summary String @default("") + content String? @db.Text source String @default("") url String @default("") publishedAt DateTime @@ -98,6 +99,69 @@ model Alert { @@index([createdAt]) } + +// 服务器监控: 对接 komari 公开 API +model ServerNode { + id Int @id @default(autoincrement()) + uuid String @unique + name String + cpuName String @default("") + os String @default("") + region String @default("") + memTotal BigInt @default(0) + diskTotal BigInt @default(0) + cpuCores Int @default(0) + // 最新实时快照 + cpuUsage Float @default(0) + ramUsed BigInt @default(0) + swapUsed BigInt @default(0) + load1 Float @default(0) + load5 Float @default(0) + load15 Float @default(0) + diskUsed BigInt @default(0) + netIn BigInt @default(0) + netOut BigInt @default(0) + uptime BigInt @default(0) + process Int @default(0) + connections Int @default(0) + status String @default("unknown") // online | offline | unknown + recordedAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +// 时序历史: 每节点每分钟一条 (komari records 1 分钟粒度) +model ServerNodeHistory { + id Int @id @default(autoincrement()) + uuid String + period DateTime + cpu Float @default(0) + ram BigInt @default(0) + load Float @default(0) + disk BigInt @default(0) + netIn BigInt @default(0) + netOut BigInt @default(0) + process Int @default(0) + connections Int @default(0) + createdAt DateTime @default(now()) + + @@unique([uuid, period]) + @@index([uuid, period]) +} + +// 服务健康检查: 本应用自检 (健康端点 / DB / 第三方) +model ServiceCheck { + id Int @id @default(autoincrement()) + name String @unique + url String + status String @default("unknown") // up | down | unknown + latencyMs Int @default(0) + message String @default("") + lastCheckAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + model Econ_SowInventory { id Int @id @default(autoincrement()) month String @unique diff --git a/scripts/.fix-cron.cjs b/scripts/.fix-cron.cjs new file mode 100644 index 0000000..c7af3e1 --- /dev/null +++ b/scripts/.fix-cron.cjs @@ -0,0 +1,72 @@ +const fs = require('fs') +const content = `import cron from 'node-cron' +import { prisma } from './db.js' +import mysql from 'mysql2/promise' +import { fetchNewsList, persistNews } from '../scripts/fetchers/news.fetcher.js' +import { checkAfterRefresh } from './alert-engine.js' + +function parseUrl(url) { + const u = new URL(url) + return { host: u.hostname, port: Number(u.port) || 3306, user: decodeURIComponent(u.username), password: decodeURIComponent(u.password), database: u.pathname.replace(/^\\//, '') } +} + +async function openConn() { + return mysql.createConnection(parseUrl(process.env.DATABASE_URL)) +} + +// 每天凌晨 3:00 (本地时间) 拉取新闻 + 跑跨源对比 +function scheduleNews() { + cron.schedule('0 3 * * *', async () => { + console.log('[cron] 3:00 触发') + try { + const list = await fetchNewsList() + const r = await persistNews(list) + console.log('[cron] 新闻入库: 新增 ' + r.inserted + ' / 跳过 ' + r.skipped) + const conn = await openConn() + try { + const a = await checkAfterRefresh(conn) + console.log('[cron] 报警检测: 新增 ' + a.inserted + ' 条 (扫描 ' + a.scanned + ')') + } finally { await conn.end() } + } catch (e) { + console.error('[cron] 任务失败:', e.message) + } + }) + console.log('[cron] 已注册: 每天 03:00 拉取新闻 + 跨源报警检测') +} + +// 每 2 分钟: 拉取 komari 节点 + 服务自检 +function scheduleMonitors() { + cron.schedule('*/2 * * * *', async () => { + try { + const k = require('./komari-monitor.cjs') + const r = await k.runOnce() + console.log('[cron] komari: nodes=' + r.nodes + ' snapshots=' + r.snapshots + ' history=' + r.history + ' failed=' + r.failed) + } catch (e) { console.error('[cron] komari 任务失败:', e.message) } + try { + const h = require('./health-check.cjs') + const arr = await h.runOnce() + const down = arr.filter(x => x.status !== 'up').map(x => x.name) + console.log('[cron] health: ' + arr.length + ' 项, down=' + (down.length ? down.join(',') : '无')) + } catch (e) { console.error('[cron] health 任务失败:', e.message) } + }) + console.log('[cron] 已注册: 每 2 分钟 komari + 服务自检') +} + +// 每小时: 清理 24h 前的 komari 历史 +function scheduleMonitorCleanup() { + cron.schedule('0 * * * *', async () => { + try { + const k = require('./komari-monitor.cjs') + const n = await k.cleanupOld() + console.log('[cron] 监控历史清理: 删除 ' + n + ' 条') + } catch (e) { console.error('[cron] 监控清理失败:', e.message) } + }) + console.log('[cron] 已注册: 每小时清理 24h 前监控历史') +} + +scheduleNews() +scheduleMonitors() +scheduleMonitorCleanup() +` +fs.writeFileSync('server/cron.js', content, 'utf8') +console.log('OK len=' + content.length) diff --git a/scripts/fetchers/news.fetcher.js b/scripts/fetchers/news.fetcher.js index a963ba4..0ec476a 100644 --- a/scripts/fetchers/news.fetcher.js +++ b/scripts/fetchers/news.fetcher.js @@ -50,15 +50,17 @@ function parseNewsSheet(sheet, impactBase = 0) { const out = [] for (let i = 0; i < sheet.items.length; i++) { const r = sheet.items[i] - const title = String(r[0] || '').trim() + const title = String(r[0] || '').trim().slice(0, 190) if (!title) continue const publishedAt = parsePublishedAt(r[2]) if (!publishedAt) continue + const body = String(r[1] || '').trim() out.push({ title, - summary: String(r[1] || '').trim().slice(0, 180), + summary: body.slice(0, 180), + content: body.slice(0, 8000), // 正文全文 (MCP "摘要"列实际是正文), 上限防异常超长 source: String(r[3] || '').trim().slice(0, 80), - url: String(r[4] || '').trim().slice(0, 400), + url: String(r[4] || '').trim().slice(0, 190), // 列宽 varchar(191), 超长会被 MySQL 拒绝 publishedAt, impactRank: impactBase + i + 1, }) @@ -103,20 +105,27 @@ export async function persistNews(newsList) { if (!process.env.DATABASE_URL) throw new Error('缺少 DATABASE_URL') if (!newsList || newsList.length === 0) return { inserted: 0, skipped: 0 } const conn = await mysql.createConnection(parseUrl(process.env.DATABASE_URL)) - let inserted = 0, skipped = 0 + let inserted = 0, skipped = 0, failed = 0 try { for (const n of newsList) { - const [r] = await conn.execute( - 'INSERT INTO `News` (`title`, `summary`, `source`, `url`, `publishedAt`, `impactRank`, `createdAt`) ' + - 'VALUES (?, ?, ?, ?, ?, ?, NOW(3)) ' + - 'ON DUPLICATE KEY UPDATE `impactRank` = VALUES(`impactRank`)', - [n.title, n.summary, n.source, n.url, n.publishedAt, n.impactRank], - ) - if (r.affectedRows === 1) inserted++ - else skipped++ + try { + // 注意: content 列依赖迁移 add_news_content 已应用, 发布顺序须先迁移后跑本脚本 + // 重复命中 (title, publishedAt) 时只回填仍为 NULL 的 content, 避免覆盖已有全文 + const [r] = await conn.execute( + 'INSERT INTO `News` (`title`, `summary`, `content`, `source`, `url`, `publishedAt`, `impactRank`, `createdAt`) ' + + 'VALUES (?, ?, ?, ?, ?, ?, ?, NOW(3)) ' + + 'AS new ON DUPLICATE KEY UPDATE `impactRank` = new.`impactRank`, `content` = IFNULL(News.`content`, new.`content`)', + [n.title, n.summary, n.content || null, n.source, n.url, n.publishedAt, n.impactRank], + ) + if (r.affectedRows === 1) inserted++ + else skipped++ + } catch (e) { + failed++ + console.error('[News] 单条入库失败:', n.title, e.message) + } } } finally { await conn.end() } - return { inserted, skipped } + return { inserted, skipped, failed } } \ No newline at end of file diff --git a/scripts/refresh-news.cjs b/scripts/refresh-news.cjs index 535ec9c..7744375 100644 --- a/scripts/refresh-news.cjs +++ b/scripts/refresh-news.cjs @@ -7,6 +7,6 @@ async function main() { console.log('[News] 拉取 ' + list.length + ' 条, 耗时 ' + ((Date.now() - t0) / 1000).toFixed(1) + 's') if (list.length === 0) { console.log('[News] 无数据, 跳过'); return } const r = await mod.persistNews(list) - console.log('[News] 入库: 新增 ' + r.inserted + ' 条, 重复跳过 ' + r.skipped + ' 条') + console.log('[News] 入库: 新增 ' + r.inserted + ' 条, 重复跳过 ' + r.skipped + ' 条' + (r.failed ? ', 失败 ' + r.failed + ' 条' : '')) } main().catch((e) => { console.error('[News] 失败:', e); process.exit(1) }) diff --git a/server/cron.js b/server/cron.js index 5614e8c..e80b707 100644 --- a/server/cron.js +++ b/server/cron.js @@ -33,4 +33,36 @@ function scheduleNews() { console.log('[cron] 已注册: 每天 03:00 拉取新闻 + 跨源报警检测') } +// 每 2 分钟: 拉取 komari 节点 + 服务自检 +function scheduleMonitors() { + cron.schedule('*/2 * * * *', async () => { + try { + const k = require('./komari-monitor.cjs') + const r = await k.runOnce() + console.log('[cron] komari: nodes=' + r.nodes + ' snapshots=' + r.snapshots + ' history=' + r.history + ' failed=' + r.failed) + } catch (e) { console.error('[cron] komari 任务失败:', e.message) } + try { + const h = require('./health-check.cjs') + const arr = await h.runOnce() + const down = arr.filter(x => x.status !== 'up').map(x => x.name) + console.log('[cron] health: ' + arr.length + ' 项, down=' + (down.length ? down.join(',') : '无')) + } catch (e) { console.error('[cron] health 任务失败:', e.message) } + }) + console.log('[cron] 已注册: 每 2 分钟 komari + 服务自检') +} + +// 每小时: 清理 24h 前的 komari 历史 +function scheduleMonitorCleanup() { + cron.schedule('0 * * * *', async () => { + try { + const k = require('./komari-monitor.cjs') + const n = await k.cleanupOld() + console.log('[cron] 监控历史清理: 删除 ' + n + ' 条') + } catch (e) { console.error('[cron] 监控清理失败:', e.message) } + }) + console.log('[cron] 已注册: 每小时清理 24h 前监控历史') +} + scheduleNews() +scheduleMonitors() +scheduleMonitorCleanup() diff --git a/server/health-check.cjs b/server/health-check.cjs new file mode 100644 index 0000000..dbd636d --- /dev/null +++ b/server/health-check.cjs @@ -0,0 +1,55 @@ +// 服务健康检查: 探测本应用各关键端点, 写入 ServiceCheck 表 +const mysql = require('mysql2/promise') + +function parseUrl(url) { const u = new URL(url); return { host: u.hostname, port: Number(u.port) || 3306, user: decodeURIComponent(u.username), password: decodeURIComponent(u.password), database: u.pathname.replace(/^\//, '') } } + +const TARGETS = [ + { name: 'api-health', url: 'http://127.0.0.1:' + (process.env.PORT || 3001) + '/api/health' }, + { name: 'auth-login', url: 'http://127.0.0.1:' + (process.env.PORT || 3001) + '/api/auth/login' }, +] + +async function probeOne(target) { + const t0 = Date.now() + try { + const ctrl = new AbortController() + setTimeout(() => ctrl.abort(), 8000) + const r = await fetch(target.url, { method: 'GET', signal: ctrl.signal }) + const latency = Date.now() - t0 + const status = (r.ok || r.status === 400 || r.status === 401) ? 'up' : 'down' + const msg = 'HTTP ' + r.status + return { name: target.name, url: target.url, status, latencyMs: latency, message: msg } + } catch (e) { + return { name: target.name, url: target.url, status: 'down', latencyMs: Date.now() - t0, message: e.message || String(e) } + } +} + +async function checkDb() { + const t0 = Date.now() + try { + const conn = await mysql.createConnection(parseUrl(process.env.DATABASE_URL)) + await conn.execute('SELECT 1') + await conn.end() + return { name: 'database', url: 'mysql://' + (new URL(process.env.DATABASE_URL)).host, status: 'up', latencyMs: Date.now() - t0, message: 'ok' } + } catch (e) { + return { name: 'database', url: 'mysql', status: 'down', latencyMs: Date.now() - t0, message: e.message } + } +} + +async function runOnce() { + const results = await Promise.all([...TARGETS.map(probeOne), checkDb()]) + const conn = await mysql.createConnection(parseUrl(process.env.DATABASE_URL)) + try { + for (const r of results) { + await conn.execute( + 'INSERT INTO `ServiceCheck` (`name`,`url`,`status`,`latencyMs`,`message`,`lastCheckAt`,`createdAt`,`updatedAt`) VALUES (?,?,?,?,?,NOW(3),NOW(3),NOW(3)) ' + + 'ON DUPLICATE KEY UPDATE `url`=VALUES(`url`),`status`=VALUES(`status`),`latencyMs`=VALUES(`latencyMs`),`message`=VALUES(`message`),`lastCheckAt`=NOW(3),`updatedAt`=NOW(3)', + [r.name, r.url, r.status, r.latencyMs, r.message.slice(0, 180)], + ) + } + } finally { + await conn.end() + } + return results +} + +module.exports = { runOnce, TARGETS } diff --git a/server/komari-monitor.cjs b/server/komari-monitor.cjs new file mode 100644 index 0000000..991d933 --- /dev/null +++ b/server/komari-monitor.cjs @@ -0,0 +1,120 @@ +// komari 服务器监控拉取: 公开 API (无需 key) +// GET /api/nodes 节点列表 +// GET /api/recent/{uuid} 最近实时状态 (数组, 多个时间点) +// GET /api/records/load?uuid=... 1 分钟粒度历史 (保留 24h) +const mysql = require('mysql2/promise') + +const BASE = process.env.KOMARI_BASE || 'https://komari.honor3.com' +const TIMEOUT = 20000 + +function parseUrl(url) { + const u = new URL(url) + return { host: u.hostname, port: Number(u.port) || 3306, user: decodeURIComponent(u.username), password: decodeURIComponent(u.password), database: u.pathname.replace(/^\//, '') } +} + +async function jget(path) { + const ctrl = new AbortController() + setTimeout(() => ctrl.abort(), TIMEOUT) + const r = await fetch(BASE + path, { headers: { 'User-Agent': 'iboard-monitor/1.0' }, signal: ctrl.signal }) + if (!r.ok) throw new Error('komari ' + path + ' HTTP ' + r.status) + const j = await r.json() + if (j.status && j.status !== 'success') throw new Error('komari ' + path + ' status: ' + j.status + ' ' + (j.message || '')) + return j.data +} + +// 拉一次所有节点 + 最近状态 + 1 分钟历史, 入库 +async function runOnce() { + const conn = await mysql.createConnection(parseUrl(process.env.DATABASE_URL)) + const stats = { nodes: 0, snapshots: 0, history: 0, failed: 0 } + try { + const nodes = await jget('/api/nodes') + if (!Array.isArray(nodes)) throw new Error('nodes 格式异常') + stats.nodes = nodes.length + for (const n of nodes) { + const uuid = n.uuid + if (!uuid) continue + try { + const recent = await jget('/api/recent/' + uuid) + let snap = null + if (Array.isArray(recent) && recent.length) snap = recent[recent.length - 1] + const recordedAt = snap ? new Date(snap.updated_at) : new Date() + const ramTotal = snap && snap.ram ? Number(snap.ram.total) : Number(n.mem_total || 0) + const diskTotal = snap && snap.disk ? Number(snap.disk.total) : Number(n.disk_total || 0) + await conn.execute( + 'INSERT INTO `ServerNode` (`uuid`,`name`,`cpuName`,`os`,`region`,`memTotal`,`diskTotal`,`cpuCores`,' + + '`cpuUsage`,`ramUsed`,`swapUsed`,`load1`,`load5`,`load15`,`diskUsed`,`netIn`,`netOut`,`uptime`,`process`,`connections`,`status`,`recordedAt`,`createdAt`,`updatedAt`) ' + + 'VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(3),NOW(3)) ' + + 'ON DUPLICATE KEY UPDATE `name`=VALUES(`name`),`cpuName`=VALUES(`cpuName`),`os`=VALUES(`os`),`region`=VALUES(`region`),' + + '`memTotal`=VALUES(`memTotal`),`diskTotal`=VALUES(`diskTotal`),`cpuCores`=VALUES(`cpuCores`),' + + '`cpuUsage`=VALUES(`cpuUsage`),`ramUsed`=VALUES(`ramUsed`),`swapUsed`=VALUES(`swapUsed`),' + + '`load1`=VALUES(`load1`),`load5`=VALUES(`load5`),`load15`=VALUES(`load15`),`diskUsed`=VALUES(`diskUsed`),' + + '`netIn`=VALUES(`netIn`),`netOut`=VALUES(`netOut`),`uptime`=VALUES(`uptime`),' + + '`process`=VALUES(`process`),`connections`=VALUES(`connections`),`status`=VALUES(`status`),' + + '`recordedAt`=VALUES(`recordedAt`),`updatedAt`=NOW(3)', + [ + uuid, n.name || '', n.cpu_name || '', n.os || '', n.region || '', + ramTotal, diskTotal, Number(n.cpu_cores || 0), + snap ? Number(snap.cpu?.usage || 0) : 0, + snap ? Number(snap.ram?.used || 0) : 0, + snap ? Number(snap.swap?.used || 0) : 0, + snap ? Number(snap.load?.load1 || 0) : 0, + snap ? Number(snap.load?.load5 || 0) : 0, + snap ? Number(snap.load?.load15 || 0) : 0, + snap ? Number(snap.disk?.used || 0) : 0, + snap ? Number(snap.network?.down || 0) : 0, + snap ? Number(snap.network?.up || 0) : 0, + snap ? Number(snap.uptime || 0) : 0, + snap ? Number(snap.process || 0) : 0, + snap ? Number(snap.connections?.tcp || 0) : 0, + snap ? 'online' : 'unknown', + recordedAt, + ], + ) + stats.snapshots++ + + let rec = null + try { rec = await jget('/api/records/load?uuid=' + uuid) } catch (e) { /* 节点未开启 record */ } + if (rec && Array.isArray(rec.records)) { + for (const r of rec.records) { + const period = new Date(r.time) + if (isNaN(period.getTime())) continue + const [res] = await conn.execute( + 'INSERT INTO `ServerNodeHistory` (`uuid`,`period`,`cpu`,`ram`,`load`,`disk`,`netIn`,`netOut`,`process`,`connections`,`createdAt`) ' + + 'VALUES (?,?,?,?,?,?,?,?,?,?,NOW(3)) ' + + 'ON DUPLICATE KEY UPDATE `cpu`=VALUES(`cpu`),`ram`=VALUES(`ram`),`load`=VALUES(`load`),`disk`=VALUES(`disk`),' + + '`netIn`=VALUES(`netIn`),`netOut`=VALUES(`netOut`),`process`=VALUES(`process`),`connections`=VALUES(`connections`)', + [ + uuid, period, + Number(r.cpu || 0), Number(r.ram || 0), Number(r.load || 0), + Number(r.disk || 0), Number(r.net_in || 0), Number(r.net_out || 0), + Number(r.process || 0), Number(r.connections || 0), + ], + ) + if (res.affectedRows === 1) stats.history++ + } + } + } catch (e) { + stats.failed++ + console.error('[komari] 节点 ' + uuid + ' 失败:', e.message) + } + } + } finally { + await conn.end() + } + return stats +} + +// 清理 24h 之前的历史 +async function cleanupOld() { + const conn = await mysql.createConnection(parseUrl(process.env.DATABASE_URL)) + try { + const cutoff = new Date(Date.now() - 24 * 60 * 60 * 1000) + const [r] = await conn.execute('DELETE FROM `ServerNodeHistory` WHERE `period` < ?', [cutoff]) + return r.affectedRows + } finally { + await conn.end() + } +} + +module.exports = { runOnce, cleanupOld, BASE } + diff --git a/server/routes/alerts.js b/server/routes/alerts.js index 2def7f0..4d02cf4 100644 --- a/server/routes/alerts.js +++ b/server/routes/alerts.js @@ -8,16 +8,21 @@ router.use(authRequired) // 报警列表: 按时间最新优先, cursor 分页 (cursor = id) router.get('/alerts', async (req, res, next) => { try { - const limit = Math.min(Number(req.query.limit) || 10, 50) - const cursor = req.query.cursor ? Number(req.query.cursor) : null + const rawLimit = Number(req.query.limit) + const limit = Number.isFinite(rawLimit) && rawLimit >= 1 ? Math.min(Math.floor(rawLimit), 50) : 10 + const rawCursor = Number(req.query.cursor) + const cursor = Number.isInteger(rawCursor) && rawCursor > 0 ? rawCursor : null const where = cursor ? { id: { lt: cursor } } : {} - const items = await prisma.alert.findMany({ - where, - orderBy: { id: 'desc' }, - take: limit, - }) + const [items, total] = await Promise.all([ + prisma.alert.findMany({ + where, + orderBy: { id: 'desc' }, + take: limit, + }), + prisma.alert.count(), + ]) const nextCursor = items.length === limit ? String(items[items.length - 1].id) : null - res.json({ items, nextCursor }) + res.json({ items, nextCursor, total }) } catch (e) { next(e) } }) diff --git a/server/routes/monitors.js b/server/routes/monitors.js new file mode 100644 index 0000000..090ffca --- /dev/null +++ b/server/routes/monitors.js @@ -0,0 +1,42 @@ +import { Router } from 'express' +import { prisma } from '../db.js' +import { authRequired } from '../middleware.js' + +const router = Router() +router.use(authRequired) + +// 服务器节点列表: 元数据 + 最新快照 +router.get('/servers', async (_req, res, next) => { + try { + const rows = await prisma.serverNode.findMany({ + orderBy: { name: 'asc' }, + }) + res.json({ items: rows }) + } catch (e) { next(e) } +}) + +// 节点时序: ?uuid=...&hours=24 +router.get('/servers/:uuid/history', async (req, res, next) => { + try { + const hours = Math.min(Math.max(Number(req.query.hours) || 24, 1), 168) + const since = new Date(Date.now() - hours * 3600 * 1000) + const rows = await prisma.serverNodeHistory.findMany({ + where: { uuid: req.params.uuid, period: { gte: since } }, + orderBy: { period: 'asc' }, + take: 2000, + }) + res.json({ items: rows }) + } catch (e) { next(e) } +}) + +// 服务健康列表 +router.get('/services', async (_req, res, next) => { + try { + const rows = await prisma.serviceCheck.findMany({ + orderBy: { name: 'asc' }, + }) + res.json({ items: rows }) + } catch (e) { next(e) } +}) + +export default router diff --git a/server/routes/news.js b/server/routes/news.js index ea4157c..7db6c57 100644 --- a/server/routes/news.js +++ b/server/routes/news.js @@ -5,21 +5,47 @@ import { authRequired } from '../middleware.js' const router = Router() router.use(authRequired) -// 新闻列表: 按时间最新优先, cursor 分页 (cursor = publishedAt ISO 字符串) -// 用 prisma cursor 配合 id 兜底 (同一秒发布的新闻) +// 新闻列表: 按时间最新优先, cursor 分页 +// cursor 格式: "|", 兼容旧版纯时间戳 (不带 |) +// 同秒多条时用 id 兜底, 避免翻页时整批漏掉 router.get('/news', async (req, res, next) => { try { - const limit = Math.min(Number(req.query.limit) || 10, 50) - const cursor = req.query.cursor || null - const where = cursor ? { publishedAt: { lt: new Date(cursor) } } : {} + const rawLimit = Number(req.query.limit) + const limit = Number.isFinite(rawLimit) && rawLimit >= 1 ? Math.min(Math.floor(rawLimit), 50) : 10 + let where = {} + const cursor = req.query.cursor || '' + if (cursor) { + const [ts, idRaw] = cursor.split('|') + const c = new Date(ts) + if (!isNaN(c.getTime())) { + const id = Number(idRaw) + where = id > 0 + ? { OR: [{ publishedAt: { lt: c } }, { publishedAt: c, id: { lt: id } }] } + : { publishedAt: { lt: c } } + } + } const items = await prisma.news.findMany({ + select: { id: true, title: true, summary: true, source: true, url: true, publishedAt: true, impactRank: true }, where, orderBy: [{ publishedAt: 'desc' }, { id: 'desc' }], take: limit, }) - const nextCursor = items.length === limit ? items[items.length - 1].publishedAt.toISOString() : null + const nextCursor = items.length === limit && items.length > 0 + ? items[items.length - 1].publishedAt.toISOString() + '|' + items[items.length - 1].id + : null res.json({ items, nextCursor }) } catch (e) { next(e) } }) +// 新闻详情: 含正文 content +router.get('/news/:id', async (req, res, next) => { + try { + const id = Number(req.params.id) + if (!Number.isInteger(id) || id <= 0) return res.status(400).json({ error: '无效的新闻 id' }) + const item = await prisma.news.findUnique({ where: { id } }) + if (!item) return res.status(404).json({ error: '新闻不存在' }) + res.json({ item }) + } catch (e) { next(e) } +}) + export default router diff --git a/src/App.jsx b/src/App.jsx index 1942421..7f60351 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -2,6 +2,7 @@ import { Routes, Route, Navigate, useLocation } from 'react-router-dom' import MobileShell from './layouts/MobileShell.jsx' import LoginPage from './pages/LoginPage.jsx' import HomePage from './pages/HomePage.jsx' +import NewsDetail from './pages/news/NewsDetail.jsx' import MacroPage from './pages/MacroPage.jsx' import MonitorPage from './pages/MonitorPage.jsx' import MePage from './pages/MePage.jsx' @@ -30,6 +31,7 @@ export default function App() { } /> }> } /> + } /> } /> } /> } /> diff --git a/src/pages/HomePage.jsx b/src/pages/HomePage.jsx index fa56ba5..0187cb6 100644 --- a/src/pages/HomePage.jsx +++ b/src/pages/HomePage.jsx @@ -1,6 +1,8 @@ import { useEffect, useState, useRef, useCallback } from 'react' -import { NavBar, List, Card, Empty, DotLoading } from 'antd-mobile' +import { useNavigate } from 'react-router-dom' +import { NavBar, Card, Empty, DotLoading, Badge } from 'antd-mobile' import { api } from '../api/client.js' +import SwipeTabs from '../components/SwipeTabs.jsx' // 首页: 报警模块 + 新闻模块 // - 报警: World Bank 与妙想 MCP 跨源同 (指标, 周期) 数据差异超阈值 (按时间倒序) @@ -22,41 +24,62 @@ function fmtDate(s) { } export default function HomePage() { + const [active, setActive] = useState('news') // 默认选中新闻 + const [alertCount, setAlertCount] = useState(0) + const handleAlertCount = useCallback((n) => setAlertCount(n), []) + + const tabs = [ + { + key: 'alerts', + label: ( + + 报警 + {alertCount > 0 && } + + ), + render: () => , + }, + { key: 'news', label: '新闻', render: () => }, + ] + return (
首页
- - +
) } // 报警模块 -function AlertSection() { +function AlertSection({ onCount }) { const [items, setItems] = useState([]) const [loading, setLoading] = useState(false) const [done, setDone] = useState(false) const cursorRef = useRef(null) const sentinelRef = useRef(null) + const inFlightRef = useRef(false) const fetchPage = useCallback(async () => { - if (loading || done) return + if (inFlightRef.current || done) return + inFlightRef.current = true setLoading(true) try { const url = '/alerts?limit=10' + (cursorRef.current ? '&cursor=' + cursorRef.current : '') const data = await api(url) setItems((prev) => prev.concat(data.items || [])) + onCount?.(data.total ?? (data.items?.length || 0)) cursorRef.current = data.nextCursor if (!data.nextCursor) setDone(true) } catch (e) { console.error('alerts load error', e) setDone(true) } finally { + inFlightRef.current = false setLoading(false) } - }, [loading, done]) + }, [done, onCount]) useEffect(() => { fetchPage() }, []) useEffect(() => { @@ -106,9 +129,12 @@ function NewsSection() { const [done, setDone] = useState(false) const cursorRef = useRef(null) const sentinelRef = useRef(null) + const inFlightRef = useRef(false) + const navigate = useNavigate() const fetchPage = useCallback(async () => { - if (loading || done) return + if (inFlightRef.current || done) return + inFlightRef.current = true setLoading(true) try { const url = '/news?limit=10' + (cursorRef.current ? '&cursor=' + encodeURIComponent(cursorRef.current) : '') @@ -120,9 +146,10 @@ function NewsSection() { console.error('news load error', e) setDone(true) } finally { + inFlightRef.current = false setLoading(false) } - }, [loading, done]) + }, [done]) useEffect(() => { fetchPage() }, []) useEffect(() => { @@ -144,7 +171,7 @@ function NewsSection() { ) : (
{items.map((n) => ( - + navigate('/news/' + n.id)}>
{n.title}
{n.summary &&
{n.summary}
}
diff --git a/src/pages/news/NewsDetail.jsx b/src/pages/news/NewsDetail.jsx new file mode 100644 index 0000000..a60235d --- /dev/null +++ b/src/pages/news/NewsDetail.jsx @@ -0,0 +1,56 @@ +import { useEffect, useState } from 'react' +import { useParams, useNavigate } from 'react-router-dom' +import { NavBar } from 'antd-mobile' +import { api } from '../../api/client.js' + +// 新闻详情: /news/:id +// 正文来自 News.content (MCP 返回的完整正文), 旧数据可能无 content, 兜底显示摘要 +function fmtDate(s) { + if (!s) return '' + const d = new Date(s) + if (isNaN(d.getTime())) return s + const pad = (n) => String(n).padStart(2, '0') + return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()) +} + +export default function NewsDetail() { + const { id } = useParams() + const navigate = useNavigate() + const [item, setItem] = useState(null) + const [err, setErr] = useState('') + const [loading, setLoading] = useState(true) + + useEffect(() => { + let cancelled = false + setLoading(true) + api('/news/' + encodeURIComponent(id)) + .then((data) => { if (!cancelled) setItem(data.item) }) + .catch((e) => !cancelled && setErr(e.message)) + .finally(() => !cancelled && setLoading(false)) + return () => { cancelled = true } + }, [id]) + + return ( +
+ navigate(-1)}>新闻详情 + {loading &&
加载中...
} + {err &&
{err}
} + {!loading && !err && !item &&
新闻不存在
} + {!loading && !err && item && ( +
+

{item.title}

+
+ {item.source || '未知来源'} · {fmtDate(item.publishedAt)} · #{item.impactRank} + {/^https?:\/\//i.test(item.url || '') && ( + 原文链接 + )} +
+
+ {item.content ? item.content : item.summary} + {!item.content &&
(本条暂无全文,仅摘要)
} +
+
+ )} +
+ ) +} diff --git a/src/styles/globals.css b/src/styles/globals.css index 12e4321..81919af 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -197,6 +197,8 @@ input, textarea, select { font: inherit; } .me-logout { color: var(--color-danger); } /* 首页模块: 报警 + 新闻 */ .home-content { padding: 0 0 16px; } +.home-content .adm-tabs-content { --content-padding: 0; } +.home-content .tab-label { display: inline-flex; align-items: center; gap: 4px; } .home-section { padding: 0 12px 16px; } .section-title { font-size: 16px; font-weight: 700; padding: 14px 4px 8px; color: var(--color-text); } .section-list { display: flex; flex-direction: column; gap: 8px; } @@ -214,4 +216,12 @@ input, textarea, select { font: inherit; } .news-summary { font-size: 12px; color: var(--color-muted); margin-top: 4px; line-height: 1.5; max-height: 3.6em; overflow: hidden; } .news-meta { display: flex; gap: 10px; font-size: 11px; color: var(--color-muted); margin-top: 6px; } .news-rank { color: var(--color-primary); font-weight: 600; } +.news-card:active .adm-card-body { background: #f5f5f5; } +/* 新闻详情页 */ +.news-detail { background: #fff; padding: 18px 16px 24px; } +.news-detail h1 { font-size: 20px; line-height: 1.35; margin-bottom: 8px; } +.news-detail .meta { font-size: 12px; color: var(--color-muted); margin-bottom: 14px; padding-bottom: 10px; border-bottom: 1px solid var(--color-border); display: flex; flex-wrap: wrap; gap: 6px; align-items: center; } +.news-origin { color: var(--color-primary); margin-left: auto; } +.news-content { font-size: 15px; line-height: 1.75; color: #333; white-space: pre-wrap; word-break: break-word; } +.news-content-empty { margin-top: 12px; font-size: 12px; color: var(--color-muted); } .scroll-sentinel { text-align: center; padding: 14px 0 4px; color: var(--color-muted); font-size: 12px; }