Skip to content

Commit

Permalink
fixes bug 1267301 - Postgres table for storing correlations (#3305)
Browse files Browse the repository at this point in the history
r=adngdb
  • Loading branch information
Peter Bengtsson authored and adngdb committed May 3, 2016
1 parent a3e2c65 commit 9cd7538
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 0 deletions.
70 changes: 70 additions & 0 deletions alembic/versions/373ef4569b93_correlations_table.py
@@ -0,0 +1,70 @@
"""correlations table
Revision ID: 373ef4569b93
Revises: 335c2bfd99a6
Create Date: 2016-04-25 14:11:28.373859
"""

from alembic import op
import sqlalchemy as sa

from socorrolib.lib import jsontype

# revision identifiers, used by Alembic.
revision = '373ef4569b93'
down_revision = '335c2bfd99a6'


def upgrade():
op.create_table(
'correlations',
sa.Column('id', sa.INTEGER(), nullable=False),
sa.Column(
'product_version_id',
sa.INTEGER(),
autoincrement=False,
nullable=False
),
sa.Column('platform', sa.TEXT(), nullable=False),
sa.Column('signature_id', sa.INTEGER(), nullable=False),
sa.Column('key', sa.TEXT(), nullable=False),
sa.Column(
'count',
sa.INTEGER(),
server_default=sa.text(u'0'),
nullable=False
),
sa.Column('notes', sa.TEXT(), server_default=u'', nullable=False),
sa.Column('date', sa.DATE(), nullable=False),
sa.Column('payload', jsontype.JsonType(), nullable=True),
sa.PrimaryKeyConstraint('id', 'platform')
)
op.create_index(
'correlations_signature_idx',
'correlations',
[
'product_version_id',
'platform',
'key',
'date',
'signature_id'
],
unique=True,
)
op.create_index(
'correlations_signatures_idx',
'correlations',
[
'product_version_id',
'platform',
'key',
'date'
],
)


def downgrade():
op.drop_index('correlations_signatures_idx', table_name='correlations')
op.drop_index('correlations_signature_idx', table_name='correlations')
op.drop_table('correlations')
47 changes: 47 additions & 0 deletions socorro/external/postgresql/models.py
Expand Up @@ -1425,6 +1425,53 @@ class MissingSymbols(DeclarativeBase):
__mapper_args__ = {'primary_key': (date_processed, debug_file, debug_id)}


class Correlations(DeclarativeBase):
__tablename__ = 'correlations'

#column definitions
id = Column(u'id', INTEGER(), primary_key=True, autoincrement=True, nullable=False)
product_version_id = Column(u'product_version_id', INTEGER(), nullable=False, autoincrement=False, index=True)
platform = Column(u'platform', TEXT(), primary_key=True, nullable=False)
signature_id = Column(u'signature_id', INTEGER(), primary_key=False, nullable=False, index=True)
key = Column(u'key', TEXT(), nullable=False)
count = Column(u'count', INTEGER(), nullable=False, server_default=text('0'))
notes = Column(u'notes', TEXT(), primary_key=False, nullable=False, server_default='')
date = Column(u'date', DATE(), primary_key=False, nullable=False, index=True)
payload = Column(u'payload', JSON())

# When looking for signatures by the correlations you need to query by:
# product_version_id
# platform
# date
# key
#
# When looking for correlations for a specific signature you need:
# product_version_id
# platform
# key
# date
# signature
#
__table_args__ = (
Index(
'correlations_signatures_idx',
product_version_id,
platform,
key,
date,
),
Index(
'correlations_signature_idx',
product_version_id,
platform,
key,
date,
signature_id,
unique=True
),
)


###########################################
## Schema definition: Aggregates
###########################################
Expand Down

0 comments on commit 9cd7538

Please sign in to comment.