/***********
UUID     TIMESTAMP
uuid1      2016-01-01 21:10:05.123
uuid1      2016-01-01 21:12:05.123
uuid2      2016-01-01 21:14:12.433
uuid1      2016-01-01 21:12:25.123
uuid3      2016-01-01 21:14:12.433
uuid2      2016-01-01 21:18:12.433
uuid1       2016-01-01 22:22:25.123
Write an algorithm that generate a list of user sessions.
e.g.
the above input will result in 4 user sessions, if we assume session timeout of 30 minutes

uuid1     2016-01-01 21:10:05.123     –   2016-01-01 21:12:25.123
uuid1     2016-01-01 22:22:25.123    –
uuid2    2016-01-01 21:14:12.433     –   2016-01-01 21:18:12.433
uuid3    2016-01-01 21:14:12.433     –

***********/

void sessionizer() {

        // An input map to store the UUID and Timestamp

       Map<String, Long> in = new HashMap<String, Long>();

      // Map to store the uuid as key and new timestamp as value

      Map<String, Long> newTimestamp = new HashMap<String, Long>();

      in.put(uuid[0], timestamp[0]);

     // diff.put(uuid[0],timestamp[0]);

     for (int i = 1; i < uuid.length; i++) {

                   //Check if uuid is in the map

                   if (in.containsKey(uuid[i])) {

                                    //Compute session time out

                                   long difference = timestamp[i] – in.get(uuid[i]);

                                 //Check if the session time out is no greater than 30 minutes

                                  if (difference < 3000000) {

                                                newTimestamp.put(uuid[i], timestamp[i]);

                                    }

                                 //If time out between successive time stamps of same uuid is greater than 30 minutes

                                 else if (newTimestamp.containsKey(uuid[i])) {

                                              //add staring and ending timestamp in output set

                                              out.add(uuid[i] +   + in.get(uuid[i]) +         ” + newTimestamp.get(uuid[i]));

                                           //add the uuid with the new timestamp after end of session

                                             in.put(uuid[i], timestamp[i]);

                                          //Remove the UUID whose timestamp has been added to the map

                                          newTimestamp.remove(uuid[i]);

                                 }

                      }

              //If the uuid is not present in the map add it to the input map

             else {

                      in.put(uuid[i], timestamp[i]);

               }

         }

        //Iterate through the maps to store the final output

         for (String s : in.keySet()) {

                   if (newTimestamp.get(s) != null)

                              out.add(s +   + in.get(s) +         + newTimestamp.get(s));

                  else

                              out.add(s +   + in.get(s) +       + “”);

         }

}

Close Bitnami banner
Bitnami