def main(config: CommandConfig):
    influxdb_config = config.influxdb

    client = InfluxDBClient(influxdb_config.host, influxdb_config.port,
                            influxdb_config.username, influxdb_config.password,
                            influxdb_config.database)
    client.create_database(influxdb_config.database)

    db = SqliteExtDatabase(config.database.filename)
    try:
        db_model.database_proxy.initialize(db)
        db.create_tables([db_model.InfluxdbPostPosition])
    except IntegrityError as ex:
        logger.error("database open error.", ex)
        db.rollback()
        exit(1)

    while True:
        db_influx_last_position = read_influx_post_position(db)
        last_post_position = db_influx_last_position.post_log_position

        logger.info(f'db_influx_last_position={last_post_position}')
        with db.transaction() as tran:
            db_result = db_model.EnvSensorLog.select() \
                .where(db_model.EnvSensorLog.id > last_post_position) \
                .order_by(db_model.EnvSensorLog.id) \
                .limit(1000)

            logger.info(F"db select count={db_result.count()}")
            if db_result.count() == 0:
                break

            influx_data = []
            for env_sensor_log in db_result:
                logger.debug(
                    f"log_id={env_sensor_log.id}, data={env_sensor_log.data}")
                db_influx_last_position.post_log_position = env_sensor_log.id
                db_influx_last_position.timestamp = datetime.now()

                influx_data.append(convert(env_sensor_log.data))

            logger.debug(f"write_data={influx_data}")
            logger.info(
                f"processed position={db_influx_last_position.post_log_position}"
            )
            client.write_points(influx_data)
            db_influx_last_position.save()

    logger.info(F"process complete.")
Exemple #2
0
import os

from decouple import config
from playhouse.migrate import SqliteMigrator, IntegerField, migrate
from playhouse.sqlite_ext import SqliteExtDatabase

from model.revision import Revision

db_path = config('DATABASE_URI',
                 default=os.path.expanduser('~/botlistbot.sqlite3'))
db = SqliteExtDatabase(db_path)

migrator = SqliteMigrator(db)

revision = IntegerField(default=100)

with db.transaction():
    migrate(migrator.add_column('bot', 'revision', revision), )

Revision.create_table(fail_silently=True)
Revision.insert({'nr': 101}).execute()