$options['count'] = true; $count = elgg_get_entities_from_private_settings($options); $content .= '<tr>'; $content .= '<td>' . elgg_echo('elasticsearch:stats:elgg:update') . '</td>'; $content .= "<td>{$count}</td>"; $content .= '</tr>'; // content to reindex $options = elasticsearch_get_bulk_options('reindex'); $count = 0; if (!empty($options)) { $options['count'] = true; $count = elgg_get_entities_from_private_settings($options); } $content .= '<tr>'; $content .= '<td>' . elgg_echo('elasticsearch:stats:elgg:reindex'); $reindex_title = elgg_echo('elasticsearch:stats:elgg:reindex:action'); $last_ts = (int) elasticsearch_get_setting('reindex_ts'); if (!empty($last_ts)) { $reindex_title .= ' ' . elgg_echo('elasticsearch:stats:elgg:reindex:last_ts', [date('c', $last_ts)]); } $content .= elgg_view('output/url', ['confirm' => true, 'href' => 'action/elasticsearch/admin/reindex', 'text' => elgg_view_icon('refresh'), 'title' => $reindex_title, 'class' => 'mlm']); $content .= '</td>'; $content .= "<td>{$count}</td>"; $content .= '</tr>'; $count = count(elasticsearch_get_documents_for_deletion()); $content .= '<tr>'; $content .= '<td>' . elgg_echo('elasticsearch:stats:elgg:delete') . '</td>'; $content .= "<td>{$count}</td>"; $content .= '</tr>'; $content .= '</table>'; echo elgg_view_module('inline', elgg_echo('elasticsearch:stats:elgg'), $content);
/** * Deletes documents in bulk from index * * @return void|array */ public function bulkDeleteDocuments() { $documents = elasticsearch_get_documents_for_deletion(); if (empty($documents)) { return; } $params = []; foreach ($documents as $document) { $params['body'][] = ['delete' => $document]; } try { $result = $this->bulk($params); if (!empty($result)) { $items = elgg_extract('items', $result); foreach ($items as $action) { $status = elgg_extract('status', $action['delete']); $found = elgg_extract('found', $action['delete']); $guid = (int) elgg_extract('_id', $action['delete']); if ($status === 200 && $found || $status === 404 && !$found) { // document was removed elasticsearch_remove_document_for_deletion($guid); } else { // some error occured, reschedule delete elasticsearch_reschedule_document_for_deletion($guid); } } } return $result; } catch (\Exception $e) { $this->registerErrorForException($e); return false; } }
/** * Deletes documents in bulk from index * * @return void */ public function bulkDeleteDocuments() { $documents = elasticsearch_get_documents_for_deletion(); if (empty($documents)) { return; } $params = []; foreach ($documents as $document) { $params['body'][] = ['delete' => $document]; } try { $result = $this->bulk($params); if ($result) { foreach ($documents as $guid => $document) { elasticsearch_remove_document_for_deletion($guid); } } return $result; } catch (\Exception $e) { $this->registerErrorForException($e); return false; } }