crtGRecommendation function
generate metric of recommendations
Implementation
Future crtGRecommendation(var type) async {
var recommendationMetrics = {};
type == Types.devices
? recommendationMetrics = CoreValues.deviceRecommendation
: recommendationMetrics = CoreValues.userRecommendation;
var threatRecoList = [];
/// map.key => geiger threat UUID (12) {unique}
/// map.value => geiger threat name (type of threat) (12) {unique}
for (var map in CoreValues.geigerThreatUUIDThreatName.entries) {
var recoLists = '';
try {
///recommendationMetrics Map < threat UUID, <Map>[] recoMetricList>>
/// <Map>[] recoMetricList
/// metric => {'high' or 'medium' or 'low'}
/// recoUUID => recommendationUUID
if(recommendationMetrics.containsKey(map.key)) {
var recoMetricList = recommendationMetrics[map.key];
for (var metricMap in recoMetricList){
var metric = metricMap['metric'];
var recoUUID = metricMap['recoUUID'];
///Convert to double metric {'high': 1.0, 'medium': 0.5, 'low': 0.1}
var impactV = CoreValues.impactValues[metric.toLowerCase()]!;
recoLists += '$recoUUID,$impactV;';
}
///Store recommendation metrics
///geiger threat UUID : {recoUUID,metric;recoUUID,metric;...}
if(recoLists.isNotEmpty) threatRecoList.add(NodeValueImpl(map.key, recoLists));
}
} catch (e) {
continue;
}
}
return threatRecoList;
}