cfgReadChar('database.host'); $db_port = $savvyext->cfgReadLong('database.port'); $db_name = $savvyext->cfgReadChar('database.name'); $db_user = $savvyext->cfgReadChar('database.user'); $db_pass = $savvyext->cfgReadChar('database.pass'); $conn_string = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}"; $pgconn = pg_connect($conn_string); $db_host = $savvyext->cfgReadChar('database_replica.host'); $db_name = $savvyext->cfgReadChar('database_replica.name'); $db_user = $savvyext->cfgReadChar('database_replica.user'); $db_pass = $savvyext->cfgReadChar('database_replica.pass'); $db_port = $savvyext->cfgReadLong('database_replica.port'); $readOnlyReplicaConnstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}"; $readOnlyReplicaConn = pg_connect($readOnlyReplicaConnstr); /*get travel_time is measured with seconds*/ $total = $success = $failed = 0; $r = get_duration_in_seconds(); while ($f = pg_fetch_array($r, NULL, PGSQL_ASSOC)) { $total++; $id = $f['id']; $condition = "id=".$id; $duration = $f['new_duration']; $data = [ "duration" => $duration ]; $updated = update_data($data, $condition); if ($updated > 0) { $success++; } else { $failed++; } } echo "Total: " . $total . ".\n"; echo "Success: : " . $success . ".\n"; echo "Failed: : " . $failed . ".\n"; pg_close($pgconn); echo "[" . date("Y-m-d H:i:s") . "] parsedemail_item_fix_time_travel job complete.\n"; function get_duration_in_seconds() { global $readOnlyReplicaConn; $q = "SELECT id, DATE_PART('hour', travel_date_end - travel_date)*60+DATE_PART('minute', travel_date_end - travel_date) AS new_duration FROM parsedemail_item WHERE transport_provider_id IS NOT NULL GROUP BY id, DATE_PART('hour', travel_date_end - travel_date)*60+DATE_PART('minute', travel_date_end - travel_date) HAVING duration >DATE_PART('hour', travel_date_end - travel_date)*60+DATE_PART('minute', travel_date_end - travel_date) AND DATE_PART('hour', travel_date_end - travel_date)*60+DATE_PART('minute', travel_date_end - travel_date)>0"; return pg_query($readOnlyReplicaConn, $q); } function update_data($data, $condition="1=1") { global $pgconn; if (count($data)>0) { $data_update="updated=NOW()"; foreach ($data as $field => $val) { $data_update .= ", ${field}=" . ($val == 'NULL' ? "NULL" : "'${val}'"); } $q = "UPDATE parsedemail_item SET " . $data_update . " WHERE " . $condition . ""; $r = pg_query($pgconn, $q); if ($r) { return pg_affected_rows($r); } } return 0; }