Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
# 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))