Various updates.

This commit is contained in:
Julien Fontanet 2013-07-16 13:51:44 +02:00
parent c611cccc06
commit c650a92a1d
3 changed files with 141 additions and 80 deletions

View File

@ -3,19 +3,6 @@ var Q = require('q');
//////////////////////////////////////////////////////////////////////
// @todo Maybe we should generalize the getter methods (get,
// findWhere, where) to two methods: get([properties]) &
// first([properties]).
//
// Each of these methods accept optionnal properties to filter its
// results.
//
// get() returns any models that match while first() returns only the
// one.
//
// These method should also accept a scalar value as a matching value
// for the “id” property.
// @todo Add events.
function Collection(models)
{

View File

@ -79,8 +79,11 @@ function json_api_call(session, message)
// JSON-RPC over WebSocket.
//////////////////////////////////////////////////////////////////////
xo.on('started', function () {
// @todo Port should be configurable.
new (require('ws').Server)({'port': 8080}).on('connection', function (socket) {
var server = new (require('ws').Server)({'port': 8080});
server.on('connection', function (socket) {
var session = new Session(xo);
session.once('close', function () {
socket.close();
@ -96,13 +99,15 @@ new (require('ws').Server)({'port': 8080}).on('connection', function (socket) {
socket.once('close', function () {
session.close();
});
});
});
//////////////////////////////////////////////////////////////////////
// JSON-RPC over TCP.
//////////////////////////////////////////////////////////////////////
require('net').createServer(function (socket) {
xo.on('started', function () {
require('net').createServer(function (socket) {
var session = new Session(xo);
session.on('close', function () {
socket.end(); // @todo Check it is enough.
@ -159,4 +164,9 @@ require('net').createServer(function (socket) {
socket.once('close', function () {
session.close();
});
}).listen(1024); // @todo Should be configurable.
}).listen(1024); // @todo Should be configurable.
});
//////////////////////////////////////////////////////////////////////
xo.start();

View File

@ -33,6 +33,11 @@ var check = function () {
// Models
//////////////////////////////////////////////////////////////////////
var Server = Model.extend({
'validate': function () {
},
});
// @todo We could also give a permission level to tokens (<=
// user.permission).
var Token = Model.extend({
@ -108,15 +113,26 @@ var User = Model.extend({
},
});
var Server = Model.extend({
'validate': function () {
},
});
var Pool = Model.extend({});
var Host = Model.extend({});
var VM = Model.extend({});
var Network = Model.extend({});
var SR = Model.extend({});
var VDI = Model.extend({});
//////////////////////////////////////////////////////////////////////
// Collections
//////////////////////////////////////////////////////////////////////
var Servers = Collection.extend({
'model': Server,
});
var Tokens = Collection.extend({
'model': Token,
@ -148,8 +164,28 @@ var Users = Collection.extend({
}
});
var Servers = Collection.extend({
'model': Server,
var Pools = Collection.extend({
'model': Pool,
});
var Hosts = Collection.extend({
'model': Host,
});
var VMs = Collection.extend({
'model': VM,
});
var Networks = Collection.extend({
'model': Network,
});
var SRs = Collection.extend({
'model': SR,
});
var VDIs = Collection.extend({
'model': VDI,
});
//////////////////////////////////////////////////////////////////////
@ -161,10 +197,15 @@ function Xo()
return new Xo();
}
//--------------------------------------
// Main objects (@todo should be persistent).
this.servers = new Servers();
this.tokens = new Tokens();
this.users = new Users();
// Temporary user, used for tests while the collection are not
// persistent.
this.users.add({
'email': 'bob@gmail.com',
'pw_hash': '$2a$10$PsSOXflmnNMEOd0I5ohJQ.cLty0R29koYydD0FBKO9Rb7.jvCelZq',
@ -184,9 +225,32 @@ function Xo()
self.emit('user.revoked:'+ user_id);
});
});
//--------------------------------------
// Xen objects.
this.pools = new Pools();
this.hosts = new Hosts();
this.vms = new VMs();
this.networks = new Networks();
this.srs = new SRs();
this.vdis = new VDIs();
// Connecting classes: VIF & PIF, VBD & SR.
}
require('util').inherits(Xo, require('events').EventEmitter);
Xo.prototype.start = function () {
// @todo Connect to persistent collection.
// @todo Connect to Xen servers & fetch data.
// -------------------------------------
this.emit('started');
};
//////////////////////////////////////////////////////////////////////
module.exports = Xo;