Repository URL to install this package:
Version:
4.2.61 ▾
|
# Copyright 2018 TrilioData Inc.
# All Rights Reserved.
"""
SQLAlchemy models for dmapi data.
"""
import json
from oslo_utils import timeutils
from oslo_utils import uuidutils
import six
import sqlalchemy as sa
from sqlalchemy import Column, String, Index, Boolean, Text, DateTime, Integer, PickleType
from sqlalchemy.dialects import mysql
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.types import TypeDecorator
class JSONEncodedDict(TypeDecorator):
"""Represents an immutable structure as a json-encoded string."""
impl = Text
@staticmethod
def process_bind_param(value, dialect):
if value is not None:
value = json.dumps(value)
return value
@staticmethod
def process_result_value(value, dialect):
if value is not None:
value = json.loads(value)
return value
class TimestampUTC(TypeDecorator):
"""Represents a timestamp precise to the microsecond."""
impl = DateTime
def load_dialect_impl(self, dialect):
if dialect.name == 'mysql':
return dialect.type_descriptor(mysql.DATETIME(fsp=6))
return self.impl
class DmapiBase(object):
"""Base class for Aodh Models."""
__table_args__ = {'mysql_charset': "utf8",
'mysql_engine': "InnoDB"}
__table_initialized__ = False
def __setitem__(self, key, value):
setattr(self, key, value)
def __getitem__(self, key):
return getattr(self, key)
def update(self, values):
"""Make the model object behave like a dict."""
for k, v in six.iteritems(values):
setattr(self, k, v)
Base = declarative_base(cls=DmapiBase)
class Service(Base):
"""Define Service data."""
__tablename__ = 'services'
__table_args__ = (
sa.CheckConstraint('disabled IN (0,1)'),
sa.UniqueConstraint('host', 'topic', 'deleted'),
sa.UniqueConstraint('host', 'binary', 'deleted'),
sa.UniqueConstraint('uuid')
)
created_at = Column(DateTime, default=lambda: timeutils.utcnow())
updated_at = Column(DateTime)
deleted_at = Column(DateTime)
id = Column(Integer, primary_key=True, nullable=False)
uuid = Column(String(36), default=uuidutils.generate_uuid)
host = Column(String(255))
binary = Column(String(255))
topic = Column(String(255))
report_count = Column(Integer, nullable=False, default=0)
deleted = Column(mysql.TINYINT, default=0)
disabled = Column(mysql.TINYINT, default=0)
disabled_reason = Column(String(255), nullable=True)
last_seen_up = Column(DateTime, default=lambda: timeutils.utcnow())
forced_down = Column(mysql.TINYINT, default=0)
version = Column(String(36))