aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin J. Novack <jnovack@gmail.com>2012-09-30 17:43:58 -0400
committerJustin J. Novack <jnovack@gmail.com>2012-10-01 17:21:56 -0400
commitd5901a1fcc8b79f9a23bd3888ef2f281f07b9459 (patch)
treeb306fba401eadd70e3c042f6c0c935e08cc0c16c /src
parent8d29b8e073c9a3795ad7ededf4cb5e8683102162 (diff)
downloadphorkie-d5901a1fcc8b79f9a23bd3888ef2f281f07b9459.tar.gz
phorkie-d5901a1fcc8b79f9a23bd3888ef2f281f07b9459.zip
Use commit timestamps for ElasticSearch and sort on last commit time.
Diffstat (limited to 'src')
-rw-r--r--src/phorkie/Database/Adapter/Elasticsearch/Indexer.php37
-rw-r--r--src/phorkie/Database/Adapter/Elasticsearch/Search.php5
-rw-r--r--src/phorkie/Database/Adapter/Elasticsearch/Setup.php6
-rw-r--r--src/phorkie/Database/Adapter/Null/Indexer.php4
-rw-r--r--src/phorkie/Database/IIndexer.php4
-rw-r--r--src/phorkie/Database/ISearch.php3
6 files changed, 49 insertions, 10 deletions
diff --git a/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php b/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php
index cf50bbe..e93cfa7 100644
--- a/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php
+++ b/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php
@@ -9,15 +9,18 @@ class Database_Adapter_Elasticsearch_Indexer implements Database_IIndexer
}
- public function addRepo(Repository $repo, $crdate = null)
+ public function addRepo(Repository $repo, $crdate = null, $modate = null)
{
if ($crdate == null) {
$crdate = time();
}
- $this->updateRepo($repo, $crdate);
+ if ($modate == null) {
+ $modate = time();
+ }
+ $this->updateRepo($repo, $crdate, $modate);
}
- public function updateRepo(Repository $repo, $crdate = null)
+ public function updateRepo(Repository $repo, $crdate = null, $modate = null)
{
//add repository
$r = new Database_Adapter_Elasticsearch_HTTPRequest(
@@ -35,6 +38,12 @@ class Database_Adapter_Elasticsearch_Indexer implements Database_IIndexer
if ($crdate !== null) {
$repoData['crdate'] = gmdate('c', $crdate);
}
+ if ($modate == null) {
+ $modate = $this->getMoDate($repo);
+ }
+ if ($modate !== null) {
+ $repoData['modate'] = gmdate('c', $modate);
+ }
$r->setBody(json_encode((object)$repoData));
$r->send();
@@ -83,6 +92,28 @@ class Database_Adapter_Elasticsearch_Indexer implements Database_IIndexer
return strtotime($json->_source->crdate);
}
+ /**
+ * When updating the repository, we don't have a modification date.
+ * We need to keep it, but elasticsearch does not have a simple way
+ * to update some fields only (without using a custom script).
+ *
+ * @return integer Unix timestamp
+ */
+ protected function getMoDate(Repository $repo)
+ {
+ $r = new Database_Adapter_Elasticsearch_HTTPRequest(
+ $this->searchInstance . 'repo/' . $repo->id,
+ \HTTP_Request2::METHOD_GET
+ );
+ $json = json_decode($r->send()->getBody());
+
+ if (!isset($json->_source->modate)) {
+ return null;
+ }
+
+ return strtotime($json->_source->modate);
+ }
+
public function deleteAllRepos()
{
$r = new Database_Adapter_Elasticsearch_HTTPRequest(
diff --git a/src/phorkie/Database/Adapter/Elasticsearch/Search.php b/src/phorkie/Database/Adapter/Elasticsearch/Search.php
index e960e04..ddbc13b 100644
--- a/src/phorkie/Database/Adapter/Elasticsearch/Search.php
+++ b/src/phorkie/Database/Adapter/Elasticsearch/Search.php
@@ -6,6 +6,7 @@ class Database_Adapter_Elasticsearch_Search implements Database_ISearch
protected static $sortMap = array(
'id' => array('id', 'asc'),
'crdate' => array('crdate', 'desc'),
+ 'modate' => array('modate', 'desc'),
'tstamp' => array('tstamp', 'desc'),
);
@@ -22,7 +23,8 @@ class Database_Adapter_Elasticsearch_Search implements Database_ISearch
* @param string $sort Sort order. Allowed values:
* - id - repository id
* - crdate - creation date
- * - tstamp - modification date
+ * - modate - modification date
+ * - tstamp - last index date
*
* @return Search_Result Search result object
*/
@@ -64,6 +66,7 @@ class Database_Adapter_Elasticsearch_Search implements Database_ISearch
$r = new Repository();
$r->loadById($hit->_source->id);
$r->crdate = strtotime($hit->_source->crdate);
+ $r->modate = strtotime($hit->_source->modate);
$sres->repos[] = $r;
}
diff --git a/src/phorkie/Database/Adapter/Elasticsearch/Setup.php b/src/phorkie/Database/Adapter/Elasticsearch/Setup.php
index 0df2874..bb76d54 100644
--- a/src/phorkie/Database/Adapter/Elasticsearch/Setup.php
+++ b/src/phorkie/Database/Adapter/Elasticsearch/Setup.php
@@ -59,9 +59,13 @@ class Database_Adapter_Elasticsearch_Setup implements Database_ISetup
//creation date
'type' => 'date',
),
- 'tstamp' => (object)array(
+ 'modate' => (object)array(
//modification date
'type' => 'date',
+ ),
+ 'tstamp' => (object)array(
+ //last indexed date
+ 'type' => 'date',
)
)
)
diff --git a/src/phorkie/Database/Adapter/Null/Indexer.php b/src/phorkie/Database/Adapter/Null/Indexer.php
index 3b0c990..4ad63f1 100644
--- a/src/phorkie/Database/Adapter/Null/Indexer.php
+++ b/src/phorkie/Database/Adapter/Null/Indexer.php
@@ -3,11 +3,11 @@ namespace phorkie;
class Database_Adapter_Null_Indexer
{
- public function addRepo(Repository $repo, $crdate = null)
+ public function addRepo(Repository $repo, $crdate = null, $modate = null)
{
}
- public function updateRepo(Repository $repo, $crdate = null)
+ public function updateRepo(Repository $repo, $crdate = null, $modate = null)
{
}
diff --git a/src/phorkie/Database/IIndexer.php b/src/phorkie/Database/IIndexer.php
index 61b8a87..232e1ee 100644
--- a/src/phorkie/Database/IIndexer.php
+++ b/src/phorkie/Database/IIndexer.php
@@ -3,8 +3,8 @@ namespace phorkie;
interface Database_IIndexer
{
- public function addRepo(Repository $repo, $crdate = null);
- public function updateRepo(Repository $repo, $crdate = null);
+ public function addRepo(Repository $repo, $crdate = null, $modate = null);
+ public function updateRepo(Repository $repo, $crdate = null, $modate = null);
public function deleteAllRepos();
public function deleteRepo(Repository $repo);
}
diff --git a/src/phorkie/Database/ISearch.php b/src/phorkie/Database/ISearch.php
index c33867b..f67dec6 100644
--- a/src/phorkie/Database/ISearch.php
+++ b/src/phorkie/Database/ISearch.php
@@ -13,7 +13,8 @@ interface Database_ISearch
* @param string $sort Sort order. Allowed values:
* - id - repository id
* - crdate - creation date
- * - tstamp - modification date
+ * - modate - modification date
+ * - tstamp - last index date
*
* @return Search_Result Search result object
*/