Skip to content
This repository has been archived by the owner on Jul 26, 2024. It is now read-only.

Commit

Permalink
Added HTML GUI for monitoring
Browse files Browse the repository at this point in the history
  • Loading branch information
sylvinus committed Apr 7, 2011
1 parent 6e4b8da commit aeb5c54
Show file tree
Hide file tree
Showing 19 changed files with 1,263 additions and 1 deletion.
16 changes: 15 additions & 1 deletion fsdfs/filesystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -591,12 +591,13 @@ def do_POST(self):

self.simpleResponse(500,str(e))

self.server.fs.error("When serving %s %s : %s" % (p[1],params,e))
self.server.fs.error("When serving %s %s : %s" % (self.path,params,e))


def simpleResponse(self, code, content):

self.send_response(code)
self.send_header("Access-Control-Allow-Origin","*")
self.end_headers()
self.wfile.write(json.dumps(content))
self.connection.shutdown(socket.SHUT_RDWR)
Expand All @@ -620,13 +621,25 @@ def _getPostParams(self):

qs = urlparse.parse_qs(data)


if not "p" in qs:
self.send_response(403)
self.send_header("Access-Control-Allow-Origin","*")
self.connection.shutdown(1)
return False

#make sure the hash matches
query = qs["p"][0]

calcHash = self.server.fs.hashQuery(query)



if calcHash != qs["h"][0]:
print "*"*200
print calcHash,qs["h"][0],query
self.send_response(401)
self.send_header("Access-Control-Allow-Origin","*")
self.connection.shutdown(1)
return False

Expand All @@ -635,6 +648,7 @@ def _getPostParams(self):
#more than 1 day time diff, request is considered expired...
if abs(int(params.get("_time",0)) - time.time()) > 3600 * 24:
self.send_response(401)
self.send_header("Access-Control-Allow-Origin","*")
self.connection.shutdown(1)
return False

Expand Down
Binary file added gui/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-bg_flat_15_cd0a0a_40x100.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-bg_glass_100_e4f1fb_1x400.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-bg_glass_50_3baae3_1x400.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-bg_glass_80_d7ebf9_1x400.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-bg_highlight-hard_70_000000_1x100.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-bg_highlight-soft_100_deedf7_1x100.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-icons_2694e8_256x240.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-icons_2e83ff_256x240.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-icons_3d80b3_256x240.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-icons_72a7cf_256x240.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gui/images/ui-icons_ffffff_256x240.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
298 changes: 298 additions & 0 deletions gui/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,298 @@
<html>
<head>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script>
<script src='jquery.jqGrid.min.js'></script>
<style>


@import url("jquery-ui-1.8.11.custom.css");

@import url("ui.jqgrid.css");
</style>
</head>
<body style="background-color:#F0F0F0">


<h3>FSDFS global status</h3>
<table>
<tr>
<th>Count</th>
<td><span id='global_countGlobal'></span></td>
</tr>
<tr>
<th>Size</th>
<td><span id='global_sizeGlobal'></span></td>
</tr>
<tr>
<th>minKn</th>
<td><span id='global_minKnGlobal'></span></td>
</tr>
</table>

<h3>Nodes status</h3>

<table id="nodes"></table>




<script>


var sha1 = function(msg) {

function rotate_left(n,s) {
var t4 = ( n<<s ) | (n>>>(32-s));
return t4;
};

function lsb_hex(val) {
var str="";
var i;
var vh;
var vl;

for( i=0; i<=6; i+=2 ) {
vh = (val>>>(i*4+4))&0x0f;
vl = (val>>>(i*4))&0x0f;
str += vh.toString(16) + vl.toString(16);
}
return str;
};

function cvt_hex(val) {
var str="";
var i;
var v;

for( i=7; i>=0; i-- ) {
v = (val>>>(i*4))&0x0f;
str += v.toString(16);
}
return str;
};


function Utf8Encode(string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";

for (var n = 0; n < string.length; n++) {

var c = string.charCodeAt(n);

if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}

}

return utftext;
};

var blockstart;
var i, j;
var W = new Array(80);
var H0 = 0x67452301;
var H1 = 0xEFCDAB89;
var H2 = 0x98BADCFE;
var H3 = 0x10325476;
var H4 = 0xC3D2E1F0;
var A, B, C, D, E;
var temp;

msg = Utf8Encode(msg);

var msg_len = msg.length;

var word_array = new Array();
for( i=0; i<msg_len-3; i+=4 ) {
j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
word_array.push( j );
}

switch( msg_len % 4 ) {
case 0:
i = 0x080000000;
break;
case 1:
i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
break;

case 2:
i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
break;

case 3:
i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8 | 0x80;
break;
}

word_array.push( i );

while( (word_array.length % 16) != 14 ) word_array.push( 0 );

word_array.push( msg_len>>>29 );
word_array.push( (msg_len<<3)&0x0ffffffff );


for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {

for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);

A = H0;
B = H1;
C = H2;
D = H3;
E = H4;

for( i= 0; i<=19; i++ ) {
temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}

for( i=20; i<=39; i++ ) {
temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}

for( i=40; i<=59; i++ ) {
temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}

for( i=60; i<=79; i++ ) {
temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
}

H0 = (H0 + A) & 0x0ffffffff;
H1 = (H1 + B) & 0x0ffffffff;
H2 = (H2 + C) & 0x0ffffffff;
H3 = (H3 + D) & 0x0ffffffff;
H4 = (H4 + E) & 0x0ffffffff;

}

var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

return temp.toLowerCase();

}


$.extend({
getUrlVars: function(){
var vars = {}, hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars[hash[0]] = hash[1];
}
return vars;
}
});

var args = $.getUrlVars();

if (!args.secret) {
args.secret = prompt("fsdfs swarm secret?");
}
if (!args.master) {
args.master = prompt("fsdfs master?");
}

$.support.cors=true;

var query = function(verb,params) {

params["_time"] = parseInt(+new Date()/1000);

var qs = JSON.stringify(params);

var hash = sha1(sha1(qs) + args.secret);

//console.log("h="+hash+"&p="+encodeURIComponent(qs));

$.ajax({
type:"POST",
data:"h="+hash+"&p="+encodeURIComponent(qs),
url:"http://"+args.master+"/"+verb,
dataType:"text json",
cache:false,
success:function(data, textStatus, jqXHR) {
console.log(data, textStatus, jqXHR);

var i=0;
$.each(data.nodes,function(i,elt) {
if (elt.node==args.master) {
elt.node = "<b>"+elt.node+"</b>";
}
jQuery("#nodes").jqGrid('addRowData',i+1,elt);
i++;
});

$.each(data,function(i,elt) {

$("#global_"+i).html(JSON.stringify(elt));

});


}
});
};

jQuery("#nodes").jqGrid({
datatype: "local",
height: 600,
colNames:['Node','# files', 'size','Uptime', 'Last Update','Free disk','maxKn'],
colModel:[
{name:'node',index:'node', width:200},
{name:'count',index:'count', width:110, sorttype:"float"},
{name:'size',index:'size', width:110, sorttype:"float"},
{name:'uptime',index:'uptime', width:90, sorttype:"float"},
{name:'lastUpdate',index:'lastUpdate', width:110, sorttype:"float"},
{name:'df',index:'df', width:160, sorttype:"float"},
{name:'maxKn',index:'maxKn', width:500, sorttype:"float"}

],
multiselect: true,
caption: "FSDFS nodes"
});



query("GLOBALSTATUS",{});

</script>
</body>
</html>
Loading

0 comments on commit aeb5c54

Please sign in to comment.