基于 Kubernetes 集群的 Serverless 在 IoT 中的应用(7)
- UID
- 1066743
|
基于 Kubernetes 集群的 Serverless 在 IoT 中的应用(7)
创建并验证第二个 Action:enricher接下来,我们创建第二个 Action:enricher。它的作用是:根据传入的经纬度,在 MongDB 中查找资产的详细信息(名称、其地理围栏范围、图片等)。
enricher.js 是 OpenWhisk action 的源码。
清单 2. enricher 源码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| var path = require("path");
const format= require('util').format;
require('dotenv').config({path: path.join(__dirname, '.env')});
var MongoClient = require('mongodb').MongoClient;
function enrich(params) {
// Validate Parameters
var mongoDbUser = process.env.MONGODB_USER;
var mongoDbPassword = process.env.MONGODB_PASSWORD;
var mongoDbHost = process.env.MONGODB_HOST;
var mongoDbDatabase = process.env.MONGODB_DATABASE;
if(!mongoDbUser || !mongoDbPassword || !mongoDbHost || !mongoDbDatabase) {
return {error: "Database Values Have Not Been Provided!"}
}
var url = format('mongodb://%s:%s@%s:27017/%s', mongoDbUser, mongoDbPassword, mongoDbHost, mongoDbDatabase);
var topic = params.topic;
if(topic) {
return new Promise(function(resolve, reject) {
MongoClient.connect(url, function(err, client){
if(err) {
console.error(err);
reject({"error":err.message});
return;
}
var db = client.db(mongoDbDatabase);
db.collection('assets').findOne({"topic": topic}, function (err, doc) {
if(err) {
console.error(err);
reject({"error":err.message});
return;
}
if(doc) {
for(index in doc) {
if(index != "_id") {
params[index] = doc[index];
}
}
}
else {
console.log("No Asset Found with topic '%s'", topic);
}
client.close();
resolve(params);
});
});
});
}
else {
console.log("Topic Has Not Been Provided")
return params;
}
};
|
从上面的源码可以看出,名为 enricher 的 Action,不仅可以显示资产的经纬度,还能够显示资产的名称、地理围栏半径。
图 27. 部署 Action
我们直接调用 Action,传入的参数是 topic:
图 28. 调用 Action |
|
|
|
|
|