= '" . $begin . "')"; //} //else if (strlen($end)) { // $query .= " OR log_tijd <= '" . $end . "')"; //} // Group $query .= " GROUP BY log_zkl.startup, log_zkl.rpgmcount, log_zkl.sdcard"; // Fetch data $log_info = db_fetch_data($query, "log"); // Parse into result if (!empty($log_info)) { // Parse result $result = $log_info; // Detect tmin and tmax (skip error log) if (is_array($result)) { for ($i = 0; $i < sizeof($result); $i++) { $query = "SELECT MIN(log_zkl.t) AS tmin,MAX(log_zkl.t) AS tmax FROM log_zkl USE INDEX(log_zkl_logfile) WHERE log_zkl.zkl=" . $lance_id . ""; $query .= " AND log_zkl.sdcard='" . $result[$i]['sdcard'] . "'"; $query .= " AND log_zkl.rpgmcount='" . $result[$i]['rpgmcount'] . "'"; $query .= " AND log_zkl.startup='" . $result[$i]['startup'] . "'"; // Removed because took too long //$query .= " AND !(log_zkl.major='10' and log_zkl.minor<'48')"; $log_info = db_fetch_data($query, "log"); if (is_array($log_info)) { $result[$i]['tmin'] = $log_info[0]['tmin']; $result[$i]['tmax'] = $log_info[0]['tmax']; } } } } return $result; } /** * Fetch last entry log file * * inputs: * - lance_id Lance database id * - log_file array containing sdcard, rpgmcount, startup * * Return: Array containing last log file entry */ function db_fetch_lance_log_file_last_entry($lance_id, $log_file = "", $table="log_zkl") { // Initial return value $result = ""; // Query $query = "SELECT " . $table . ".* FROM " . $table . " WHERE " . $table . ".id=(select max(id) from " . $table . " "; if (($table == "log_zkl") && (is_array($log_file))) { // Skip error log (Removed because it took to long) //$query .= "AND !(major='10' and minor<'48') "; $query .= "use index (log_zkl_logfile) where zkl=" . $lance_id . " "; $query .= query_logfiles(array($log_file)); } else { $query .= "where zkl=" . $lance_id . " "; } $query .= ") "; // Fetch data $log_info = db_fetch_data($query, "log"); // Parse into result if (!empty($log_info)) { // Parse result $result = $log_info[0]; } return $result; } /** * Fetch short circuit status * * inputs: * - lance_id Lance database id * - last Retrieve last entry * - begin Begin of report period * - end End of report period * - log_files array containing rpgmcount, sdcard, startup * * Return: Array containing short circuit status */ function db_fetch_lance_log_shortcircuit_status($lance_id, $last = 1, $begin = "", $end = "", $log_files = "") { // Initial return value $result = ""; $query = "SELECT * FROM log_zkl"; $query .= " WHERE zkl=" . $lance_id; $query .= " AND (major=" . MAJ_SHORTCIR_ALARM; $query .= " OR major=" . MAJ_SHORTCIR_OK; $query .= " OR (major=" . MAJ_SHORTCIR_ERROR . " AND minor=" . MIN_SHORCIR_ERROR . ")"; $query .= " )"; // Certain period $query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last); // Certain log files $query .= query_logfiles($log_files); // Order $query .= " ORDER BY log_zkl.id"; // Last? if ($last) { $query .= " DESC LIMIT 1"; } else { $query .= " ASC"; } // Fetch data $log_info = db_fetch_data($query, "log"); // Parse into result if (!empty($log_info)) { // Parse result $result = $log_info; } return $result; } /** * Fetch switch3000 status * * inputs: * - lance_id Lance database id * - last Retrieve last entry * - begin Begin of report period * - end End of report period * - log_files array containing rpgmcount, sdcard, startup * * Return: Array containing relais status */ function db_fetch_lance_log_switch3000_status($lance_id, $last = 1, $begin = "", $end = "", $log_files = "") { // Initial return value $result = ""; $query = "SELECT * FROM log_zkl"; $query .= " WHERE zkl=" . $lance_id; $query .= " AND major=" . MAJ_SWITCH3000; $query .= " AND (minor=" . MIN_SWITCH3000_KEY_OFF; $query .= " OR minor=" . MIN_SWITCH3000_KEY_ON ; $query .= " OR minor=" . MIN_SWITCH3000_MTINFO_OFF; $query .= " OR minor=" . MIN_SWITCH3000_MTINFO_ON; $query .= " OR minor=" . MIN_SWITCH3000_REBOOT; $query .= " )"; // Certain period $query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last); // Certain log files $query .= query_logfiles($log_files); // Order $query .= " ORDER BY log_zkl.id"; // Last? if ($last) { $query .= " DESC LIMIT 1"; } else { $query .= " ASC"; } // Fetch data $log_info = db_fetch_data($query, "log"); // Parse into result if (!empty($log_info)) { // Parse result $result = $log_info; } return $result; } /** * Fetch keyswitch status * * inputs: * - lance_id Lance database id * - last Retrieve last entry * - begin Begin of report period * - end End of report period * - log_files array containing rpgmcount, sdcard, startup * * Return: Array containing relais status */ function db_fetch_lance_log_keyswitch_status($lance_id, $last = 1, $begin = "", $end = "", $log_files = "") { // Initial return value $result = ""; $query = "SELECT * FROM log_zkl"; $query .= " WHERE zkl=" . $lance_id; $query .= " AND major=" . MAJ_SWITCH3000; $query .= " AND (minor=" . MIN_SWITCH3000_KEY_ON_OP; $query .= " OR minor=" . MIN_SWITCH3000_KEY_OP_ON; $query .= " OR minor=" . MIN_SWITCH3000_KEY_OFF_OP; $query .= " OR minor=" . MIN_SWITCH3000_KEY_OP_OFF; $query .= " )"; // Certain period $query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last); // Certain log files $query .= query_logfiles($log_files); // Order $query .= " ORDER BY log_zkl.id"; // Last? if ($last) { $query .= " DESC LIMIT 1"; } else { $query .= " ASC"; } // Fetch data $log_info = db_fetch_data($query, "log"); // Parse into result if (!empty($log_info)) { // Parse result $result = $log_info; } return $result; } /** * Fetch relais status * * inputs: * - lance_id Lance database id * - last Retrieve last entry * - begin Begin of report period * - end End of report period * - log_files array containing rpgmcount, sdcard, startup * * Return: Array containing relais status */ function db_fetch_lance_log_relais_status($lance_id, $last = 1, $begin = "", $end = "", $log_files = "") { // Initial return value $result = ""; $query = "SELECT * FROM log_zkl"; $query .= " WHERE zkl=" . $lance_id; $query .= " AND major=" . MAJ_RELAIS; $query .= " AND (minor=" . MIN_RELAIS_ON; $query .= " OR minor=" . MIN_RELAIS_OFF; $query .= " )"; // Certain period $query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last); // Certain log files $query .= query_logfiles($log_files); // Order $query .= " ORDER BY log_zkl.id"; // Last? if ($last) { $query .= " DESC LIMIT 1"; } else { $query .= " ASC"; } // Fetch data $log_info = db_fetch_data($query, "log"); // Parse into result if (!empty($log_info)) { // Parse result $result = $log_info; } return $result; } /** * Fetch battery status * * inputs: * - lance_id Lance database id * - battery Battery number (or multiple when array) * - last Retrieve last entry * - begin Begin of report period * - end End of report period * - log_files array containing rpgmcount, sdcard, startup * - batt_status Find requested battery status * * Return: Array containing battery status */ function db_fetch_lance_log_battery_status($lance_id, $battery = "", $last = 1, $begin = "", $end = "", $log_files = "", $bat_status = "") { // Initial return value $result = ""; if (!$last) { $query = "SELECT log_zkl.*,log_batterijstatus.* FROM log_zkl,log_batterijstatus WHERE log_zkl.zkl=" . $lance_id . " "; } else { $query = "SELECT max(log_zkl.id) FROM log_zkl,log_batterijstatus WHERE log_zkl.zkl=" . $lance_id . " "; } if (is_array($battery)) { $query .= "AND ("; for ($i=0; $i 0) && (($item_before[0]['sw3000_state'] & 0x000F) != ($item['sw3000_state'] & 0x000F))) { $off++; if (is_null($tmin_off)) { $tmin_off = $item['t']; } $tmax_off = $item['t']; } else if ((!($item_before[0]['sw3000_state'] & 0x000F) > 0) && (($item_before[0]['sw3000_state'] & 0x000F) != ($item['sw3000_state'] & 0x000F))) { $on++; if (is_null($tmin_on)) { $tmin_on = $item['t']; } $tmax_on = $item['t']; } } } } if (($on > 0) || ($off > 0)) { $result = array(); if ($on > 0) { array_push($result, array('major' => MAJ_SWITCH, 'minor' => MIN_SWITCH3000_ON, 'actions' => $on, 't_min' => $tmin_on, 't_max' => $tmax_on)); } if ($off > 0) { array_push($result, array('major' => MAJ_SWITCH, 'minor' => MIN_SWITCH3000_OFF, 'actions' => $off, 't_min' => $tmin_off, 't_max' => $tmax_off)); } } break; default: $query = "SELECT major,minor,COUNT(minor) AS actions,MIN(t_log) AS t_min,MAX(t_log) AS t_max FROM log_zkl"; $query .= " WHERE major=" . MAJ_PERIPHERALS; $query .= " AND (minor=" . MIN_SWITCH3000_OFF . " OR minor=" . MIN_SWITCH3000_ON . ")"; if (!is_null($lance_id)) { $query .= " AND zkl=" . $lance_id . " "; } $query .= " GROUP BY minor"; // Excecute query $result = db_fetch_data($query, "log"); break; } return $result; } /** * Fetch log realtime * * inputs: * - lance_id Lance database id * - last Retrieve last entry * - begin Begin of report period * - end End of report period * - parse_data Parse data (interpreter_status) * - limit limit entries * Return: Array containing log realtime info */ function db_fetch_lance_logrt($lance_id, $last = 1, $begin = "", $end = "", $parse_data = FALSE, $limit = NULL) { // Initial return value $result = ""; // Optimize query (use key zkl, id, t) if ($last) { $query = "SELECT log_realtime.* FROM log_realtime WHERE log_realtime.zkl=" . $lance_id . " "; } else { $query = "SELECT log_realtime.id as id FROM log_realtime WHERE log_realtime.zkl=" . $lance_id . " "; } // Last? if ($last) { $query .= " AND log_realtime.id=(SELECT max(id) FROM log_realtime where zkl=" . $lance_id . " "; } // Certain period (never needed the old check because log_realtime is sequential) $query .= query_period($begin, $end, "log_realtime", "t", $lance_id, null, FALSE); if ($last) { $query .= ") "; } // Order by id (extra option needed because of shuffle in reports) $query .= " ORDER BY id "; // limit? if ((!is_null($limit)) && (!$last)) { $query .= " LIMIT " . $limit; } // Fetch log realtime $log_info = db_fetch_data($query, "log"); // Parse into result if (!empty($log_info)) { // Optimize query (use key zkl, id, t) if (!$last) { $temp = $log_info; $log_info = array(); // Get rest of table foreach($temp as $item) { $temp_data = db_fetch_data("SELECT * FROM log_realtime WHERE id='" . $item['id'] . "'", "log"); if (is_array($temp_data)) { array_push($log_info, $temp_data[0]); } } } if ($parse_data) { if (is_array($log_info)) { // Initial value $result = array(); foreach($log_info as $entry) { // Create string and interpreter_status; $entry['interpreter_status'] = interpret_log_rt($entry); array_push($result, $entry); } } } else { $result = $log_info; } } return $result; } /** * Check log file (corrupt or not?) * * inputs: * - lance_id Lance database id * - sdcard logfile params * - rpgmcount logfile params * - startup logfile params * * Return: True (Corrupted)/False (not corrupted) */ function db_check_lance_log_corrupted($lance_id, $sdcard, $rpgmcount, $startup) { // Initial return zalue $result = FALSE; // Fetch data $log_info = db_fetch_data("SELECT id FROM log_zkl WHERE zkl=" . $lance_id . " AND (sdcard='" . $sdcard ."' AND rpgmcount='" . $rpgmcount . "' AND startup='" . $startup . "') AND (MAJOR=10 AND MINOR=33)", "log"); // Parse into result if (!empty($log_info)) { foreach($log_info as $item) { if (!$result) { $log_peripheral = db_fetch_data("SELECT code FROM log_peripheral WHERE id='". $item['id'] . "'", "log"); if (!empty($log_peripheral)) { $result = ($log_peripheral[0]['code'] == 82) ? TRUE : $result; } } } } return $result; } /** * Archive old entries * * inputs: * - table which table? * - source_db, target_db source and destination databases * - remove_before age of the entries to be removed; timestamp * - entries number of entries which must be removed * - last_date receives the last date deleted * - delete_from_source delete the entries moved to the target database from the source database * (optional; default behaviour is "yes") * * Return: amount of removed entries */ function db_log_archive($table, $source_db, $target_db, $remove_before, $entries, &$last_date, $delete_from_source = TRUE) { global $_PAGE_INFO; // Initial values $remove_entries = array(); $set = array(); $last_date = 0; $now = time(); // Global logtables include("db_logtables.php"); // Setup connection with source and destination database db_connect($source_db, "source"); db_connect($target_db, "target"); if( $delete_from_source ) switch($table) { case "log_tcp": // Get records from select table (bottom up) $log_entries = db_fetch_data("SELECT * FROM " . $table . " ORDER BY t ASC LIMIT " . $entries, "source"); break; default: // Get records from select table (bottom up) $log_entries = db_fetch_data("SELECT * FROM " . $table . " ORDER BY id ASC LIMIT " . $entries, "source"); break; } else { // source is preserved; get the last entry switch($table) { case "log_tcp": // Get records from select table (bottom up) $last_id = db_fetch_data("SELECT id FROM state_archiver WHERE `table`='" . $table . "'", "source"); if( !$last_id ) $last_id = 0; else $last_id = $last_id[0]['id']; $log_entries = db_fetch_data("SELECT * FROM " . $table . " WHERE t > " . $last_id . " ORDER BY t ASC LIMIT " . $entries, "source"); break; default: // Get records from select table (bottom up) $last_id = db_fetch_data("SELECT id FROM state_archiver WHERE `table`='" . $table . "'", "source"); if( !$last_id ) $last_id = 0; else $last_id = $last_id[0]['id']; $log_entries = db_fetch_data("SELECT * FROM " . $table . " WHERE id > " . $last_id . " ORDER BY id ASC LIMIT " . $entries, "source"); break; } } // Get table description $source_entries = db_fetch_fields($table, "", "source"); $target_entries = db_fetch_fields($table, "", "target"); $set[$table] = array_intersect($source_entries, $target_entries); // Determine time field $time_field = 'tijd'; foreach($set[$table] as $field) { if( $field == 't_log' ) $time_field = 't_log'; else if( $field == 't' ) $time_field = 't'; } // Archive entries if ((is_array($log_entries)) && (is_array($set[$table]))) { $last_entry = null; foreach($log_entries as $log_entry) { // Time conversion needed? if (isset($log_entry[$time_field ])) { switch($time_field) { case 'tijd': // Convert 'tijd' to seconds since 1970 $log_entry_time = convert_datetime($log_entry[$time_field ]); break; default: // Do nothing, already ok! $log_entry_time = $log_entry[$time_field ]; break; } } // Check date (older then 'ARCHIVE_OLDER_DAYS' days, or in the future) if ((isset($log_entry[$time_field ]) && (($log_entry_time < $remove_before) || ($log_entry_time > $now))) || ((isset($log_entry['t_log']) && (($log_entry['t_log'] < $remove_before) || ($log_entry['t_log'] > $now))))) { // Save last entry for statistics $last_entry = $log_entry; if( !$delete_from_source ) { // source is preserved; get the last entry switch($table) { case "log_tcp": if( $log_entry['t'] > $last_id ) $last_id = $log_entry['t']; break; default: // Get records from select table (bottom up) if( $log_entry['id'] > $last_id ) $last_id = $log_entry['id']; break; } } // Store entry in the archive $query = "INSERT INTO " . $table . " ("; $sep = ""; foreach($set[$table] as $field) { $query .= $sep; $query .= "`" . $field . "`"; $sep = ","; } $query .= ") VALUES("; $sep = ""; foreach($set[$table] as $field) { $query .= $sep; if (is_null($log_entry[$field])) { $query .= "NULL"; } else { $query .= "'" . addslashes($log_entry[$field]) . "'"; } $sep = ","; } $query .= ")"; db_store_data($query, "target"); // Save this entry for removal from the source array_push($remove_entries, array(table => $table, value => $log_entry)); } } if( $last_entry ) { // Determine timestamp of the last entry if( $time_field == 't' ) { $last_date = $last_entry[$time_field]; } else { $last_date = convert_datetime($last_entry[$time_field]); } } } if( !$delete_from_source ) { // source is preserved; Store the last entry db_store_data("REPLACE INTO state_archiver (`table`,`id`) VALUES ('" . $table . "'," . $last_id . ")", "source"); } // Remove subsidiary tables? if (!empty($remove_entries)) { // Initial values $log_entries = array(); // Determine end of array => So now we can push new entries in the original array $end_entry = sizeof($remove_entries); // Collect sub table info for($i=0; $i<$end_entry; $i++) { switch($table) { case "log_zkl": // has the major/minor combination any consistent sub table if (isset($_LOGTABLES[$table][$remove_entries[$i]['value']['major']][$remove_entries[$i]['value']['minor']]['table'])) { // Get sub table $subtable = $_LOGTABLES[$table][$remove_entries[$i]['value']['major']][$remove_entries[$i]['value']['minor']]['table']; // Get sub table entry $log_entry = db_fetch_data("SELECT * FROM " . $subtable . " WHERE id=" . $remove_entries[$i]['value']['id'], "source"); // Data valid? if (is_array($log_entry)) { // Store entry array_push($log_entries, array('table' => $subtable, 'value' => $log_entry[0])); } } break; case "log_gebruiker": case "log_secure": foreach($_LOGTABLES[$table] as $item) { // Extra check if (substr($item['table'], 0, 4) === "log_") { // Get sub table entry $log_entry = db_fetch_data("SELECT * FROM " . $item['table'] . " WHERE id=" . $remove_entries[$i]['value']['id'], "source"); // Data valid? if (is_array($log_entry)) { // Store entry array_push($log_entries, array(table => $item['table'], value => $log_entry[0])); } } } break; default: break; } } // Archive entries foreach($log_entries as $log_entry) { // Get subtable description if ((is_array($set)) && (!isset($set[$log_entry['table']]))) { $source_entries = db_fetch_fields($log_entry['table'], "", "source"); $target_entries = db_fetch_fields($log_entry['table'], "", "target"); $set[$log_entry['table']] = array_intersect($source_entries, $target_entries); // DEBUG START $source_fields = implode(",", $source_entries); $target_fields = implode(",", $target_entries); if( $source_fields != $target_fields ) DBG("log_archive: fields changed from \"" . $source_fields . "\" to \"" . implode(",", $set[$log_entry['table']]) . "\""); // DEBUG END } // Archive entry $query = "INSERT INTO " . $log_entry['table'] . " ("; $sep = ""; foreach( $set[$log_entry['table']] as $field ) { $query .= $sep . "`" . $field . "`"; $sep = ","; } $sep = ") VALUES("; foreach( $set[$log_entry['table']] as $field ) { if (is_null($log_entry['value'][$field])) { $query .= $sep . "NULL"; } else { $query .= $sep . "'" . addslashes($log_entry['value'][$field]) . "'"; } $sep = ","; } $query .= ")"; db_store_data($query, "target"); // Remove entry array_push($remove_entries, array(table => $log_entry['table'], value => $log_entry['value'])); } } // Remove archived entries; clean-up of the subsidiary tables is left for the garbage collector if (!empty($remove_entries) && $delete_from_source) { foreach($remove_entries as $remove_entry) { switch($remove_entry['table']) { case "log_tcp": db_store_data("DELETE FROM " . $remove_entry['table'] . " WHERE zkl=" . $remove_entry['value']['zkl'] . " AND t=" . $remove_entry['value']['t'], "source"); break; default: db_store_data("DELETE FROM " . $remove_entry['table'] . " WHERE id=" . $remove_entry['value']['id'], "source"); break; } } } // Clean-up db_connect(null, "source"); db_connect(null, "target"); // Return number of records moved return (empty($remove_entries) ? 0 : count($remove_entries)); } /** * Delete old entries * * inputs: * - table which table? * - db database * - remove_before age of the entries to be removed; timestamp * - entries number of entries which must be removed * - last_date receives the last date deleted * * Return: amount of removed entries */ function db_delete_archive($table, $db, $remove_before, $entries, &$last_date) { global $_PAGE_INFO; // Initial values $remove_entries = array(); $last_date = 0; $now = time(); // Global logtables include("db_logtables.php"); // Setup connection database db_connect($db, "source"); switch($table) { case "log_tcp": // Get records from select table (bottom up) $last_id = db_fetch_data("SELECT id FROM state_archiver WHERE `table`='" . $table . "'", "source"); if( !$last_id ) $last_id = 0; else $last_id = $last_id[0]['id']; $log_entries = db_fetch_data("SELECT * FROM " . $table . " WHERE t < " . $last_id . " ORDER BY t ASC LIMIT " . $entries, "source"); break; default: // Get records from select table (bottom up) $last_id = db_fetch_data("SELECT id FROM state_archiver WHERE `table`='" . $table . "'", "source"); if( !$last_id ) $last_id = 0; else $last_id = $last_id[0]['id']; $log_entries = db_fetch_data("SELECT * FROM " . $table . " WHERE id < " . $last_id . " ORDER BY id ASC LIMIT " . $entries, "source"); break; } // Get table description $set[$table] = db_fetch_fields($table, "", "source"); // Determine time field $time_field = 'tijd'; foreach($set[$table] as $field) { if( $field == 't_log' ) $time_field = 't_log'; else if( $field == 't' ) $time_field = 't'; } // Archive entries if (is_array($log_entries)) { $last_entry = null; foreach($log_entries as $log_entry) { // Time conversion needed? if (isset($log_entry[$time_field ])) { switch($time_field) { case 'tijd': // Convert 'tijd' to seconds since 1970 $log_entry_time = convert_datetime($log_entry[$time_field ]); break; default: // Do nothing, already ok! $log_entry_time = $log_entry[$time_field ]; break; } } // Check date if ($log_entry_time < $remove_before) { // Save last entry for statistics $last_entry = $log_entry; // Save this entry for removal from the source array_push($remove_entries, array(table => $table, value => $log_entry)); } } if( $last_entry ) { // Determine timestamp of the last entry if( $time_field == 't' ) { $last_date = $last_entry[$time_field]; } else { $last_date = convert_datetime($last_entry[$time_field]); } } } // Remove subsidiary tables? if (!empty($remove_entries)) { // Initial values $log_entries = array(); // Determine end of array => So now we can push new entries in the original array $end_entry = sizeof($remove_entries); // Collect sub table info for($i=0; $i<$end_entry; $i++) { switch($table) { case "log_zkl": // has the major/minor combination any consistent sub table if (isset($_LOGTABLES[$table][$remove_entries[$i]['value']['major']][$remove_entries[$i]['value']['minor']]['table'])) { // Get sub table $subtable = $_LOGTABLES[$table][$remove_entries[$i]['value']['major']][$remove_entries[$i]['value']['minor']]['table']; // Get sub table entry $log_entry = db_fetch_data("SELECT * FROM " . $subtable . " WHERE id=" . $remove_entries[$i]['value']['id'], "source"); // Data valid? if (is_array($log_entry)) { // Store entry array_push($log_entries, array('table' => $subtable, 'value' => $log_entry[0])); } } break; case "log_gebruiker": case "log_secure": foreach($_LOGTABLES[$table] as $item) { // Extra check if (substr($item['table'], 0, 4) === "log_") { // Get sub table entry $log_entry = db_fetch_data("SELECT * FROM " . $item['table'] . " WHERE id=" . $remove_entries[$i]['value']['id'], "source"); // Data valid? if (is_array($log_entry)) { // Store entry array_push($log_entries, array(table => $item['table'], value => $log_entry[0])); } } } break; default: break; } } // Add entries to the remove entries foreach($log_entries as $log_entry) { // Remove entry array_push($remove_entries, array(table => $log_entry['table'], value => $log_entry['value'])); } } // Remove entries if (!empty($remove_entries)) { foreach($remove_entries as $remove_entry) { switch($remove_entry['table']) { case "log_tcp": db_store_data("DELETE FROM " . $remove_entry['table'] . " WHERE zkl=" . $remove_entry['value']['zkl'] . " AND t=" . $remove_entry['value']['t'], "source"); break; default: db_store_data("DELETE FROM " . $remove_entry['table'] . " WHERE id=" . $remove_entry['value']['id'], "source"); break; } } } // Clean-up db_connect(null, "source"); // Return number of records moved return (empty($remove_entries) ? 0 : count($remove_entries)); } /** * Get specific log period (query clean up function) * * inputs: * - begin begin of period * - end end of period * - table time of which table? * - time_used Which time is used? t/t_log * - lance_id Optional * - old Check for old files (min/max id => older log files which are logged between) * * Return: period query */ function query_period($begin, $end, $table = "log_zkl", $time_used = "t", $lance_id = null, $offset = null, $old = TRUE) { $result = ""; // Certain period (tijd) if ((strlen($begin)) && (strlen($end))) { if (is_null($lance_id)) { $result = " AND (" . $table . "." . $time_used . " BETWEEN '" . convert_datetime($begin) . "' AND '" . convert_datetime($end) . "' "; if (!is_null($offset)) { $result .= " and " . $table . ".id >= '" . $offset . "' "; } $result .= ") "; } else { // // Determine min/max id // $query = "select min(id) as min_id, max(id) as max_id from " . $table; // Add index to speed up switch($table) { case "log_realtime": $query .= " USE INDEX(log_realtime_id_tijd) "; break; case "log_zkl": $query .= " USE INDEX(log_zkl_tijd) "; break; default: break; } $query .= " where zkl=" . $lance_id . " and " . $time_used . " between '" . convert_datetime($begin) . "' and '" . convert_datetime($end) . "' "; if (!is_null($offset)) { $query .= " and " . $table . ".id >= '" . $offset . "'"; } $min_max = db_fetch_data($query, "log"); $result = " AND " . $table . ".id between '" . $min_max[0]['min_id'] . "' and '" . $min_max[0]['max_id'] . "' "; if ($old) { // Check for "old" log files $result .= " AND " . $time_used . " BETWEEN '" . convert_datetime($begin) . "' AND '" . convert_datetime($end) . "' "; } } } else if (strlen($begin)) { if (is_null($lance_id)) { $result = " AND (" . $table . "." . $time_used . " BETWEEN '" . convert_datetime($begin) . "' AND '" . convert_datetime(date('Y-m-d H:i:s')) . "' "; if (!is_null($offset)) { $result .= " and " . $table . ".id >= '" . $offset . "' "; } $result .= ") "; } else { // // Determine min/max id // $query = "select min(id) as min_id, max(id) as max_id from " . $table; // Add index to speed up switch($table) { case "log_realtime": $query .= " USE INDEX(log_realtime_id_tijd) "; break; case "log_zkl": $query .= " USE INDEX(log_zkl_tijd) "; break; default: break; } $query .= " where zkl=" . $lance_id . " and " . $time_used . " between '" . convert_datetime($begin) . "' and '" . convert_datetime(date('Y-m-d H:i:s')) . "' "; if (!is_null($offset)) { $query .= " and " . $table . ".id >= '" . $offset . "'"; } $min_max = db_fetch_data($query, "log"); $result = " AND " . $table . ".id between '" . $min_max[0]['min_id'] . "' and '" . $min_max[0]['max_id'] . "' "; if ($old) { // Check for "old" log files $result .= " AND " . $time_used . " BETWEEN '" . convert_datetime($begin) . "' AND '" . convert_datetime(date('Y-m-d H:i:s')) . "' "; } } } else if (strlen($end)) { if (is_null($lance_id)) { $result = " AND " . $table . "." . $time_used . " <= '" . convert_datetime($end) . "'"; if (!is_null($offset)) { $result .= " and " . $table . ".id >= '" . $offset . "' "; } } else { // // Determine max id // $query = "select max(id) as id from " . $table; // Add index to speed up switch($table) { case "log_realtime": $query .= " USE INDEX(log_realtime_id_tijd) "; break; case "log_zkl": $query .= " USE INDEX(log_zkl_tijd) "; break; default: break; } $query .= " where zkl=" . $lance_id . " and " . $time_used . " <= '" . convert_datetime($end) . "' "; if (!is_null($offset)) { $query .= " and " . $table . ".id >= '" . $offset . "'"; } $max = db_fetch_data($query, "log"); $result = " AND " . $table . ".id <= '" . $max[0]['id'] . "' "; if ($old) { // Check for "old" log files $result .= " AND " . $time_used . " <= '" . convert_datetime($end) . "' "; } } } return $result; } /** * Get specific logfiles (query clean up function) * * inputs: * - log_files array (or string) containing * * Return: logfiles query */ function query_logfiles($log_files) { $result = ""; // Certain log files if ((is_array($log_files)) && (!empty($log_files))) { $result .= " AND ("; for($i =0 ; $i < sizeof($log_files); $i++) { if ($i) { $result .= " OR"; } $result .= " (log_zkl.sdcard='" . $log_files[$i]['sdcard'] . "' AND log_zkl.startup='" . $log_files[$i]['startup'] . "' AND log_zkl.rpgmcount='" . $log_files[$i]['rpgmcount'] . "')"; } $result .= ")"; } return $result; } /** * Build status string from a log_realtime entry * * inputs: * - log_rt array containing log_realtime entry * * Return: status string */ function build_log_rt($entry) { if (is_array($entry)) { // Create string and interpreter_status; return sprintf("%04X/%04X/%04X,%04X,%04X,%08X,%.3f,%u,%u,%.3f,%d,%.3f,%.3f,%.1f,%.1f,%d,%d,%.7f,%.7f,%.1f,%.1f,%.1f,%.1f,%lu@%u.%lu", $entry['mcu_state'], $entry['rc_state'], $entry['sw3000_state'], $entry['mcu_local_state'], $entry['mcu_persistent'], $entry['wcpu_state'], $entry['b_a_autocal'], $entry['freq'], $entry['rms'], $entry['b_a'], $entry['batt_sel'], $entry['batt1_niveau'], $entry['batt2_niveau'], $entry['temp_onboard'], $entry['temp_ntc'], $entry['gsm_rssi'], $entry['gsm_berr'], $entry['latitude'], $entry['longitude'], $entry['altitude'], $entry['hdop'], $entry['speed'], $entry['heading'], $entry['t_gps'], $entry['seqnr'], $entry['t'] ); } else return FALSE; } /** * Interprete log_realtime entry * * inputs: * - log_rt array containing log_realtime entry * * Return: interpreted array */ function interpret_log_rt($entry) { $result = ""; if (is_array($entry)) { // Create string and interpreter_status; $result = zkl_interpret_status(build_log_rt($entry)); } return $result; } /** * Store entry in "log_realtime" * * Inputs: * - dbid device identifier in the database * - log_rt array with data for "log_realtime"; the key is the field name * Returns: (nothing) */ function db_store_log_rt($dbid, $log_rt) { // fields and values $fields = array(); $values = array(); foreach( $log_rt as $field => $value ) { $fields[] = $field; $values[] = "'" . $value . "'"; } $query = "INSERT INTO log_realtime (zkl," . implode(",", $fields) . ") VALUES (" . $dbid . "," . implode(",", $values) . ")"; return db_store_data($query, "log"); } /** * Store entry in "log_zkl" * * Inputs: * - dbid device identifier in the database * - logfile array with rpgmcount and startup * - t time * - major,minor log identifiers * - data array with data for subtable; the key is the field name * Returns: (nothing) */ function db_store_log_zkl($dbid, $logfile, $t, $major, $minor, $data) { switch( $major ) { case MAJ_TEMP: case MIN_TEMP_ONBOARD: $table = "log_temp"; $fields = array("sensor","temp"); $values = array("'on-board'", is_array($data) ? $data[0] : $data); break; case MIN_TEMP_EXT1: $table = "log_temp"; $fields = array("sensor","temp"); $values = array("'ntc'", is_array($data) ? $data[0] : $data); break; default: return FALSE; } $query = "INSERT INTO log_zkl (zkl,sdcard,rpgmcount,startup,t,t_log,major,minor) "; $query .= "VALUES ("; $query .= $dbid . ","; $query .= "0," . implode(",", $logfile) . ","; $query .= $t . ","; $query .= "NOW(),"; $query .= $major . "," . $minor . ")"; if( db_store_data($query, "log") && ($log_id = db_fetch_last_id("log")) ) { $query = "INSERT INTO " . $table . " (id," . implode(",", $fields) . ") VALUES (" . $log_id . "," . implode(",", $values) . ")"; db_store_data($query, "log"); // admin $query = "REPLACE INTO zkl_logfile (zkl,sdcard,rpgmcount,startup,timebase,status,file_status) VALUES ("; $query .= $dbid . ","; $query .= "0," . implode(",", $logfile) . ","; $query .= $t . ","; $query .= "'current','present')"; return db_store_data($query, "log"); } else return FALSE; } ?>