support json field in db
Change-Id: I99ea44d967b509214f975da8a8b7a588100f4785
This commit is contained in:
parent
359c38cf68
commit
01fa84178b
@ -18,7 +18,6 @@ import dateutil.parser
|
|||||||
import oslo_messaging as oslo_m
|
import oslo_messaging as oslo_m
|
||||||
|
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
from oslo_serialization import jsonutils
|
|
||||||
from oslo_service import service as os_service
|
from oslo_service import service as os_service
|
||||||
from vitrage.common.constants import DatasourceProperties as DSProps
|
from vitrage.common.constants import DatasourceProperties as DSProps
|
||||||
from vitrage.common.constants import GraphAction
|
from vitrage.common.constants import GraphAction
|
||||||
@ -73,6 +72,6 @@ class VitragePersistorEndpoint(object):
|
|||||||
return
|
return
|
||||||
collector_timestamp = \
|
collector_timestamp = \
|
||||||
dateutil.parser.parse(data.get(DSProps.SAMPLE_DATE))
|
dateutil.parser.parse(data.get(DSProps.SAMPLE_DATE))
|
||||||
event_row = models.Event(payload=jsonutils.dumps(data),
|
event_row = models.Event(payload=data,
|
||||||
collector_timestamp=collector_timestamp)
|
collector_timestamp=collector_timestamp)
|
||||||
self.db_connection.events.create(event_row)
|
self.db_connection.events.create(event_row)
|
||||||
|
@ -61,6 +61,7 @@ class Connection(base.Connection):
|
|||||||
def upgrade(self, nocreate=False):
|
def upgrade(self, nocreate=False):
|
||||||
engine = self._engine_facade.get_engine()
|
engine = self._engine_facade.get_engine()
|
||||||
engine.connect()
|
engine.connect()
|
||||||
|
models.Base.metadata.drop_all(engine, tables=[models.Event.__table__])
|
||||||
models.Base.metadata.create_all(engine)
|
models.Base.metadata.create_all(engine)
|
||||||
# TODO(idan_hefetz) upgrade logic is missing
|
# TODO(idan_hefetz) upgrade logic is missing
|
||||||
|
|
||||||
|
@ -14,8 +14,11 @@
|
|||||||
|
|
||||||
from oslo_db.sqlalchemy import models
|
from oslo_db.sqlalchemy import models
|
||||||
from sqlalchemy import Column, DateTime, INTEGER, String, \
|
from sqlalchemy import Column, DateTime, INTEGER, String, \
|
||||||
SmallInteger, BigInteger, Index, Text
|
SmallInteger, BigInteger, Index
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
import sqlalchemy.types as types
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
class VitrageBase(models.ModelBase):
|
class VitrageBase(models.ModelBase):
|
||||||
@ -39,6 +42,28 @@ class VitrageBase(models.ModelBase):
|
|||||||
Base = declarative_base(cls=VitrageBase)
|
Base = declarative_base(cls=VitrageBase)
|
||||||
|
|
||||||
|
|
||||||
|
class StringyJSON(types.TypeDecorator):
|
||||||
|
"""Stores and retrieves JSON as TEXT.
|
||||||
|
|
||||||
|
Adjust JSON type to sqlite for unit test
|
||||||
|
"""
|
||||||
|
|
||||||
|
impl = types.TEXT
|
||||||
|
|
||||||
|
def process_bind_param(self, value, dialect):
|
||||||
|
if value is not None:
|
||||||
|
value = json.dumps(value)
|
||||||
|
return value
|
||||||
|
|
||||||
|
def process_result_value(self, value, dialect):
|
||||||
|
if value is not None:
|
||||||
|
value = json.loads(value)
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
MagicJSON = types.JSON().with_variant(StringyJSON, 'sqlite')
|
||||||
|
|
||||||
|
|
||||||
class Event(Base):
|
class Event(Base):
|
||||||
|
|
||||||
__tablename__ = 'events'
|
__tablename__ = 'events'
|
||||||
@ -46,14 +71,14 @@ class Event(Base):
|
|||||||
event_id = Column("id", INTEGER, primary_key=True, nullable=False,
|
event_id = Column("id", INTEGER, primary_key=True, nullable=False,
|
||||||
autoincrement=True)
|
autoincrement=True)
|
||||||
collector_timestamp = Column(DateTime, index=True, nullable=False)
|
collector_timestamp = Column(DateTime, index=True, nullable=False)
|
||||||
payload = Column(Text, nullable=False)
|
payload = Column(MagicJSON, nullable=False)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return \
|
return \
|
||||||
"<Event(" \
|
"<Event(" \
|
||||||
"id='%s', " \
|
"id='%s', " \
|
||||||
"collector_timestamp='%s', " \
|
"collector_timestamp='%s', " \
|
||||||
"payload='%s')>" %\
|
"payload='%s')>" % \
|
||||||
(
|
(
|
||||||
self.event_id,
|
self.event_id,
|
||||||
self.collector_timestamp,
|
self.collector_timestamp,
|
||||||
@ -88,7 +113,7 @@ class ActiveAction(Base, models.TimestampMixin):
|
|||||||
"target_vertex_id='%s', " \
|
"target_vertex_id='%s', " \
|
||||||
"action_id='%s', " \
|
"action_id='%s', " \
|
||||||
"score='%s', " \
|
"score='%s', " \
|
||||||
"trigger='%s')>" %\
|
"trigger='%s')>" % \
|
||||||
(
|
(
|
||||||
self.created_at,
|
self.created_at,
|
||||||
self.action_type,
|
self.action_type,
|
||||||
|
@ -16,7 +16,6 @@ import datetime
|
|||||||
import six
|
import six
|
||||||
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from oslo_serialization import jsonutils
|
|
||||||
from vitrage.common.constants import DatasourceProperties as DSProps
|
from vitrage.common.constants import DatasourceProperties as DSProps
|
||||||
from vitrage.datasources import NEUTRON_PORT_DATASOURCE
|
from vitrage.datasources import NEUTRON_PORT_DATASOURCE
|
||||||
from vitrage.datasources import NOVA_INSTANCE_DATASOURCE
|
from vitrage.datasources import NOVA_INSTANCE_DATASOURCE
|
||||||
@ -129,6 +128,4 @@ class TestEvents(BaseVitrageTempest):
|
|||||||
writen_events = self.db_connection.events.query(
|
writen_events = self.db_connection.events.query(
|
||||||
gt_collector_timestamp=time_before_action)
|
gt_collector_timestamp=time_before_action)
|
||||||
|
|
||||||
for event in writen_events:
|
|
||||||
event.payload = jsonutils.loads(event.payload)
|
|
||||||
return writen_events
|
return writen_events
|
||||||
|
Loading…
x
Reference in New Issue
Block a user