<html> <head> <title>Disk Usage</title> <script type="text/javascript"> if (typeof(P4JsApi) != 'undefined') { P4JsApi.setWebKitDeveloperExtrasEnabled(true); } </script> <script src="js/Chart.min.js"></script> <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js"></script> --> </head> <body> <canvas id="myChart" width="400" height="400"></canvas> <script> function getColorPairs(n){ var color = [ { color:"#F7464A", highlight: "#FF5A5E", label: "Red" }, { color: "#46BFBD", highlight: "#5AD3D1", label: "Green" }, { color: "#FDB45C", highlight: "#FFC870", label: "Yellow" }]; return color[n%(color.length)]; } function getDoughnutData(base) { console.log('getDoughnutData('+base+')'); if (base[base.length-1] != '/') { base += '/'; } base += '*'; var data = []; var dirs = P4JsApi.p4('dirs '+base); for (var i=0; i<dirs.size; i++) { var dir = dirs.data[i].dir; var rv = P4JsApi.p4('sizes -hs '+dir+'/...'); console.log(dir); console.log(rv); var cp = getColorPairs(i); console.log(cp.label); data.push({ value: rv.data[0].fileSize ,label: dir // rv.data[0].path ,color: cp.color ,highlight: cp.highlight }); } return data; } function foo(base) { var ctx = document.getElementById('myChart').getContext('2d'); myChart = new Chart(ctx).Doughnut(getDoughnutData(base), { //Boolean - Whether we should show a stroke on each segment segmentShowStroke : true, //String - The colour of each segment stroke segmentStrokeColor : "#fff", //Number - The width of each segment stroke segmentStrokeWidth : 2, //Number - The percentage of the chart that we cut out of the middle percentageInnerCutout : 50, // This is 0 for Pie charts //Number - Amount of animation steps animationSteps : 100, //String - Animation easing effect animationEasing : "easeOutBounce", //Boolean - Whether we animate the rotation of the Doughnut animateRotate : true, //Boolean - Whether we animate scaling the Doughnut from the centre animateScale : false, //String - A legend template // legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li><span style=\"background-color:<%=segments[i].fillColor%>\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>" }); document.getElementById('myChart').onclick = function(evt){ var activePoints = myChart.getSegmentsAtEvent(evt); console.log(activePoints[0]._saved.label); var j = myChart.segments.length for (var i=0; i<j; i++) { console.log(myChart.segments[i]); myChart.removeData(); } data = getDoughnutData(activePoints[0]._saved.label); for (var i=0; i<data.length; i++) { console.log(myChart.addData(data[i], i)); } // myChart.update(); }; } var tgt = P4JsApi.getSelection(); if (tgt == []) { tgt = '//'; } else { tgt = tgt[0]; if (tgt.slice(0,12) === 'p4:///files/') { tgt = '//'+tgt.slice(12); } } console.log(tgt); foo(tgt); </script> <h1>Instruction</h1> <ol> <li> select a directory in the depot view; </li> <li>right click on the page and select refresh;</li> <li>hover the doughnut chart and click on one of the segments to drill down.</li> </ol> </body> </html>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 16686 | Lester Cheung |
A simple P4V applet to show how much disk space is used at #head. Add '-a' to the "p4 sizes" call to get disk usage for ALL revs. Only wrote it because I can't find one available - please improve it or show me a better one to use :) |