add features: add simulation model & result into db
digital-twin/RBD-multibranch/pipeline/head This commit looks good
Details
digital-twin/RBD-multibranch/pipeline/head This commit looks good
Details
parent
14ad828e3e
commit
599a0963d5
@ -1,12 +1,534 @@
|
||||
from sqlalchemy import JSON, UUID, Column, DateTime, Float, ForeignKey, Integer, String
|
||||
from sqlalchemy import (
|
||||
JSON,
|
||||
UUID,
|
||||
TIMESTAMP,
|
||||
Column,
|
||||
DateTime,
|
||||
Float,
|
||||
ForeignKey,
|
||||
Numeric,
|
||||
Integer,
|
||||
String,
|
||||
Text
|
||||
)
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.dialects.postgresql import UUID, JSONB
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
from src.database.core import Base
|
||||
from src.models import DefaultMixin
|
||||
|
||||
import uuid
|
||||
|
||||
|
||||
class AerosProject(Base, DefaultMixin):
|
||||
__tablename__ = "rbd_ms_aeros_project"
|
||||
|
||||
project_name = Column(String, nullable=False)
|
||||
aro_file_path = Column(String, nullable=False)
|
||||
|
||||
|
||||
|
||||
# AF
|
||||
class SimulationModel(Base):
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
# server_default=text("uuid_generate_v4()")
|
||||
)
|
||||
name = Column(
|
||||
String,
|
||||
# unique=True,
|
||||
index=True,
|
||||
nullable=True
|
||||
)
|
||||
payload = Column(JSON, nullable=True)
|
||||
gui_payload = Column(JSON, nullable=True)
|
||||
|
||||
# realtionship
|
||||
schemas = relationship("SimulationModelSchema", back_populates="model") # 1-to-many
|
||||
assets = relationship("SimulationModelAsset", back_populates="model") # 1-to-many
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
class SimulationTask(Base):
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
model_id = Column(Integer, nullable=False)
|
||||
status = Column(String, default="pending") # pending, running, completed, failed
|
||||
progress = Column(Integer, default=0)
|
||||
params = Column(JSON, nullable=True)
|
||||
result = Column(JSON, nullable=True)
|
||||
error = Column(String, nullable=True)
|
||||
created_at = Column(String, nullable=False)
|
||||
updated_at = Column(String, nullable=False)
|
||||
|
||||
|
||||
# AF
|
||||
class SimulationMasterType(Base):
|
||||
__tablename__ = "simulation_master_types"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
# server_default=text("uuid_generate_v4()")
|
||||
)
|
||||
name = Column(Text, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
model_asset_distributions = relationship("SimulationModelAssetDistribution", back_populates="type") # 1-to-many
|
||||
model_schemas = relationship("SimulationModelSchema", back_populates="type") # 1-to-many
|
||||
model_asset_repair_durations = relationship("SimulationModelAssetRepairDuration", back_populates="type") # many-to-1
|
||||
result_events = relationship("SimulationResultEvent", back_populates="type") # 1-to-many
|
||||
|
||||
|
||||
class SimulationModelSchema(Base):
|
||||
__tablename__ = "simulation_model_schemas"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
# server_default=text("uuid_generate_v4()")
|
||||
)
|
||||
|
||||
simulation_model_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model.id"),
|
||||
nullable=True
|
||||
)
|
||||
# self reference
|
||||
simulation_model_schemas_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model_schemas.id"),
|
||||
nullable=True
|
||||
)
|
||||
type_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_master_types.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
schemaId = Column(Text, nullable=True) # not a foreign key
|
||||
name = Column(Text, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
model = relationship("SimulationModel", back_populates="schemas") # many-to-1
|
||||
type = relationship("SimulationMasterType", back_populates="model_schemas") # many-to-1
|
||||
assets = relationship("SimulationModelAsset", back_populates="model_schema") # 1-to-many
|
||||
schema_results = relationship("SimulationResultSchema", back_populates="schema_model") # 1-to-many
|
||||
|
||||
# SELF RELATION
|
||||
parent = relationship(
|
||||
"SimulationModelSchema",
|
||||
remote_side=[id],
|
||||
back_populates="children"
|
||||
)
|
||||
|
||||
children = relationship(
|
||||
"SimulationModelSchema",
|
||||
back_populates="parent",
|
||||
# cascade="all, delete"
|
||||
)
|
||||
|
||||
|
||||
|
||||
class SimulationModelAsset(Base):
|
||||
__tablename__ = "simulation_model_assets"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
# server_default=text("uuid_generate_v4()")
|
||||
)
|
||||
assetId = Column(Text, nullable=True) # not a foreign key
|
||||
name = Column(Text, nullable=True)
|
||||
simulation_model_schemas_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model_schemas.id"),
|
||||
nullable=True
|
||||
)
|
||||
simulation_model_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
max_capacity = Column(Numeric, nullable=True)
|
||||
design_capacity = Column(Numeric, nullable=True)
|
||||
buffer_duration = Column(Numeric, nullable=True)
|
||||
transition_delay = Column(Numeric, nullable=True)
|
||||
initial_age = Column(Numeric, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
model = relationship("SimulationModel", back_populates="assets") # many-to-1
|
||||
asset_distribution = relationship(
|
||||
"SimulationModelAssetDistribution",
|
||||
back_populates="asset",
|
||||
uselist=False # 1-to-1
|
||||
)
|
||||
asset_repair_duration = relationship(
|
||||
"SimulationModelAssetRepairDuration",
|
||||
back_populates="asset",
|
||||
uselist=False # 1-to-1
|
||||
)
|
||||
asset_overhaul = relationship(
|
||||
"SimulationModelAssetOverhaul",
|
||||
back_populates="asset",
|
||||
uselist=False # 1-to-1
|
||||
)
|
||||
asset_pm = relationship(
|
||||
"SimulationModelAssetPm",
|
||||
back_populates="asset",
|
||||
uselist=False # 1-to-1
|
||||
)
|
||||
model_schema = relationship(
|
||||
"SimulationModelSchema",
|
||||
back_populates="assets" # many-to-1
|
||||
)
|
||||
asset_results = relationship(
|
||||
"SimulationResultAsset",
|
||||
back_populates="asset_model" # 1-to-many
|
||||
)
|
||||
|
||||
|
||||
class SimulationModelAssetDistribution(Base):
|
||||
__tablename__ = "simulation_model_assets_distributions"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
# server_default=text("uuid_generate_v4()")
|
||||
)
|
||||
simulation_model_assets_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model_assets.id"),
|
||||
nullable=True
|
||||
)
|
||||
type_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_master_types.id"),
|
||||
nullable=True
|
||||
)
|
||||
shape = Column(Numeric, nullable=True)
|
||||
scale = Column(Numeric, nullable=True)
|
||||
mean = Column(Numeric, nullable=True)
|
||||
std_dev = Column(Numeric, nullable=True)
|
||||
eta = Column(Numeric, nullable=True)
|
||||
beta = Column(Numeric, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
asset = relationship("SimulationModelAsset", back_populates="asset_distribution") # 1-to-1
|
||||
type = relationship("SimulationMasterType", back_populates="model_asset_distributions") # many-to-1
|
||||
|
||||
|
||||
class SimulationModelAssetRepairDuration(Base):
|
||||
__tablename__ = "simulation_model_assets_repair_durations"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
# server_default=text("uuid_generate_v4()")
|
||||
)
|
||||
simulation_model_assets_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model_assets.id"),
|
||||
nullable=True
|
||||
)
|
||||
type_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_master_types.id"),
|
||||
nullable=True
|
||||
)
|
||||
mean = Column(Numeric, nullable=True)
|
||||
std_dev = Column(Numeric, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
asset = relationship("SimulationModelAsset", back_populates="asset_repair_duration") # 1-to-1
|
||||
type = relationship("SimulationMasterType", back_populates="model_asset_repair_durations") # many-to-1
|
||||
|
||||
|
||||
class SimulationModelAssetOverhaul(Base):
|
||||
__tablename__ = "simulation_model_assets_overhauls"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
# server_default=text("uuid_generate_v4()")
|
||||
)
|
||||
simulation_model_assets_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model_assets.id"),
|
||||
nullable=True
|
||||
)
|
||||
interval = Column(Numeric, nullable=True)
|
||||
duration = Column(Numeric, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
asset = relationship("SimulationModelAsset", back_populates="asset_overhaul") # 1-to-1
|
||||
|
||||
|
||||
class SimulationModelAssetPm(Base):
|
||||
__tablename__ = "simulation_model_assets_pms"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
# server_default=text("uuid_generate_v4()")
|
||||
)
|
||||
simulation_model_assets_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model_assets.id"),
|
||||
nullable=True
|
||||
)
|
||||
interval = Column(Numeric, nullable=True)
|
||||
duration = Column(Numeric, nullable=True)
|
||||
restoration_factor = Column(Numeric, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
asset = relationship("SimulationModelAsset", back_populates="asset_pm") # 1-to-1
|
||||
|
||||
|
||||
|
||||
|
||||
class SimulationResult(Base):
|
||||
__tablename__ = "simulation_results"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
)
|
||||
|
||||
production_availability = Column(Numeric, nullable=True)
|
||||
simulation_duration = Column(Numeric, nullable=True)
|
||||
simulation_replications = Column(Numeric, nullable=True)
|
||||
system_availability = Column(Numeric, nullable=True)
|
||||
system_downtime = Column(Numeric, nullable=True)
|
||||
system_failures = Column(Numeric, nullable=True)
|
||||
system_uptime = Column(Numeric, nullable=True)
|
||||
total_demand = Column(Numeric, nullable=True)
|
||||
total_productions = Column(Numeric, nullable=True)
|
||||
|
||||
system_down_causes = Column(JSONB, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
schemas = relationship("SimulationResultSchema", back_populates="result") # 1-to-many
|
||||
assets = relationship("SimulationResultAsset", back_populates="result") # 1-to-many
|
||||
events = relationship("SimulationResultEvent", back_populates="result") # 1-to-many
|
||||
# down_causes = relationship("SimulationResultDownCauses", back_populates="result") # 1-to-many
|
||||
|
||||
|
||||
class SimulationResultAsset(Base):
|
||||
__tablename__ = "simulation_result_assets"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
)
|
||||
|
||||
simulation_results_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_results.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
simulation_model_assets_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model_assets.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
assetId = Column(Text, nullable=True) # "node_blablabla"
|
||||
name = Column(Text, nullable=True)
|
||||
|
||||
availability = Column(Numeric, nullable=True)
|
||||
contribution_factor = Column(Numeric, nullable=True)
|
||||
downtime = Column(Numeric, nullable=True)
|
||||
uptime = Column(Numeric, nullable=True)
|
||||
failures = Column(Numeric, nullable=True)
|
||||
total_downtime_concurrent_with_system = Column(Numeric, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
result = relationship("SimulationResult", back_populates="assets") # many-to-1
|
||||
events = relationship("SimulationResultEvent", back_populates="asset") # 1-to-many
|
||||
asset_model = relationship("SimulationModelAsset", back_populates="asset_results") # many-to-1
|
||||
|
||||
|
||||
|
||||
class SimulationResultSchema(Base):
|
||||
__tablename__ = "simulation_result_schemas"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
)
|
||||
|
||||
simulation_results_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_results.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
simulation_model_schemas_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_model_schemas.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
schemaId = Column(Text, nullable=True)
|
||||
name = Column(Text, nullable=True)
|
||||
|
||||
availability = Column(Numeric, nullable=True)
|
||||
downtime = Column(Numeric, nullable=True)
|
||||
uptime = Column(Numeric, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
result = relationship("SimulationResult", back_populates="schemas") # many-to-1
|
||||
events = relationship("SimulationResultEvent", back_populates="schema") # 1-to-many
|
||||
schema_model = relationship("SimulationModelSchema", back_populates="schema_results") # many-to-1
|
||||
|
||||
|
||||
class SimulationResultEvent(Base):
|
||||
__tablename__ = "simulation_result_events"
|
||||
|
||||
id = Column(
|
||||
UUID(as_uuid=True),
|
||||
primary_key=True,
|
||||
index=True,
|
||||
default=uuid.uuid4,
|
||||
)
|
||||
|
||||
simulation_result_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_results.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
simulation_result_assets_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_result_assets.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
simulation_result_schemas_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
ForeignKey("simulation_result_schemas.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
type_id = Column(
|
||||
UUID(as_uuid=True),
|
||||
# asumsi ada tabel ini
|
||||
ForeignKey("simulation_master_types.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
cause = Column(Text, nullable=True)
|
||||
state = Column(Text, nullable=True)
|
||||
|
||||
load_factor = Column(Numeric, nullable=True)
|
||||
start_time = Column(Numeric, nullable=True)
|
||||
end_time = Column(Numeric, nullable=True)
|
||||
|
||||
created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
# relationships
|
||||
result = relationship("SimulationResult", back_populates="events")
|
||||
asset = relationship("SimulationResultAsset", back_populates="events")
|
||||
schema = relationship("SimulationResultSchema", back_populates="events")
|
||||
type = relationship("SimulationMasterType", back_populates="result_events")
|
||||
|
||||
|
||||
# class SimulationResultDownCause(Base):
|
||||
# __tablename__ = "simulation_result_down_causes"
|
||||
|
||||
# id = Column(
|
||||
# UUID(as_uuid=True),
|
||||
# primary_key=True,
|
||||
# index=True,
|
||||
# default=uuid.uuid4,
|
||||
# )
|
||||
|
||||
# simulation_results_id = Column(
|
||||
# UUID(as_uuid=True),
|
||||
# ForeignKey("simulation_results.id"),
|
||||
# nullable=True
|
||||
# )
|
||||
|
||||
# availability = Column(Numeric, nullable=True)
|
||||
# downtime = Column(Numeric, nullable=True)
|
||||
# uptime = Column(Numeric, nullable=True)
|
||||
# failures = Column(Numeric, nullable=True)
|
||||
|
||||
# created_at = Column(TIMESTAMP(timezone=True), server_default=func.now())
|
||||
# updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
# deleted_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue