summaryrefslogtreecommitdiffstats
path: root/meta-facebook/meta-yosemite/recipes-yosemite/rest-api
diff options
context:
space:
mode:
Diffstat (limited to 'meta-facebook/meta-yosemite/recipes-yosemite/rest-api')
-rw-r--r--meta-facebook/meta-yosemite/recipes-yosemite/rest-api/files/plat_tree.py84
-rw-r--r--meta-facebook/meta-yosemite/recipes-yosemite/rest-api/files/setup-rest-api.sh32
-rw-r--r--meta-facebook/meta-yosemite/recipes-yosemite/rest-api/rest-api_0.2.bbappend62
3 files changed, 178 insertions, 0 deletions
diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/files/plat_tree.py b/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/files/plat_tree.py
new file mode 100644
index 0000000..b93e98e
--- /dev/null
+++ b/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/files/plat_tree.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+#
+# Copyright 2014-present Facebook. All Rights Reserved.
+#
+# This program file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program in a file named COPYING; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301 USA
+#
+
+from ctypes import *
+import json
+import ssl
+import socket
+import os
+from node_api import get_node_api
+from node_spb import get_node_spb
+from node_bmc import get_node_bmc
+from node_server import get_node_server
+from node_fruid import get_node_fruid
+from node_sensors import get_node_sensors
+from node_config import get_node_config
+from tree import tree
+from pal import *
+
+def populate_server_node(num):
+ prsnt = pal_is_server_prsnt(num)
+ if prsnt == None or prsnt == 0:
+ return None
+
+ r_server = tree("server" + repr(num), data = get_node_server(num))
+
+ r_fruid = tree("fruid", data = get_node_fruid("slot" + repr(num)))
+
+ r_sensors = tree("sensors", data = get_node_sensors("slot" + repr(num)))
+
+ r_config = tree("config", data = get_node_config("slot" + repr(num)))
+
+ r_server.addChildren([r_fruid, r_sensors, r_config])
+
+ return r_server
+
+# Initialize Platform specific Resource Tree
+def init_plat_tree():
+
+ # Create /api end point as root node
+ r_api = tree("api", data = get_node_api())
+
+ # Add /api/spb to represent side plane board
+ r_spb = tree("spb", data = get_node_spb())
+ r_api.addChild(r_spb)
+
+ # Add servers /api/server[1-max]
+ num = pal_get_num_slots()
+ for i in range(1, num+1):
+ r_server = populate_server_node(i)
+ if r_server:
+ r_api.addChild(r_server)
+
+ # TODO: Need to add /api/nic to represent NIC Mezz Card
+
+ # Add /api/spb/fruid end point
+ r_temp = tree("fruid", data = get_node_fruid("spb"))
+ r_spb.addChild(r_temp)
+
+ # /api/spb/bmc end point
+ r_temp = tree("bmc", data = get_node_bmc())
+ r_spb.addChild(r_temp)
+
+ # /api/spb/sensors end point
+ r_temp = tree("sensors", data = get_node_sensors("spb"))
+ r_spb.addChild(r_temp)
+
+ return r_api
diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/files/setup-rest-api.sh b/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/files/setup-rest-api.sh
new file mode 100644
index 0000000..bdd79b6
--- /dev/null
+++ b/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/files/setup-rest-api.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# Copyright 2014-present Facebook. All Rights Reserved.
+#
+# This program file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program in a file named COPYING; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301 USA
+#
+
+### BEGIN INIT INFO
+# Provides: setup-rest-api
+# Required-Start:
+# Required-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Set REST API handler
+### END INIT INFO
+
+echo -n "Setup REST API handler... "
+/usr/local/bin/rest.py > /tmp/rest.log 2>&1 &
+echo "done."
diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/rest-api_0.2.bbappend b/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/rest-api_0.2.bbappend
new file mode 100644
index 0000000..ce33bba
--- /dev/null
+++ b/meta-facebook/meta-yosemite/recipes-yosemite/rest-api/rest-api_0.2.bbappend
@@ -0,0 +1,62 @@
+# Copyright 2015-present Facebook. All Rights Reserved.
+#
+# This program file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program in a file named COPYING; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301 USA
+SUMMARY = "Rest API Daemon"
+DESCRIPTION = "Daemon to handle RESTful interface."
+SECTION = "base"
+PR = "r1"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://rest.py;beginline=5;endline=18;md5=0b1ee7d6f844d472fa306b2fee2167e0"
+
+DEPENDS_append = " update-rc.d-native"
+
+S = "${WORKDIR}"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+SRC_URI += "file://setup-rest-api.sh \
+ file://plat_tree.py \
+ file://node_api.py \
+ file://node_spb.py \
+ file://node_bmc.py \
+ file://node_server.py \
+ file://node_fruid.py \
+ file://node_sensors.py \
+ file://node_config.py \
+ "
+
+binfiles += "setup-rest-api.sh plat_tree.py node_api.py node_spb.py node_bmc.py node_server.py node_fruid.py node_sensors.py node_config.py"
+
+do_install() {
+ dst="${D}/usr/local/fbpackages/${pkgdir}"
+ bin="${D}/usr/local/bin"
+ install -d $dst
+ install -d $bin
+ for f in ${binfiles}; do
+ install -m 755 $f ${dst}/$f
+ ln -snf ../fbpackages/${pkgdir}/$f ${bin}/$f
+ done
+ for f in ${otherfiles}; do
+ install -m 644 $f ${dst}/$f
+ done
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/rcS.d
+ install -m 755 setup-rest-api.sh ${D}${sysconfdir}/init.d/setup-rest-api.sh
+ update-rc.d -r ${D} setup-rest-api.sh start 95 2 3 4 5 .
+}
+
+FBPACKAGEDIR = "${prefix}/local/fbpackages"
+
+FILES_${PN} = "${FBPACKAGEDIR}/rest-api ${prefix}/local/bin ${sysconfdir} "
OpenPOWER on IntegriCloud