Project

General

Profile

Download (5.98 KB) Statistics
| Branch: | Revision:
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

    
(12-12/14)