Skip to main content

Database Schema

NodePrism uses PostgreSQL with Prisma ORM.

Entity Relationship Overview​

Server (1) ──── (*) Agent
│
├──── (*) Deployment
├──── (*) Alert
├──── (*) AnomalyEvent
├──── (*) MetricHistory
└──── (*) EventLog

User (1) ──── (*) AuditLog

AlertRule ──── Alert
AlertTemplate ──── NotificationChannel

Models​

ServerGroup​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
descriptionString--
parentIdString--
sortOrderInt✓Default: 0
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
parentServerGroup-Relation
childrenServerGroup[]✓Relation
serversServer[]✓-

Server​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
hostnameString✓-
ipAddressString✓-
statusServerStatus✓Default: OFFLINE
environmentEnvironment✓Default: PRODUCTION
groupIdString--
regionString--
tagsString[]✓Default: []
metadataJson--
lastSeenDateTime--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
groupServerGroup-Relation
agentsAgent[]✓-
virtualContainersVirtualContainer[]✓-
alertsAlert[]✓-
anomalyEventsAnomalyEvent[]✓-
anomalyModelsAnomalyModel[]✓-
metricHistoryMetricHistory[]✓-
eventLogsEventLog[]✓-
maintenanceWindowsMaintenanceWindow[]✓-
uptimeMonitorsUptimeMonitor[]✓-
incidentsIncident[]✓-
infraChangesInfraChange[]✓-

VirtualContainer​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
serverIdString✓-
containerIdString✓-
nameString✓-
typeString✓-
statusString✓Default: "unknown"
ipAddressString--
hostnameString--
networkRxBytesBigInt✓Default: 0
networkTxBytesBigInt✓Default: 0
metadataJson--
lastSeenDateTime--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
serverServer✓Relation

Indexes:

  • @@index([serverId])

Agent​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
serverIdString✓-
typeAgentType✓-
statusAgentStatus✓Default: NOT_INSTALLED
versionString--
portInt✓-
configJson--
lastHealthCheckDateTime--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
serverServer✓Relation

AlertRule​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
descriptionString--
queryString✓-
durationString✓Default: "5m"
severityAlertSeverity✓-
labelsJson--
annotationsJson--
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
alertsAlert[]✓-

Indexes:

  • @@index([enabled])

Alert​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
ruleIdString--
templateIdString--
serverIdString--
statusAlertStatus✓Default: FIRING
severityAlertSeverity✓-
messageString✓-
labelsJson--
annotationsJson--
fingerprintString✓Unique
startsAtDateTime✓-
endsAtDateTime--
acknowledgedAtDateTime--
acknowledgedByString--
isFlappingBoolean✓Default: false
groupIdString--
createdAtDateTime✓Default: now(
ruleAlertRule-Relation
templateAlertTemplate-Relation
serverServer-Relation
groupAlertGroup-Relation

Indexes:

  • @@index([status])
  • @@index([status, severity])
  • @@index([serverId])
  • @@index([serverId, status])
  • @@index([startsAt])
  • @@index([createdAt])
  • @@index([groupId])

AlertTemplate​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓Unique
descriptionString--
matchLabelsJson--
matchHostLabelsJson--
queryString✓-
calcString--
unitsString--
warnConditionJson--

NotificationChannel​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
typeNotificationChannelType✓-
configJson✓-
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
logsNotificationLog[]✓-
escalationStepsEscalationStep[]✓-

NotificationLog​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
channelIdString✓-
alertIdString✓-
statusString✓-
messageString--
createdAtDateTime✓Default: now(
channelNotificationChannel✓Relation

Indexes:

  • @@index([channelId])
  • @@index([alertId])
  • @@index([createdAt])

User​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
emailString✓Unique
nameString✓-
passwordHashString✓-
roleUserRole✓Default: VIEWER
lastLoginDateTime--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
auditLogsAuditLog[]✓-
apiTokensApiToken[]✓-

AuditLog​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
userIdString--
actionString✓-
entityTypeString✓-
entityIdString--
detailsJson--
ipAddressString--
userAgentString--
createdAtDateTime✓Default: now(
userUser-Relation

Indexes:

  • @@index([entityType, entityId])

Dashboard​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
descriptionString--
configJson✓-
isDefaultBoolean✓Default: false
createdAtDateTime✓Default: now(
updatedAtDateTime✓-

SystemSettings​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: "default"
systemNameString✓Default: "NodePrism"
logoPathString--
logoUrlString--
primaryColorString✓Default: "#3B82F6"
managerHostnameString--
managerIpString--
timezoneString✓Default: "UTC"
dateFormatString✓Default: "YYYY-MM-DD"
dailyReportTimeString✓Default: "08:00"
createdAtDateTime✓Default: now(
updatedAtDateTime✓-

MaintenanceWindow​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
serverIdString--
uptimeMonitorIdString--
scopeString✓Default: "SERVER"
reasonString✓-
startTimeDateTime✓-
endTimeDateTime✓-
recurringBoolean✓Default: false
rruleString--
createdByString--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
serverServer-Relation
uptimeMonitorUptimeMonitor-Relation

Indexes:

  • @@index([serverId])
  • @@index([uptimeMonitorId])
  • @@index([startTime, endTime])

MetricHistory​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
serverIdString✓-
metricNameString✓-
valueFloat✓-
timestampDateTime✓-
createdAtDateTime✓Default: now(
serverServer✓Relation

Indexes:

  • @@index([serverId, metricName, timestamp])
  • @@index([serverId, timestamp])
  • @@index([timestamp])

EventLog​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
serverIdString--
typeEventType✓-
severityEventSeverity✓Default: INFO
titleString✓-
messageString✓-
metadataJson--
sourceString--
createdAtDateTime✓Default: now(
serverServer-Relation

Indexes:

  • @@index([serverId, createdAt])
  • @@index([type, createdAt])
  • @@index([severity, createdAt])
  • @@index([createdAt])

UptimeMonitor​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
typeUptimeCheckType✓Default: HTTP
targetString✓-
intervalInt✓Default: 60
timeoutInt✓Default: 10
methodString✓Default: "GET"
expectedStatusInt--
keywordString--
headersJson--
enabledBoolean✓Default: true
serverIdString--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
serverServer-Relation
checksUptimeCheck[]✓-
slaPoliciesSlaPolicy[]✓-
maintenanceWindowsMaintenanceWindow[]✓-

UptimeCheck​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
monitorIdString✓-
statusUptimeCheckStatus✓-
responseTimeInt--
statusCodeInt--
messageString--
certExpiryDateTime--
certIssuerString--
domainExpiryDateTime--
probeLabelString--
checkedAtDateTime✓Default: now(
monitorUptimeMonitor✓Relation

Indexes:

  • @@index([monitorId, checkedAt])
  • @@index([checkedAt])

Incident​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
titleString✓-
descriptionString--
statusIncidentStatus✓Default: INVESTIGATING
severityAlertSeverity✓-
alertIdString--
serverIdString--
assigneeString--
startedAtDateTime✓Default: now(
resolvedAtDateTime--
createdByString--
aiAnalysisString--
aiAnalyzedAtDateTime--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
serverServer-Relation
updatesIncidentUpdate[]✓-
postMortemPostMortem--

Indexes:

  • @@index([status])
  • @@index([startedAt])

IncidentUpdate​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
incidentIdString✓-
messageString✓-
statusIncidentStatus--
createdByString--
createdAtDateTime✓Default: now(
incidentIncident✓Relation

Indexes:

  • @@index([incidentId, createdAt])

AnomalyEvent​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
serverIdString✓-
metricNameString✓-
scoreFloat✓-
severityFloat✓-
startedAtDateTime✓-
endedAtDateTime--
createdAtDateTime✓Default: now(
serverServer✓Relation

Indexes:

  • @@index([serverId, startedAt])
  • @@index([metricName])

AnomalyModel​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
serverIdString✓-
metricNameString✓-
clusterCentersJson✓-
thresholdFloat✓-
trainedAtDateTime✓-
expiresAtDateTime✓-
dataPointsInt✓-
modelVersionInt✓Default: 1
createdAtDateTime✓Default: now(
serverServer✓Relation

Indexes:

  • @@index([serverId, metricName])

EscalationPolicy​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
stepsEscalationStep[]✓-

EscalationStep​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
policyIdString✓-
stepOrderInt✓-
delayMinutesInt✓-
channelIdString✓-
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
policyEscalationPolicy✓Relation
channelNotificationChannel✓Relation

Indexes:

  • @@index([policyId, stepOrder])
  • @@index([channelId])

ApiToken​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
tokenHashString✓Unique
userIdString✓-
permissionsJson✓Default: "[]"
expiresAtDateTime--
lastUsedAtDateTime--
revokedBoolean✓Default: false
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
userUser✓Relation

Indexes:

  • @@index([userId])
  • @@index([revoked])

PostMortem​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
incidentIdString✓Unique
summaryString✓-
rootCauseString✓-
impactString✓-
timelineString✓-
actionItemsJson✓Default: "[]"
createdByString--
publishedAtDateTime--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
incidentIncident✓Relation

AlertRoutingRule​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
enabledBoolean✓Default: true
priorityInt✓Default: 0
conditionsJson✓-

SlaPolicy​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
uptimeMonitorIdString✓-
targetPercentFloat✓-
windowDaysInt✓-
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
uptimeMonitorUptimeMonitor✓Relation

Indexes:

  • @@index([uptimeMonitorId])
  • @@index([enabled])

AlertInhibitionRule​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
sourceMatchJson✓-
targetMatchJson✓-
sourceSeverityString✓-
targetSeverityString✓-
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-

AlertGroup​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
fingerprintString✓Unique
statusString✓Default: "active"
alertCountInt✓Default: 1
firstSeenAtDateTime✓-
lastSeenAtDateTime✓-
resolvedAtDateTime--
groupLabelsJson✓-
createdAtDateTime✓Default: now(
alertsAlert[]✓-

Indexes:

  • @@index([status])

StatusPage​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
slugString✓Unique
titleString✓Default: "Service Status"
descriptionString--
logoUrlString--
customCssString--
isPublicBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
componentsStatusPageComponent[]✓-
subscribersStatusPageSubscriber[]✓-

StatusPageComponent​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
statusPageIdString✓-
nameString✓-
descriptionString--
uptimeMonitorIdString--
sortOrderInt✓Default: 0
createdAtDateTime✓Default: now(
statusPageStatusPage✓Relation

Indexes:

  • @@index([statusPageId])

StatusPageSubscriber​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
statusPageIdString✓-
typeString✓-
endpointString✓-
confirmedBoolean✓Default: false
confirmTokenString-Unique
createdAtDateTime✓Default: now(
statusPageStatusPage✓Relation

Indexes:

  • @@index([statusPageId])

Annotation​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
titleString✓-
messageString--
tagsString[]✓Default: []
startTimeDateTime✓-
endTimeDateTime--
colorString✓Default: "#3B82F6"
createdByString--
createdAtDateTime✓Default: now(

Indexes:

  • @@index([startTime])

CompositeMonitor​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
descriptionString--
expressionString✓-
monitorIdsString[]✓-
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-

MultiStepMonitor​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
intervalInt✓Default: 300
timeoutInt✓Default: 30
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
stepsMultiStepMonitorStep[]✓-
resultsMultiStepMonitorResult[]✓-

MultiStepMonitorStep​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
monitorIdString✓-
stepOrderInt✓-
nameString✓-
methodString✓Default: "GET"
urlString✓-
headersJson--
bodyString--
expectedStatusInt--
extractVarsJson--
assertionsJson--
monitorMultiStepMonitor✓Relation

Indexes:

  • @@index([monitorId, stepOrder])

MultiStepMonitorResult​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
monitorIdString✓-
statusString✓-
durationInt✓-
stepResultsJson✓-
checkedAtDateTime✓Default: now(
monitorMultiStepMonitor✓Relation

Indexes:

  • @@index([monitorId, checkedAt])

ScheduledReport​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
typeString✓-
scheduleString✓-
recipientsJson✓-

SnmpDevice​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
hostString✓-
portInt✓Default: 161
versionString✓Default: "2c"
communityString--
authConfigJson--
oidsJson✓-

SnmpPollResult​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
deviceIdString✓-
valuesJson✓-
polledAtDateTime✓Default: now(
deviceSnmpDevice✓Relation

Indexes:

  • @@index([deviceId, polledAt])

RetentionPolicy​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
metricTypeString✓Unique
retentionDaysInt✓-
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-

ServiceDependency​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
sourceIdString✓-
sourceTypeString✓-
targetIdString✓-
targetTypeString✓-
labelString--
createdAtDateTime✓Default: now(

InfraChange​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
serverIdString--
changeTypeString✓-
sourceString✓-
titleString✓-
detailsJson--
detectedAtDateTime✓-
createdAtDateTime✓Default: now(
serverServer-Relation

Indexes:

  • @@index([serverId, detectedAt])
  • @@index([detectedAt])

OnCallSchedule​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
timezoneString✓Default: "UTC"
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
rotationsOnCallRotation[]✓-

OnCallRotation​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
scheduleIdString✓-
userIdString✓-
startTimeDateTime✓-
endTimeDateTime✓-
scheduleOnCallSchedule✓Relation

Indexes:

  • @@index([scheduleId, startTime])

Slo​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
descriptionString--
targetPercentFloat✓-
windowDaysInt✓-
uptimeMonitorIdString--
metricQueryString--
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-

OtlpSpan​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
traceIdString✓-
spanIdString✓-
parentSpanIdString--
operationNameString✓-
serviceNameString✓-
startTimeDateTime✓-
durationBigInt✓-
statusString✓Default: "OK"
attributesJson--
eventsJson--
createdAtDateTime✓Default: now(

Indexes:

  • @@index([traceId])
  • @@index([serviceName, startTime])
  • @@index([startTime])

Runbook​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
descriptionString--
scriptString✓-
languageString✓Default: "bash"
timeoutInt✓Default: 300
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
executionsRunbookExecution[]✓-
alertTemplatesAlertTemplate[]✓-

RunbookExecution​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
runbookIdString✓-
alertIdString--
serverIdString--
statusString✓-
outputString--
exitCodeInt--
startedAtDateTime✓-
finishedAtDateTime--
triggeredByString--
createdAtDateTime✓Default: now(
runbookRunbook✓Relation

Indexes:

  • @@index([runbookId, startedAt])

RumSession​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
sessionIdString✓Unique
userAgentString--
countryString--
startedAtDateTime✓-
createdAtDateTime✓Default: now(
pageViewsRumPageView[]✓-

Indexes:

  • @@index([startedAt])

RumPageView​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
sessionIdString✓-
urlString✓-
loadTimeInt--
domContentLoadedInt--
firstPaintInt--
lcpInt--
fidInt--
clsFloat--
errorCountInt✓Default: 0
viewedAtDateTime✓-
sessionRumSession✓Relation

Indexes:

  • @@index([sessionId])
  • @@index([viewedAt])

KubernetesCluster​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
apiEndpointString✓-
authConfigJson✓-
enabledBoolean✓Default: true
lastSyncAtDateTime--
createdAtDateTime✓Default: now(
updatedAtDateTime✓-

SyntheticCheck​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
nameString✓-
scriptString✓-
intervalInt✓Default: 300
timeoutInt✓Default: 60
enabledBoolean✓Default: true
createdAtDateTime✓Default: now(
updatedAtDateTime✓-
resultsSyntheticCheckResult[]✓-

SyntheticCheckResult​

FieldTypeRequiredConstraints
idString✓Primary Key, Default: uuid(
checkIdString✓-
statusString✓-
durationInt✓-
screenshotString--
errorMessageString--
stepResultsJson--
checkedAtDateTime✓Default: now(
checkSyntheticCheck✓Relation

Indexes:

  • @@index([checkId, checkedAt])

Enums​

ServerStatus​

ValueDescription
ONLINE-
OFFLINE-
WARNING-
CRITICAL-

Environment​

ValueDescription
DEVELOPMENT-
STAGING-
PRODUCTION-

AgentType​

ValueDescription
NODE_EXPORTER-
APP_AGENT-
MYSQL_EXPORTER-
POSTGRES_EXPORTER-
MONGODB_EXPORTER-
NGINX_EXPORTER-
APACHE_EXPORTER-
REDIS_EXPORTER-
LIBVIRT_EXPORTER-
LITESPEED_EXPORTER-
EXIM_EXPORTER-
CPANEL_EXPORTER-
PROMTAIL-

AgentStatus​

ValueDescription
NOT_INSTALLED-
INSTALLING-
RUNNING-
STOPPED-
FAILED-
UPDATING-

AlertSeverity​

ValueDescription
CRITICAL-
WARNING-
INFO-
DEBUG-

AlertStatus​

ValueDescription
CLEAR-
WARNING-
CRITICAL-
UNDEFINED-
PENDING-
FIRING-
RESOLVED-
SILENCED-
ACKNOWLEDGED-

NotificationChannelType​

ValueDescription
EMAIL-
SLACK-
DISCORD-
WEBHOOK-
PAGERDUTY-
TELEGRAM-

UserRole​

ValueDescription
ADMIN-
OPERATOR-
VIEWER-

EventType​

ValueDescription
SERVER_ONLINE-
SERVER_OFFLINE-
SERVER_WARNING-
SERVER_CRITICAL-
SERVER_RECOVERED-
AGENT_INSTALLED-
AGENT_STARTED-
AGENT_STOPPED-
AGENT_FAILED-
AGENT_UPDATED-
ALERT_TRIGGERED-
ALERT_RESOLVED-
ALERT_ACKNOWLEDGED-
THRESHOLD_WARNING-
THRESHOLD_CRITICAL-
THRESHOLD_CLEARED-
ANOMALY_DETECTED-
ANOMALY_RESOLVED-
SYSTEM_STARTUP-
SYSTEM_SHUTDOWN-
HEARTBEAT_MISSED-
CONNECTION_LOST-
CONNECTION_RESTORED-

EventSeverity​

ValueDescription
DEBUG-
INFO-
WARNING-
CRITICAL-

UptimeCheckType​

ValueDescription
HTTP-
HTTPS-
TCP-
PING-
DNS-
SSL_CERT-
DOMAIN-

UptimeCheckStatus​

ValueDescription
UP-
DOWN-
DEGRADED-

IncidentStatus​

ValueDescription
INVESTIGATING-
IDENTIFIED-
MONITORING-
RESOLVED-
POSTMORTEM-