diff --git a/sample-functions/BaseFunctions/README.md b/sample-functions/BaseFunctions/README.md new file mode 100644 index 00000000..4e9ac28e --- /dev/null +++ b/sample-functions/BaseFunctions/README.md @@ -0,0 +1,12 @@ +## Base function examples + +Examples of base functions are provided here. + +Each one will read the request from the watchdog then print it back resulting in an HTTP 200. + +| Language | Docker image | Notes | +|------------------------|------------------------------------|----------------------------------------| +| Node.js | functions/node:6.9.1-alpine | Node.js built on Alpine Linux | +| Python | functions/python:2.7-alpine | Python 2.7 built on Alpine Linux | +| Java | functions/openjdk:8u121-jdk-alpine | OpenJDK built on Alpine Linux | +| Busybox / shell | functions/alpine:latest | Busybox contains useful binaries which can be turned into a FaaS function such as `sha512sum` or `cat` | diff --git a/sample-functions/BaseFunctions/java/.gitignore b/sample-functions/BaseFunctions/java/.gitignore new file mode 100644 index 00000000..6b468b62 --- /dev/null +++ b/sample-functions/BaseFunctions/java/.gitignore @@ -0,0 +1 @@ +*.class diff --git a/sample-functions/BaseFunctions/java/Dockerfile b/sample-functions/BaseFunctions/java/Dockerfile new file mode 100644 index 00000000..50381aa9 --- /dev/null +++ b/sample-functions/BaseFunctions/java/Dockerfile @@ -0,0 +1,16 @@ +FROM openjdk:8u121-jdk-alpine + +ADD https://github.com/alexellis/faas/releases/download/0.5.1-alpha/fwatchdog /usr/bin +RUN chmod +x /usr/bin/fwatchdog + +WORKDIR /root/ + +COPY Handler.java . +RUN javac Handler.java + +ENV fprocess="java Handler" + +HEALTHCHECK --interval=1s CMD [ -e /tmp/.lock ] || exit 1 + +CMD ["fwatchdog"] + diff --git a/sample-functions/BaseFunctions/java/Handler.java b/sample-functions/BaseFunctions/java/Handler.java new file mode 100644 index 00000000..0cb5493e --- /dev/null +++ b/sample-functions/BaseFunctions/java/Handler.java @@ -0,0 +1,30 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class Handler { + + public static void main(String[] args) { + try { + + String input = readStdin(); + System.out.print(input); + + } catch(IOException e) { + e.printStackTrace(); + } + } + + private static String readStdin() throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String input = ""; + while(true) { + String line = br.readLine(); + if(line==null) { + break; + } + input = input + line + "\n"; + } + return input; + } +} diff --git a/sample-functions/BaseFunctions/java/build.sh b/sample-functions/BaseFunctions/java/build.sh new file mode 100755 index 00000000..f686cf16 --- /dev/null +++ b/sample-functions/BaseFunctions/java/build.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +echo "Building functions/openjdk:8u121-jdk-alpine" +docker build -t functions/openjdk:8u121-jdk-alpine . diff --git a/sample-functions/BaseFunctions/node/Dockerfile b/sample-functions/BaseFunctions/node/Dockerfile new file mode 100644 index 00000000..9be7b788 --- /dev/null +++ b/sample-functions/BaseFunctions/node/Dockerfile @@ -0,0 +1,18 @@ +FROM node:6.9.1-alpine + +ADD https://github.com/alexellis/faas/releases/download/0.5.1-alpha/fwatchdog /usr/bin +RUN chmod +x /usr/bin/fwatchdog + +WORKDIR /root/ + +COPY package.json . + +RUN npm i +COPY handler.js . + +ENV fprocess="node handler.js" + +HEALTHCHECK --interval=1s CMD [ -e /tmp/.lock ] || exit 1 + +CMD ["fwatchdog"] + diff --git a/sample-functions/BaseFunctions/node/build.sh b/sample-functions/BaseFunctions/node/build.sh new file mode 100755 index 00000000..680f7890 --- /dev/null +++ b/sample-functions/BaseFunctions/node/build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +echo "Building functions/node:6.9.1-alpine" +docker build -t functions/node:6.9.1-alpine . + diff --git a/sample-functions/BaseFunctions/node/handler.js b/sample-functions/BaseFunctions/node/handler.js new file mode 100644 index 00000000..9899ac95 --- /dev/null +++ b/sample-functions/BaseFunctions/node/handler.js @@ -0,0 +1,15 @@ +"use strict" + +let getStdin = require('get-stdin'); + +let handler = require('./handler'); + +let handle = (req) => { + console.log(req); +}; + +getStdin().then(val => { + handle(val); +}).catch(e => { + console.error(e.stack); +}); diff --git a/sample-functions/BaseFunctions/node/package.json b/sample-functions/BaseFunctions/node/package.json new file mode 100644 index 00000000..d35e9625 --- /dev/null +++ b/sample-functions/BaseFunctions/node/package.json @@ -0,0 +1,15 @@ +{ + "name": "NodejsBase", + "version": "1.0.0", + "description": "", + "main": "faas_index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "get-stdin": "^5.0.1" + } +} diff --git a/sample-functions/BaseFunctions/python/Dockerfile b/sample-functions/BaseFunctions/python/Dockerfile new file mode 100644 index 00000000..c6e06745 --- /dev/null +++ b/sample-functions/BaseFunctions/python/Dockerfile @@ -0,0 +1,15 @@ +FROM python:2.7-alpine + +ADD https://github.com/alexellis/faas/releases/download/0.5.1-alpha/fwatchdog /usr/bin +RUN chmod +x /usr/bin/fwatchdog + +WORKDIR /root/ + +COPY handler.py . + +ENV fprocess="python handler.py" + +HEALTHCHECK --interval=1s CMD [ -e /tmp/.lock ] || exit 1 + +CMD ["fwatchdog"] + diff --git a/sample-functions/BaseFunctions/python/build.sh b/sample-functions/BaseFunctions/python/build.sh new file mode 100755 index 00000000..5e2f3ece --- /dev/null +++ b/sample-functions/BaseFunctions/python/build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +echo "Building functions/python:2.7-alpine" +docker build -t functions/python:2.7-alpine . + diff --git a/sample-functions/BaseFunctions/python/handler.py b/sample-functions/BaseFunctions/python/handler.py new file mode 100644 index 00000000..eaa3cb7b --- /dev/null +++ b/sample-functions/BaseFunctions/python/handler.py @@ -0,0 +1,11 @@ +import sys + +def get_stdin(): + buf = "" + for line in sys.stdin: + buf = buf + line + return buf + +if(__name__ == "__main__"): + st = get_stdin() + print(st)