1 import java.io.File;
2 import java.io.FileNotFoundException;
3 import java.io.FileWriter;
4 import java.io.IOException;
5 import java.util.Iterator;
6 import java.util.Map.Entry;
7 import java.util.Set;
8 import java.util.concurrent.ConcurrentHashMap;
9 import java.util.concurrent.atomic.AtomicInteger;
10
11 import org.apache.commons.io.IOUtils;
12 import org.apache.log4j.Logger; 16
17 public class CountSendSignalingRows {
18
19 final private static Logger logger = Logger.getLogger(CountSendSignalingRows.class);
20
21 static String appHome = projectConfiguration.getInstance().getString(projectConfiguration.KEY_APP_HOME_DIR);
22 static String recvFilePathName = appHome + File.separator + "cfg" + File.separator + "receiveSignallingNum.txt";
23 static String sendFilePathName = appHome + File.separator + "cfg" + File.separator + "forwardSignallingNum.txt";
24 ConcurrentHashMap<String, AtomicInteger> countRecvSignalingNumMap = new ConcurrentHashMap<String, AtomicInteger>();
25 ConcurrentHashMap<String, AtomicInteger> countSendSignalingNumMap = new ConcurrentHashMap<String, AtomicInteger>();
26 String recvFileName = "";
27 String sendFileName = "";
28
29 private static class LazyHolder {
30 private static final CountSendSignalingRows INSTANCE = new CountSendSignalingRows();
31 }
32
33 public static final CountSendSignalingRows getInstance() {
34 return LazyHolder.INSTANCE;
35 }
36
37 private Thread t = null;
38
39 private CountSendSignalingRows() {
40 t = new Thread(new Runnable() {
41
42 @Override
43 public void run() {
44 while (true) {
45 try {
46 // write recv map
47 writeFile(recvFilePathName, countRecvSignalingNumMap);
48 // write send map
49 writeFile(sendFilePathName, countSendSignalingNumMap);
50 Thread.sleep(30000);
51 } catch (Exception e) {
52
53 }
54 }
55 }
56 });
57
58 t.start();
59
60 }
61
62 public void countRecvSignalingRows(String eventName) {
63
64 countRecvSignalingRows(eventName, countRecvSignalingNumMap);
65
66 }
67
68 public void countSendSignalingRows(String eventName) {
69
70 countRecvSignalingRows(eventName, countSendSignalingNumMap);
71
72 }
73
74 private void countRecvSignalingRows(String eventName,
75 ConcurrentHashMap<String, AtomicInteger> countRecvSignalingNumMap) {
76 AtomicInteger zeroAi = new AtomicInteger(0);
77 AtomicInteger ai = countRecvSignalingNumMap.putIfAbsent(eventName, zeroAi);
78 if (ai == null) {
79 ai = zeroAi;
80 }
81 ai.incrementAndGet();
82 }
83
84 private void writeFile(String pathname, ConcurrentHashMap<String, AtomicInteger> countSignalingNumMap) {
85 FileWriter fw = null;
86 FileWriter fileWriter = null;
87 File file = new File(pathname);
88 try {
89 if (!file.exists()) {
90 file.createNewFile();
91 }
92 if (countSignalingNumMap == null || countSignalingNumMap.isEmpty()) {
93 fileWriter = new FileWriter(file);
94 fileWriter.write("");
95 fileWriter.flush();
96 }
97 } catch (IOException e) {
98 e.printStackTrace();
99 } finally {
100 IOUtils.closeQuietly(fileWriter);
101 }
102
103 try {
104
105 String line = System.getProperty("line.separator");
106 StringBuffer str = new StringBuffer();
107 fw = new FileWriter(pathname);
108 Iterator<Entry<String, AtomicInteger>> iterator = countSignalingNumMap.entrySet().iterator();
109 while (iterator.hasNext()) {
110 Entry<String, AtomicInteger> entry = iterator.next();
111 str.append(entry.getKey() + " : " + entry.getValue()).append(line);
112 }
113 fw.write(str.toString());
114 fw.flush();
115 logger.debug("The statistics are written successfully");
116 } catch (FileNotFoundException e) {
117 e.printStackTrace();
118 } catch (IOException e) {
119 e.printStackTrace();
120 } finally {
121
122 IOUtils.closeQuietly(fw);
123 }
124
125 }
126 }