source: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/web/commands/CMDloadSessionsFromClickstream.java @ 51

Last change on this file since 51 was 51, checked in by sherbold, 13 years ago

+ added first classes for web usage analysis (experimental!!)

  • Property svn:mime-type set to text/plain
File size: 2.9 KB
Line 
1package de.ugoe.cs.eventbench.web.commands;
2
3import java.io.File;
4import java.io.FileReader;
5import java.security.InvalidParameterException;
6import java.text.SimpleDateFormat;
7import java.util.ArrayList;
8import java.util.Date;
9import java.util.HashMap;
10import java.util.LinkedList;
11import java.util.List;
12import java.util.Map;
13
14import de.ugoe.cs.eventbench.data.Event;
15import de.ugoe.cs.eventbench.web.data.WebEvent;
16import de.ugoe.cs.util.console.Command;
17import de.ugoe.cs.util.console.Console;
18
19public class CMDloadSessionsFromClickstream implements Command {
20
21        @Override
22        public void run(List<Object> parameters) {
23                // TODO Auto-generated method stub
24                if( parameters.size() < 2 ) {
25                        throw new InvalidParameterException();
26                }
27                String source = (String) parameters.get(0);
28               
29                // TODO needs to be variable
30                long timeout = 3600000; // 1 hour session-timeout
31               
32                try { // TODO dummy try/catch block
33                        File f = new File(source);
34                        FileReader reader = new FileReader(f);
35                        char[] buffer = new char[(int) f.length()];
36                        reader.read(buffer);
37                        reader.close();
38                        String[] lines = (new String(buffer)).split("\n");
39                       
40                        Map<String, List<Integer>> cookieSessionMap = new HashMap<String, List<Integer>>();
41                        int lastId = -1;
42                       
43                        List<List<WebEvent>> sessions = new ArrayList<List<WebEvent>>();
44                       
45                        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
46                       
47                        for( int i=0; i<lines.length ; i++ ) {
48                                String[] values = lines[i].split(" ");
49                               
50                                // use cookie as session identifier
51                                int cookieStart = values[0].lastIndexOf('.');
52                                String cookie = values[0].substring(cookieStart+1);
53                                String dateString = values[1].substring(1)+" "+values[2].substring(0, values[2].length()-1);
54                                long timestamp = dateFormat.parse(dateString).getTime();
55                                String uri = values[3];
56                               
57                                List<Integer> sessionIds = cookieSessionMap.get(cookie);
58                                if( sessionIds==null ) {
59                                        sessionIds = new ArrayList<Integer>();
60                                        // start new session
61                                        sessionIds.add(++lastId);
62                                        cookieSessionMap.put(cookie, sessionIds);
63                                        sessions.add(new LinkedList<WebEvent>());
64                                }
65                                Integer lastSessionIndex = sessionIds.get(sessionIds.size()-1);
66                                List<WebEvent> lastSession = sessions.get(lastSessionIndex);
67                                long lastEventTime = timestamp;
68                                if( !lastSession.isEmpty() ) {
69                                        lastEventTime = lastSession.get(lastSession.size()-1).getTimestamp();
70                                }
71                                if( timestamp-lastEventTime>timeout ) {
72                                        sessionIds.add(++lastId);
73                                        List<WebEvent> newSession = new LinkedList<WebEvent>();
74                                        newSession.add(new WebEvent(uri, timestamp));
75                                        sessions.add(newSession);
76                                } else {
77                                        lastSession.add(new WebEvent(uri, timestamp));
78                                }
79                        }
80                        Console.traceln(sessions.toString());
81                } catch(Exception e) {
82                        e.printStackTrace();
83                }
84               
85        }
86
87        @Override
88        public void help() {
89                // TODO Auto-generated method stub
90               
91        }
92
93}
Note: See TracBrowser for help on using the repository browser.