261 lines
9.2 KiB
Python
261 lines
9.2 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
from alembic import op
|
|
from oslo_utils import timeutils
|
|
import sqlalchemy as sa
|
|
|
|
from vitrage.storage.sqlalchemy import models
|
|
|
|
|
|
"""Initial migration"
|
|
|
|
Revision ID: 4e44c9414dff
|
|
Revises: None
|
|
Create Date: 2019-09-04 15:35:01.086784
|
|
|
|
"""
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '4e44c9414dff'
|
|
down_revision = None
|
|
|
|
|
|
def upgrade():
|
|
try:
|
|
op.create_table(
|
|
'alarms',
|
|
sa.Column('vitrage_id', sa.String(128), primary_key=True),
|
|
sa.Column('start_timestamp', sa.DateTime, nullable=False),
|
|
sa.Column('end_timestamp', sa.DateTime, nullable=False,
|
|
default=models.DEFAULT_END_TIME),
|
|
sa.Column('name', sa.String(256), nullable=False),
|
|
sa.Column('vitrage_type', sa.String(64), nullable=False),
|
|
sa.Column('vitrage_aggregated_severity', sa.String(64),
|
|
nullable=False),
|
|
sa.Column('vitrage_operational_severity', sa.String(64),
|
|
nullable=False),
|
|
sa.Column('project_id', sa.String(64)),
|
|
sa.Column('vitrage_resource_type', sa.String(64)),
|
|
sa.Column('vitrage_resource_id', sa.String(64)),
|
|
sa.Column('vitrage_resource_project_id', sa.String(64)),
|
|
sa.Column('payload', models.JSONEncodedDict),
|
|
|
|
sa.Column('created_at', sa.DateTime,
|
|
default=lambda: timeutils.utcnow()),
|
|
sa.Column('updated_at', sa.DateTime,
|
|
onupdate=lambda: timeutils.utcnow()),
|
|
mysql_charset='utf8',
|
|
mysql_engine='InnoDB'
|
|
)
|
|
|
|
op.create_table(
|
|
'edges',
|
|
sa.Column('source_id', sa.String(128), primary_key=True),
|
|
sa.Column('target_id', sa.String(128), primary_key=True),
|
|
sa.Column('label', sa.String(64), nullable=False),
|
|
sa.Column('start_timestamp', sa.DateTime, nullable=False),
|
|
sa.Column('end_timestamp', sa.DateTime, nullable=False,
|
|
default=models.DEFAULT_END_TIME),
|
|
sa.Column('payload', models.JSONEncodedDict),
|
|
|
|
sa.Column('created_at', sa.DateTime,
|
|
default=lambda: timeutils.utcnow()),
|
|
sa.Column('updated_at', sa.DateTime,
|
|
onupdate=lambda: timeutils.utcnow()),
|
|
sa.ForeignKeyConstraint(['source_id'], ['alarms.vitrage_id'],
|
|
ondelete='CASCADE'),
|
|
sa.ForeignKeyConstraint(['target_id'], ['alarms.vitrage_id'],
|
|
ondelete='CASCADE'),
|
|
mysql_charset='utf8',
|
|
mysql_engine='InnoDB'
|
|
)
|
|
|
|
op.create_table(
|
|
'changes',
|
|
sa.Column('id', models.MagicBigInt, primary_key=True,
|
|
autoincrement=True),
|
|
sa.Column('vitrage_id', sa.String(128), nullable=False),
|
|
sa.Column('timestamp', sa.DateTime, nullable=False),
|
|
sa.Column('severity', sa.String(64), nullable=False),
|
|
sa.Column('payload', models.JSONEncodedDict),
|
|
|
|
sa.Column('created_at', sa.DateTime,
|
|
default=lambda: timeutils.utcnow()),
|
|
sa.Column('updated_at', sa.DateTime,
|
|
onupdate=lambda: timeutils.utcnow()),
|
|
sa.ForeignKeyConstraint(['vitrage_id'], ['alarms.vitrage_id'],
|
|
ondelete='CASCADE'),
|
|
mysql_charset='utf8',
|
|
mysql_engine='InnoDB'
|
|
)
|
|
|
|
op.create_table(
|
|
'active_actions',
|
|
sa.Column('action_type', sa.String(128)),
|
|
sa.Column('extra_info', sa.String(128)),
|
|
sa.Column('source_vertex_id', sa.String(128)),
|
|
sa.Column('target_vertex_id', sa.String(128)),
|
|
sa.Column('action_id', sa.String(128), primary_key=True),
|
|
sa.Column('score', sa.SmallInteger()),
|
|
sa.Column('trigger', sa.String(128), primary_key=True),
|
|
sa.Column('created_at', sa.DateTime,
|
|
default=lambda: timeutils.utcnow()),
|
|
sa.Column('updated_at', sa.DateTime,
|
|
onupdate=lambda: timeutils.utcnow()),
|
|
mysql_charset='utf8',
|
|
mysql_engine='InnoDB'
|
|
)
|
|
op.create_table(
|
|
'templates',
|
|
sa.Column('id', sa.String(64), primary_key=True, nullable=False),
|
|
sa.Column('status', sa.String(16)),
|
|
sa.Column('status_details', sa.String(128)),
|
|
sa.Column('name', sa.String(128), nullable=False),
|
|
sa.Column('file_content', models.JSONEncodedDict, nullable=False),
|
|
sa.Column("type", sa.String(64), default='standard'),
|
|
sa.Column('created_at', sa.DateTime,
|
|
default=lambda: timeutils.utcnow()),
|
|
sa.Column('updated_at', sa.DateTime,
|
|
onupdate=lambda: timeutils.utcnow()),
|
|
mysql_charset='utf8',
|
|
mysql_engine='InnoDB'
|
|
)
|
|
op.create_table(
|
|
'webhooks',
|
|
sa.Column('id', sa.String(128), primary_key=True),
|
|
sa.Column('project_id', sa.String(128), nullable=False),
|
|
sa.Column('is_admin_webhook', sa.Boolean, nullable=False),
|
|
sa.Column('url', sa.String(256), nullable=False),
|
|
sa.Column('headers', sa.String(1024)),
|
|
sa.Column('regex_filter', sa.String(512)),
|
|
sa.Column('created_at', sa.DateTime,
|
|
default=lambda: timeutils.utcnow()),
|
|
sa.Column('updated_at', sa.DateTime,
|
|
onupdate=lambda: timeutils.utcnow()),
|
|
mysql_charset='utf8',
|
|
mysql_engine='InnoDB'
|
|
)
|
|
op.create_index(
|
|
'ix_active_action',
|
|
'active_actions',
|
|
[
|
|
'action_type', 'extra_info', 'source_vertex_id',
|
|
'target_vertex_id'
|
|
]
|
|
)
|
|
|
|
op.create_table(
|
|
'events',
|
|
sa.Column("id", sa.BigInteger, primary_key=True, nullable=False,
|
|
autoincrement=True),
|
|
sa.Column('payload', models.JSONEncodedDict(), nullable=False),
|
|
sa.Column('is_vertex', sa.Boolean, nullable=False),
|
|
sa.Column('created_at', sa.DateTime,
|
|
default=lambda: timeutils.utcnow()),
|
|
sa.Column('updated_at', sa.DateTime,
|
|
onupdate=lambda: timeutils.utcnow()),
|
|
mysql_charset='utf8',
|
|
mysql_engine='InnoDB'
|
|
)
|
|
op.create_table(
|
|
'graph_snapshots',
|
|
sa.Column('id', sa.Integer, primary_key=True,
|
|
nullable=False),
|
|
sa.Column('event_id', sa.BigInteger, nullable=False),
|
|
sa.Column('graph_snapshot', models.CompressedBinary((2 ** 32) - 1),
|
|
nullable=False),
|
|
sa.Column('created_at', sa.DateTime,
|
|
default=lambda: timeutils.utcnow()),
|
|
sa.Column('updated_at', sa.DateTime,
|
|
onupdate=lambda: timeutils.utcnow()),
|
|
mysql_charset='utf8',
|
|
mysql_engine='InnoDB'
|
|
)
|
|
|
|
op.create_index(
|
|
'ix_alarms_end_timestamp',
|
|
'alarms',
|
|
[
|
|
'end_timestamp'
|
|
]
|
|
)
|
|
|
|
op.create_index(
|
|
'ix_alarms_project_id',
|
|
'alarms',
|
|
[
|
|
'project_id'
|
|
]
|
|
)
|
|
|
|
op.create_index(
|
|
'ix_alarms_start_timestamp',
|
|
'alarms',
|
|
[
|
|
'start_timestamp'
|
|
]
|
|
)
|
|
|
|
op.create_index(
|
|
'ix_alarms_vitrage_aggregated_severity',
|
|
'alarms',
|
|
[
|
|
'vitrage_aggregated_severity'
|
|
]
|
|
)
|
|
|
|
op.create_index(
|
|
'ix_alarms_vitrage_operational_severity',
|
|
'alarms',
|
|
[
|
|
'vitrage_operational_severity'
|
|
]
|
|
)
|
|
|
|
op.create_index(
|
|
'ix_alarms_vitrage_resource_project_id',
|
|
'alarms',
|
|
[
|
|
'vitrage_resource_project_id'
|
|
]
|
|
)
|
|
|
|
op.create_index(
|
|
'ix_changes_severity',
|
|
'changes',
|
|
[
|
|
'severity'
|
|
]
|
|
)
|
|
op.create_index(
|
|
'ix_changes_timestamp',
|
|
'changes',
|
|
[
|
|
'timestamp'
|
|
]
|
|
)
|
|
|
|
op.create_index(
|
|
'ix_changes_vitrage_id',
|
|
'changes',
|
|
[
|
|
'vitrage_id'
|
|
]
|
|
)
|
|
except Exception:
|
|
# TODO(e0ne): figure out more specific exception here to handle a case
|
|
# when migration is applied over Queens release and tables are already
|
|
# exists
|
|
pass
|