diff --git a/couchdb/views.js b/couchdb/views.js index 9ab3818..8e82e29 100644 --- a/couchdb/views.js +++ b/couchdb/views.js @@ -1 +1 @@ -{"_id":"_design/summary","_rev":"17-7946b6365b1273500fad19ffce81ff4c","language":"javascript","views":{"app_resources":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tvar logs = doc[id][index]\n\t\t\tfor(var i=0; i < logs.length; i++){\n\t\t\t\temit(doc._id,logs[i])\n\t\t\t}\n\t\t\t//emit(doc._id,doc[id][index][0])//doc[id][index])\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = 0 ;\n\tvar mem_avail = 0 ;\n\tvar mem_used = 0\n\n\tfor(i in values){\n\t\trow = values[i]\n\t\tmem_avail \t= (mem_avail < row.memory_available)?row.memory_available:mem_avail\n\t\tmem_used \t+= (row.memory_available*row.memory_usage/100)\n\t\tcpu\t\t+= row.cpu_usage\n\t}\n\n\tif(mem_avail > 999 && mem_avail < 999999){\n\t\tunits=\"MB\"\n\t}else {\n\t\tunits=\"GB\"\n\t}\n\tmem_avail = parseFloat(mem_avail.toFixed(2))\n\tmem_used = parseFloat(mem_used.toFixed(2))\n\n\treturn {\"app_count\":values.length,\"memory_available\":mem_avail,\"memory_usage\":mem_used,\"cpu_usage\":cpu,\"units\":units}\n}"},"app_names":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\temit(doc._id,id)\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = 0 ;\n\tvar mem = 0 ;\n\treturn values\n}"},"folder_size":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^folder.+$/i)){\n\n\t\t\tindex = doc[id].length -1 \n\t\t\tvar logs = doc[id][index]\n\t\t\tfor(var i=0; i < logs.length; i++){\n\t\t\t\temit(doc._id,logs[i])\n\t\t\t}\n\t\t\t//if (doc[id][index].length > 0){\n\t\t\t//\temit(doc._id,doc[id][index][0])//doc[id][index])\n\t\t\t//}\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar size=0\n\tvar units = {\"MB\":1000,\"GB\":1000000,\"TB\":1000000000}\n\tfor(i in values){\n\t\trow = values[i]\n\t\tsvalue = row.size.match(/^[\\d,.]+/i)\n\t\tukey \t= row.size.match(/[a-z]+$/i)\n\t\tsize\t+= parseFloat(svalue*units[ukey])\n\t}\n\tif (size > 999 && size < 999999){\n\t\tunits=\"MB\"\n\t\tsize /=1000\n\t}else if(size > 999999 && 999999999){\n\t\tunits=\"GB\"\n\t\tsize /=1000000\n\t}else{ \n\t\tunits = \"TB\"\n\t\tsize /=1000000000\n\t}\n\tsize = parseFloat(size.toFixed(2))\n\treturn {\"folder_count\":values.length,\"size\":size,\"units\":units} //parseFloat(values[0].size.match(/^[\\d,.]+/))\n}"},"app_status":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tif(doc[id][index].length > 0){\n\t\t\t\temit(doc._id,doc[id][index])\n\t\t\t}\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar status = {\"crash\":0,\"idle\":0,\"running\":0}\n\tfor(i in values){\n\t\tfor(ii in values[i]){\n\t\t\trow = values[i][ii]\n\t\t\tid = row.status\n\t\t\tif(status[id] != null){\n\t\t\t\tstatus[id] += 1\n\t\t\t}\n\n\t\t}\n\t}\n\treturn status\n}"},"resource_usage_trend":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tend = doc[id].length -1\n\t\t\tbeg = doc[id].length - 25\n\t\t\tfor(var i = end; i > beg ; --i){\n\t\t\t\temit(doc._id,doc[id][i])//doc[id][index])\n\t\t\t}\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = [] ;\n\tvar mem_avail = [] ;\n\tvar mem_used = []\n\tvar size = 20\n\tvar beg = null\n\tvar end = null\n\tapps = {}\n\tapp_count = 0\n\tfor(i in values){\n\t\t//end = values[i].length -1\n\t\t//beg = end - size\n\t\tfor(ii in values[i]){\n\t\t\trow = values[i][ii]\n\t\t\tapps[row.label] = 1\n\t\t\tif(beg == null){\n\t\t\t\tbeg = ([row.year,row.month,row.day]).join('/')+' ' +([row.hour,row.minute]).join(':')\n\t\t\t}\n\t\t\tmem_avail.push( parseFloat(row.memory_available.toFixed(2)))\n\t\t\tmem_used.push(row.memory_available*row.memory_usage/100)\n\t\t\tcpu.push(row.cpu_usage)\n\t\t\t\n\t\t}\n\t\tend = ([row.year,row.month,row.day]).join('/')+' ' +([row.hour,row.minute]).join(':')\n\t\n\t\t\n\t}\n\t//\n\t// counting applications found in the logs\n\t// There is no requirement on consistency of the logs\n\t//\n\tfor(i in apps){\n\t\tapp_count += 1\n\t}\n\t\n\t//return row\t//return values[0].slice(beg,end)\n\treturn {\"app_count\":app_count,\"beg\":beg,\"end\":end,\"memory_available\":mem_avail,\"memory_usage\":mem_used,\"cpu_usage\":cpu}\n}"},"app_status_details":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tbeg = doc[id].length -25 \n\t\t\tvar logs = doc[id].slice(beg,index);//[index]\n\n\t\t\tfor(var i=0; i < logs.length; i++){\n\t\t\t\tvar rec = logs[i]\n\t\t\t\tfor (ii in rec){\n\t\t\t\t\temit(doc._id,rec[ii])\n\t\t\t\t}\n\t\t\t}\n\t\t\t//emit(doc._id,doc[id][index][0])//doc[id][index])\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = 0 ;\n\tvar mem_avail = 0 ;\n\tvar mem_used = 0\n\tr = {}\n\t//\n\t// retrieving the memory available\n\tfor(i in values){\n\t\trow = values[i]\n\t\tmem_avail = (mem_avail < row.memory_available)?row.memory_available:mem_avail \n\t}\n\t//\n\t// Determining appropriate units of measurement\n\t//\n\t\t\n\tif(mem_avail > 999 && mem_avail < 999999){\n\t\tunits=\"MB\"\n\t}else {\n\t\tunits=\"GB\"\n\t}\n\n\n\tfor(i in values){\n\n\t\trow = values[i]\n\t\tvar id = row.label\n\t\t\n\t\tif (r[id] == null){\n\t\t\tr[id] = {\"beg\":null,\"end\":null,\"crash\":0,\"idle\":0,\"running\":0}\n\t\t}\n\t\tr[id][row.status] += 1\n\t\tif(r[id].beg == null){\n\t\t\tr[id].beg = ([row.year,row.month,row.day]).join('/')+' '+([row.hour,row.minute]).join(':')\n\t\t}\n\t\tr[id].end = ([row.year,row.month,row.day]).join('/')+' '+([row.hour,row.minute]).join(':')\n\t}\n\n\n\t//mem_avail = parseFloat(mem_avail.toFixed(2))\n\t//mem_used = parseFloat(mem_used.toFixed(2))\n\n\treturn r //{\"app_count\":values.length,\"memory_available\":mem_avail,\"memory_usage\":mem_used,\"cpu_usage\":cpu,\"units\":units}\n}"},"app_resource_usage_details":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tbeg = doc[id].length -25 \n\t\t\tvar logs = doc[id].slice(beg,index);//[index]\n\n\t\t\tfor(var i=0; i < logs.length; i++){\n\t\t\t\tvar rec = logs[i]\n\t\t\t\tfor (ii in rec){\n\t\t\t\t\temit(doc._id,rec[ii])\n\t\t\t\t}\n\t\t\t}\n\t\t\t//emit(doc._id,doc[id][index][0])//doc[id][index])\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = 0 ;\n\tvar mem_avail = 0 ;\n\tvar mem_used = 0\n\tr = {}\n\t//\n\t// retrieving the memory available\n\tfor(i in values){\n\t\trow = values[i]\n\t\tmem_avail = (mem_avail < row.memory_available)?row.memory_available:mem_avail \n\t}\n\t//\n\t// Determining appropriate units of measurement\n\t//\n\t\t\n\tif(mem_avail > 999 && mem_avail < 999999){\n\t\tunits=\"MB\"\n\t}else {\n\t\tunits=\"GB\"\n\t}\n\n\n\tfor(i in values){\n\n\t\trow = values[i]\n\t\tvar id = row.label\n\t\t\n\t\tif (r[id] == null){\n\t\t\tr[id] = {\"beg\":null,\"end\":null,\"memory_used\":[],\"cpu\":[]}\n\t\t}\n\n\t\tr[id].memory_used \t.push ( parseFloat((mem_avail*row.memory_usage/100).toFixed(2)) )\n\t\tr[id].cpu\t.push(row.cpu_usage)\n\t\tif(r[id].beg == null){\n\t\t\tr[id].beg = ([row.year,row.month,row.day]).join('/')+' '+([row.hour,row.minute]).join(':')\n\t\t}\n\t\tr[id].end = ([row.year,row.month,row.day]).join('/')+' '+([row.hour,row.minute]).join(':')\n\t}\n\n\n\t//mem_avail = parseFloat(mem_avail.toFixed(2))\n\t//mem_used = parseFloat(mem_used.toFixed(2))\n\n\treturn r //{\"app_count\":values.length,\"memory_available\":mem_avail,\"memory_usage\":mem_used,\"cpu_usage\":cpu,\"units\":units}\n}"}}} +{"_id":"_design/summary","_rev":"21-25fcd1ae8c3fea9dcca943c64b624dcf","language":"javascript","views":{"app_resources":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tvar logs = doc[id][index]\n\t\t\tfor(var i=0; i < logs.length; i++){\n\t\t\t\temit(doc._id,logs[i])\n\t\t\t}\n\t\t\t//emit(doc._id,doc[id][index][0])//doc[id][index])\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = 0 ;\n\tvar mem_avail = 0 ;\n\tvar mem_used = 0\n\n\tfor(i in values){\n\t\trow = values[i]\n\t\tmem_avail \t= (mem_avail < row.memory_available)?row.memory_available:mem_avail\n\t\tmem_used \t+= (row.memory_available*row.memory_usage/100)\n\t\tcpu\t\t+= row.cpu_usage\n\t}\n\n\tif(mem_avail > 999 && mem_avail < 999999){\n\t\tunits=\"MB\"\n\t}else {\n\t\tunits=\"GB\"\n\t}\n\tmem_avail = parseFloat(mem_avail.toFixed(2))\n\tmem_used = parseFloat(mem_used.toFixed(2))\n\n\treturn {\"app_count\":values.length,\"memory_available\":mem_avail,\"memory_usage\":mem_used,\"cpu_usage\":cpu,\"units\":units}\n}"},"app_names":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tvar rec = doc[id][index]\n\t\t\tvar apps = {}\n\t\t\tapps[id] = []\n\t\t\tfor(i in rec){\n\n\t\t\t\tapps[id].push(rec[i].label)\n\n\t\t\t}\n\t\t\temit(doc._id,apps)\n\t\t}\n\t}\n}"},"folder_size":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^folder.+$/i)){\n\n\t\t\tindex = doc[id].length -1 \n\t\t\tvar logs = doc[id][index]\n\t\t\tfor(var i=0; i < logs.length; i++){\n\t\t\t\temit(doc._id,logs[i])\n\t\t\t}\n\t\t\t//if (doc[id][index].length > 0){\n\t\t\t//\temit(doc._id,doc[id][index][0])//doc[id][index])\n\t\t\t//}\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar size=0\n\tvar units = {\"MB\":1000,\"GB\":1000000,\"TB\":1000000000}\n\tfor(i in values){\n\t\trow = values[i]\n\t\tsvalue = row.size.match(/^[\\d,.]+/i)\n\t\tukey \t= row.size.match(/[a-z]+$/i)\n\t\tsize\t+= parseFloat(svalue*units[ukey])\n\t}\n\tif (size > 999 && size < 999999){\n\t\tunits=\"MB\"\n\t\tsize /=1000\n\t}else if(size > 999999 && 999999999){\n\t\tunits=\"GB\"\n\t\tsize /=1000000\n\t}else{ \n\t\tunits = \"TB\"\n\t\tsize /=1000000000\n\t}\n\tsize = parseFloat(size.toFixed(2))\n\treturn {\"folder_count\":values.length,\"size\":size,\"units\":units} //parseFloat(values[0].size.match(/^[\\d,.]+/))\n}"},"app_status":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tif(doc[id][index].length > 0){\n\t\t\t\temit(doc._id,doc[id][index])\n\t\t\t}\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar status = {\"crash\":0,\"idle\":0,\"running\":0}\n\tfor(i in values){\n\t\tfor(ii in values[i]){\n\t\t\trow = values[i][ii]\n\t\t\tid = row.status\n\t\t\tif(status[id] != null){\n\t\t\t\tstatus[id] += 1\n\t\t\t}\n\n\t\t}\n\t}\n\treturn status\n}"},"resource_usage_trend":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tend = doc[id].length -1\n\t\t\tbeg = doc[id].length - 25\n\t\t\tfor(var i = end; i > beg ; --i){\n\t\t\t\temit(doc._id,doc[id][i])//doc[id][index])\n\t\t\t}\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = [] ;\n\tvar mem_avail = [] ;\n\tvar mem_used = []\n\tvar size = 20\n\tvar beg = null\n\tvar end = null\n\tapps = {}\n\tapp_count = 0\n\tfor(i in values){\n\t\t//end = values[i].length -1\n\t\t//beg = end - size\n\t\tfor(ii in values[i]){\n\t\t\trow = values[i][ii]\n\t\t\tapps[row.label] = 1\n\t\t\tif(beg == null){\n\t\t\t\tbeg = ([row.year,row.month,row.day]).join('/')+' ' +([row.hour,row.minute]).join(':')\n\t\t\t}\n\t\t\tmem_avail.push( parseFloat(row.memory_available.toFixed(2)))\n\t\t\tmem_used.push(row.memory_available*row.memory_usage/100)\n\t\t\tcpu.push(row.cpu_usage)\n\t\t\t\n\t\t}\n\t\tend = ([row.year,row.month,row.day]).join('/')+' ' +([row.hour,row.minute]).join(':')\n\t\n\t\t\n\t}\n\t//\n\t// counting applications found in the logs\n\t// There is no requirement on consistency of the logs\n\t//\n\tfor(i in apps){\n\t\tapp_count += 1\n\t}\n\t\n\t//return row\t//return values[0].slice(beg,end)\n\treturn {\"app_count\":app_count,\"beg\":beg,\"end\":end,\"memory_available\":mem_avail,\"memory_usage\":mem_used,\"cpu_usage\":cpu}\n}"},"app_status_details":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tbeg = doc[id].length -25 \n\t\t\tvar logs = doc[id].slice(beg,index);//[index]\n\n\t\t\tfor(var i=0; i < logs.length; i++){\n\t\t\t\tvar rec = logs[i]\n\t\t\t\t\n\t\t\t\tfor (ii in rec){\n\t\t\t\t\tvar row = {}\n\t\t\t\t\trow[id] = rec[ii]\n\t\t\t\t\temit(doc._id,row)//rec[ii])\n\t\t\t\t}\n\t\t\t}\n\t\t\t//emit(doc._id,doc[id][index][0])//doc[id][index])\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = 0 ;\n\tvar mem_avail = 0 ;\n\tvar mem_used = 0\n\tr = {}\n\t//\n\t// retrieving the memory available\n\tfor(i in values){\n\t\trow = values[i]\n\t\trec = values[i]\n\t\tfor (id in rec){\n\t\t\trow = rec[id]\n\t\t\tmem_avail = (mem_avail < row.memory_available)?row.memory_available:mem_avail \n\t\t}\n\t}\n\t//\n\t// Determining appropriate units of measurement\n\t//\n\t\t\n\tif(mem_avail > 999 && mem_avail < 999999){\n\t\tunits=\"MB\"\n\t}else {\n\t\tunits=\"GB\"\n\t}\n\n\n\tfor(i in values){\n\n\t\trow = values[i]\n\t\trec = values[i]\n\t\tfor(key in rec){\n\t\t\trow = rec[key]\n\t\t\tvar id = row.label\n\t\t\tif(r[key] == null){ r[key] = {}}\n\t\t\n\t\t\tif (r[id] == null){\n\t\t\t\tr[key][id] = {\"beg\":null,\"end\":null,\"crash\":0,\"idle\":0,\"running\":0}\n\t\t\t}\n\t\t\tr[key][id][row.status] += 1\n\t\t\tif(r[key][id].beg == null){\n\t\t\t\tr[key][id].beg = ([row.year,row.month,row.day]).join('/')+' '+([row.hour,row.minute]).join(':')\n\t\t\t}\n\t\t\tr[key][id].end = ([row.year,row.month,row.day]).join('/')+' '+([row.hour,row.minute]).join(':')\n\t\t}\n\t\n\t}\n\t//mem_avail = parseFloat(mem_avail.toFixed(2))\n\t//mem_used = parseFloat(mem_used.toFixed(2))\n\n\treturn r //{\"app_count\":values.length,\"memory_available\":mem_avail,\"memory_usage\":mem_used,\"cpu_usage\":cpu,\"units\":units}\n}"},"app_resource_usage_details":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\t\t\tbeg = doc[id].length -25 \n\t\t\tvar logs = doc[id].slice(beg,index);//[index]\n\n\t\t\tfor(var i=0; i < logs.length; i++){\n\t\t\t\tvar rec = logs[i]\n\t\t\t\tfor (ii in rec){\n\t\t\t\t\trow = {} //rec[ii]\n\t\t\t\t\trow[id] = rec[ii]\n\t\t\t\t\temit(doc._id,row)//rec[ii])\n\t\t\t\t}\n\t\t\t}\n\t\t\t//emit(doc._id,doc[id][index][0])//doc[id][index])\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = 0 ;\n\tvar mem_avail = 0 ;\n\tvar mem_used = 0\n\tr = {}\n\t//\n\t// retrieving the memory available\n\tfor(i in values){\n\t\t//row = values[i]\n\t\trec = values[i]\n\t\tfor (id in rec){\n\t\t\trow = rec[id]\n\t\t\tmem_avail = (mem_avail < row.memory_available)?row.memory_available:mem_avail \n\t\t}\n\t}\n\t//\n\t// Determining appropriate units of measurement\n\t//\n\t\t\n\tif(mem_avail > 999 && mem_avail < 999999){\n\t\tunits=\"MB\"\n\t}else {\n\t\tunits=\"GB\"\n\t}\n\n\n\tfor(i in values){\n\n\t\trow = values[i]\n\t\trec = values[i]\n\t\tfor (node in rec){\n\t\t\trow = rec[node]\n\t\t\tvar id\t = row.label\n\t\t\tif (r[node] == null){\n\t\t\t\tr[node] = {}\n\t\t\t}\n\t\t\tif (r[node][id] == null){\n\t\t\t\tr[node][id] = {\"beg\":null,\"end\":null,\"memory_used\":[],\"cpu\":[]}\n\t\t\t}\n\n\t\t\tr[node][id].memory_used \t.push ( parseFloat((mem_avail*row.memory_usage/100).toFixed(2)) )\n\t\t\tr[node][id].cpu\t.push(row.cpu_usage)\n\t\t\tif(r[node][id].beg == null){\n\t\t\t\tr[node][id].beg = ([row.year,row.month,row.day]).join('/')+' '+([row.hour,row.minute]).join(':')\n\t\t\t}\n\t\t\tr[node][id].end = ([row.year,row.month,row.day]).join('/')+' '+([row.hour,row.minute]).join(':')\n\t\t}\n\t}\n\n\n\t//mem_avail = parseFloat(mem_avail.toFixed(2))\n\t//mem_used = parseFloat(mem_used.toFixed(2))\n\n\treturn r //{\"app_count\":values.length,\"memory_available\":mem_avail,\"memory_usage\":mem_used,\"cpu_usage\":cpu,\"units\":units}\n}"},"nodes":{"map":"function(doc) {\n\tfor(id in doc){\n\t\tif(id.match(/^apps.+$/i)){\n\t\t\tindex = doc[id].length -1 \n\n\t\t\temit(doc._id,id)\n\t\t}\n\t}\n}","reduce":"function(keys,values){\n\tvar cpu = 0 ;\n\tvar mem = 0 ;\n\treturn values\n}"}}} \ No newline at end of file diff --git a/src/api/index.py b/src/api/index.py index b760978..9bad370 100644 --- a/src/api/index.py +++ b/src/api/index.py @@ -48,19 +48,39 @@ class_write= CONFIG['store']['class']['write'] factory = DataSourceFactory() # gReader = factory.instance(type=class_read,args=p) -@app.route('/1/get/apps') +@app.route('/1/get/nodes') def get_apps(): """ This function returns the labels of applications for every node registered + @param None e.g: apps@zulu.org """ r = [] try: + gReader = factory.instance(type=class_read,args=p) + r = gReader.view('summary/nodes',key=p['uid']) + except Exception,e: + print (e) + return json.dumps(r) + +@app.route('/1/get/apps') +def get_apps(): + """ + This function returns the applications for a given node + @param node identifier e.g: apps@zulu.org + """ + r = [] + try: + node_id = request.args.get('node') gReader = factory.instance(type=class_read,args=p) r = gReader.view('summary/app_names',key=p['uid']) + r = r[node_id] except Exception,e: print (e) return json.dumps(r) + + + @app.route('/1/get/summary/') def get_summary(id): """ @@ -88,7 +108,7 @@ def get_usage_trend(): """ This function returns cpu/memory usage for the entire system being monitored. It will return the 24 most recent observations in the logs - No parameters should be passed. + @param None @return {memory_usage:[],cpu_usage:[],app_count:value,memory_available:[]} """ r = {} @@ -104,37 +124,41 @@ def get_usage_trend(): def get_usage_detail(): """ This function returns detailed information about usage per application monitored. It will return the 24 most recent observations in the logs - No parameters should be passed - @return {app_1:{memory_usage:[],cpu_usage:[]},app_2:{memory_usage:[],cpu_usage:[]},...} - @TODO: - - add node references because if the same application lives on other nodes the info will be overriden - - parameters to be passed will be the node information + + @param node node identifier e.g: apps@zulu.io + @return {node_x:{app_1:{memory_usage:[],cpu_usage:[]}},...} """ r = {} try: + id = request.args.get('node') gReader = factory.instance(type=class_read,args=p) r = gReader.view('summary/app_resource_usage_details',key=p['uid']) + r = r[id] except Exception,e: print (e) return json.dumps(r) -@app.route('/1/app/status/') -def app_status(id) : +@app.route('/1/app/status') +def app_status() : """ - This function aggregates the number of crashes/running/idle instances found in the past 24 log entries - @TODO: The back-end doesn't allow nodes to be specified - @param id node that contains an app - """ - r = [] + This function aggregates the number of crashes/running/idle instances found in the past 24 log entries + + @param nid node identifier e.g: app@zulu.io + @param aid application identifier e.g: kate, firefox, chrome ... specified in the configuraiton + """ + r = [] try: - gReader = factory.instance(type=class_read,args=p) - r = gReader.view('summary/app_status_details',key=p['uid']) - # - #@TODO: Once the back-end enables the nodes in which the application is running, uncomment the line below - # - #r = r[id] - except Exception,e: - print e - return r + nid = request.args.get('node') # Node identifier + aid = request.args.get('app') # application identifier + + gReader = factory.instance(type=class_read,args=p) + r = gReader.view('summary/app_status_details',key=p['uid']) + # + #@TODO: Once the back-end enables the nodes in which the application is running, uncomment the line below + # + r = r[nid][aid] + except Exception,e: + print e + return r @app.route('/get/') def procs(id): try: