Skip to content

Env.util, etcd fixes #204

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 126 commits into from
Jul 29, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
c8f5ae2
issue 32 fixed
cemersoz Jul 7, 2016
71179a9
removed swp
cemersoz Jul 7, 2016
65884ce
Merge branch 'master' of https://github.com/cemersoz/tuxlab-app
cemersoz Jul 7, 2016
9c68e12
fixed nconf issues
cemersoz Jul 7, 2016
4c41fd4
issue 82, 84 fixes
cemersoz Jul 7, 2016
6bac2e2
fixed #82
cemersoz Jul 7, 2016
c41344e
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 7, 2016
0498eb0
isse #77
cemersoz Jul 8, 2016
097ff58
fixed tests
cemersoz Jul 8, 2016
30ee6c2
fixed files
cemersoz Jul 8, 2016
e156b44
fixed tests master
cemersoz Jul 8, 2016
c6525e0
merged with master'
cemersoz Jul 8, 2016
e9052be
fixed comment
cemersoz Jul 8, 2016
528fb7d
moved validator
cemersoz Jul 8, 2016
e9f46e2
removed duplicate file
cemersoz Jul 8, 2016
a511006
fixed tests, removed duplicate underscore, publish
cemersoz Jul 8, 2016
dbd424a
merged with master
cemersoz Jul 11, 2016
7cca5d3
changes
cemersoz Jul 14, 2016
7b1f48d
merged with master
cemersoz Jul 14, 2016
d6c8c4a
fixed methods.ts import
cemersoz Jul 14, 2016
3db2e47
fixed issues w methods
cemersoz Jul 14, 2016
719224f
fixes
cemersoz Jul 14, 2016
161838b
renamed, fixed api, meteor.methods explanation
cemersoz Jul 14, 2016
fed186e
minor fixes
cemersoz Jul 14, 2016
39e8e38
A
cemersoz Jul 15, 2016
f206ca2
half-merge
cemersoz Jul 15, 2016
cb8412b
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 15, 2016
ddf5730
api changes
cemersoz Jul 15, 2016
ae5c30a
merged with master/requires-infra
cemersoz Jul 15, 2016
e07f9f6
merged with requires-infra
cemersoz Jul 15, 2016
7fd5d14
fixed api
cemersoz Jul 15, 2016
eb95338
merged
cemersoz Jul 15, 2016
0b5ef75
comments
cemersoz Jul 15, 2016
f0cf529
minor changes
cemersoz Jul 15, 2016
0f77939
merged with requires-infra
cemersoz Jul 15, 2016
dcf2317
minor fixes
cemersoz Jul 15, 2016
574d273
api changes (#126)
cemersoz Jul 15, 2016
7a86b9e
Merge branch 'requires-infra' of https://github.com/learnlinux/tuxlab…
cemersoz Jul 15, 2016
9c7ab13
method implementations
cemersoz Jul 15, 2016
2b653aa
before merge
cemersoz Jul 17, 2016
8921f1c
merged
cemersoz Jul 17, 2016
ee6d515
removed testing change
cemersoz Jul 17, 2016
97d1492
fixed typo
cemersoz Jul 17, 2016
461c6ea
fixed prepareLab
invalid-email-address Jul 18, 2016
d8df9f7
merged
invalid-email-address Jul 18, 2016
4e15bf9
removed test methods
cemersoz Jul 18, 2016
64c3179
fix prepareLab
invalid-email-address Jul 18, 2016
cc69eda
methods changes
cemersoz Jul 19, 2016
d36b825
merge and methods changes
cemersoz Jul 19, 2016
1f67feb
removed swap file
cemersoz Jul 19, 2016
481ac16
merged with master
cemersoz Jul 19, 2016
6aeecf5
fixed merge
cemersoz Jul 19, 2016
ada5cbd
fixes
invalid-email-address Jul 19, 2016
2483bba
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 19, 2016
d445926
prepareLab WORKS
invalid-email-address Jul 20, 2016
ea90ac4
merged
invalid-email-address Jul 20, 2016
8b9cbbb
further fixes
invalid-email-address Jul 20, 2016
aac86b2
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 20, 2016
6bb29d7
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 20, 2016
c07c6a1
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 20, 2016
7b54c86
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 20, 2016
6f20115
merge
invalid-email-address Jul 20, 2016
3c90352
all works
invalid-email-address Jul 20, 2016
3763331
deleted debug line
invalid-email-address Jul 20, 2016
9cbe003
fixed minor excess code
invalid-email-address Jul 20, 2016
a4866a0
minor indentation fix
invalid-email-address Jul 20, 2016
c96e7a4
reference fixes
invalid-email-address Jul 21, 2016
0594b7d
fixes to nextTask
invalid-email-address Jul 21, 2016
03471ee
merged
invalid-email-address Jul 21, 2016
c8a20f3
merged with master
invalid-email-address Jul 21, 2016
ecf54d1
merged with master
invalid-email-address Jul 21, 2016
73aaefa
minor changes
invalid-email-address Jul 21, 2016
de776e0
fixed merge problems
invalid-email-address Jul 21, 2016
508d1a6
fixed md view and swithces
invalid-email-address Jul 22, 2016
a20c3fc
fixed error messages
cemersoz Jul 22, 2016
5486bf7
removed debug code
invalid-email-address Jul 22, 2016
3118931
merged with masteR
invalid-email-address Jul 22, 2016
764ff17
merged
cemersoz Jul 22, 2016
7c5daa5
removed swp
cemersoz Jul 22, 2016
d23f201
merged
cemersoz Jul 22, 2016
9452ce9
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 22, 2016
d3435fa
Merge branch 'master' of https://github.com/cemersoz/tuxlab-app
invalid-email-address Jul 25, 2016
63e0e60
fixes
invalid-email-address Jul 25, 2016
39cafd2
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 25, 2016
464b046
fixed typescript warning
invalid-email-address Jul 25, 2016
092013c
merge
invalid-email-address Jul 25, 2016
71ee567
added student object
cemersoz Jul 25, 2016
ebc319e
changed function calls
cemersoz Jul 25, 2016
e9b234a
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 25, 2016
9da226a
deleted unnecessary files
cemersoz Jul 25, 2016
071fb74
updated api, added md feedback
cemersoz Jul 25, 2016
b24a184
fixed ts warn
cemersoz Jul 25, 2016
bf8f997
Merge branch 'master' of https://github.com/cemersoz/tuxlab-app
invalid-email-address Jul 25, 2016
e8633f0
fixed example_data and partially tests
cemersoz Jul 26, 2016
ce8d3e2
fixed tests, lab verifier
cemersoz Jul 26, 2016
92c6d0b
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 26, 2016
e88da86
update validator, merge
cemersoz Jul 26, 2016
e1d82c2
fixed indentation
cemersoz Jul 26, 2016
17f9bc4
changes
cemersoz Jul 26, 2016
26898ab
it's pretty now
cemersoz Jul 26, 2016
67f3df2
what
invalid-email-address Jul 27, 2016
b6b8570
Merge branch 'master' of https://github.com/cemersoz/tuxlab-app
invalid-email-address Jul 27, 2016
4fc2d13
fixes to api changes
invalid-email-address Jul 27, 2016
26497f9
minpr changes
cemersoz Jul 27, 2016
e539500
fixed api, deleted swap
cemersoz Jul 27, 2016
82df60f
fixed etcd add
cemersoz Jul 27, 2016
fc081a0
fixed #187, #188
cemersoz Jul 27, 2016
8da0d11
merged
cemersoz Jul 27, 2016
70cf9b0
minor fixes
cemersoz Jul 27, 2016
04bcc74
fixed indentation
cemersoz Jul 27, 2016
76fc502
added equal sign
cemersoz Jul 27, 2016
83e99c5
updated example courses to match schema
cemersoz Jul 27, 2016
dac969a
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 27, 2016
66f82cd
added md parser
cemersoz Jul 27, 2016
4e95548
removed debug code
cemersoz Jul 28, 2016
748db5a
fixed debug, import
cemersoz Jul 28, 2016
5882d68
changed dockerode settings
cemersoz Jul 28, 2016
97efd33
implemented to-from json
cemersoz Jul 28, 2016
bd148db
from-to json
cemersoz Jul 28, 2016
2b822e9
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 28, 2016
ff23197
merge
cemersoz Jul 28, 2016
eff293d
fixed etcd err
cemersoz Jul 28, 2016
2b1359b
merge
cemersoz Jul 27, 2016
9f0116f
etcd cache changes
cemersoz Jul 29, 2016
9be366c
added env.util
cemersoz Jul 29, 2016
7fb59f9
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 29, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions client/imports/ui/pages/lab/labview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ export default class LabView extends MeteorComponent {
var slf = this;
Meteor.call('prepareLab',"1", function(err,res){
console.log('here');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove

console.log("fired",err,res);
//slf.labMarkdown = "# Sander \n ## are you sure this will work?";
slf.tasks = res.taskList;
slf.toTask(slf.tasks[0]);
Expand Down
4 changes: 4 additions & 0 deletions collections/courses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ courses.allow({
}
});
var courseSchema = new SimpleSchema({
_id: {
type: String,

},
course_name: {
type: String
},
Expand Down
5 changes: 5 additions & 0 deletions server/imports/api/env.util.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
var util = function(){}

util.prototype.parent = null;
util.prototype.gitDiff = function(){}
module.exports = util;
21 changes: 13 additions & 8 deletions server/imports/api/lab.env.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
// Import other libraries
var nconf = require('nconf');

var util = require('./env.util.js');
/* constructor
* intializes docker, etcd connection
*/
var env = function(){
this.util = new util();
this.util.parent = this;
this.docker = docker;
this.root_dom = nconf.get('domain_root');
}
Expand Down Expand Up @@ -68,7 +70,7 @@ env.deleteRecords = function(user,callback){
{dockerodeStartOptions: {--your options here--}}
*/
env.prototype.init = function(opts){

TuxLog.log("warn","env.init");
/* create unique labVm name to avoid collisions
* for usr: cemersoz, at time 1467752963922
* labvm = "labVm_cemersoz_1467752963922"
Expand Down Expand Up @@ -165,21 +167,20 @@ env.prototype.init = function(opts){

//create etcd directory for helix record
var dir = slf.root_dom.split('.');
dir.reverse().push(slf.usr,'A');
dir.reverse().push(slf.usr);
slf.dnsKey = dir.join('/');
slf.dnsKey = "/skydns/"+slf.dnsKey;

console.log(slf.dnsKey);
slf.redRouterKey = '/redrouter/SSH::'+slf.usr;

//set etcd record for redrouter
etcd.set(slf.redRouterKey,JSON.stringify(etcd_redrouter),function(err,res){

if(err){
TuxLog.log('debug',err);
TuxLog.log('warn',err);
reject(err);
}
else{

//set etcd record for helixdns
slf.docker.getContainer(containerId).inspect(function(err,container){
if(err){
Expand All @@ -189,12 +190,14 @@ env.prototype.init = function(opts){
else{
var dnsIP = container.Node.IP;
//set etcd record for helix
etcd.set(slf.helixKey,{host: dnsIP},function(err,res){
etcd.set(slf.dnsKey,JSON.stringify({host: dnsIP}),function(err,res){

if(err){
TuxLog.log('warn',err);
reject(err);
}
else{
TuxLog.log("warn","go ME!");
slf.vmList.labVm = slf.labVm;
resolve();
}
Expand Down Expand Up @@ -426,6 +429,7 @@ env.prototype.shell = function(vmName,command,opts) {
}
});//TODO: split stdout and stderr
stream.on('end',function(){
console.log(dat);
resolve(dat,stdErr);
});
}
Expand All @@ -440,6 +444,7 @@ env.prototype.shell = function(vmName,command,opts) {
* calls callback(password)
*/
env.prototype.getPass = function(callback){
TuxLog.log("warn","getPass");
this.shell("labVm", "cat /pass")()
.then(function(sOut,sErr){ callback(null,sOut); }, function(err){ callback(err,null)});
}
Expand All @@ -452,4 +457,4 @@ env.prototype.listVolumes = function() {} //Don't know what this does
env.prototype.createNetwork = function() {} //Don't know what this does
env.prototype.listNetworks = function() {} //Don't know what this does
env.prototype.run = function() {} //Runs Docker commands
module.exports = new env();
module.exports = env;
161 changes: 110 additions & 51 deletions server/imports/api/lab.session.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,110 @@
/// <reference path="./lab.exec.d.ts" />
//require session submodules
var lab = require('./lab.js');
var student = require('./lab.student.js');
var session = function(){};
var env = require('./lab.env.js');



//labCache.get wrapper

function getLab(id, callback){
var lab_data = Collections.labs.findOne({_id: id});

if(!lab_data || lab_data.length < 0){
TuxLog.log("warn",new Error("Lab not found"));
callback(new Error("Lab Not Found."), null);
}

var labcache_id = id + "#" + lab_data.updated;
LabCache.get(labcache_id,function(err,value){
if(err){
TuxLog.log("warn",err);
callback(err,null);
}
else if(!value){
TuxLog.log("warn","didn't get from labcache");
var file = lab_data.file;

var Lab = eval(file);
LabCache.set(labcache_id,Lab,function(err,res){
TuxLog.log("warn","oooh no");
if(err){
TuxLog.log("warn",err);
}
});
callback(null,Lab);
}
else{
TuxLog.log("warn","got from cache");
callback(null,value);
}
});
}

//constructor
var session = function(){
};

//define session fields
session.prototype.env = null;
session.prototype.lab = null;
session.prototype.student = null;
session.prototype.pass = null;
session.prototype.started = false;
session.prototype.courseId = null;
session.prototype.user = null;
session.prototype.userId = null;

session.prototype.taskUpdates = [];


session.prototype.fromJson = function(data, callback){
//set session fields
this.user = data.user;
this.courseId = data.courseId;
this.pass = data.pass;
this.userId = data.userId;

this.env = new env();
this.env.setUser(data.user);
this.taskUpdates = data.taskUpdates;

this.student = new student(this,data.userId,data.labId,data.courseId);

getLab(data.labId,function(err,lab){
if(err){
callback(err,null);
}
else{
this.lab = lab;
callback(null,null);
}
});

}
session.prototype.changeStarted = function(){
this.started = true;
console.log(this.started);
}
/* init: pulls labFile and initializes session object from it
*/
session.prototype.init = function(user,userId,labId,callback){
var slf = this;
this.env = require('./lab.env.js');
this.env.setUser(user);

//set session fields;
this.user = user;
this.userId = userId;

this.env = new env();
this.env.setUser(user);
// Get Metadata from Database
var lab_data = Collections.labs.findOne({_id: labId}, {fields: {'labfile' : 0}});

var courseId = lab_data.course_id;

this.courseId = courseId;

//initialize student object
this.student = new student(this, userId,labId,courseId);

Expand All @@ -31,74 +117,47 @@ session.prototype.init = function(user,userId,labId,callback){
// Get Course Metadata
var course = Collections.courses.findOne({_id: lab_data.course_id}, {fields: {'labs' : 1 }});

// Format LabFile Cache URL
var labfile_id = labId + "#" + lab_data.updated;

// Check Cache for LabFile Object
LabCache.get(labfile_id, function(err, value){
getLab(labId,function(err,lab){
if(err){
TuxLog.log("warn",err);
callback(err, null);
callback(err,null);
}
else if(typeof value === "undefined"){
// Get LabFile from Database
var labfile_data = Collections.labs.findOne({_id: labId}, {fields : {'field' : 0}});
var Lab = eval(labfile_data.labfile);
Lab.taskNo = 0;
slf.lab = Lab;

// Cache LabFile -runs sync, not central to anything
LabCache.set(labfile_id, slf.lab, function(err, success){
if(err || !success){
TuxLog.log("warn", err);
}
});

else if(!slf.started){
slf.lab = lab;
slf.start(function(err){
if(err){
//err logged in slf.start
callback(err,null);
}
else{
slf.env.getPass(function(err,res){
if(err){
//TODO: separate streams in env.js
callback(err,null);
}
else{
slf.lab.pass = res;
callback(null,{taskNo: slf.lab.taskNo,sshPass: res});
}
});
//TODO: separate streams in env.js
if(err){
callback(err,null);
}
else{
console.log("calling back");
callback(null,{taskNo: slf.lab.taskNo,sshPass: res});
}
});
}
});
}
}
else{
// Get LabFile from Cache
var Lab = value;
Lab.taskNo = 0;
slf.lab = Lab;
slf.start(function(err){
slf.env.getPass(function(err,res){
console.log("already started");
if(err){
callback(err,null);
}
else{
slf.env.getPass(function(err,res){
if(err){
//TODO : same as above
callback(err,null);
}
else{
//slf.lab.pass = res;
callback(null,{taskNo: slf.lab.taskNo,sshPass: res});
}
});
slf.pass = res;
callback(null,{taskNo: slf.lab.taskNo,sshPass: res});
}
});
});
}
});
})
}
}

/* start: runs setup and moves task header to first task
* runs callback(err) on err if there is an error,
* (null) no error
Expand Down
33 changes: 27 additions & 6 deletions server/imports/lab/cache.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
/*
Creates Session and Lab Caches
*/
var async = require('async');
var NodeCache = require('node-cache');

var session = require('../api/lab.session.js');

// Lab Cache
LabCache = new NodeCache({
stdTTL: nconf.get('labvm_idle_timeout'),
Expand Down Expand Up @@ -46,6 +47,7 @@ var NodeCache = require('node-cache');
Gets a session from the local memory cache or ETCD
*/
SessionCache.get = function(userid, labid, callback){
var slf = this;
SessionCache._NodeCache.get(userid+'#'+labid, function(err, value){
if(err){
TuxLog.log('warn', "SessionCache NodeCache Error.");
Expand All @@ -56,8 +58,18 @@ var NodeCache = require('node-cache');
}
else{
var data = etcd.get('/tuxlab/sessions/'+userid+'/'+labid, function(err, value){
//TODO @cemersoz from_data method
});

var session = new session();
session.fillJson(data,function(err,res){
if(err){
callback(err,null);
}
else{
slf.add(session);
callback(null,session);
}
});
});
}
});
}
Expand Down Expand Up @@ -87,10 +99,19 @@ var NodeCache = require('node-cache');
});
},
function(cb){
//TODO @cemersoz to_data method

//convert session object to JSON for etcd
var json = {
taskNo: session.lab.taskNo,
taskUpdates: session.taskUpdates,
pass: session.pass,
user: session.user,
userId: userid,
labId: labid,
courseId: session.courseId
};

var json = null;
etcd.set('tuxlab/sessions/'+userid+'/'+labid, json, function(err){
etcd.set('tuxlab/sessions/'+userid+'/'+labid, Json.stringify(json), function(err){
cb(err);
});
}
Expand Down
Loading