| 1 | // ======================================================================================
|
|---|
| 2 |
|
|---|
| 3 | function getSchedule()
|
|---|
| 4 | {
|
|---|
| 5 | // List of all available measurement types
|
|---|
| 6 | var measurementType = [ "STARTUP", "IDLE", "DRSCALIB", "SINGLEPE", "DATA", "RATESCAN", "SHUTDOWN" ];
|
|---|
| 7 |
|
|---|
| 8 | // Get current time
|
|---|
| 9 | var start = new Date();//new Date("2013-04-07 19:00:00 UTC");
|
|---|
| 10 |
|
|---|
| 11 | // Because Main.js could start a new observations just in the moment between 'now'
|
|---|
| 12 | // and entering the new data in the database, we have to use the unique id
|
|---|
| 13 | // in Main.js to check if the current observation should be changed (and sub resetted)
|
|---|
| 14 | start = new Date(start.getTime()-12*3600000);
|
|---|
| 15 |
|
|---|
| 16 | // ----------------------------------------------------------------------
|
|---|
| 17 |
|
|---|
| 18 | // Connect to database
|
|---|
| 19 | var db = new Database($['schedule-database']);
|
|---|
| 20 |
|
|---|
| 21 | // get all sources from database
|
|---|
| 22 | var sources = db.query("SELECT * from Source");
|
|---|
| 23 |
|
|---|
| 24 | // Get the current schedule
|
|---|
| 25 | var rows = db.query("SELECT * FROM Schedule WHERE fStart>'"+start.toISOString()+"' ORDER BY fStart, fMeasurementID");
|
|---|
| 26 |
|
|---|
| 27 | // Close db connection
|
|---|
| 28 | db.close();
|
|---|
| 29 |
|
|---|
| 30 | // ----------------------------------------------------------------------
|
|---|
| 31 |
|
|---|
| 32 | var schedule = [];
|
|---|
| 33 | var entry = -1;
|
|---|
| 34 | var sub = 0;
|
|---|
| 35 |
|
|---|
| 36 | for (var i=0; i<rows.length; i++)
|
|---|
| 37 | {
|
|---|
| 38 | var sub = rows[i]['fMeasurementID'];
|
|---|
| 39 | if (sub==0)
|
|---|
| 40 | entry++;
|
|---|
| 41 |
|
|---|
| 42 | var m = { }
|
|---|
| 43 |
|
|---|
| 44 | var task = rows[i]['fMeasurementTypeKey'];
|
|---|
| 45 | m.task = measurementType[task];
|
|---|
| 46 |
|
|---|
| 47 | var src = rows[i]['fSourceKey'];
|
|---|
| 48 | if (src)
|
|---|
| 49 | {
|
|---|
| 50 | // Convert SourceKey to SourceName
|
|---|
| 51 | var arr = sources.filter(function(e) { return e['fSourceKEY']==src; });
|
|---|
| 52 | if (arr.length==0)
|
|---|
| 53 | throw new Error("SourceKey "+src+" unknown.");
|
|---|
| 54 |
|
|---|
| 55 | m.source = arr[0]['fSourceName'];
|
|---|
| 56 | }
|
|---|
| 57 |
|
|---|
| 58 | var data = rows[i]['fData'];
|
|---|
| 59 | if (data)
|
|---|
| 60 | {
|
|---|
| 61 | var obj = JSON.parse(("{"+data+"}").replace(/\ /g, "").replace(/(\w+):/gi, "\"$1\":"));
|
|---|
| 62 | for (var key in obj)
|
|---|
| 63 | m[key] = obj[key];
|
|---|
| 64 | }
|
|---|
| 65 |
|
|---|
| 66 | if (!schedule[entry])
|
|---|
| 67 | schedule[entry] = { };
|
|---|
| 68 |
|
|---|
| 69 | schedule[entry].id = rows[i]['fScheduleID'];
|
|---|
| 70 | schedule[entry].date = new Date(rows[i]['fStart']+" UTC");
|
|---|
| 71 |
|
|---|
| 72 | if (!schedule[entry].measurements)
|
|---|
| 73 | schedule[entry].measurements = [];
|
|---|
| 74 |
|
|---|
| 75 | schedule[entry].measurements[sub] = m;
|
|---|
| 76 | }
|
|---|
| 77 |
|
|---|
| 78 | for (var i=0; i<schedule.length; i++)
|
|---|
| 79 | schedule[i] = new Observation(schedule[i]);
|
|---|
| 80 |
|
|---|
| 81 | return schedule;
|
|---|
| 82 | }
|
|---|
| 83 |
|
|---|
| 84 | // -------------------------------------------------------------------------------------
|
|---|
| 85 |
|
|---|
| 86 | /*
|
|---|
| 87 | // remove "
|
|---|
| 88 | conv = conv.replace(/\"(\w+)\":/ig, "$1:");
|
|---|
| 89 | // must contain one , less than :
|
|---|
| 90 | // must not contain " and '
|
|---|
| 91 | //var test = "{ra:12,dec:13}".replace(/\ /g, "").replace(/(\w+):/gi, "\"$1\":");
|
|---|
| 92 | */
|
|---|