All Downloads are FREE. Search and download functionalities are using the official Maven repository.

prerna.usertracking.EngineViewsUtils Maven / Gradle / Ivy

The newest version!
package prerna.usertracking;

import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import prerna.engine.api.IHeadersDataRow;
import prerna.engine.api.IRawSelectWrapper;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.filters.SimpleQueryFilter;
import prerna.query.querystruct.selectors.QueryColumnSelector;
import prerna.query.querystruct.selectors.QueryFunctionHelper;
import prerna.query.querystruct.selectors.QueryFunctionSelector;
import prerna.rdf.engine.wrappers.WrapperManager;
import prerna.util.Constants;
import prerna.util.QueryExecutionUtility;

public class EngineViewsUtils extends UserTrackingUtils {
	
	private static Logger logger = LogManager.getLogger(EngineViewsUtils.class);

	private static String EV_TN = "ENGINE_VIEWS";
	private static String EV_PRE = "ENGINE_VIEWS__";
	
	public static void add(String databaseId) {
		addOrUpdate(databaseId);
	}
	
	public static int getTotal(String engineId) {
		SelectQueryStruct qs = new SelectQueryStruct();

		QueryFunctionSelector function = new QueryFunctionSelector();
		function.addInnerSelector(new QueryColumnSelector(EV_PRE + "VIEWS"));
		function.setFunction(QueryFunctionHelper.SUM);
		function.setAlias("total_views");
		qs.addSelector(function);

		qs.addExplicitFilter(SimpleQueryFilter.makeColToValFilter(EV_PRE + "ENGINEID", "==", engineId));

		Long longViews = QueryExecutionUtility.flushToLong(userTrackingDb, qs);
		
		if (longViews == null) {
			longViews = 0L;
		}
		
		return longViews.intValue();
	}

	public static List> getByDate(String engineId) {
		SelectQueryStruct qs = new SelectQueryStruct();

		qs.addSelector(new QueryColumnSelector(EV_PRE + "DATE"));
		qs.addSelector(new QueryColumnSelector(EV_PRE + "VIEWS"));

		String lastYear = LocalDate.now().minusYears(1).toString();
		qs.addExplicitFilter(SimpleQueryFilter.makeColToValFilter(EV_PRE + "DATE", ">", lastYear));
		qs.addExplicitFilter(SimpleQueryFilter.makeColToValFilter(EV_PRE + "ENGINEID", "==", engineId));

		IRawSelectWrapper wrapper = null;
		List> viewsByDate = new ArrayList<>();
		try {
			wrapper = WrapperManager.getInstance().getRawWrapper(userTrackingDb, qs);
			while (wrapper.hasNext()) {
				IHeadersDataRow row = wrapper.next();
				String date = row.getValues()[0].toString();
				Integer view = (Integer) row.getValues()[1];
				viewsByDate.add(Pair.of(date, view));
			}
		} catch (Exception e) {
			logger.error(Constants.STACKTRACE, e);
		} finally {
			if (wrapper != null) {
				try {
					wrapper.close();
				} catch (IOException e) {
					logger.error(Constants.STACKTRACE, e);
				}
			}
		}

		return viewsByDate;
	}
	
	
	private static void addOrUpdate(String engineId) {
		LocalDate date = LocalDate.now();
		SelectQueryStruct qs = new SelectQueryStruct();
		qs.addSelector(new QueryColumnSelector(EV_PRE + "VIEWS"));

		qs.addExplicitFilter(SimpleQueryFilter.makeColToValFilter(EV_PRE + "ENGINEID", "==", engineId));
		qs.addExplicitFilter(SimpleQueryFilter.makeColToValFilter(EV_PRE + "DATE", "==", date.toString()));

		Integer curr = QueryExecutionUtility.flushToInteger(userTrackingDb, qs);
		if (curr == null) {
			add(engineId, date, 1);
		} else {
			update(engineId, date, ++curr);
		}
	}

	private static void update(String engineId, LocalDate date, int i) {
		String query = "UPDATE " + EV_TN + " SET VIEWS = ?" + " WHERE ENGINEID = ? AND DATE = ?";

		PreparedStatement ps = null;
		try {
			ps = userTrackingDb.getPreparedStatement(query);
			int index = 1;
			ps.setInt(index++, i);
			ps.setString(index++, engineId);
			ps.setDate(index++, java.sql.Date.valueOf(date));

			ps.execute();
			if (!ps.getConnection().getAutoCommit()) {
				ps.getConnection().commit();
			}
		} catch (Exception e) {
			logger.error(Constants.STACKTRACE, e);
		} finally {
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					logger.error(Constants.STACKTRACE, e);
				}
			}
		}
	}

	private static void add(String engineId, LocalDate date, int i) {
		String query = "INSERT INTO " + EV_TN + " VALUES (?, ?, ?)";

		PreparedStatement ps = null;
		try {
			ps = userTrackingDb.getPreparedStatement(query);
			int index = 1;
			ps.setString(index++, engineId);
			ps.setDate(index++, java.sql.Date.valueOf(date));
			ps.setInt(index++, i);

			ps.execute();
			if (!ps.getConnection().getAutoCommit()) {
				ps.getConnection().commit();
			}
		} catch (Exception e) {
			logger.error(Constants.STACKTRACE, e);
		} finally {
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					logger.error(Constants.STACKTRACE, e);
				}
			}
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy