pnMetrics function
metrics calculation (positive, negative) based on algorithm
Implementation
Future pnMetrics(Map<String, List<dynamic>> metricMap, var threatUUID) async {
var impactV = 0.0;
var numerator = 0.0;
var denominator = 0.0;
var normalization = 0.0;
var metric;
var temp = [];
//logger.i('indiC pnMetrics ${node.keys}');
///check exist metric of unique geiger threat uuid on metrics
if(metricMap.containsKey(threatUUID)) {
try {
if (metricMap[threatUUID].toString() == temp.toString()) {
return 0.0;
}
metric = metricMap[threatUUID]?.iterator;
} catch (e) {
//print('func224$e');
logger.e('indiA pnMetrics 1 => ${e.toString()}');
return 0.0;
}
try {
///loop metrics
while (metric.moveNext()) {
var impact = await metric.current['metric'];
try {
//logger.i('indiC pnMetrics getValue ${await metric.current['normal']}');
var normalNode = await metric.current['normalization'];
normalization = double.parse(normalNode);
} catch (e) {
logger.i('indiA pnMetrics getValue ${e.toString()}');
continue;
}
///Convert to double metric {'high': 1.0, 'medium': 0.5, 'low': 0.1}
impactV = CoreValues.impactValues[impact.toLowerCase()]!;
///numerator= impact*normalization
numerator += impactV * normalization;
///denominator=impact
denominator += impactV;
}
var result = numerator / denominator;
return result;
} catch (e) {
logger.e('indiA pnMetrics 2 => ${e.toString()}');
return 0.0;
}
}else{
return 0.0;
}
}