1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.monitoring.web.session;
18
19 import org.apache.commons.monitoring.Role;
20 import org.apache.commons.monitoring.counters.Counter;
21 import org.apache.commons.monitoring.counters.Unit;
22 import org.apache.commons.monitoring.repositories.Repository;
23 import org.apache.commons.monitoring.stopwatches.StopWatch;
24
25 import javax.servlet.http.HttpSessionEvent;
26 import javax.servlet.http.HttpSessionListener;
27 import java.util.Map;
28 import java.util.concurrent.ConcurrentHashMap;
29
30 public class MonitoringSessionListener implements HttpSessionListener {
31 private final Map<String, StopWatch> watches = new ConcurrentHashMap<String, StopWatch>();
32
33 private final Counter counter;
34
35 public MonitoringSessionListener() {
36 counter = Repository.INSTANCE.getCounter(new Counter.Key(new Role("session", Unit.UNARY), "session"));
37 }
38
39 @Override
40 public void sessionCreated(final HttpSessionEvent httpSessionEvent) {
41 final StopWatch watch = Repository.INSTANCE.start(counter);
42 watches.put(httpSessionEvent.getSession().getId(), watch);
43 }
44
45 @Override
46 public void sessionDestroyed(final HttpSessionEvent httpSessionEvent) {
47 final StopWatch watch = watches.remove(httpSessionEvent.getSession().getId());
48 if (watch != null) {
49 watch.stop();
50 }
51 }
52 }