HTML
	<canvas id="canvas" width="300" height="300">
	 
	CSS
	/*Centering the gauge*/
	#canvas {
	    display: block;
	    width: 300px;
	    margin: 100px auto;
	}
	 
	JavaScript
	<script language="JavaScript">
	window.onload = function(){
	    //canvas initialization
	    var canvas = document.getElementById("canvas");
	    var ctx = canvas.getContext("2d");
	    //dimensions
	    var W = canvas.width;
	    var H = canvas.height;
	    //Variables
	    var degrees = 0;
	    var new_degrees = 0;
	    var difference = 0;
	    var color = "lightgreen"; //green looks better to me
	    var bgcolor = "#222";
	    var text;
	    var animation_loop, redraw_loop;
	     
	    function init()
	    {
	        //Clear the canvas everytime a chart is drawn
	        ctx.clearRect(0, 0, W, H);
	         
	        //Background 360 degree arc
	        ctx.beginPath();
	        ctx.strokeStyle = bgcolor;
	        ctx.lineWidth = 30;
	        ctx.arc(W/2, H/2, 100, 0, Math.PI*2, false); //you can see the arc now
	        ctx.stroke();
	         
	        //gauge will be a simple arc
	        //Angle in radians = angle in degrees * PI / 180
	        var radians = degrees * Math.PI / 180;
	        ctx.beginPath();
	        ctx.strokeStyle = color;
	        ctx.lineWidth = 30;
	        //The arc starts from the rightmost end. If we deduct 90 degrees from the angles
	        //the arc will start from the topmost end
	        ctx.arc(W/2, H/2, 100, 0 - 90*Math.PI/180, radians - 90*Math.PI/180, false); 
	        //you can see the arc now
	        ctx.stroke();
	         
	        //Lets add the text
	        ctx.fillStyle = color;
	        ctx.font = "50px bebas";
	        text = Math.floor(degrees/360*100) + "%";
	        //Lets center the text
	        //deducting half of text width from position x
	        text_width = ctx.measureText(text).width;
	        //adding manual value to position y since the height of the text cannot
	        //be measured easily. There are hacks but we will keep it manual for now.
	        ctx.fillText(text, W/2 - text_width/2, H/2 + 15);
	    }
	     
	    function draw()
	    {
	        //Cancel any movement animation if a new chart is requested
	        if(typeof animation_loop != undefined) clearInterval(animation_loop);
	         
	        //random degree from 0 to 360
	        new_degrees = Math.round(Math.random()*360);
	        difference = new_degrees - degrees;
	        //This will animate the gauge to new positions
	        //The animation will take 1 second
	        //time for each frame is 1sec / difference in degrees
	        animation_loop = setInterval(animate_to, 1000/difference);
	    }
	     
	    //function to make the chart move to new degrees
	    function animate_to()
	    {
	        //clear animation loop if degrees reaches to new_degrees
	        if(degrees == new_degrees) 
	            clearInterval(animation_loop);
	         
	        if(degrees < new_degrees)
	            degrees++;
	        else
	            degrees--;
	             
	        init();
	    }
	     
	    //Lets add some animation for fun
	    draw();
	    redraw_loop = setInterval(draw, 2000); //Draw a new chart every 2 seconds   
	}
	</script>