mirror of
https://github.com/crocofied/CoreControl.git
synced 2025-12-17 15:36:50 +00:00
Prisma Schema
This commit is contained in:
parent
4f60ae5f7b
commit
735deb9efe
41
package-lock.json
generated
41
package-lock.json
generated
@ -8,6 +8,7 @@
|
||||
"name": "corecontrol",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"@prisma/client": "^6.8.2",
|
||||
"daisyui": "^5.0.35",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
@ -638,11 +639,33 @@
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@prisma/client": {
|
||||
"version": "6.8.2",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.8.2.tgz",
|
||||
"integrity": "sha512-5II+vbyzv4si6Yunwgkj0qT/iY0zyspttoDrL3R4BYgLdp42/d2C8xdi9vqkrYtKt9H32oFIukvyw3Koz5JoDg==",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=18.18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"prisma": "*",
|
||||
"typescript": ">=5.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"prisma": {
|
||||
"optional": true
|
||||
},
|
||||
"typescript": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@prisma/config": {
|
||||
"version": "6.8.2",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.8.2.tgz",
|
||||
"integrity": "sha512-ZJY1fF4qRBPdLQ/60wxNtX+eu89c3AkYEcP7L3jkp0IPXCNphCYxikTg55kPJLDOG6P0X+QG5tCv6CmsBRZWFQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"jiti": "2.4.2"
|
||||
@ -652,14 +675,14 @@
|
||||
"version": "6.8.2",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.8.2.tgz",
|
||||
"integrity": "sha512-4muBSSUwJJ9BYth5N8tqts8JtiLT8QI/RSAzEogwEfpbYGFo9mYsInsVo8dqXdPO2+Rm5OG5q0qWDDE3nyUbVg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@prisma/engines": {
|
||||
"version": "6.8.2",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.8.2.tgz",
|
||||
"integrity": "sha512-XqAJ//LXjqYRQ1RRabs79KOY4+v6gZOGzbcwDQl0D6n9WBKjV7qdrbd042CwSK0v0lM9MSHsbcFnU2Yn7z8Zlw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@ -673,14 +696,14 @@
|
||||
"version": "6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e.tgz",
|
||||
"integrity": "sha512-Rkik9lMyHpFNGaLpPF3H5q5TQTkm/aE7DsGM5m92FZTvWQsvmi6Va8On3pWvqLHOt5aPUvFb/FeZTmphI4CPiQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@prisma/fetch-engine": {
|
||||
"version": "6.8.2",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.8.2.tgz",
|
||||
"integrity": "sha512-lCvikWOgaLOfqXGacEKSNeenvj0n3qR5QvZUOmPE2e1Eh8cMYSobxonCg9rqM6FSdTfbpqp9xwhSAOYfNqSW0g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@prisma/debug": "6.8.2",
|
||||
@ -692,7 +715,7 @@
|
||||
"version": "6.8.2",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.8.2.tgz",
|
||||
"integrity": "sha512-vXSxyUgX3vm1Q70QwzwkjeYfRryIvKno1SXbIqwSptKwqKzskINnDUcx85oX+ys6ooN2ATGSD0xN2UTfg6Zcow==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@prisma/debug": "6.8.2"
|
||||
@ -1169,7 +1192,7 @@
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
|
||||
"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"jiti": "lib/jiti-cli.mjs"
|
||||
@ -1611,7 +1634,7 @@
|
||||
"version": "6.8.2",
|
||||
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.8.2.tgz",
|
||||
"integrity": "sha512-JNricTXQxzDtRS7lCGGOB4g5DJ91eg3nozdubXze3LpcMl1oWwcFddrj++Up3jnRE6X/3gB/xz3V+ecBk/eEGA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@ -1809,7 +1832,7 @@
|
||||
"version": "5.8.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
||||
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@prisma/client": "^6.8.2",
|
||||
"daisyui": "^5.0.35",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
|
||||
1
prisma/generated/prisma/client.d.ts
vendored
Normal file
1
prisma/generated/prisma/client.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export * from "./index"
|
||||
4
prisma/generated/prisma/client.js
Normal file
4
prisma/generated/prisma/client.js
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
/* !!! This is code generated by Prisma. Do not edit directly. !!!
|
||||
/* eslint-disable */
|
||||
module.exports = { ...require('.') }
|
||||
1
prisma/generated/prisma/default.d.ts
vendored
Normal file
1
prisma/generated/prisma/default.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export * from "./index"
|
||||
4
prisma/generated/prisma/default.js
Normal file
4
prisma/generated/prisma/default.js
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
/* !!! This is code generated by Prisma. Do not edit directly. !!!
|
||||
/* eslint-disable */
|
||||
module.exports = { ...require('.') }
|
||||
1
prisma/generated/prisma/edge.d.ts
vendored
Normal file
1
prisma/generated/prisma/edge.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export * from "./default"
|
||||
303
prisma/generated/prisma/edge.js
Normal file
303
prisma/generated/prisma/edge.js
Normal file
File diff suppressed because one or more lines are too long
290
prisma/generated/prisma/index-browser.js
Normal file
290
prisma/generated/prisma/index-browser.js
Normal file
@ -0,0 +1,290 @@
|
||||
|
||||
/* !!! This is code generated by Prisma. Do not edit directly. !!!
|
||||
/* eslint-disable */
|
||||
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
|
||||
const {
|
||||
Decimal,
|
||||
objectEnumValues,
|
||||
makeStrictEnum,
|
||||
Public,
|
||||
getRuntime,
|
||||
skip
|
||||
} = require('./runtime/index-browser.js')
|
||||
|
||||
|
||||
const Prisma = {}
|
||||
|
||||
exports.Prisma = Prisma
|
||||
exports.$Enums = {}
|
||||
|
||||
/**
|
||||
* Prisma Client JS version: 6.8.2
|
||||
* Query Engine version: 2060c79ba17c6bb9f5823312b6f6b7f4a845738e
|
||||
*/
|
||||
Prisma.prismaVersion = {
|
||||
client: "6.8.2",
|
||||
engine: "2060c79ba17c6bb9f5823312b6f6b7f4a845738e"
|
||||
}
|
||||
|
||||
Prisma.PrismaClientKnownRequestError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)};
|
||||
Prisma.PrismaClientUnknownRequestError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.PrismaClientRustPanicError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.PrismaClientInitializationError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.PrismaClientValidationError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.Decimal = Decimal
|
||||
|
||||
/**
|
||||
* Re-export of sql-template-tag
|
||||
*/
|
||||
Prisma.sql = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.empty = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.join = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.raw = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.validator = Public.validator
|
||||
|
||||
/**
|
||||
* Extensions
|
||||
*/
|
||||
Prisma.getExtensionContext = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.defineExtension = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
|
||||
/**
|
||||
* Shorthand utilities for JSON filtering
|
||||
*/
|
||||
Prisma.DbNull = objectEnumValues.instances.DbNull
|
||||
Prisma.JsonNull = objectEnumValues.instances.JsonNull
|
||||
Prisma.AnyNull = objectEnumValues.instances.AnyNull
|
||||
|
||||
Prisma.NullTypes = {
|
||||
DbNull: objectEnumValues.classes.DbNull,
|
||||
JsonNull: objectEnumValues.classes.JsonNull,
|
||||
AnyNull: objectEnumValues.classes.AnyNull
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Enums
|
||||
*/
|
||||
|
||||
exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
|
||||
ReadUncommitted: 'ReadUncommitted',
|
||||
ReadCommitted: 'ReadCommitted',
|
||||
RepeatableRead: 'RepeatableRead',
|
||||
Serializable: 'Serializable'
|
||||
});
|
||||
|
||||
exports.Prisma.UserScalarFieldEnum = {
|
||||
id: 'id',
|
||||
username: 'username',
|
||||
name: 'name',
|
||||
email: 'email',
|
||||
password: 'password',
|
||||
lastLogin: 'lastLogin',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
};
|
||||
|
||||
exports.Prisma.SiteScalarFieldEnum = {
|
||||
id: 'id',
|
||||
name: 'name',
|
||||
description: 'description'
|
||||
};
|
||||
|
||||
exports.Prisma.NetworkScalarFieldEnum = {
|
||||
id: 'id',
|
||||
siteId: 'siteId',
|
||||
name: 'name',
|
||||
ipv4Subnet: 'ipv4Subnet',
|
||||
ipv6Subnet: 'ipv6Subnet',
|
||||
gateway: 'gateway'
|
||||
};
|
||||
|
||||
exports.Prisma.ServerScalarFieldEnum = {
|
||||
id: 'id',
|
||||
networkId: 'networkId',
|
||||
name: 'name',
|
||||
description: 'description',
|
||||
icon: 'icon',
|
||||
ipv4Address: 'ipv4Address',
|
||||
osDetails: 'osDetails',
|
||||
cpuDetails: 'cpuDetails',
|
||||
gpuDetails: 'gpuDetails',
|
||||
memoryDetails: 'memoryDetails',
|
||||
storageDetails: 'storageDetails',
|
||||
managementUrl: 'managementUrl',
|
||||
monitoring: 'monitoring',
|
||||
monitoringUrl: 'monitoringUrl'
|
||||
};
|
||||
|
||||
exports.Prisma.ServerMonitoringScalarFieldEnum = {
|
||||
id: 'id',
|
||||
serverId: 'serverId',
|
||||
cpuUsage: 'cpuUsage',
|
||||
gpuUsage: 'gpuUsage',
|
||||
memoryUsage: 'memoryUsage',
|
||||
diskUsage: 'diskUsage',
|
||||
temperature: 'temperature',
|
||||
online: 'online',
|
||||
uptimeSeconds: 'uptimeSeconds',
|
||||
timestamp: 'timestamp'
|
||||
};
|
||||
|
||||
exports.Prisma.ApplicationScalarFieldEnum = {
|
||||
id: 'id',
|
||||
serverId: 'serverId',
|
||||
name: 'name',
|
||||
description: 'description',
|
||||
icon: 'icon',
|
||||
url: 'url',
|
||||
monitoring: 'monitoring'
|
||||
};
|
||||
|
||||
exports.Prisma.ApplicationMonitoringScalarFieldEnum = {
|
||||
id: 'id',
|
||||
applicationId: 'applicationId',
|
||||
online: 'online',
|
||||
latency: 'latency',
|
||||
timestamp: 'timestamp'
|
||||
};
|
||||
|
||||
exports.Prisma.ServerMonitoringNotificationScalarFieldEnum = {
|
||||
id: 'id',
|
||||
statusChange: 'statusChange',
|
||||
cpuLimit: 'cpuLimit',
|
||||
gpuLimit: 'gpuLimit',
|
||||
memoryLimit: 'memoryLimit',
|
||||
diskLimit: 'diskLimit',
|
||||
temperatureLimit: 'temperatureLimit'
|
||||
};
|
||||
|
||||
exports.Prisma.ApplicationMonitoringNotificationScalarFieldEnum = {
|
||||
id: 'id',
|
||||
statusChange: 'statusChange',
|
||||
latencyLimit: 'latencyLimit'
|
||||
};
|
||||
|
||||
exports.Prisma.NotificationProviderScalarFieldEnum = {
|
||||
id: 'id',
|
||||
name: 'name',
|
||||
type: 'type',
|
||||
config: 'config'
|
||||
};
|
||||
|
||||
exports.Prisma.SortOrder = {
|
||||
asc: 'asc',
|
||||
desc: 'desc'
|
||||
};
|
||||
|
||||
exports.Prisma.JsonNullValueInput = {
|
||||
JsonNull: Prisma.JsonNull
|
||||
};
|
||||
|
||||
exports.Prisma.QueryMode = {
|
||||
default: 'default',
|
||||
insensitive: 'insensitive'
|
||||
};
|
||||
|
||||
exports.Prisma.NullsOrder = {
|
||||
first: 'first',
|
||||
last: 'last'
|
||||
};
|
||||
|
||||
exports.Prisma.JsonNullValueFilter = {
|
||||
DbNull: Prisma.DbNull,
|
||||
JsonNull: Prisma.JsonNull,
|
||||
AnyNull: Prisma.AnyNull
|
||||
};
|
||||
exports.NotificationType = exports.$Enums.NotificationType = {
|
||||
TELEGRAM: 'TELEGRAM'
|
||||
};
|
||||
|
||||
exports.Prisma.ModelName = {
|
||||
User: 'User',
|
||||
Site: 'Site',
|
||||
Network: 'Network',
|
||||
Server: 'Server',
|
||||
ServerMonitoring: 'ServerMonitoring',
|
||||
Application: 'Application',
|
||||
ApplicationMonitoring: 'ApplicationMonitoring',
|
||||
ServerMonitoringNotification: 'ServerMonitoringNotification',
|
||||
ApplicationMonitoringNotification: 'ApplicationMonitoringNotification',
|
||||
NotificationProvider: 'NotificationProvider'
|
||||
};
|
||||
|
||||
/**
|
||||
* This is a stub Prisma Client that will error at runtime if called.
|
||||
*/
|
||||
class PrismaClient {
|
||||
constructor() {
|
||||
return new Proxy(this, {
|
||||
get(target, prop) {
|
||||
let message
|
||||
const runtime = getRuntime()
|
||||
if (runtime.isEdge) {
|
||||
message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:
|
||||
- Use Prisma Accelerate: https://pris.ly/d/accelerate
|
||||
- Use Driver Adapters: https://pris.ly/d/driver-adapters
|
||||
`;
|
||||
} else {
|
||||
message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'
|
||||
}
|
||||
|
||||
message += `
|
||||
If this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`
|
||||
|
||||
throw new Error(message)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
exports.PrismaClient = PrismaClient
|
||||
|
||||
Object.assign(exports, Prisma)
|
||||
16611
prisma/generated/prisma/index.d.ts
vendored
Normal file
16611
prisma/generated/prisma/index.d.ts
vendored
Normal file
File diff suppressed because it is too large
Load Diff
324
prisma/generated/prisma/index.js
Normal file
324
prisma/generated/prisma/index.js
Normal file
File diff suppressed because one or more lines are too long
BIN
prisma/generated/prisma/libquery_engine-rhel-openssl-3.0.x.so.node
Executable file
BIN
prisma/generated/prisma/libquery_engine-rhel-openssl-3.0.x.so.node
Executable file
Binary file not shown.
140
prisma/generated/prisma/package.json
Normal file
140
prisma/generated/prisma/package.json
Normal file
@ -0,0 +1,140 @@
|
||||
{
|
||||
"name": "prisma-client-e20e5ba352831cc16db10e7fb078492fa562fb6540d70f00d2007a1e88dbfc08",
|
||||
"main": "index.js",
|
||||
"types": "index.d.ts",
|
||||
"browser": "index-browser.js",
|
||||
"exports": {
|
||||
"./client": {
|
||||
"require": {
|
||||
"node": "./index.js",
|
||||
"edge-light": "./wasm.js",
|
||||
"workerd": "./wasm.js",
|
||||
"worker": "./wasm.js",
|
||||
"browser": "./index-browser.js",
|
||||
"default": "./index.js"
|
||||
},
|
||||
"import": {
|
||||
"node": "./index.js",
|
||||
"edge-light": "./wasm.js",
|
||||
"workerd": "./wasm.js",
|
||||
"worker": "./wasm.js",
|
||||
"browser": "./index-browser.js",
|
||||
"default": "./index.js"
|
||||
},
|
||||
"default": "./index.js"
|
||||
},
|
||||
"./package.json": "./package.json",
|
||||
".": {
|
||||
"require": {
|
||||
"node": "./index.js",
|
||||
"edge-light": "./wasm.js",
|
||||
"workerd": "./wasm.js",
|
||||
"worker": "./wasm.js",
|
||||
"browser": "./index-browser.js",
|
||||
"default": "./index.js"
|
||||
},
|
||||
"import": {
|
||||
"node": "./index.js",
|
||||
"edge-light": "./wasm.js",
|
||||
"workerd": "./wasm.js",
|
||||
"worker": "./wasm.js",
|
||||
"browser": "./index-browser.js",
|
||||
"default": "./index.js"
|
||||
},
|
||||
"default": "./index.js"
|
||||
},
|
||||
"./edge": {
|
||||
"types": "./edge.d.ts",
|
||||
"require": "./edge.js",
|
||||
"import": "./edge.js",
|
||||
"default": "./edge.js"
|
||||
},
|
||||
"./react-native": {
|
||||
"types": "./react-native.d.ts",
|
||||
"require": "./react-native.js",
|
||||
"import": "./react-native.js",
|
||||
"default": "./react-native.js"
|
||||
},
|
||||
"./extension": {
|
||||
"types": "./extension.d.ts",
|
||||
"require": "./extension.js",
|
||||
"import": "./extension.js",
|
||||
"default": "./extension.js"
|
||||
},
|
||||
"./index-browser": {
|
||||
"types": "./index.d.ts",
|
||||
"require": "./index-browser.js",
|
||||
"import": "./index-browser.js",
|
||||
"default": "./index-browser.js"
|
||||
},
|
||||
"./index": {
|
||||
"types": "./index.d.ts",
|
||||
"require": "./index.js",
|
||||
"import": "./index.js",
|
||||
"default": "./index.js"
|
||||
},
|
||||
"./wasm": {
|
||||
"types": "./wasm.d.ts",
|
||||
"require": "./wasm.js",
|
||||
"import": "./wasm.mjs",
|
||||
"default": "./wasm.mjs"
|
||||
},
|
||||
"./runtime/client": {
|
||||
"types": "./runtime/client.d.ts",
|
||||
"require": "./runtime/client.js",
|
||||
"import": "./runtime/client.mjs",
|
||||
"default": "./runtime/client.mjs"
|
||||
},
|
||||
"./runtime/library": {
|
||||
"types": "./runtime/library.d.ts",
|
||||
"require": "./runtime/library.js",
|
||||
"import": "./runtime/library.mjs",
|
||||
"default": "./runtime/library.mjs"
|
||||
},
|
||||
"./runtime/binary": {
|
||||
"types": "./runtime/binary.d.ts",
|
||||
"require": "./runtime/binary.js",
|
||||
"import": "./runtime/binary.mjs",
|
||||
"default": "./runtime/binary.mjs"
|
||||
},
|
||||
"./runtime/wasm": {
|
||||
"types": "./runtime/wasm.d.ts",
|
||||
"require": "./runtime/wasm.js",
|
||||
"import": "./runtime/wasm.mjs",
|
||||
"default": "./runtime/wasm.mjs"
|
||||
},
|
||||
"./runtime/edge": {
|
||||
"types": "./runtime/edge.d.ts",
|
||||
"require": "./runtime/edge.js",
|
||||
"import": "./runtime/edge-esm.js",
|
||||
"default": "./runtime/edge-esm.js"
|
||||
},
|
||||
"./runtime/react-native": {
|
||||
"types": "./runtime/react-native.d.ts",
|
||||
"require": "./runtime/react-native.js",
|
||||
"import": "./runtime/react-native.js",
|
||||
"default": "./runtime/react-native.js"
|
||||
},
|
||||
"./generator-build": {
|
||||
"require": "./generator-build/index.js",
|
||||
"import": "./generator-build/index.js",
|
||||
"default": "./generator-build/index.js"
|
||||
},
|
||||
"./sql": {
|
||||
"require": {
|
||||
"types": "./sql.d.ts",
|
||||
"node": "./sql.js",
|
||||
"default": "./sql.js"
|
||||
},
|
||||
"import": {
|
||||
"types": "./sql.d.ts",
|
||||
"node": "./sql.mjs",
|
||||
"default": "./sql.mjs"
|
||||
},
|
||||
"default": "./sql.js"
|
||||
},
|
||||
"./*": "./*"
|
||||
},
|
||||
"version": "6.8.2",
|
||||
"sideEffects": false
|
||||
}
|
||||
34
prisma/generated/prisma/runtime/edge-esm.js
Normal file
34
prisma/generated/prisma/runtime/edge-esm.js
Normal file
File diff suppressed because one or more lines are too long
34
prisma/generated/prisma/runtime/edge.js
Normal file
34
prisma/generated/prisma/runtime/edge.js
Normal file
File diff suppressed because one or more lines are too long
370
prisma/generated/prisma/runtime/index-browser.d.ts
vendored
Normal file
370
prisma/generated/prisma/runtime/index-browser.d.ts
vendored
Normal file
@ -0,0 +1,370 @@
|
||||
declare class AnyNull extends NullTypesEnumValue {
|
||||
#private;
|
||||
}
|
||||
|
||||
declare type Args<T, F extends Operation> = T extends {
|
||||
[K: symbol]: {
|
||||
types: {
|
||||
operations: {
|
||||
[K in F]: {
|
||||
args: any;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
} ? T[symbol]['types']['operations'][F]['args'] : any;
|
||||
|
||||
declare class DbNull extends NullTypesEnumValue {
|
||||
#private;
|
||||
}
|
||||
|
||||
export declare function Decimal(n: Decimal.Value): Decimal;
|
||||
|
||||
export declare namespace Decimal {
|
||||
export type Constructor = typeof Decimal;
|
||||
export type Instance = Decimal;
|
||||
export type Rounding = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
||||
export type Modulo = Rounding | 9;
|
||||
export type Value = string | number | Decimal;
|
||||
|
||||
// http://mikemcl.github.io/decimal.js/#constructor-properties
|
||||
export interface Config {
|
||||
precision?: number;
|
||||
rounding?: Rounding;
|
||||
toExpNeg?: number;
|
||||
toExpPos?: number;
|
||||
minE?: number;
|
||||
maxE?: number;
|
||||
crypto?: boolean;
|
||||
modulo?: Modulo;
|
||||
defaults?: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
export declare class Decimal {
|
||||
readonly d: number[];
|
||||
readonly e: number;
|
||||
readonly s: number;
|
||||
|
||||
constructor(n: Decimal.Value);
|
||||
|
||||
absoluteValue(): Decimal;
|
||||
abs(): Decimal;
|
||||
|
||||
ceil(): Decimal;
|
||||
|
||||
clampedTo(min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
clamp(min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
|
||||
comparedTo(n: Decimal.Value): number;
|
||||
cmp(n: Decimal.Value): number;
|
||||
|
||||
cosine(): Decimal;
|
||||
cos(): Decimal;
|
||||
|
||||
cubeRoot(): Decimal;
|
||||
cbrt(): Decimal;
|
||||
|
||||
decimalPlaces(): number;
|
||||
dp(): number;
|
||||
|
||||
dividedBy(n: Decimal.Value): Decimal;
|
||||
div(n: Decimal.Value): Decimal;
|
||||
|
||||
dividedToIntegerBy(n: Decimal.Value): Decimal;
|
||||
divToInt(n: Decimal.Value): Decimal;
|
||||
|
||||
equals(n: Decimal.Value): boolean;
|
||||
eq(n: Decimal.Value): boolean;
|
||||
|
||||
floor(): Decimal;
|
||||
|
||||
greaterThan(n: Decimal.Value): boolean;
|
||||
gt(n: Decimal.Value): boolean;
|
||||
|
||||
greaterThanOrEqualTo(n: Decimal.Value): boolean;
|
||||
gte(n: Decimal.Value): boolean;
|
||||
|
||||
hyperbolicCosine(): Decimal;
|
||||
cosh(): Decimal;
|
||||
|
||||
hyperbolicSine(): Decimal;
|
||||
sinh(): Decimal;
|
||||
|
||||
hyperbolicTangent(): Decimal;
|
||||
tanh(): Decimal;
|
||||
|
||||
inverseCosine(): Decimal;
|
||||
acos(): Decimal;
|
||||
|
||||
inverseHyperbolicCosine(): Decimal;
|
||||
acosh(): Decimal;
|
||||
|
||||
inverseHyperbolicSine(): Decimal;
|
||||
asinh(): Decimal;
|
||||
|
||||
inverseHyperbolicTangent(): Decimal;
|
||||
atanh(): Decimal;
|
||||
|
||||
inverseSine(): Decimal;
|
||||
asin(): Decimal;
|
||||
|
||||
inverseTangent(): Decimal;
|
||||
atan(): Decimal;
|
||||
|
||||
isFinite(): boolean;
|
||||
|
||||
isInteger(): boolean;
|
||||
isInt(): boolean;
|
||||
|
||||
isNaN(): boolean;
|
||||
|
||||
isNegative(): boolean;
|
||||
isNeg(): boolean;
|
||||
|
||||
isPositive(): boolean;
|
||||
isPos(): boolean;
|
||||
|
||||
isZero(): boolean;
|
||||
|
||||
lessThan(n: Decimal.Value): boolean;
|
||||
lt(n: Decimal.Value): boolean;
|
||||
|
||||
lessThanOrEqualTo(n: Decimal.Value): boolean;
|
||||
lte(n: Decimal.Value): boolean;
|
||||
|
||||
logarithm(n?: Decimal.Value): Decimal;
|
||||
log(n?: Decimal.Value): Decimal;
|
||||
|
||||
minus(n: Decimal.Value): Decimal;
|
||||
sub(n: Decimal.Value): Decimal;
|
||||
|
||||
modulo(n: Decimal.Value): Decimal;
|
||||
mod(n: Decimal.Value): Decimal;
|
||||
|
||||
naturalExponential(): Decimal;
|
||||
exp(): Decimal;
|
||||
|
||||
naturalLogarithm(): Decimal;
|
||||
ln(): Decimal;
|
||||
|
||||
negated(): Decimal;
|
||||
neg(): Decimal;
|
||||
|
||||
plus(n: Decimal.Value): Decimal;
|
||||
add(n: Decimal.Value): Decimal;
|
||||
|
||||
precision(includeZeros?: boolean): number;
|
||||
sd(includeZeros?: boolean): number;
|
||||
|
||||
round(): Decimal;
|
||||
|
||||
sine() : Decimal;
|
||||
sin() : Decimal;
|
||||
|
||||
squareRoot(): Decimal;
|
||||
sqrt(): Decimal;
|
||||
|
||||
tangent() : Decimal;
|
||||
tan() : Decimal;
|
||||
|
||||
times(n: Decimal.Value): Decimal;
|
||||
mul(n: Decimal.Value) : Decimal;
|
||||
|
||||
toBinary(significantDigits?: number): string;
|
||||
toBinary(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toDecimalPlaces(decimalPlaces?: number): Decimal;
|
||||
toDecimalPlaces(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;
|
||||
toDP(decimalPlaces?: number): Decimal;
|
||||
toDP(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;
|
||||
|
||||
toExponential(decimalPlaces?: number): string;
|
||||
toExponential(decimalPlaces: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toFixed(decimalPlaces?: number): string;
|
||||
toFixed(decimalPlaces: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toFraction(max_denominator?: Decimal.Value): Decimal[];
|
||||
|
||||
toHexadecimal(significantDigits?: number): string;
|
||||
toHexadecimal(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
toHex(significantDigits?: number): string;
|
||||
toHex(significantDigits: number, rounding?: Decimal.Rounding): string;
|
||||
|
||||
toJSON(): string;
|
||||
|
||||
toNearest(n: Decimal.Value, rounding?: Decimal.Rounding): Decimal;
|
||||
|
||||
toNumber(): number;
|
||||
|
||||
toOctal(significantDigits?: number): string;
|
||||
toOctal(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toPower(n: Decimal.Value): Decimal;
|
||||
pow(n: Decimal.Value): Decimal;
|
||||
|
||||
toPrecision(significantDigits?: number): string;
|
||||
toPrecision(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toSignificantDigits(significantDigits?: number): Decimal;
|
||||
toSignificantDigits(significantDigits: number, rounding: Decimal.Rounding): Decimal;
|
||||
toSD(significantDigits?: number): Decimal;
|
||||
toSD(significantDigits: number, rounding: Decimal.Rounding): Decimal;
|
||||
|
||||
toString(): string;
|
||||
|
||||
truncated(): Decimal;
|
||||
trunc(): Decimal;
|
||||
|
||||
valueOf(): string;
|
||||
|
||||
static abs(n: Decimal.Value): Decimal;
|
||||
static acos(n: Decimal.Value): Decimal;
|
||||
static acosh(n: Decimal.Value): Decimal;
|
||||
static add(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static asin(n: Decimal.Value): Decimal;
|
||||
static asinh(n: Decimal.Value): Decimal;
|
||||
static atan(n: Decimal.Value): Decimal;
|
||||
static atanh(n: Decimal.Value): Decimal;
|
||||
static atan2(y: Decimal.Value, x: Decimal.Value): Decimal;
|
||||
static cbrt(n: Decimal.Value): Decimal;
|
||||
static ceil(n: Decimal.Value): Decimal;
|
||||
static clamp(n: Decimal.Value, min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
static clone(object?: Decimal.Config): Decimal.Constructor;
|
||||
static config(object: Decimal.Config): Decimal.Constructor;
|
||||
static cos(n: Decimal.Value): Decimal;
|
||||
static cosh(n: Decimal.Value): Decimal;
|
||||
static div(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static exp(n: Decimal.Value): Decimal;
|
||||
static floor(n: Decimal.Value): Decimal;
|
||||
static hypot(...n: Decimal.Value[]): Decimal;
|
||||
static isDecimal(object: any): object is Decimal;
|
||||
static ln(n: Decimal.Value): Decimal;
|
||||
static log(n: Decimal.Value, base?: Decimal.Value): Decimal;
|
||||
static log2(n: Decimal.Value): Decimal;
|
||||
static log10(n: Decimal.Value): Decimal;
|
||||
static max(...n: Decimal.Value[]): Decimal;
|
||||
static min(...n: Decimal.Value[]): Decimal;
|
||||
static mod(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static mul(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static noConflict(): Decimal.Constructor; // Browser only
|
||||
static pow(base: Decimal.Value, exponent: Decimal.Value): Decimal;
|
||||
static random(significantDigits?: number): Decimal;
|
||||
static round(n: Decimal.Value): Decimal;
|
||||
static set(object: Decimal.Config): Decimal.Constructor;
|
||||
static sign(n: Decimal.Value): number;
|
||||
static sin(n: Decimal.Value): Decimal;
|
||||
static sinh(n: Decimal.Value): Decimal;
|
||||
static sqrt(n: Decimal.Value): Decimal;
|
||||
static sub(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static sum(...n: Decimal.Value[]): Decimal;
|
||||
static tan(n: Decimal.Value): Decimal;
|
||||
static tanh(n: Decimal.Value): Decimal;
|
||||
static trunc(n: Decimal.Value): Decimal;
|
||||
|
||||
static readonly default?: Decimal.Constructor;
|
||||
static readonly Decimal?: Decimal.Constructor;
|
||||
|
||||
static readonly precision: number;
|
||||
static readonly rounding: Decimal.Rounding;
|
||||
static readonly toExpNeg: number;
|
||||
static readonly toExpPos: number;
|
||||
static readonly minE: number;
|
||||
static readonly maxE: number;
|
||||
static readonly crypto: boolean;
|
||||
static readonly modulo: Decimal.Modulo;
|
||||
|
||||
static readonly ROUND_UP: 0;
|
||||
static readonly ROUND_DOWN: 1;
|
||||
static readonly ROUND_CEIL: 2;
|
||||
static readonly ROUND_FLOOR: 3;
|
||||
static readonly ROUND_HALF_UP: 4;
|
||||
static readonly ROUND_HALF_DOWN: 5;
|
||||
static readonly ROUND_HALF_EVEN: 6;
|
||||
static readonly ROUND_HALF_CEIL: 7;
|
||||
static readonly ROUND_HALF_FLOOR: 8;
|
||||
static readonly EUCLID: 9;
|
||||
}
|
||||
|
||||
declare type Exact<A, W> = (A extends unknown ? (W extends A ? {
|
||||
[K in keyof A]: Exact<A[K], W[K]>;
|
||||
} : W) : never) | (A extends Narrowable ? A : never);
|
||||
|
||||
export declare function getRuntime(): GetRuntimeOutput;
|
||||
|
||||
declare type GetRuntimeOutput = {
|
||||
id: RuntimeName;
|
||||
prettyName: string;
|
||||
isEdge: boolean;
|
||||
};
|
||||
|
||||
declare class JsonNull extends NullTypesEnumValue {
|
||||
#private;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates more strict variant of an enum which, unlike regular enum,
|
||||
* throws on non-existing property access. This can be useful in following situations:
|
||||
* - we have an API, that accepts both `undefined` and `SomeEnumType` as an input
|
||||
* - enum values are generated dynamically from DMMF.
|
||||
*
|
||||
* In that case, if using normal enums and no compile-time typechecking, using non-existing property
|
||||
* will result in `undefined` value being used, which will be accepted. Using strict enum
|
||||
* in this case will help to have a runtime exception, telling you that you are probably doing something wrong.
|
||||
*
|
||||
* Note: if you need to check for existence of a value in the enum you can still use either
|
||||
* `in` operator or `hasOwnProperty` function.
|
||||
*
|
||||
* @param definition
|
||||
* @returns
|
||||
*/
|
||||
export declare function makeStrictEnum<T extends Record<PropertyKey, string | number>>(definition: T): T;
|
||||
|
||||
declare type Narrowable = string | number | bigint | boolean | [];
|
||||
|
||||
declare class NullTypesEnumValue extends ObjectEnumValue {
|
||||
_getNamespace(): string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Base class for unique values of object-valued enums.
|
||||
*/
|
||||
declare abstract class ObjectEnumValue {
|
||||
constructor(arg?: symbol);
|
||||
abstract _getNamespace(): string;
|
||||
_getName(): string;
|
||||
toString(): string;
|
||||
}
|
||||
|
||||
export declare const objectEnumValues: {
|
||||
classes: {
|
||||
DbNull: typeof DbNull;
|
||||
JsonNull: typeof JsonNull;
|
||||
AnyNull: typeof AnyNull;
|
||||
};
|
||||
instances: {
|
||||
DbNull: DbNull;
|
||||
JsonNull: JsonNull;
|
||||
AnyNull: AnyNull;
|
||||
};
|
||||
};
|
||||
|
||||
declare type Operation = 'findFirst' | 'findFirstOrThrow' | 'findUnique' | 'findUniqueOrThrow' | 'findMany' | 'create' | 'createMany' | 'createManyAndReturn' | 'update' | 'updateMany' | 'updateManyAndReturn' | 'upsert' | 'delete' | 'deleteMany' | 'aggregate' | 'count' | 'groupBy' | '$queryRaw' | '$executeRaw' | '$queryRawUnsafe' | '$executeRawUnsafe' | 'findRaw' | 'aggregateRaw' | '$runCommandRaw';
|
||||
|
||||
declare namespace Public {
|
||||
export {
|
||||
validator
|
||||
}
|
||||
}
|
||||
export { Public }
|
||||
|
||||
declare type RuntimeName = 'workerd' | 'deno' | 'netlify' | 'node' | 'bun' | 'edge-light' | '';
|
||||
|
||||
declare function validator<V>(): <S>(select: Exact<S, V>) => S;
|
||||
|
||||
declare function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation>(client: C, model: M, operation: O): <S>(select: Exact<S, Args<C[M], O>>) => S;
|
||||
|
||||
declare function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation, P extends keyof Args<C[M], O>>(client: C, model: M, operation: O, prop: P): <S>(select: Exact<S, Args<C[M], O>[P]>) => S;
|
||||
|
||||
export { }
|
||||
16
prisma/generated/prisma/runtime/index-browser.js
Normal file
16
prisma/generated/prisma/runtime/index-browser.js
Normal file
File diff suppressed because one or more lines are too long
3647
prisma/generated/prisma/runtime/library.d.ts
vendored
Normal file
3647
prisma/generated/prisma/runtime/library.d.ts
vendored
Normal file
File diff suppressed because it is too large
Load Diff
146
prisma/generated/prisma/runtime/library.js
Normal file
146
prisma/generated/prisma/runtime/library.js
Normal file
File diff suppressed because one or more lines are too long
83
prisma/generated/prisma/runtime/react-native.js
vendored
Normal file
83
prisma/generated/prisma/runtime/react-native.js
vendored
Normal file
File diff suppressed because one or more lines are too long
35
prisma/generated/prisma/runtime/wasm.js
Normal file
35
prisma/generated/prisma/runtime/wasm.js
Normal file
File diff suppressed because one or more lines are too long
150
prisma/generated/prisma/schema.prisma
Normal file
150
prisma/generated/prisma/schema.prisma
Normal file
@ -0,0 +1,150 @@
|
||||
// This is your Prisma schema file,
|
||||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||
|
||||
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
|
||||
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
output = "./generated/prisma"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
username String @unique
|
||||
name String
|
||||
email String @unique
|
||||
password String
|
||||
lastLogin DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@map("users")
|
||||
}
|
||||
|
||||
model Site {
|
||||
id Int @id @default(autoincrement())
|
||||
name String
|
||||
description String?
|
||||
networks Network[]
|
||||
|
||||
@@map("sites")
|
||||
}
|
||||
|
||||
model Network {
|
||||
id Int @id @default(autoincrement())
|
||||
site Site @relation(fields: [siteId], references: [id], onDelete: Cascade)
|
||||
siteId Int
|
||||
name String
|
||||
ipv4Subnet String?
|
||||
ipv6Subnet String?
|
||||
gateway String?
|
||||
servers Server[]
|
||||
|
||||
@@map("networks")
|
||||
}
|
||||
|
||||
model Server {
|
||||
id Int @id @default(autoincrement())
|
||||
network Network @relation(fields: [networkId], references: [id], onDelete: Cascade)
|
||||
networkId Int
|
||||
name String
|
||||
description String?
|
||||
icon String?
|
||||
ipv4Address String?
|
||||
osDetails String?
|
||||
cpuDetails String?
|
||||
gpuDetails String?
|
||||
memoryDetails String?
|
||||
storageDetails String?
|
||||
managementUrl String?
|
||||
monitoring Boolean @default(false)
|
||||
monitoringUrl String?
|
||||
monitoringData ServerMonitoring[]
|
||||
applications Application[]
|
||||
|
||||
@@map("servers")
|
||||
}
|
||||
|
||||
model ServerMonitoring {
|
||||
id Int @id @default(autoincrement())
|
||||
server Server @relation(fields: [serverId], references: [id], onDelete: Cascade)
|
||||
serverId Int
|
||||
cpuUsage Float
|
||||
gpuUsage Float
|
||||
memoryUsage Float
|
||||
diskUsage Float
|
||||
temperature Float
|
||||
online Boolean
|
||||
uptimeSeconds Int
|
||||
timestamp DateTime @default(now())
|
||||
|
||||
@@index([serverId, timestamp])
|
||||
@@index([online])
|
||||
@@map("server_monitoring")
|
||||
}
|
||||
|
||||
model Application {
|
||||
id Int @id @default(autoincrement())
|
||||
server Server @relation(fields: [serverId], references: [id], onDelete: Cascade)
|
||||
serverId Int
|
||||
name String
|
||||
description String?
|
||||
icon String?
|
||||
url String?
|
||||
monitoring Boolean @default(false)
|
||||
monitoringData ApplicationMonitoring[]
|
||||
|
||||
@@map("applications")
|
||||
}
|
||||
|
||||
model ApplicationMonitoring {
|
||||
id Int @id @default(autoincrement())
|
||||
application Application @relation(fields: [applicationId], references: [id], onDelete: Cascade)
|
||||
applicationId Int
|
||||
online Boolean
|
||||
latency Float
|
||||
timestamp DateTime @default(now())
|
||||
|
||||
@@index([applicationId, timestamp])
|
||||
@@index([online])
|
||||
@@map("application_monitoring")
|
||||
}
|
||||
|
||||
model ServerMonitoringNotification {
|
||||
id Int @id @default(autoincrement())
|
||||
statusChange Boolean
|
||||
cpuLimit Float
|
||||
gpuLimit Float
|
||||
memoryLimit Float
|
||||
diskLimit Float
|
||||
temperatureLimit Float
|
||||
|
||||
@@map("server_monitoring_notifications")
|
||||
}
|
||||
|
||||
model ApplicationMonitoringNotification {
|
||||
id Int @id @default(autoincrement())
|
||||
statusChange Boolean
|
||||
latencyLimit Float
|
||||
|
||||
@@map("application_monitoring_notifications")
|
||||
}
|
||||
|
||||
model NotificationProvider {
|
||||
id Int @id @default(autoincrement())
|
||||
name String
|
||||
type NotificationType
|
||||
config Json
|
||||
|
||||
@@map("notification_providers")
|
||||
}
|
||||
|
||||
enum NotificationType {
|
||||
TELEGRAM
|
||||
}
|
||||
1
prisma/generated/prisma/wasm.d.ts
vendored
Normal file
1
prisma/generated/prisma/wasm.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export * from "./index"
|
||||
290
prisma/generated/prisma/wasm.js
Normal file
290
prisma/generated/prisma/wasm.js
Normal file
@ -0,0 +1,290 @@
|
||||
|
||||
/* !!! This is code generated by Prisma. Do not edit directly. !!!
|
||||
/* eslint-disable */
|
||||
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
|
||||
const {
|
||||
Decimal,
|
||||
objectEnumValues,
|
||||
makeStrictEnum,
|
||||
Public,
|
||||
getRuntime,
|
||||
skip
|
||||
} = require('./runtime/index-browser.js')
|
||||
|
||||
|
||||
const Prisma = {}
|
||||
|
||||
exports.Prisma = Prisma
|
||||
exports.$Enums = {}
|
||||
|
||||
/**
|
||||
* Prisma Client JS version: 6.8.2
|
||||
* Query Engine version: 2060c79ba17c6bb9f5823312b6f6b7f4a845738e
|
||||
*/
|
||||
Prisma.prismaVersion = {
|
||||
client: "6.8.2",
|
||||
engine: "2060c79ba17c6bb9f5823312b6f6b7f4a845738e"
|
||||
}
|
||||
|
||||
Prisma.PrismaClientKnownRequestError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)};
|
||||
Prisma.PrismaClientUnknownRequestError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.PrismaClientRustPanicError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.PrismaClientInitializationError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.PrismaClientValidationError = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.Decimal = Decimal
|
||||
|
||||
/**
|
||||
* Re-export of sql-template-tag
|
||||
*/
|
||||
Prisma.sql = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.empty = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.join = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.raw = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.validator = Public.validator
|
||||
|
||||
/**
|
||||
* Extensions
|
||||
*/
|
||||
Prisma.getExtensionContext = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
Prisma.defineExtension = () => {
|
||||
const runtimeName = getRuntime().prettyName;
|
||||
throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||
)}
|
||||
|
||||
/**
|
||||
* Shorthand utilities for JSON filtering
|
||||
*/
|
||||
Prisma.DbNull = objectEnumValues.instances.DbNull
|
||||
Prisma.JsonNull = objectEnumValues.instances.JsonNull
|
||||
Prisma.AnyNull = objectEnumValues.instances.AnyNull
|
||||
|
||||
Prisma.NullTypes = {
|
||||
DbNull: objectEnumValues.classes.DbNull,
|
||||
JsonNull: objectEnumValues.classes.JsonNull,
|
||||
AnyNull: objectEnumValues.classes.AnyNull
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Enums
|
||||
*/
|
||||
|
||||
exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
|
||||
ReadUncommitted: 'ReadUncommitted',
|
||||
ReadCommitted: 'ReadCommitted',
|
||||
RepeatableRead: 'RepeatableRead',
|
||||
Serializable: 'Serializable'
|
||||
});
|
||||
|
||||
exports.Prisma.UserScalarFieldEnum = {
|
||||
id: 'id',
|
||||
username: 'username',
|
||||
name: 'name',
|
||||
email: 'email',
|
||||
password: 'password',
|
||||
lastLogin: 'lastLogin',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
};
|
||||
|
||||
exports.Prisma.SiteScalarFieldEnum = {
|
||||
id: 'id',
|
||||
name: 'name',
|
||||
description: 'description'
|
||||
};
|
||||
|
||||
exports.Prisma.NetworkScalarFieldEnum = {
|
||||
id: 'id',
|
||||
siteId: 'siteId',
|
||||
name: 'name',
|
||||
ipv4Subnet: 'ipv4Subnet',
|
||||
ipv6Subnet: 'ipv6Subnet',
|
||||
gateway: 'gateway'
|
||||
};
|
||||
|
||||
exports.Prisma.ServerScalarFieldEnum = {
|
||||
id: 'id',
|
||||
networkId: 'networkId',
|
||||
name: 'name',
|
||||
description: 'description',
|
||||
icon: 'icon',
|
||||
ipv4Address: 'ipv4Address',
|
||||
osDetails: 'osDetails',
|
||||
cpuDetails: 'cpuDetails',
|
||||
gpuDetails: 'gpuDetails',
|
||||
memoryDetails: 'memoryDetails',
|
||||
storageDetails: 'storageDetails',
|
||||
managementUrl: 'managementUrl',
|
||||
monitoring: 'monitoring',
|
||||
monitoringUrl: 'monitoringUrl'
|
||||
};
|
||||
|
||||
exports.Prisma.ServerMonitoringScalarFieldEnum = {
|
||||
id: 'id',
|
||||
serverId: 'serverId',
|
||||
cpuUsage: 'cpuUsage',
|
||||
gpuUsage: 'gpuUsage',
|
||||
memoryUsage: 'memoryUsage',
|
||||
diskUsage: 'diskUsage',
|
||||
temperature: 'temperature',
|
||||
online: 'online',
|
||||
uptimeSeconds: 'uptimeSeconds',
|
||||
timestamp: 'timestamp'
|
||||
};
|
||||
|
||||
exports.Prisma.ApplicationScalarFieldEnum = {
|
||||
id: 'id',
|
||||
serverId: 'serverId',
|
||||
name: 'name',
|
||||
description: 'description',
|
||||
icon: 'icon',
|
||||
url: 'url',
|
||||
monitoring: 'monitoring'
|
||||
};
|
||||
|
||||
exports.Prisma.ApplicationMonitoringScalarFieldEnum = {
|
||||
id: 'id',
|
||||
applicationId: 'applicationId',
|
||||
online: 'online',
|
||||
latency: 'latency',
|
||||
timestamp: 'timestamp'
|
||||
};
|
||||
|
||||
exports.Prisma.ServerMonitoringNotificationScalarFieldEnum = {
|
||||
id: 'id',
|
||||
statusChange: 'statusChange',
|
||||
cpuLimit: 'cpuLimit',
|
||||
gpuLimit: 'gpuLimit',
|
||||
memoryLimit: 'memoryLimit',
|
||||
diskLimit: 'diskLimit',
|
||||
temperatureLimit: 'temperatureLimit'
|
||||
};
|
||||
|
||||
exports.Prisma.ApplicationMonitoringNotificationScalarFieldEnum = {
|
||||
id: 'id',
|
||||
statusChange: 'statusChange',
|
||||
latencyLimit: 'latencyLimit'
|
||||
};
|
||||
|
||||
exports.Prisma.NotificationProviderScalarFieldEnum = {
|
||||
id: 'id',
|
||||
name: 'name',
|
||||
type: 'type',
|
||||
config: 'config'
|
||||
};
|
||||
|
||||
exports.Prisma.SortOrder = {
|
||||
asc: 'asc',
|
||||
desc: 'desc'
|
||||
};
|
||||
|
||||
exports.Prisma.JsonNullValueInput = {
|
||||
JsonNull: Prisma.JsonNull
|
||||
};
|
||||
|
||||
exports.Prisma.QueryMode = {
|
||||
default: 'default',
|
||||
insensitive: 'insensitive'
|
||||
};
|
||||
|
||||
exports.Prisma.NullsOrder = {
|
||||
first: 'first',
|
||||
last: 'last'
|
||||
};
|
||||
|
||||
exports.Prisma.JsonNullValueFilter = {
|
||||
DbNull: Prisma.DbNull,
|
||||
JsonNull: Prisma.JsonNull,
|
||||
AnyNull: Prisma.AnyNull
|
||||
};
|
||||
exports.NotificationType = exports.$Enums.NotificationType = {
|
||||
TELEGRAM: 'TELEGRAM'
|
||||
};
|
||||
|
||||
exports.Prisma.ModelName = {
|
||||
User: 'User',
|
||||
Site: 'Site',
|
||||
Network: 'Network',
|
||||
Server: 'Server',
|
||||
ServerMonitoring: 'ServerMonitoring',
|
||||
Application: 'Application',
|
||||
ApplicationMonitoring: 'ApplicationMonitoring',
|
||||
ServerMonitoringNotification: 'ServerMonitoringNotification',
|
||||
ApplicationMonitoringNotification: 'ApplicationMonitoringNotification',
|
||||
NotificationProvider: 'NotificationProvider'
|
||||
};
|
||||
|
||||
/**
|
||||
* This is a stub Prisma Client that will error at runtime if called.
|
||||
*/
|
||||
class PrismaClient {
|
||||
constructor() {
|
||||
return new Proxy(this, {
|
||||
get(target, prop) {
|
||||
let message
|
||||
const runtime = getRuntime()
|
||||
if (runtime.isEdge) {
|
||||
message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:
|
||||
- Use Prisma Accelerate: https://pris.ly/d/accelerate
|
||||
- Use Driver Adapters: https://pris.ly/d/driver-adapters
|
||||
`;
|
||||
} else {
|
||||
message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'
|
||||
}
|
||||
|
||||
message += `
|
||||
If this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`
|
||||
|
||||
throw new Error(message)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
exports.PrismaClient = PrismaClient
|
||||
|
||||
Object.assign(exports, Prisma)
|
||||
162
prisma/migrations/20250517115640_init/migration.sql
Normal file
162
prisma/migrations/20250517115640_init/migration.sql
Normal file
@ -0,0 +1,162 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "NotificationType" AS ENUM ('TELEGRAM');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "users" (
|
||||
"id" TEXT NOT NULL,
|
||||
"username" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"password" TEXT NOT NULL,
|
||||
"lastLogin" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sites" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
|
||||
CONSTRAINT "sites_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "networks" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"siteId" INTEGER NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"ipv4Subnet" TEXT,
|
||||
"ipv6Subnet" TEXT,
|
||||
"gateway" TEXT,
|
||||
|
||||
CONSTRAINT "networks_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "servers" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"networkId" INTEGER NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"icon" TEXT,
|
||||
"ipv4Address" TEXT,
|
||||
"osDetails" TEXT,
|
||||
"cpuDetails" TEXT,
|
||||
"gpuDetails" TEXT,
|
||||
"memoryDetails" TEXT,
|
||||
"storageDetails" TEXT,
|
||||
"managementUrl" TEXT,
|
||||
"monitoring" BOOLEAN NOT NULL DEFAULT false,
|
||||
"monitoringUrl" TEXT,
|
||||
|
||||
CONSTRAINT "servers_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "server_monitoring" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"serverId" INTEGER NOT NULL,
|
||||
"cpuUsage" DOUBLE PRECISION NOT NULL,
|
||||
"gpuUsage" DOUBLE PRECISION NOT NULL,
|
||||
"memoryUsage" DOUBLE PRECISION NOT NULL,
|
||||
"diskUsage" DOUBLE PRECISION NOT NULL,
|
||||
"temperature" DOUBLE PRECISION NOT NULL,
|
||||
"online" BOOLEAN NOT NULL,
|
||||
"uptimeSeconds" INTEGER NOT NULL,
|
||||
"timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "server_monitoring_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "applications" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"serverId" INTEGER NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"icon" TEXT,
|
||||
"url" TEXT,
|
||||
"monitoring" BOOLEAN NOT NULL DEFAULT false,
|
||||
|
||||
CONSTRAINT "applications_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "application_monitoring" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"applicationId" INTEGER NOT NULL,
|
||||
"online" BOOLEAN NOT NULL,
|
||||
"latency" DOUBLE PRECISION NOT NULL,
|
||||
"timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "application_monitoring_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "server_monitoring_notifications" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"statusChange" BOOLEAN NOT NULL,
|
||||
"cpuLimit" DOUBLE PRECISION NOT NULL,
|
||||
"gpuLimit" DOUBLE PRECISION NOT NULL,
|
||||
"memoryLimit" DOUBLE PRECISION NOT NULL,
|
||||
"diskLimit" DOUBLE PRECISION NOT NULL,
|
||||
"temperatureLimit" DOUBLE PRECISION NOT NULL,
|
||||
|
||||
CONSTRAINT "server_monitoring_notifications_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "application_monitoring_notifications" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"statusChange" BOOLEAN NOT NULL,
|
||||
"latencyLimit" DOUBLE PRECISION NOT NULL,
|
||||
|
||||
CONSTRAINT "application_monitoring_notifications_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "notification_providers" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"type" "NotificationType" NOT NULL,
|
||||
"config" JSONB NOT NULL,
|
||||
|
||||
CONSTRAINT "notification_providers_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "users_username_key" ON "users"("username");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "server_monitoring_serverId_timestamp_idx" ON "server_monitoring"("serverId", "timestamp");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "server_monitoring_online_idx" ON "server_monitoring"("online");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "application_monitoring_applicationId_timestamp_idx" ON "application_monitoring"("applicationId", "timestamp");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "application_monitoring_online_idx" ON "application_monitoring"("online");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "networks" ADD CONSTRAINT "networks_siteId_fkey" FOREIGN KEY ("siteId") REFERENCES "sites"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "servers" ADD CONSTRAINT "servers_networkId_fkey" FOREIGN KEY ("networkId") REFERENCES "networks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "server_monitoring" ADD CONSTRAINT "server_monitoring_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "servers"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "applications" ADD CONSTRAINT "applications_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "servers"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "application_monitoring" ADD CONSTRAINT "application_monitoring_applicationId_fkey" FOREIGN KEY ("applicationId") REFERENCES "applications"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
3
prisma/migrations/migration_lock.toml
Normal file
3
prisma/migrations/migration_lock.toml
Normal file
@ -0,0 +1,3 @@
|
||||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (e.g., Git)
|
||||
provider = "postgresql"
|
||||
@ -13,3 +13,140 @@ datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
username String @unique
|
||||
name String
|
||||
email String @unique
|
||||
password String
|
||||
lastLogin DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@map("users")
|
||||
}
|
||||
|
||||
model Site {
|
||||
id Int @id @default(autoincrement())
|
||||
name String
|
||||
description String?
|
||||
networks Network[]
|
||||
|
||||
@@map("sites")
|
||||
}
|
||||
|
||||
model Network {
|
||||
id Int @id @default(autoincrement())
|
||||
site Site @relation(fields: [siteId], references: [id], onDelete: Cascade)
|
||||
siteId Int
|
||||
name String
|
||||
ipv4Subnet String?
|
||||
ipv6Subnet String?
|
||||
gateway String?
|
||||
servers Server[]
|
||||
|
||||
@@map("networks")
|
||||
}
|
||||
|
||||
model Server {
|
||||
id Int @id @default(autoincrement())
|
||||
network Network @relation(fields: [networkId], references: [id], onDelete: Cascade)
|
||||
networkId Int
|
||||
name String
|
||||
description String?
|
||||
icon String?
|
||||
ipv4Address String?
|
||||
osDetails String?
|
||||
cpuDetails String?
|
||||
gpuDetails String?
|
||||
memoryDetails String?
|
||||
storageDetails String?
|
||||
managementUrl String?
|
||||
monitoring Boolean @default(false)
|
||||
monitoringUrl String?
|
||||
monitoringData ServerMonitoring[]
|
||||
applications Application[]
|
||||
|
||||
@@map("servers")
|
||||
}
|
||||
|
||||
model ServerMonitoring {
|
||||
id Int @id @default(autoincrement())
|
||||
server Server @relation(fields: [serverId], references: [id], onDelete: Cascade)
|
||||
serverId Int
|
||||
cpuUsage Float
|
||||
gpuUsage Float
|
||||
memoryUsage Float
|
||||
diskUsage Float
|
||||
temperature Float
|
||||
online Boolean
|
||||
uptimeSeconds Int
|
||||
timestamp DateTime @default(now())
|
||||
|
||||
@@index([serverId, timestamp])
|
||||
@@index([online])
|
||||
|
||||
@@map("server_monitoring")
|
||||
}
|
||||
|
||||
model Application {
|
||||
id Int @id @default(autoincrement())
|
||||
server Server @relation(fields: [serverId], references: [id], onDelete: Cascade)
|
||||
serverId Int
|
||||
name String
|
||||
description String?
|
||||
icon String?
|
||||
url String?
|
||||
monitoring Boolean @default(false)
|
||||
monitoringData ApplicationMonitoring[]
|
||||
|
||||
@@map("applications")
|
||||
}
|
||||
|
||||
model ApplicationMonitoring {
|
||||
id Int @id @default(autoincrement())
|
||||
application Application @relation(fields: [applicationId], references: [id], onDelete: Cascade)
|
||||
applicationId Int
|
||||
online Boolean
|
||||
latency Float
|
||||
timestamp DateTime @default(now())
|
||||
|
||||
@@index([applicationId, timestamp])
|
||||
@@index([online])
|
||||
|
||||
@@map("application_monitoring")
|
||||
}
|
||||
|
||||
model ServerMonitoringNotification {
|
||||
id Int @id @default(autoincrement())
|
||||
statusChange Boolean
|
||||
cpuLimit Float
|
||||
gpuLimit Float
|
||||
memoryLimit Float
|
||||
diskLimit Float
|
||||
temperatureLimit Float
|
||||
|
||||
@@map("server_monitoring_notifications")
|
||||
}
|
||||
|
||||
model ApplicationMonitoringNotification {
|
||||
id Int @id @default(autoincrement())
|
||||
statusChange Boolean
|
||||
latencyLimit Float
|
||||
|
||||
@@map("application_monitoring_notifications")
|
||||
}
|
||||
|
||||
model NotificationProvider {
|
||||
id Int @id @default(autoincrement())
|
||||
name String
|
||||
type NotificationType
|
||||
config Json
|
||||
|
||||
@@map("notification_providers")
|
||||
}
|
||||
|
||||
enum NotificationType {
|
||||
TELEGRAM
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user