diff --git a/app/models.py b/app/models.py index 0ef2de359..a5f52759c 100644 --- a/app/models.py +++ b/app/models.py @@ -973,3 +973,20 @@ class Rate(db.Model): valid_from = db.Column(db.DateTime, nullable=False) rate = db.Column(db.Float(asdecimal=False), nullable=False) notification_type = db.Column(notification_types, index=True, nullable=False) + + + +class JobStatistics(db.Model): + __tablename__ = 'job_statistics' + + id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + job_id = db.Column(UUID(as_uuid=True), db.ForeignKey('jobs.id'), index=True, unique=True) + job = db.relationship('Job', backref=db.backref('job_statistics', lazy='dynamic')) + emails_sent = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=0) + emails_delivered = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=0) + emails_failed = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=0) + sms_sent = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=0) + sms_delivered = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=0) + sms_failed = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=0) + letters_sent = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=0) + letters_failed = db.Column(db.BigInteger, index=False, unique=False, nullable=False, default=0) diff --git a/migrations/versions/0081_add_job_stats.py b/migrations/versions/0081_add_job_stats.py new file mode 100644 index 000000000..3df9a2d37 --- /dev/null +++ b/migrations/versions/0081_add_job_stats.py @@ -0,0 +1,53 @@ +"""empty message + +Revision ID: 0081_add_job_stats +Revises: 0080_fix_rate_start_date +Create Date: 2017-05-09 11:21:06.959075 + +""" + +# revision identifiers, used by Alembic. +revision = '0081_add_job_stats' +down_revision = '0080_fix_rate_start_date' + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('job_statistics', + sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False), + sa.Column('job_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.Column('emails_sent', sa.BigInteger(), nullable=False), + sa.Column('emails_delivered', sa.BigInteger(), nullable=False), + sa.Column('emails_failed', sa.BigInteger(), nullable=False), + sa.Column('sms_sent', sa.BigInteger(), nullable=False), + sa.Column('sms_delivered', sa.BigInteger(), nullable=False), + sa.Column('sms_failed', sa.BigInteger(), nullable=False), + sa.Column('letters_sent', sa.BigInteger(), nullable=False), + sa.Column('letters_failed', sa.BigInteger(), nullable=False), + sa.ForeignKeyConstraint(['job_id'], ['jobs.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_job_statistics_job_id'), 'job_statistics', ['job_id'], unique=True) + op.alter_column('notification_history', 'international', + existing_type=sa.BOOLEAN(), + nullable=False) + op.alter_column('notifications', 'international', + existing_type=sa.BOOLEAN(), + nullable=False) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('notifications', 'international', + existing_type=sa.BOOLEAN(), + nullable=True) + op.alter_column('notification_history', 'international', + existing_type=sa.BOOLEAN(), + nullable=True) + op.drop_index(op.f('ix_job_statistics_job_id'), table_name='job_statistics') + op.drop_table('job_statistics') + # ### end Alembic commands ###