ADD: do a cursory validatation of the elasticsearch url
[phorkie.git] / src / phorkie / SetupCheck.php
index 959ff428c10e9b3078833cb610c949e497120aaf..f1fbc0f519e69d63d773e88db52b4713c8867a6d 100644 (file)
@@ -4,13 +4,17 @@ namespace phorkie;
 class SetupCheck
 {
     protected $deps = array(
-        'pear.php.net/VersionControl_Git' => 'VersionControl_Git',
-        'pear.twig-project.org/Twig'      => 'Twig_Autoloader',
-        'pear.php.net/Date_HumanDiff'     => 'Date_HumanDiff',
+        'pear.php.net/VersionControl_Git'  => 'VersionControl_Git',
+        'pear.twig-project.org/Twig'       => 'Twig_Autoloader',
+        'pear.php.net/Date_HumanDiff'      => 'Date_HumanDiff',
+        'pear.php.net/HTTP_Request2'       => 'HTTP_Request2',
+        'pear.php.net/Pager'               => 'Pager',
+        'pear.php.net/Services_Libravatar' => 'Services_Libravatar',
+        'zustellzentrum.cweiske.de/MIME_Type_PlainDetect' => 'MIME_Type_PlainDetect',
     );
 
     protected $writableDirs;
-
+    protected $elasticsearch;
 
     public function __construct()
     {
@@ -19,6 +23,7 @@ class SetupCheck
             'gitdir' => $cfg['gitdir'],
             'workdir' => $cfg['workdir'],
         );
+        $this->elasticsearch = $cfg['elasticsearch'];
     }
 
     public static function run()
@@ -26,6 +31,10 @@ class SetupCheck
         $sc = new self();
         $sc->checkDeps();
         $sc->checkDirs();
+        $sc->checkGit();
+        if ($this->elasticsearch != '') {
+            $sc->checkDatabase();
+        }
     }
 
     public function checkDeps()
@@ -49,6 +58,33 @@ class SetupCheck
         }
     }
 
+    public function checkGit()
+    {
+        $line = exec('git --version', $lines, $retval);
+        if ($retval !== 0) {
+            $this->fail('Running git executable failed.');
+        }
+        if (!preg_match('#^git version ([0-9.]+)$#', $line, $matches)) {
+            $this->fail('git version output format unexpected: ' . $line);
+        }
+        if (version_compare($matches[1], '1.7.5') < 0) {
+            $this->fail(
+                'git version needs to be at least 1.7.5, got: ' . $matches[1]
+            );
+        }
+    }
+
+    public function checkDatabase()
+    {
+        $es = parse_url($this->elasticsearch);
+        if (!preg_match("#/.+/#", $es['path'], $matches)) {
+            $this->fail('Improper elasticsearch url.  Elasticsearch requires a'
+                       . ' search domain to store your data. (e.g. http://localhost:9200/phorkie/)');
+        }
+        $dbs = new Database();
+        $dbs->getSetup()->setup();
+    }
+
     public function fail($msg)
     {
         throw new Exception($msg);