
prerna.usertracking.UserTrackingStatisticsUtils Maven / Gradle / Ivy
The newest version!
package prerna.usertracking;
import java.util.List;
import java.util.Map;
import org.apache.commons.math3.util.Precision;
import prerna.auth.utils.SecurityEngineUtils;
import prerna.util.Constants;
public class UserTrackingStatisticsUtils {
// words for point markdown and description
private static double WFP_MD = 30.0;
private static double WFP_DESC = 10.0;
// max points for markdown and description and remaining keys
private static double MP_MD = 5.0;
private static double MP_DESC = 2.0;
private static double MP_RK = 3.0;
/**
*
* @param databaseId
* @return
*/
public static double calculateScore(String databaseId) {
double score = calculateSecurityScore(databaseId);
// round to 2 decimal places
score = Precision.round(score, 2);
return score;
}
private static double calculateSecurityScore(String databaseId) {
double calc = 0.0;
List keys = SecurityEngineUtils.getAllMetakeys();
Map keyVals = SecurityEngineUtils.getAggregateEngineMetadata(databaseId, keys, false);
int keysAccounted = 0;
if (keyVals.containsKey(Constants.MARKDOWN)) {
Object md = keyVals.get(Constants.MARKDOWN);
String databaseMarkdown = getStringFromObject(md);
calc += calcScoreForString(databaseMarkdown, WFP_MD, MP_MD);
keysAccounted++;
}
if (keyVals.containsKey(Constants.DESCRIPTION)) {
String description = getStringFromObject(keyVals.get(Constants.DESCRIPTION));
calc += calcScoreForString(description, WFP_DESC, MP_DESC);
keysAccounted++;
}
calc += scoreRemainingKeys(keyVals, keysAccounted, keys);
return calc;
}
private static double scoreRemainingKeys(Map keyVals, int keysAccounted, List keys) {
double sizeOfKeys = keyVals.keySet().size() - keysAccounted;
double totalKeys = keys.size() - keysAccounted;
double keyRatio = sizeOfKeys / totalKeys;
keyRatio *= MP_RK;
return Math.min(MP_RK, keyRatio);
}
private static double calcScoreForString(String s, double wfp, double mp) {
if (s == null) {
return 0.0;
}
double wordCount = s.split("\\s+").length;
return Math.min(mp, wordCount / wfp);
}
private static String getStringFromObject(Object o) {
String val;
if (o instanceof List) {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy