Ori.livneh has submitted this change and it was merged.

Change subject: Module and role for Recommendation API
......................................................................


Module and role for Recommendation API

The Wikimedia Recommendation API is a JSON API that provides personalized
recommendations of wiki content (to discover, edit, translate, etc.).
It is a Flask webapp running under uWSGI.

See <https://meta.wikimedia.org/wiki/Recommendation_API> for more info.

Bug: T116102
Change-Id: If5db926def3c5d1933ea0d284d540a9e99e18613
---
A manifests/role/recommendation_api.pp
A modules/recommendation_api/manifests/init.pp
A modules/role/templates/apache/sites/recommendation_api.erb
3 files changed, 98 insertions(+), 0 deletions(-)

Approvals:
  Ori.livneh: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/manifests/role/recommendation_api.pp 
b/manifests/role/recommendation_api.pp
new file mode 100644
index 0000000..70d7a9c
--- /dev/null
+++ b/manifests/role/recommendation_api.pp
@@ -0,0 +1,18 @@
+# == Class: role::recommendation_api
+#
+# Provisions a JSON API for personalized recommendations.
+#
+class role::recommendation_api {
+    include ::recommendation_api
+
+    include ::apache::mod::uwsgi
+
+    apache::site { 'recommendation_api':
+        content => template('role/apache/sites/recommendation_api.erb'),
+    }
+
+    ferm::service { 'recommendation_api_http':
+        proto => 'tcp',
+        port  => '80',
+    }
+}
diff --git a/modules/recommendation_api/manifests/init.pp 
b/modules/recommendation_api/manifests/init.pp
new file mode 100644
index 0000000..7c0439b
--- /dev/null
+++ b/modules/recommendation_api/manifests/init.pp
@@ -0,0 +1,75 @@
+# == Class: recommendation_api
+#
+# The Wikimedia Recommendation API is a JSON API that provides personalized
+# recommendations of wiki content (to discover, edit, translate, etc.).
+# It is a Flask webapp running under uWSGI.
+#
+# See <https://meta.wikimedia.org/wiki/Recommendation_API> for more info.
+#
+class recommendation_api {
+    requires_os('debian >= jessie')
+
+    require_package(
+        'python3-bs4',
+        'python3-dateutil',
+        'python3-flask',
+        'python3-numpy',
+        'python3-pip',
+        'python3-requests',
+        'python3-simplejson',
+        'python3-wheel',
+        'python3-yaml',
+    )
+
+    $base_dir   = '/srv/recommendation-api'  # top-level dir for app
+    $core_dir   = "${base_dir}/core"         # source code
+    $wheels_dir = "${base_dir}/wheels"       # *.whl files
+    $lib_dir    = "${base_dir}/lib"          # dependencies (installed from 
*.whl)
+
+    file { [ $base_dir, $lib_dir ]:
+        ensure => directory,
+        owner  => 'root',
+        group  => 'root',
+        mode   => '0755',
+    }
+
+    git::clone { 'research/recommendation-api/wheels':
+        ensure    => 'latest',
+        directory => $wheels_dir,
+        branch    => 'master',
+    }
+
+    git::clone { 'research/recommendation-api':
+        ensure    => 'latest',
+        directory => $core_dir,
+        branch    => 'master',
+    }
+
+    exec { 'pip_install_wheels':
+        command     => "/usr/bin/pip3 install --target=${lib_dir} --no-deps 
${wheels_dir}/wheels/*.whl",
+        require     => File[$lib_dir],
+        user        => 'root',
+        group       => 'root',
+        subscribe   => Git::Clone['research/recommendation-api/wheels'],
+        refreshonly => true,
+    }
+
+    uwsgi::app { 'recommendation_api':
+        settings => {
+            uwsgi => {
+                'plugin'      => 'python3',
+                'wsgi-file'   => 
"${core_dir}/recommendation/data/recommendation.wsgi",
+                'master'      => true,
+                'chdir'       => $core_dir,
+                'http-socket' => '0.0.0.0:8080',
+                'socket'      => '/run/uwsgi/recommendation_api.sock',
+                'pythonpath'  => $lib_dir,
+                'processes'   => inline_template('<%= @processorcount.to_i 
%>'),
+            }
+        },
+        require  => [
+            Exec['pip_install_wheels'],
+            Git::Clone['research/recommendation-api'],
+        ],
+    }
+}
diff --git a/modules/role/templates/apache/sites/recommendation_api.erb 
b/modules/role/templates/apache/sites/recommendation_api.erb
new file mode 100644
index 0000000..4793140
--- /dev/null
+++ b/modules/role/templates/apache/sites/recommendation_api.erb
@@ -0,0 +1,5 @@
+<VirtualHost 127.0.0.1:80>
+    ServerName recommendation-api
+    uWSGIsocket /run/uwsgi/recommendation_api.sock
+    SetHandler uwsgi-handler
+</VirtualHost>

-- 
To view, visit https://gerrit.wikimedia.org/r/312045
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: If5db926def3c5d1933ea0d284d540a9e99e18613
Gerrit-PatchSet: 7
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ori.livneh <o...@wikimedia.org>
Gerrit-Reviewer: Nschaaf <nsch...@wikimedia.org>
Gerrit-Reviewer: Ori.livneh <o...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to