package com.basic.security.manager; import com.basic.security.dao.DatabaseManager; import com.basic.security.model.RealTimeMetrics; import com.basic.security.dao.SqliteManager; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; public class RealTimeMetricsManager extends SqliteManager { public static int TotalEnters = 0; public static int TotalExits = 0; public static void saveRealTimeMetrics(Map realTimeMetrics) { deleteDayBeforeYesterday(); if (realTimeMetrics != null) { realTimeMetrics.put(RealTimeMetrics.id, UUID.randomUUID().toString()); realTimeMetrics.put("table", RealTimeMetrics.table); realTimeMetrics.put(RealTimeMetrics.CreateDate, new Date().getTime()+""); save(realTimeMetrics); initRealTimeMetrics(realTimeMetrics); } } private static void deleteDayBeforeYesterday() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -2); DatabaseManager.execSQL("delete from "+RealTimeMetrics.table + " where " + RealTimeMetrics.CreateDate + " < '"+ cal.getTime().getTime() +"'"); } public static Map getFirstRealTimeMetrics() { List> realTimeMetricsList = findList("select * from " + RealTimeMetrics.table + " order by " + RealTimeMetrics.Date + " asc limit 1" ); if (realTimeMetricsList.size() > 0) { return realTimeMetricsList.get(0); } return null; } public static Map getLastRealTimeMetrics() { List> realTimeMetricsList = findList("select * from " + RealTimeMetrics.table + " order by " + RealTimeMetrics.CreateDate + " desc limit 1" ); if (realTimeMetricsList.size() > 0) { return realTimeMetricsList.get(0); } return null; } public static void initRealTimeMetrics(Map realTimeMetrics) { if (realTimeMetrics == null) { realTimeMetrics = getLastRealTimeMetrics(); } if (realTimeMetrics != null) { try { TotalEnters = Integer.parseInt(realTimeMetrics.get(RealTimeMetrics.TotalEnters)); } catch (Exception e) { e.printStackTrace(); } try { TotalExits = Integer.parseInt(realTimeMetrics.get(RealTimeMetrics.TotalExits)); } catch (Exception e) { e.printStackTrace(); } } } public static int getTotalEnters() { return TotalEnters; } public static int getTotalEnters(Date date) { int TotalEnters = 0; Map realTimeMetrics = RealTimeMetricsManager.getFirstRealTimeMetricsSince( date ); if (realTimeMetrics != null) { TotalEnters = Integer.parseInt(realTimeMetrics.get(RealTimeMetrics.TotalEnters)); } return TotalEnters; } public static int getTotalExits() { return TotalExits; } public static int getTotalExits(Date date) { int TotalExits = 0; Map realTimeMetrics = RealTimeMetricsManager.getFirstRealTimeMetricsSince( date ); if (realTimeMetrics != null) { TotalExits = Integer.parseInt(realTimeMetrics.get(RealTimeMetrics.TotalExits)); } return TotalExits; } public static Map getFirstRealTimeMetricsSince(Date todayBeginDate) { List> realTimeMetricsList = findList("select * from " + RealTimeMetrics.table + " where "+RealTimeMetrics.Date+" <= '"+todayBeginDate.getTime()+"' order by " + RealTimeMetrics.TransmitTime + " desc limit 1" ); if (realTimeMetricsList.size() > 0) { return realTimeMetricsList.get(0); } return null; } public static int getTestEnterPeopleCount() { int TotalEnters = 0; List> realTimeMetricsList = findList("select max("+RealTimeMetrics.TotalEnters+") as "+RealTimeMetrics.TotalEnters+" from " + RealTimeMetrics.table +" " ); if (realTimeMetricsList.size() > 0) { try { TotalEnters = Integer.parseInt(realTimeMetricsList.get(0).get(RealTimeMetrics.TotalEnters)); } catch (Exception e) { e.printStackTrace(); } } return TotalEnters; } public static int getTestExitPeopleCount() { int TotalExits = 0; List> realTimeMetricsList = findList("select max("+RealTimeMetrics.TotalExits+") as "+RealTimeMetrics.TotalExits+" from " + RealTimeMetrics.table +" " ); if (realTimeMetricsList.size() > 0) { try { TotalExits = Integer.parseInt(realTimeMetricsList.get(0).get(RealTimeMetrics.TotalExits)); } catch (Exception e) { e.printStackTrace(); } } return TotalExits; } public static void initTodayData() { Date date = new Date(); date.setHours(1); date.setMinutes(0); int TotalEnters = 10; int TotalExits = 10; int increment = 10; DatabaseManager.execSQL("delete from "+RealTimeMetrics.class.getSimpleName()); for (int i = 1; i <= 23; i++) { for (int j = 0; j < 59; j++) { date.setHours(i); date.setMinutes(j); TotalEnters += 2*increment; TotalExits += increment; Map realTimeMetrics = new HashMap<>(); realTimeMetrics.put(RealTimeMetrics.TotalEnters, TotalEnters+""); realTimeMetrics.put(RealTimeMetrics.TotalExits, TotalExits+""); realTimeMetrics.put(RealTimeMetrics.CreateDate, date.getTime()+""); realTimeMetrics.put(RealTimeMetrics.TransmitTime, date.getTime()+""); realTimeMetrics.put(RealTimeMetrics.Date, date.getTime()+""); RealTimeMetricsManager.saveRealTimeMetrics(realTimeMetrics); } } } }