Exemplo n.º 1
0
def delete_db_note(note_datetime):
    """ Deletes a Note from the SQL Database based on it's DateTime entry. """
    sql_query = "DELETE FROM " + str(db_v.table_other) + \
                " WHERE " + str(db_v.all_tables_datetime) + \
                " = ?;"
    sql_data = [note_datetime]
    sqlite_database.write_to_sql_database(sql_query, sql_data)
def search_sensor_delete_senor_id():
    sensor_id = app_cached_variables.checkin_search_sensor_id
    if sensor_id != "":
        write_to_sql_database("DROP TABLE '" + sensor_id + "';",
                              None,
                              sql_database_location=db_loc)
        _update_search_sensor_check_ins(sensor_id)
    return view_search_sensor_check_ins()
def _thread_clear_check_ins_counts():
    logger.network_logger.info(
        "Checkin Database 'Clear Old Checkin Data' Started")
    for sensor_id in get_sqlite_tables_in_list(db_loc):
        _clear_old_sensor_checkin_data(sensor_id)
    write_to_sql_database("VACUUM;", None, sql_database_location=db_loc)
    logger.network_logger.info(
        "Checkin Database 'Clear Old Checkin Data' Finished")
Exemplo n.º 4
0
def update_note_in_database(datetime_note):
    """ Takes the provided DateTime and Note as a list then updates the note in the SQL Database. """
    try:
        data_list = datetime_note.split(command_data_separator)

        current_datetime = data_list[0]
        custom_datetime = data_list[1]
        note = data_list[2]

        sql_execute = "UPDATE OtherData SET Notes = ?,UserDateTime = ? WHERE DateTime = ?;"
        data_entries = [note, custom_datetime, current_datetime]
        sqlite_database.write_to_sql_database(sql_execute, data_entries)
    except Exception as error:
        logger.primary_logger.error("DB note update error: " + str(error))
def _vacuum_database(selected_database):
    if selected_database == "MainDatabase":
        db_location = file_locations.sensor_database
    elif selected_database == "MQTTSubscriberDatabase":
        db_location = file_locations.mqtt_subscriber_database
    elif selected_database == "CheckinDatabase":
        db_location = file_locations.sensor_checkin_database
    else:
        db_location = file_locations.uploaded_databases_folder + "/" + selected_database
    if os.path.isfile(db_location):
        write_to_sql_database("VACUUM;", None, sql_database_location=db_location)
        msg = selected_database + " Database has been Shrunk"
        return get_message_page("Database Vacuum Successful", msg, page_url="sensor-system", skip_menu_select=True)
    msg = selected_database + " Database not found"
    return get_message_page("Database Vacuum Failed", msg, page_url="sensor-system", skip_menu_select=True)
    def record_trigger(reading, sql_column_name, datetime_stamp):
        sql_query = "INSERT OR IGNORE INTO TriggerData ("

        sql_data_list = [datetime_stamp]
        sql_query += "DateTime,SensorName,IP," + sql_column_name + ") VALUES ("
        sql_data_list.append(app_cached_variables.hostname)
        sql_data_list.append(app_cached_variables.ip)

        sql_data_list.append(str(reading))

        for _ in range(len(sql_data_list)):
            sql_query += "?,"
        sql_query = sql_query[:-1] + ");"

        write_to_sql_database(sql_query, sql_data_list)
def _write_mqtt_message_to_sql_database(mqtt_message):
    all_tables_datetime = app_cached_variables.database_variables.all_tables_datetime
    current_utc_datetime = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]

    try:
        sensor_topic_as_list = str(mqtt_message.topic).strip().split("/")
        payload = str(mqtt_message.payload.decode("UTF-8"))
        if len(sensor_topic_as_list) > 0:
            sensor_id_str = get_clean_sql_table_name(sensor_topic_as_list[0])
            try:
                column_and_data_dic = eval(payload)
                if type(column_and_data_dic) is not dict:
                    column_and_data_dic = {sensor_topic_as_list[-1]: payload}
                    if all_tables_datetime in column_and_data_dic:
                        column_and_data_dic = None
            except Exception as error:
                logger.network_logger.debug("MQTT Subscription - payload eval conversion failed: " + str(error))
                column_and_data_dic = {sensor_topic_as_list[-1]: payload}
                if all_tables_datetime in column_and_data_dic:
                    column_and_data_dic = None

            if column_and_data_dic is None:
                logger.network_logger.debug("DateTime found in non-dic - Skipping SQL Write")
            else:
                if all_tables_datetime not in column_and_data_dic:
                    column_and_data_dic[all_tables_datetime] = current_utc_datetime

                columns_sql_str = ""
                data_sql_value_place_marks = ""
                data_list = []
                for column_name, column_data in column_and_data_dic.items():
                    if column_name.replace("_", "JJ").isalnum():
                        _check_sql_table_column_exists(sensor_id_str, column_name)
                        columns_sql_str += column_name + ","
                        data_sql_value_place_marks += "?,"
                        data_list.append(str(column_data))
                    else:
                        log_msg = "MQTT Subscriber SQL Recording: Incorrect sensor ID or Type - "
                        logger.network_logger.warning(log_msg + "Must be Alphanumeric")

                if len(columns_sql_str) > 0:
                    columns_sql_str = columns_sql_str[:-1]
                    data_sql_value_place_marks = data_sql_value_place_marks[:-1]
                    sql_string = "INSERT OR IGNORE INTO " + sensor_id_str + \
                                 " (" + columns_sql_str + ") VALUES (" + data_sql_value_place_marks + ")"
                    write_to_sql_database(sql_string, data_list, sql_database_location=mqtt_sub_db_location)
    except Exception as error:
        logger.primary_logger.error("MQTT Subscriber Recording Failure: " + str(error))
def _clear_old_sensor_checkin_data(sensor_id):
    last_checkin_date = get_one_db_entry_wrapper(sensor_id,
                                                 db_v.all_tables_datetime)
    sensor_name = get_one_db_entry_wrapper(sensor_id, db_v.sensor_name)
    sensor_ip = get_one_db_entry_wrapper(sensor_id, db_v.ip)
    program_version = get_one_db_entry_wrapper(sensor_id,
                                               db_v.kootnet_sensors_version)
    installed_sensors = get_one_db_entry_wrapper(
        sensor_id, db_v.sensor_check_in_installed_sensors)
    sensor_uptime = get_one_db_entry_wrapper(sensor_id, db_v.sensor_uptime)

    primary_logs = get_one_db_entry_wrapper(sensor_id,
                                            db_v.sensor_check_in_primary_log)
    network_logs = get_one_db_entry_wrapper(sensor_id,
                                            db_v.sensor_check_in_network_log)
    sensors_logs = get_one_db_entry_wrapper(sensor_id,
                                            db_v.sensor_check_in_sensors_log)

    try:
        write_to_sql_database("DELETE FROM '" + sensor_id + "';",
                              None,
                              sql_database_location=db_loc)

        check_sensor_checkin_columns(sensor_id)
        sql_ex_string = "INSERT OR IGNORE INTO '" + sensor_id + "' (" + \
                        db_v.all_tables_datetime + "," + \
                        db_v.sensor_name + "," + \
                        db_v.ip + "," + \
                        db_v.kootnet_sensors_version + "," + \
                        db_v.sensor_check_in_installed_sensors + "," + \
                        db_v.sensor_uptime + "," + \
                        db_v.sensor_check_in_primary_log + "," + \
                        db_v.sensor_check_in_network_log + "," + \
                        db_v.sensor_check_in_sensors_log + ")" + \
                        " VALUES (?,?,?,?,?,?,?,?,?);"

        sql_data = [
            last_checkin_date, sensor_name, sensor_ip, program_version,
            installed_sensors, sensor_uptime, primary_logs, network_logs,
            sensors_logs
        ]
        write_to_sql_database(sql_ex_string,
                              sql_data,
                              sql_database_location=db_loc)
    except Exception as error:
        logger.primary_logger.error("Sensor Check-ins - Clearing Sensor '" +
                                    sensor_id + "' Data: " + str(error))
def _thread_delete_sensors_older_then(delete_sensors_older_days):
    logger.network_logger.info("Checkin Database Clean-up Started")
    try:
        datetime_sensor_ids_list = _get_sensor_id_and_last_checkin_date_as_list(
        )
        current_date_time = datetime.utcnow() + timedelta(
            hours=app_config_access.primary_config.utc0_hour_offset)
        for date_and_sensor_id in datetime_sensor_ids_list:
            clean_last_checkin_date = date_and_sensor_id[1]
            if (current_date_time -
                    clean_last_checkin_date).days >= delete_sensors_older_days:
                _delete_sensor_id(date_and_sensor_id[0])
        write_to_sql_database("VACUUM;", None, sql_database_location=db_loc)
        logger.network_logger.info("Checkin Database Clean-up Finished")
    except Exception as error:
        logger.primary_logger.warning(
            "Error trying to delete old sensors from the Check-Ins database: "
            + str(error))
Exemplo n.º 10
0
def add_note_to_database(datetime_note):
    """ Takes the provided DateTime and Note as a list then writes it to the SQL Database. """
    user_date_and_note = datetime_note.split(command_data_separator)
    current_datetime = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
    if len(user_date_and_note) > 1:
        custom_datetime = user_date_and_note[0]
        note = user_date_and_note[1]

        sql_execute = "INSERT OR IGNORE INTO OtherData (" + \
                      db_v.all_tables_datetime + "," + \
                      db_v.other_table_column_user_date_time + "," + \
                      db_v.other_table_column_notes + ")" + \
                      " VALUES (?,?,?);"

        data_entries = [current_datetime, custom_datetime, note]

        sqlite_database.write_to_sql_database(sql_execute, data_entries)
    else:
        logger.primary_logger.error("Unable to add Note to DB: Bad Note")
Exemplo n.º 11
0
def _interval_recording():
    """ Starts recording all sensor readings to the SQL database every X Seconds (set in config). """
    # Sleep to allow cached variables like sensor IP & hostname to populate
    sleep(10)
    app_cached_variables.interval_recording_thread.current_state = "Disabled"
    if not app_config_access.interval_recording_config.enable_interval_recording:
        logger.primary_logger.debug(
            "Interval Recording Disabled in the Configuration")
    while not app_config_access.interval_recording_config.enable_interval_recording:
        sleep(5)
    app_cached_variables.interval_recording_thread.current_state = "Running"
    logger.primary_logger.info(" -- Interval Recording Started")
    app_cached_variables.restart_interval_recording_thread = False
    while not app_cached_variables.restart_interval_recording_thread:
        try:
            new_sensor_data = _get_interval_sensor_readings()
            sql_column_names = ""
            sql_value_placeholders = ""
            sql_data = []
            for index, data in new_sensor_data.items():
                sql_column_names += index + ","
                sql_value_placeholders += "?,"
                sql_data.append(str(data))
            sql_column_names = sql_column_names[:-1]
            sql_value_placeholders = sql_value_placeholders[:-1]

            sql_string = "INSERT OR IGNORE INTO " + db_v.table_interval + " (" + sql_column_names + ") " + \
                         "VALUES (" + sql_value_placeholders + ")"

            sqlite_database.write_to_sql_database(sql_string, sql_data)
        except Exception as error:
            logger.primary_logger.error("Interval Recording Failure: " +
                                        str(error))

        sleep_duration_interval = app_config_access.interval_recording_config.sleep_duration_interval
        sleep_fraction_interval = 1
        if sleep_fraction_interval > sleep_duration_interval:
            sleep_fraction_interval = sleep_duration_interval
        sleep_total = 0
        while sleep_total < sleep_duration_interval and not app_cached_variables.restart_interval_recording_thread:
            sleep(sleep_fraction_interval)
            sleep_total += sleep_fraction_interval
Exemplo n.º 12
0
def remote_sensor_check_ins():
    if app_config_access.checkin_config.enable_checkin_recording:
        if request.form.get("checkin_id"):
            checkin_id = get_clean_sql_table_name(str(request.form.get("checkin_id")))
            logger.network_logger.debug("* Sensor ID:" + checkin_id + " checked in from " + str(request.remote_addr))
            check_sensor_checkin_columns(checkin_id)
            try:
                sql_ex_string = "INSERT OR IGNORE INTO '" + checkin_id + "' (" + \
                                db_v.all_tables_datetime + "," + \
                                db_v.sensor_name + "," + \
                                db_v.ip + "," + \
                                db_v.kootnet_sensors_version + "," + \
                                db_v.sensor_check_in_installed_sensors + "," + \
                                db_v.sensor_uptime + "," + \
                                db_v.sensor_check_in_primary_log + "," + \
                                db_v.sensor_check_in_network_log + "," + \
                                db_v.sensor_check_in_sensors_log + ")" + \
                                " VALUES (?,?,?,?,?,?,?,?,?);"

                sensor_name = _get_cleaned_data(request.form.get("sensor_name"))
                ip_address = _get_cleaned_data(request.form.get("ip_address"))
                program_version = _get_cleaned_data(request.form.get("program_version"))
                installed_sensors = _get_cleaned_data(request.form.get("installed_sensors"))
                sensor_uptime = _get_cleaned_data(request.form.get("sensor_uptime"))
                primary_log = _get_cleaned_data(request.form.get("primary_log"))
                network_log = _get_cleaned_data(request.form.get("network_log"))
                sensor_log = _get_cleaned_data(request.form.get("sensor_log"))

                sql_data = [datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S"), sensor_name, ip_address, program_version,
                            installed_sensors, sensor_uptime, primary_log, network_log, sensor_log]
                write_to_sql_database(sql_ex_string, sql_data, sql_database_location=sc_database_location)
                return "OK", 202
            except Exception as error:
                logger.network_logger.warning("Sensor Checkin error for " + checkin_id + ": " + str(error))
        return "Failed", 400
    return "Checkin Recording Disabled", 503
def _delete_sensor_id(sensor_id):
    """ Deletes provided Text Sensor ID from the Check-In database """
    write_to_sql_database("DROP TABLE '" + sensor_id + "';",
                          None,
                          sql_database_location=db_loc)