You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2019/07/25 16:06:13 UTC
[sling-whiteboard] 01/02: Basic dynamic Openwhisk action
dispatching works
This is an automated email from the ASF dual-hosted git repository.
bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
commit 39dfeed111142303676bbd34054fcc5152779cf8
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Thu Jul 25 17:57:41 2019 +0200
Basic dynamic Openwhisk action dispatching works
---
serverless-microsling/lib/openwhisk-renderer.js | 20 +++++++++++++++++---
serverless-microsling/lib/render.js | 14 +++++++++-----
.../rendering-actions/somedoc-html.js | 1 -
3 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/serverless-microsling/lib/openwhisk-renderer.js b/serverless-microsling/lib/openwhisk-renderer.js
index e5544f7..21ba43d 100644
--- a/serverless-microsling/lib/openwhisk-renderer.js
+++ b/serverless-microsling/lib/openwhisk-renderer.js
@@ -39,19 +39,33 @@ const getAction = async (resourceType, extension) => {
})
};
+const render = (resource, action) => {
+ const name = action.name;
+ const blocking = true, result = true
+ const params = {
+ resource: resource
+ }
+ var ow = openwhisk();
+ return ow.actions.invoke({name, blocking, result, params});
+};
+
const renderer = {
contentType: 'text/html',
appliesTo : async (resourceType, extension) => {
return getAction(resourceType, extension)
},
render : (resource, action) => {
- return `TODO: render using ${action ? action.name : null}`;
+ return render(resource, action);
},
}
function main () {
- return new Promise(resolve => {
- resolve(getAction('microsling/somedoc', 'html'));
+ return new Promise(async resolve => {
+ const resource = {
+ title: 'cmdline title test',
+ body: 'cmdline body test',
+ }
+ resolve(render(resource, getAction('microsling/somedoc', 'html')));
});
}
diff --git a/serverless-microsling/lib/render.js b/serverless-microsling/lib/render.js
index b78b3c5..eee7098 100644
--- a/serverless-microsling/lib/render.js
+++ b/serverless-microsling/lib/render.js
@@ -26,7 +26,7 @@ const defaultTextRenderer = {
return extension == 'txt';
},
render : (resource) => {
- return `${resource.title}\n${resource.body}\n`;
+ return { output: `${resource.title}\n${resource.body}\n` };
},
}
@@ -36,7 +36,7 @@ const defaultJsonRenderer = {
return extension == 'json';
},
render : (resource) => {
- return JSON.stringify(resource, 2, null);
+ return { output: JSON.stringify(resource, 2, null) };
},
}
@@ -46,7 +46,7 @@ const defaultHtmlRenderer = {
return extension == 'html';
},
render : (resource) => {
- return `
+ return { output: `
<html>
<head>
<title>${resource.title}</title>
@@ -58,7 +58,7 @@ const defaultHtmlRenderer = {
<div>${resource.body}</div>
</body>
</html>
- `;
+ `};
},
}
@@ -104,7 +104,11 @@ async function render(context) {
if(!rendererInfo) {
throw Error(`Renderer not found for ${resourceType} extension ${extension}`);
}
- context.response.body = rendererInfo.renderer.render(resource, rendererInfo.applyContext);
+ const rendered = await rendererInfo.renderer.render(resource, rendererInfo.applyContext);
+ if(!rendered.output) {
+ throw Error('Renderer generated no output');
+ }
+ context.response.body = rendered.output;
context.response.headers = {
'Content-Type': rendererInfo.renderer.contentType
};
diff --git a/serverless-microsling/rendering-actions/somedoc-html.js b/serverless-microsling/rendering-actions/somedoc-html.js
index ff29573..831e00f 100644
--- a/serverless-microsling/rendering-actions/somedoc-html.js
+++ b/serverless-microsling/rendering-actions/somedoc-html.js
@@ -21,7 +21,6 @@ function main (params) {
const markup = `<html>
<head>
<title>${resource.title}</title>
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/>
</head>
<body>
<h1>