var InstanceController = Spine.Class.create({ init: function(app) { app.get('/instances', this.getInstances); app.get('/instances/:instancename/count', this.countInstances); app.get('/instances/:instancename', this.getInstance); app.post('/instances', this.postInstance); app.put('/instances/:instancename', this.putInstance); }, getInstances: function(request, response) { Instance.find({}, function(err, instances) { response.json(instances); }); }, getInstance: function(request, response) { var instancename = request.params.instancename; Instance.find({ "name": instancename }, function(err, instances) { if (err) { console.log("Unable to find instance:" + instancename + " - " + err); response.send(500); } else { console.dir(instances); response.json(instances); } }); }, countInstances: function(request, response) { var instanceName = request.params.instancename; Instance.count({ name: instanceName }, function(err, count) { response.send("{'total': "+ count + "}"); }); }, postInstance: function(request, response) { var instanceName = request.body.name; Instance.count({ name: instanceName }, function(err, count) { if (count === 0) { var instance = InstanceController.saveInstance(request.body); InstanceController.trigger("create", instance); response.send('OK'); } else { console.log("Cannot create an existing instance:" + instanceName); response.send(409); } }); }, putInstance: function(request, response) { var instanceName = request.params.instancename; Instance.count({ name: instanceName }, function(err, count) { var instance = InstanceController.saveInstance(request.body); InstanceController.trigger("update", instance); response.send('OK'); }); } });
var EntityController = Spine.Class.create({ init: function(app) { app.post('/heartbeats', this.sendHeartbeat); app.post('/firehose', this.firehose); app.get('/:entityname/:entityid', this.getEntity); app.get('/:entityname', this.getEntities); app.put('/:entityname/:entityid', this.putEntity); }, sendHeartbeat: function(req, res) { var hbtime = req.body.heartbeat; EntityController.trigger("heartbeat", {'type': 'heartbeats', 'data': hbtime}); res.send('OK'); }, firehose: function(req, res) { EntityController.trigger("update", {'type': 'firehose', 'data': req.body}); res.send('OK'); }, getEntities: function(req, res) { var entityname = req.params.entityname; var state = req.query.state; var StateEntityModel = EntityModelHelper.modelDefs[entityname + 'state']; if (StateEntityModel) { StateEntityModel.find({"lastUpdateState": state}, function(err, entityStates) { res.json(entityStates); }); } else { res.send('OK'); } }, getEntity: function(req, res) { var entityname = req.params.entityname; var entityid = req.params.entityid; // Logger.debug("GET request for: /" + entityname + " and entityid " + entityid); var EntityModel = EntityModelHelper.modelDefs[entityname]; EntityModel.find({ "name": entityid }, function(err, entities) { if (err) { Logger.error("Unable to find instance:" + entityid, err); res.send(500); } else { res.json(entities); } }); }, putEntity: function(req, res) { var entityname = req.params.entityname; var entityid = req.params.entityid; var reqBody = req.body; Logger.debug("PUT request for: /" + entityname + " and entityid " + entityid); try { var modelObject = EntityModelHelper.saveEntity(entityname, reqBody); EntityController.trigger("update", {'type': entityname, 'data': modelObject}); } catch(err) { Logger.error("Unable to save entity", err); res.send('500'); } res.send('OK'); } });
var Spine = require('spine'), Logger = require('./logger'); var Exceptions = Spine.Class.create(); Exceptions.extend({ PersistenceException:function (msg) { this.name = 'PersistenceException'; Error.call(this, msg); Error.captureStackTrace(this, arguments.callee); }, InvalidArgument: function(msg) { this.name = 'InvalidArgument'; Error.call(this, msg); Error.captureStackTrace(this, arguments.callee); }, NotFound: function(msg) { this.name = 'NotFound'; Error.call(this, msg); Error.captureStackTrace(this, arguments.callee); }, Conflict: function(msg) { this.name = 'Conflict'; Error.call(this, msg); Error.captureStackTrace(this, arguments.callee); } }); module.exports = Exceptions;
var Spine = require("spine"); var Route = Spine.Route = Spine.Class.create(); Route.extend(Spine.Events); Route.extend({ routes: [], add: function(path, callback){ if (typeof path === "object") for(var p in path) this.add(p, path[p]); else this.routes.push(this.init(path, callback)); }, setup: function(options){ this.bind("change", this.change); }, unbind: function(){}, navigate: function(){ var args = Spine.makeArray(arguments); var triggerRoutes = true; if (typeof args[args.length - 1] === "boolean") { triggerRoutes = args.pop(); } var path = args.join("/"); if (this.path === path) return;
var winston = require('winston'), Spine = require('spine'), moment = require('moment'); var logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)(), new (winston.transports.File)({ filename: 'allyourlogs.log' }) ] }); var Logger = Spine.Class.create({}); Logger.extend({ getDate: function() { return moment().format('ddd, MMM Do YYYY, h:mm:ss a'); }, debug: function(message) { logger.debug("["+ Logger.getDate() +"] - " + message); }, warn: function(message) { logger.warn("["+ Logger.getDate() +"] - " + message); }, error: function(message, err) { logger.error("["+ Logger.getDate() +"] - " + message, err); } }); module.exports = Logger;
var Spine = require('spine'), Logger = require('./logger'); var HttpResponse = Spine.Class.create(); HttpResponse.extend({ BadRequest: function(res, err) { res.statusCode = 400; res.send(err); }, Conflict: function(res, err) { res.statusCode = 409; res.send(err); }, InternalServerError: function(res, err) { res.statusCode = 500; res.send(err); }, NotFound: function(res, err) { res.statusCode = 404; res.send(err); }, OK: function(res, msg) { res.statusCode = 200; res.send(msg); } }); module.exports = HttpResponse;
Property = require('../models/property'); var PropertyController = Spine.Class.create({ init: function(app) { app.get('/Properties', this.getAllProperties); app.get('/Properties/:propertyname', this.getProperty); app.post('/Properties', this.postProperty); }, getAllProperties: function(request, response) { Property.find({}, function(err, properties) { response.json(properties); }); }, getProperty: function(request, response) { var property = request.params.propertyname; Property.findOne({ "name": property }, function(err, data) { if (err) { console.log("Unable to find property:" + property + " - " + err); response.send(500); } else { response.json(data); } }); }, postProperty: function(request, response) { PropertyController.saveProperty(request.body); response.send('OK'); } }); PropertyController.extend({
var Spine = require('spine'), faye = require('faye'), mongoose = require('mongoose'); var Environment = Spine.Class.create(); Environment.extend({ startServices: function(app) { if (process.env.VCAP_SERVICES) { var env = JSON.parse(process.env.VCAP_SERVICES); var mongo = env['mongodb-1.8'][0]['credentials']; } else { var mongo = { "hostname": "localhost", "port": 27017, "db": "hawk-dev" } } var generate_mongo_url = function(obj) { obj.hostname = (obj.hostname || 'localhost'); obj.port = (obj.port || 27017); obj.db = (obj.db || 'test'); if (obj.username && obj.password) { return "mongodb://" + obj.username + ":" + obj.password + "@" + obj.hostname + ":" + obj.port + "/" + obj.db; } else { return "mongodb://" + obj.hostname + ":" + obj.port + "/" + obj.db; }
var DomainController = Spine.Class.create({ getDomains: function(request, response) { Logger.debug("get all domains"); Domain.find({}, function(err, domains) { if (err) { Logger.debug("No domains found"); require('sys').puts(err.stack()); response.send('No domains found.', 404); } else { response.json(domains); } }); }, addDomain: function(req, res) { Logger.debug("adding domain: "+ JSON.stringify(req.body)); var domain = new Domain(); var field; for (field in req.body) { if (req.body.hasOwnProperty(field)) { domain[field] = req.body[field]; } } domain.save(function(err) { if (err) { return new Error("unable to save domain: " + domain.name + "- " + err); } else { Logger.debug("Saved domain:" + JSON.stringify(domain)); res.send('OK'); } }); }, init: function(app) { Logger.debug("Initialising domain Controller"); app.get('/domains', this.getDomains); app.post('/domains', this.addDomain); } });