ThinkGeek - Cool Stuff for Geeks and Technophiles

December 13, 2003

Get the stats of your apps in flashcom

Here are two similar but a bit differents ways of get stats of your apps. both of them use a persisten Shared objet but, one get the global stats with application.getStats() and override the So, and the other one get the stats of each client session with clien.getStats() and add the values to the persisten SharedObject. You can use both in the same app

let's see the codes

Case one

application.onAppStart=function(){
 //So onAppStart. there is created when the app starts the first time
 	my_so=SharedObject.get("el_so",true);
 	mis_stats={bytes_in:0, bytes_out:0, msg_in:0, msg_out:0, msg_dropped:0, total_connects:0, total_disconnects:0};
 	my_so.setProperty("appStats", mis_stats);
};
application.onConnect=function(newClient){
 	application.acceptConnection(newClient);
 	trace("new user");
};

application.onDisconnect=function(oldClient){
 	trace("User disconnected");
 	stats = application.getStats();
 	trace("Total bytes received: " + stats.bytes_in);
 	trace("Total bytes sent : " + stats.bytes_out);
 	trace("RTMP messages received : " + stats.msg_in);
 	trace("RTMP messages sent : " + stats.msg_out);
 	trace("RTMP messages dropped : " + stats.msg_dropped);
 	trace("Total clients connected : " + stats.total_connects);
 	trace("Total clients disconnected : " + stats.total_disconnects);
 //Give data to SO
 	my_so.setProperty("appStats", stats);
 //force to save
 	my_so.flush();
 //Let´s check that all is ok
 //get so slot
 	var the_stats=my_so.getProperty("appStats");
 //see data on screen
 	trace("check data");
 	for(var prop in the_stats){
  		trace(prop+" : "+the_stats[prop]);
  	}
 	
};

the other way is

application.onAppStart=function(){
 	my_so=SharedObject.get("el_so",true);
 	mis_stats={bytes_in:0, bytes_out:0, msg_in:0, msg_out:0, msg_dropped:0, ping_rtt:0};
 	my_so.setProperty("appStats", mis_stats);
};

application.onConnect=function(newClient){
 	application.acceptConnection(newClient);
 	trace("nuevo usuario conectado");
};

application.onDisconnect=function(oldClient){
 	trace("user disconnected");
 	stats = oldClient.getStats();
 	trace("Total bytes received : " + stats.bytes_in);
 	trace("Total bytes sent : " + stats.bytes_out);
 	trace("RTMP messages received : " + stats.msg_in);
 	trace("RTMP messages sent: " + stats.msg_out);
 	trace("RTMP messages dropped : " + stats.msg_dropped);
 	trace("Ping roundtrip time: " + stats.ping_rtt);
 //Let´s add the stats of the session to the total stats
 //get so slot
 	var the_stats=my_so.getProperty("appStats");
 //add values
 	for (var prop in the_stats){
  		the_stats[prop]=the_stats[prop]+stats[prop];
  	}
 //save
 	my_so.setProperty("appStats", the_stats);
 //Force to save to disk
 	my_so.flush();
 //Let´s check
 //get SO data
 	var comprobacion=my_so.getProperty("appStats");
 //on screen
 	trace("Comprobación de los datos");
 	for(var prop in comprobacion){
  		trace(prop+" : "+comprobacion[prop]);
  	}
};

and that's all. You must see the traces on your communciation app inspector. Te client side to this sample is only this.

nc=new NetConnection();
nc.onStatus=function(info){
 trace(info.level);
 trace(info.code);
}
a.onRelease=function(){
 nc.connect("rtmp:/test");
}
b.onRelease=function(){
 nc.close();
}

As always, sorry for my horrible english

Posted by Javier Tardáguila Date: December 13, 2003 01:56 PM
Comments