1
|
define([
|
2
|
"dojo/_base/connect",
|
3
|
"dojo/_base/lang",
|
4
|
"dojo/_base/array",
|
5
|
"dojo/topic",
|
6
|
"dojox/data/ClientFilter",
|
7
|
"dojox/data/JsonQueryRestStore",
|
8
|
"steam2/Service",
|
9
|
"steam2/models/Server",
|
10
|
"steam2/models/Image",
|
11
|
'stabile/ui_update',
|
12
|
"stabile/stores"
|
13
|
], function(connect, lang, arrayUtil, topic, ClientFilter, JsonRestStore, Service, Server, Image){
|
14
|
|
15
|
var parseResponse = function(response){
|
16
|
// Not used anywhere!!
|
17
|
// summary: parse the response on successful actions
|
18
|
// response: String
|
19
|
console.log("parsing response in steam2!!")
|
20
|
var lines = response.split("\n");
|
21
|
|
22
|
// Does not seem to be used
|
23
|
function parseLine(line){
|
24
|
line = line.slice(line.indexOf("=") + 1);
|
25
|
// OK suspending ubuntu slet igen-0
|
26
|
var parts = line.split(" ");
|
27
|
var status = parts[0];
|
28
|
var serverStatus = parts[1];
|
29
|
var message = line.slice(status.length + 1);
|
30
|
if(status == "OK"){
|
31
|
return {status:status, message: message};
|
32
|
} else {
|
33
|
return {status:status, message:message, error:true};
|
34
|
}
|
35
|
}
|
36
|
|
37
|
var results = [];
|
38
|
|
39
|
arrayUtil.forEach(lines, function(l){
|
40
|
if(l){
|
41
|
var parsed = parseLine(l);
|
42
|
|
43
|
dojo.publish("message", [{
|
44
|
message: parsed.message,
|
45
|
type: parsed.error ? "warning" : "message",
|
46
|
duration: 3000
|
47
|
}]);
|
48
|
|
49
|
results.push(parsed);
|
50
|
}
|
51
|
});
|
52
|
|
53
|
return results;
|
54
|
};
|
55
|
|
56
|
var reloadSystems = function() {
|
57
|
systemsDataStore = new JsonRestStore({
|
58
|
target: '/stabile/systems', // + (ui_update.session?"?s="+ui_update.session:""),
|
59
|
idAttribute: 'uuid',
|
60
|
syncMode:false,
|
61
|
schema: {
|
62
|
prototype: Server.prototype
|
63
|
},
|
64
|
cacheByDefault: true
|
65
|
});
|
66
|
return systemsDataStore;
|
67
|
};
|
68
|
|
69
|
var systemsDataStore = new JsonRestStore({
|
70
|
target: '/stabile/systems/', // + (ui_update.session?"?s="+ui_update.session:""),
|
71
|
idAttribute: 'uuid',
|
72
|
syncMode:false,
|
73
|
schema: {
|
74
|
prototype: Server.prototype
|
75
|
},
|
76
|
query: {uuid:'*'},
|
77
|
cacheByDefault: true
|
78
|
});
|
79
|
|
80
|
dojox.data.JsonRestStore.prototype.reset = function(uuid){
|
81
|
this.clearCache();
|
82
|
// remove all the existing elements from the index
|
83
|
// console.log("Deleting from Dojo (systems)", this.target);
|
84
|
for (idx in dojox.rpc.Rest._index) {
|
85
|
if (uuid && uuid!=='norender') {
|
86
|
if (dojox.rpc.Rest._index[idx].uuid == uuid) {
|
87
|
// console.log("Deleting uuid from Dojo (systems): " + idx + ", " + uuid);
|
88
|
delete dojox.rpc.Rest._index[idx];
|
89
|
}
|
90
|
} else if (idx.match("^" + this.target)) {
|
91
|
// console.log("Deleting from Dojo (systems): " + idx);
|
92
|
delete dojox.rpc.Rest._index[idx];
|
93
|
}
|
94
|
};
|
95
|
this._updates = [];
|
96
|
// clear the query cache
|
97
|
//this.fetch({queryOptions:{cache:false}});
|
98
|
//this.fetch({query:{uuid:"*"},queryOptions:{cache:false}});
|
99
|
//this.close();
|
100
|
//this.revert();
|
101
|
|
102
|
console.log("refreshed target", this.target);
|
103
|
if (uuid!=='norender') {
|
104
|
if (this.target.match("systems")) {
|
105
|
console.log("not rendering systems");
|
106
|
home.grid.render();
|
107
|
} else if (this.target.match("servers")) {
|
108
|
console.log("rendering servers");
|
109
|
servers.grid.render();
|
110
|
} else if (this.target.match("images")) {
|
111
|
console.log("rendering images");
|
112
|
images.grid.render();
|
113
|
} else if (this.target.match("networks")) {
|
114
|
console.log("rendering networks");
|
115
|
networks.grid.render();
|
116
|
} else if (this.target.match("nodes")) {
|
117
|
console.log("rendering nodes");
|
118
|
nodes.grid.render();
|
119
|
} else if (this.target.match("users")) {
|
120
|
console.log("rendering users");
|
121
|
users.grid.render();
|
122
|
}
|
123
|
}
|
124
|
// very, very ugly :(
|
125
|
setTimeout(function() {q = dojo.query('.irigo-tooltip'); q.irigoTooltip && q.irigoTooltip();},1000);
|
126
|
return true;
|
127
|
}
|
128
|
|
129
|
var imagesDataStore = JsonRestStore({
|
130
|
service: new Service('/stabile/images?action=list&_=/'),
|
131
|
idAttribute: 'uuid',
|
132
|
schema: {
|
133
|
prototype: Image.prototype
|
134
|
}
|
135
|
});
|
136
|
|
137
|
|
138
|
|
139
|
steam2.stores = {
|
140
|
systems:systemsDataStore,
|
141
|
images:imagesDataStore,
|
142
|
parseResponse:parseResponse,
|
143
|
reloadSystems:reloadSystems
|
144
|
};
|
145
|
|
146
|
topic.subscribe("servers:update", function(server){
|
147
|
|
148
|
var port = server.displayport || server.port;
|
149
|
var macip = server.displayip || server.macip;
|
150
|
|
151
|
//delete server['id'];
|
152
|
//delete server['displayip'];
|
153
|
//delete server['displayport'];
|
154
|
|
155
|
if(port){
|
156
|
server.port = port;
|
157
|
}
|
158
|
if(macip){
|
159
|
server.macip = macip;
|
160
|
}
|
161
|
|
162
|
|
163
|
function update(uitem){
|
164
|
if(uitem && server['status']){
|
165
|
console.log("servers:update (refreshing home tab)", uitem.status, server.status);
|
166
|
systemsDataStore.setValue(uitem, 'status', server.status);
|
167
|
var i = home.grid.getItemIndex(uitem);
|
168
|
if (i!=-1) {
|
169
|
// console.log("updating row",i,uitem.name, uitem.system);
|
170
|
home.grid.updateRow(i);
|
171
|
}
|
172
|
if (uitem.system) {
|
173
|
systemsDataStore.fetchItemByIdentity({identity: uitem.system,
|
174
|
onItem: function(sysitem){
|
175
|
var j = home.grid.getItemIndex(sysitem);
|
176
|
if (j!=-1) home.grid.updateRow(j);
|
177
|
// console.log("updating system row",j, sysitem.name);
|
178
|
}})
|
179
|
}
|
180
|
if (home.currentItem) home.updateVitals(home.currentItem);
|
181
|
else home.updateVitals("update");
|
182
|
}
|
183
|
}
|
184
|
if (server.uuid) {
|
185
|
// systemsDataStore.fetchItemByIdentity({identity: server.uuid,
|
186
|
// onItem: update,
|
187
|
// onError: function() {;}
|
188
|
// });
|
189
|
}
|
190
|
});
|
191
|
|
192
|
//steam2.stores.images.fetch({});
|
193
|
//This for some reason causes this store to be reloaded from server whenever the image store in "steam1" is refreshed...
|
194
|
//connect.connect(stores.images, 'revert', function(){
|
195
|
// steam2.stores.images.fetch({});
|
196
|
//});
|
197
|
|
198
|
return steam2.stores;
|
199
|
|
200
|
});
|
201
|
|