Introduction
The following is an example of a daemon that uses the composer to function.
Similar to with services, we adhere to this folder schema to maintain code standardization.
Folder Schema
Code Samples
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
"use strict";
var daemon = {
"type": "daemon",
"dbs": [
{
prefix: "",
name: "company",
multitenant: false,
mongo: true
}
],
prerequisites: {
cpu: '',
memory: ''
},
serviceName: "composerDaemon",
serviceGroup: "Composer",
servicePort: 4211,
"errors": {},
"schema": {
"insertRecords": {
"mw": __dirname + "/lib/mw/add.daemon.js",
"_apiInfo": {
"l": "Insert Records"
}
}
}
};
module.exports = daemon; |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
"use strict";
var composer = require("soajs.composer");
composer.deploy(__dirname +"/config.js", function(error){
console.log( (error)? error : "Daemon started ...");
}); |
Middleware:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
"use strict";
var mongo = require("../model/mongo");
module.exports = {
"checkIfExists": function (soajs, next) {
var condition = {
"id": 1
};
var combo = {
condition: condition
};
if(!soajs.data){
soajs.data = {}
}
mongo.findEntry(soajs, combo, function (error, oneRecord) {
if (error) {
return next(error);
}
if (oneRecord) {
console.log("next()")
next();
}
else {
var combo2 = {
"record": {
"name": "Joe",
"id": 1,
"position": "supervisor"
}
};
mongo.insertEntries(soajs, combo2, function(error){
if(error){
return next(error);
}
else{
console.log("insertEntries")
soajs.data.new= true;
next();
}
});
}
});
},
"update": function (soajs, end) {
if (!soajs.data.new){
var condition = {
"id": 1
};
var combo = {
condition: condition
};
mongo.findEntry(soajs, combo, function(error, oneRecord){
if (error){
return end(error);
}
else{
var opt = {
ts: new Date().getTime()
};
var updated = {
"$set": opt
};
var combo1 = {
updatedFields: updated,
options: {
'upsert': false,
'multi': true
},
versioning: true,
condition: condition
};
mongo.updateEntries(soajs, combo1, function (error) {
if (error) {
return end(error);
}
console.log("timestamp updated");
return end(null, true);
});
}
});
}
else {
return end(null, true);
}
}
};
|
Model:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
"use strict";
var database = 'company';
var collection = 'employees';
var lib = {
"defaults": function (combo) {
if (!combo.database) {
combo.database = database
}
if (!combo.collection) {
combo.collection = collection
}
if (!Object.hasOwnProperty.call(combo, 'versioning')) {
combo.versioning = false;
}
},
"findEntry": function (soajs, combo, cb) {
lib.defaults(combo);
soajs.mongo[combo.database].findOne(combo.collection, combo.condition || {}, combo.fields || {}, cb);
},
"insertEntries": function (soajs, combo, cb) {
lib.defaults(combo);
soajs.mongo[combo.database].insert(combo.collection, combo.record, combo.versioning || false, cb);
},
"updateEntries": function (soajs, combo, cb) {
lib.defaults(combo);
soajs.mongo[combo.database].update(combo.collection, combo.condition, combo.updatedFields, combo.options || {}, combo.versioning || false, cb);
}
};
module.exports = lib; |
How to test
You can test this service for yourself by doing the following:
- Create a local version of the folder schema on your machine
- Copy the code from this page into their respective files
- Run the following commands from a terminal window
Start controller
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
# go to the controller directory and start the controller in the correct environment
cd /opt/soajs/node_modules/soajs.controller
export SOAJS_ENV=dev
export SOAJS_SRVIP=127.0.0.1
node . |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
# go to the service directory and start the service in the correct environment
cd /opt/soajs/node_modules/composer.example/daemon/insertRecords
export SOAJS_ENV=dev
export SOAJS_SRVIP=127.0.0.1
export SOAJS_DAEMON_GRP_CONF=catalog
node . |