Repository URL to install this package:
| 
      
        
        
        Version: 
        
         
          
          4.2.50-4.2  ▾
        
         | 
# 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))