package is4.stats;
import net.sf.json.*;
import com.mongodb.*;
import org.bson.BasicBSONObject;
import java.util.Map;
import java.util.Date;
public class SFSStatistics {
private static long bytesSent=0;
private static long bytesWrittenToDB=0;
private static long bytesReceived=0;
private static long startTime = 0;
private static long docsReceived=0;
private static long docsSent=0;
private static long getCnt = 0;
private static long putCnt = 0;
private static long postCnt = 0;
private static long deleteCnt = 0;
private static Mongo mongo = null;
private static SFSStatistics sfsStats = null;
private SFSStatistics(Mongo m){
if(m != null)
mongo = m;
Date d = new Date();
startTime = (d.getTime())/1000;
d=null;
}
public static SFSStatistics getInstance(Mongo m){
if(sfsStats == null){
sfsStats = new SFSStatistics(m);
}
return sfsStats;
}
public static void docReceived(String docStr){
if(docStr ==null)
return;
int docByteLength = docStr.getBytes().length;
bytesReceived += docByteLength;
docsReceived +=1;
}
public static void docWrittenToDB(JSONObject doc){
if(doc==null)
return;
int docByteLength = doc.toString().getBytes().length;
bytesWrittenToDB += docByteLength;
}
public static void docSent(String docStr){
if(docStr==null)
return;
int docByteLength = docStr.getBytes().length;
bytesSent += docByteLength;
docsSent += 1;
}
public static void incGet(){
getCnt +=1;
}
public static void incPut(){
putCnt +=1;
}
public static void incPost(){
postCnt +=1;
}
public static void incDelete(){
deleteCnt +=1;
}
public static long getGetCnt(){
return getCnt;
}
public static long getPutCnt(){
return putCnt;
}
public static long getPostCnt(){
return postCnt;
}
public static long getDeleteCnt(){
return deleteCnt;
}
public static double getAvgGetRate(){
Date d = new Date();
long timeElapsed = (d.getTime()/1000)-startTime;
return (double)getCnt/(double)timeElapsed;
}
public static double getAvgPutRate(){
Date d = new Date();
long timeElapsed = (d.getTime()/1000)-startTime;
return (double)putCnt/(double)timeElapsed;
}
public static double getAvgPostRate(){
Date d = new Date();
long timeElapsed = (d.getTime()/1000)-startTime;
return (double)postCnt/(double)timeElapsed;
}
public static double getAvgDeleteRate(){
Date d = new Date();
long timeElapsed = (d.getTime()/1000)-startTime;
return (double)deleteCnt/(double)timeElapsed;
}
public static double avgIncomingDataRate(){
Date d = new Date();
long timeElapsed = (d.getTime()/1000)-startTime;
return (double)bytesReceived/(double)timeElapsed;
}
public static double avgOutgoingDataRate(){
Date d = new Date();
long timeElapsed = (d.getTime()/1000)-startTime;
return (double)bytesSent/(double)timeElapsed;
}
public static JSONObject getDBStats(){
JSONObject obj = new JSONObject();
if(mongo == null)
return obj;
DB db = mongo.getDB("is4_data_repos");
if (db==null)
return obj;
BasicBSONObject statsObj = (BasicBSONObject)db.getStats();
if(statsObj.containsKey("raw")){
statsObj.removeField("raw");
}
statsObj.removeField("numExtents");
statsObj.removeField("indexes");
statsObj.removeField("indexSizes");
statsObj.removeField("fileSize");
statsObj.removeField("ok");
Map statsObjMap = statsObj.toMap();
obj.accumulateAll(statsObjMap);
return obj;
}
}