Convert enabled for Client, Probe to use datetime instead of boolean
				
					
				
			value is null if disabled, else timestamp of when it was last enabled
This commit is contained in:
		
							parent
							
								
									c45baaed5e
								
							
						
					
					
						commit
						f31a0c4c22
					
				
					 4 changed files with 96 additions and 10 deletions
				
			
		| 
						 | 
					@ -0,0 +1,80 @@
 | 
				
			||||||
 | 
					# -*- coding: utf-8; -*-
 | 
				
			||||||
 | 
					"""make enabled datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Revision ID: fd1df160539a
 | 
				
			||||||
 | 
					Revises: a2676d3dfc1e
 | 
				
			||||||
 | 
					Create Date: 2019-01-25 18:41:01.652823
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from __future__ import unicode_literals, absolute_import
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# revision identifiers, used by Alembic.
 | 
				
			||||||
 | 
					revision = 'fd1df160539a'
 | 
				
			||||||
 | 
					down_revision = 'a2676d3dfc1e'
 | 
				
			||||||
 | 
					branch_labels = None
 | 
				
			||||||
 | 
					depends_on = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import datetime
 | 
				
			||||||
 | 
					from alembic import op
 | 
				
			||||||
 | 
					import sqlalchemy as sa
 | 
				
			||||||
 | 
					import rattail.db.types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def upgrade():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    now = datetime.datetime.utcnow()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # client
 | 
				
			||||||
 | 
					    op.add_column('client', sa.Column('new_enabled', sa.DateTime(), nullable=True))
 | 
				
			||||||
 | 
					    client = sa.sql.table('client',
 | 
				
			||||||
 | 
					                          sa.sql.column('enabled'),
 | 
				
			||||||
 | 
					                          sa.sql.column('new_enabled'))
 | 
				
			||||||
 | 
					    op.execute(client.update()\
 | 
				
			||||||
 | 
					               .where(client.c.enabled == True)\
 | 
				
			||||||
 | 
					               .values({'new_enabled': now}))
 | 
				
			||||||
 | 
					    op.drop_column('client', 'enabled')
 | 
				
			||||||
 | 
					    op.alter_column('client', 'new_enabled', new_column_name='enabled')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # probe
 | 
				
			||||||
 | 
					    op.add_column('probe', sa.Column('new_enabled', sa.DateTime(), nullable=True))
 | 
				
			||||||
 | 
					    probe = sa.sql.table('probe',
 | 
				
			||||||
 | 
					                         sa.sql.column('enabled'),
 | 
				
			||||||
 | 
					                         sa.sql.column('new_enabled'))
 | 
				
			||||||
 | 
					    op.execute(probe.update()\
 | 
				
			||||||
 | 
					               .where(probe.c.enabled == True)\
 | 
				
			||||||
 | 
					               .values({'new_enabled': now}))
 | 
				
			||||||
 | 
					    op.drop_column('probe', 'enabled')
 | 
				
			||||||
 | 
					    op.alter_column('probe', 'new_enabled', new_column_name='enabled')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def downgrade():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # probe
 | 
				
			||||||
 | 
					    op.add_column('probe', sa.Column('old_enabled', sa.Boolean(), nullable=True))
 | 
				
			||||||
 | 
					    probe = sa.sql.table('probe',
 | 
				
			||||||
 | 
					                         sa.sql.column('enabled'),
 | 
				
			||||||
 | 
					                         sa.sql.column('old_enabled'))
 | 
				
			||||||
 | 
					    op.execute(probe.update()\
 | 
				
			||||||
 | 
					               .where(probe.c.enabled != None)\
 | 
				
			||||||
 | 
					               .values({'old_enabled': True}))
 | 
				
			||||||
 | 
					    op.execute(probe.update()\
 | 
				
			||||||
 | 
					               .where(probe.c.enabled == None)\
 | 
				
			||||||
 | 
					               .values({'old_enabled': False}))
 | 
				
			||||||
 | 
					    op.drop_column('probe', 'enabled')
 | 
				
			||||||
 | 
					    op.alter_column('probe', 'old_enabled', new_column_name='enabled', nullable=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # client
 | 
				
			||||||
 | 
					    op.add_column('client', sa.Column('old_enabled', sa.Boolean(), nullable=True))
 | 
				
			||||||
 | 
					    client = sa.sql.table('client',
 | 
				
			||||||
 | 
					                          sa.sql.column('enabled'),
 | 
				
			||||||
 | 
					                          sa.sql.column('old_enabled'))
 | 
				
			||||||
 | 
					    op.execute(client.update()\
 | 
				
			||||||
 | 
					               .where(client.c.enabled != None)\
 | 
				
			||||||
 | 
					               .values({'old_enabled': True}))
 | 
				
			||||||
 | 
					    op.execute(client.update()\
 | 
				
			||||||
 | 
					               .where(client.c.enabled == None)\
 | 
				
			||||||
 | 
					               .values({'old_enabled': False}))
 | 
				
			||||||
 | 
					    op.drop_column('client', 'enabled')
 | 
				
			||||||
 | 
					    op.alter_column('client', 'old_enabled', new_column_name='enabled', nullable=False)
 | 
				
			||||||
| 
						 | 
					@ -111,11 +111,11 @@ class Client(Base):
 | 
				
			||||||
    Any arbitrary notes for the client.
 | 
					    Any arbitrary notes for the client.
 | 
				
			||||||
    """)
 | 
					    """)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enabled = sa.Column(sa.Boolean(), nullable=False, default=False, doc="""
 | 
					    enabled = sa.Column(sa.DateTime(), nullable=True, doc="""
 | 
				
			||||||
    Whether the client should be considered enabled (active).  If set, the
 | 
					    This will either be the date/time when the client was most recently
 | 
				
			||||||
    client will be expected to take readings (but only for "enabled" probes)
 | 
					    enabled, or null if it is not currently enabled.  If set, the client will
 | 
				
			||||||
    and the server will monitor them to ensure they are within the expected
 | 
					    be expected to take readings (but only for "enabled" probes) and the server
 | 
				
			||||||
    range etc.
 | 
					    will monitor them to ensure they are within the expected range etc.
 | 
				
			||||||
    """)
 | 
					    """)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    online = sa.Column(sa.Boolean(), nullable=False, default=False, doc="""
 | 
					    online = sa.Column(sa.Boolean(), nullable=False, default=False, doc="""
 | 
				
			||||||
| 
						 | 
					@ -191,7 +191,13 @@ class Probe(Base):
 | 
				
			||||||
    """)
 | 
					    """)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    device_path = sa.Column(sa.String(length=255), nullable=True)
 | 
					    device_path = sa.Column(sa.String(length=255), nullable=True)
 | 
				
			||||||
    enabled = sa.Column(sa.Boolean(), nullable=False, default=True)
 | 
					
 | 
				
			||||||
 | 
					    enabled = sa.Column(sa.DateTime(), nullable=True, doc="""
 | 
				
			||||||
 | 
					    This will either be the date/time when the probe was most recently enabled,
 | 
				
			||||||
 | 
					    or null if it is not currently enabled.  If set, the client will be
 | 
				
			||||||
 | 
					    expected to take readings for this probe, and the server will monitor them
 | 
				
			||||||
 | 
					    to ensure they are within the expected range etc.
 | 
				
			||||||
 | 
					    """)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    critical_temp_max = sa.Column(sa.Integer(), nullable=False, doc="""
 | 
					    critical_temp_max = sa.Column(sa.Integer(), nullable=False, doc="""
 | 
				
			||||||
    Maximum high temperature; when a reading is greater than or equal to this
 | 
					    Maximum high temperature; when a reading is greater than or equal to this
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,13 +37,13 @@ def disabled_probes(config, progress=None):
 | 
				
			||||||
    tempmon_session = TempmonSession()
 | 
					    tempmon_session = TempmonSession()
 | 
				
			||||||
    clients = tempmon_session.query(tempmon.Client)\
 | 
					    clients = tempmon_session.query(tempmon.Client)\
 | 
				
			||||||
                             .filter(tempmon.Client.archived == False)\
 | 
					                             .filter(tempmon.Client.archived == False)\
 | 
				
			||||||
                             .filter(tempmon.Client.enabled == False)\
 | 
					                             .filter(tempmon.Client.enabled == None)\
 | 
				
			||||||
                             .all()
 | 
					                             .all()
 | 
				
			||||||
    probes = tempmon_session.query(tempmon.Probe)\
 | 
					    probes = tempmon_session.query(tempmon.Probe)\
 | 
				
			||||||
                            .join(tempmon.Client)\
 | 
					                            .join(tempmon.Client)\
 | 
				
			||||||
                            .filter(tempmon.Client.archived == False)\
 | 
					                            .filter(tempmon.Client.archived == False)\
 | 
				
			||||||
                            .filter(tempmon.Client.enabled == True)\
 | 
					                            .filter(tempmon.Client.enabled != None)\
 | 
				
			||||||
                            .filter(tempmon.Probe.enabled == False)\
 | 
					                            .filter(tempmon.Probe.enabled == None)\
 | 
				
			||||||
                            .all()
 | 
					                            .all()
 | 
				
			||||||
    if clients or probes:
 | 
					    if clients or probes:
 | 
				
			||||||
        send_email(config, 'tempmon_disabled_probes', {
 | 
					        send_email(config, 'tempmon_disabled_probes', {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,7 +71,7 @@ class TempmonServerDaemon(Daemon):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            clients = session.query(tempmon.Client)\
 | 
					            clients = session.query(tempmon.Client)\
 | 
				
			||||||
                             .filter(tempmon.Client.enabled == True)\
 | 
					                             .filter(tempmon.Client.enabled != None)\
 | 
				
			||||||
                             .filter(tempmon.Client.archived == False)
 | 
					                             .filter(tempmon.Client.archived == False)
 | 
				
			||||||
            for client in clients:
 | 
					            for client in clients:
 | 
				
			||||||
                self.check_readings_for_client(session, client)
 | 
					                self.check_readings_for_client(session, client)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue