Subversion Repositories SmartDukaan

Rev

Rev 2392 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.datalogger;


import in.shop2020.datalogger.event.Event;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.StringUtils;

public class DataLogParser {
    private static String dataFile = "/var/log/website/data.log";
    private static Map<String, List<Event>> logDataMap;
    private static Map<Long, String> orderSessionMap;
    private static Map<Long, Set<String>> userSessionMap;
    
    private static void parseFile(String dataFile) {
        // TODO Auto-generated method stub
        logDataMap = new HashMap<String, List<Event>>();
        orderSessionMap = new HashMap<Long, String>();
        userSessionMap = new HashMap<Long, Set<String>>();
        File f = new File(dataFile);
        if(!f.exists()) {
            System.out.println(dataFile + " - does not exist");
        }
        
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(f);
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            String line;
            while((line = br.readLine()) != null){
                String[] logFields = StringUtils.split(line, ",");
                Event event = Event.createEvent(logFields);
                String sessionId = event.getSessionId();
                if (!logDataMap.containsKey(sessionId)) {
                    List<Event> logEvents = new ArrayList<Event>();
                    logEvents.add(event);
                    logDataMap.put(sessionId, logEvents);
                }
                else {
                    logDataMap.get(sessionId).add(event);
                }
                String eventName = event.getEventType().name();
                if(eventName.equals(EventType.ORDER_CREATION.name())) {
                    Long orderId = Long.parseLong(logFields[5].trim());
                    if (!orderSessionMap.containsKey(orderId)) {
                        orderSessionMap.put(orderId, sessionId);
                    }
                }
                try {
                    Long userId = event.getUserId();
                    if (!userSessionMap.containsKey(userId)) {
                        Set<String> userSessions = new HashSet<String>();
                        userSessions.add(sessionId);
                        userSessionMap.put(userId, userSessions);
                    }
                    else {
                        userSessionMap.get(userId).add(sessionId);
                    }
                } catch (NumberFormatException e) {
                    // e.printStackTrace();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            if(fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    private static void printHistoryEventsForOrder(long i) {
        String session = orderSessionMap.get(i);
        
        List<Event> events = logDataMap.get(session);
        for (Event event : events) {
            System.out.println(event);
        }
    }
    
    public static void main(String[] args) {
        parseFile(dataFile);
        
        /*
        for (Map.Entry<String, List<String>> entry : logDataMap.entrySet()) {
            List<String> logs = entry.getValue();
            for (String log : logs) {
                System.out.println(entry.getKey() + " : " + log);
            }
        }
        for (Map.Entry<Long, Set<String>> entry : userSessionMap.entrySet()) {
            Set<String> sessions = entry.getValue();
            for (String session : sessions) {
                System.out.println(entry.getKey() + " : " + session);
            }
        }
        for (Map.Entry<Long, String> entry : orderSessionMap.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
        */
        System.out.println(orderSessionMap.size());
        System.out.println(userSessionMap.size());
        System.out.println(logDataMap.size());
        
        printHistoryEventsForOrder(500);
    }
}