function CheckRelevanceOfMemoryTables($UseFix) { $Result = array('Base' => true, 'Geo' => true, 'BaseLastFixTime' => NULL, 'GeoLastFixTime' => NULL, 'BaseNeedFix' => false, 'GeoNeedFix' => false); $Stat = GetStatsValue(STATS_LAST_MEMORY_BASE_TABLE_SYNS); if ($Stat === FALSE || $Stat == -1) { if ($Stat == -1) { QuerySql('INSERT INTO STATS_TABLE SET StatId=' . STATS_LAST_MEMORY_BASE_TABLE_SYNS); $Stat = GetStatsValue(STATS_LAST_MEMORY_BASE_TABLE_SYNS); if ($Stat === FALSE || $Stat == -1) { $Result['Base'] = false; } } else { $Result['Base'] = false; } } $Result['BaseLastFixTime'] = $Stat !== FALSE && $Stat != -1 ? true : false; if ($Stat < time()) { // Recopy bases if ($UseFix) { QuerySql('TRUNCATE BASE_MEM_TABLE'); $AffectedRows = -1; QuerySql('INSERT INTO BASE_MEM_TABLE SELECT * FROM BASE_TABLE_CONST ORDER BY time DESC', $AffectedRows); SetStatsValue(STATS_BASE_ROWN_NUMS, $AffectedRows, true); SetStatsValue(STATS_LAST_MEMORY_BASE_TABLE_SYNS, time() + MEMORY_TABLES_RELEVANCE_EXPIRES, true); $Result['BaseLastFixTime'] = time(); } else { $Result['Base'] = false; $Result['BaseNeedFix'] = true; } } $Stat = GetStatsValue(STATS_LAST_MEMORY_GEO_TABLE_SYNS); if ($Stat === FALSE || $Stat == -1) { if ($Stat == -1) { QuerySql('INSERT INTO STATS_TABLE SET StatId=' . STATS_LAST_MEMORY_GEO_TABLE_SYNS); $Stat = GetStatsValue(STATS_LAST_MEMORY_GEO_TABLE_SYNS); if ($Stat === FALSE || $Stat == -1) { $Result['Geo'] = false; } } else { $Result['Geo'] = false; } } $Result['GeoLastFixTime'] = $Stat !== FALSE && $Stat != -1 ? true : false; if ($Stat < time()) { if ($UseFix) { QuerySql('TRUNCATE GEO_MEM_TABLE'); $AffectedRows = -1; QuerySql('INSERT INTO GEO_MEM_TABLE SELECT * FROM GEO_TABLE_CONST', $AffectedRows); SetStatsValue(STATS_GEO_ROWN_NUMS, $AffectedRows, true); SetStatsValue(STATS_LAST_MEMORY_GEO_TABLE_SYNS, time() + MEMORY_TABLES_RELEVANCE_EXPIRES, true); $Result['GeoLastFixTime'] = time(); } else { $Result['Geo'] = false; $Result['GeoNeedFix'] = true; } } return $Result; }
break; // Обновление ранее не найденных точек // Обновление ранее не найденных точек case 'recheck': require_once 'geoext.php'; // TODO break; // Обслуживание таблиц в памяти // Обслуживание таблиц в памяти case 'memory': while (true) { if (!TRY_USE_MEMORY_TABLES) { logt('Memory tables are not used'); continue; } $DataBaseStatus = GetStatsValue(STATS_DATABASE_STATUS); if ($DataBaseStatus == -1) { SetStatsValue(STATS_DATABASE_STATUS, DATABASE_PREPARE, true); } MemoryDataBaseInit(); if ($DataBaseStatus != DATABASE_ACTIVE) { SetStatsValue(STATS_DATABASE_STATUS, DATABASE_ACTIVE, true); } sleep(10); } break; default: logt("Error: Unsupported action `{$argv['1']}'"); break; } $db->close();