updateScoreNode function
update geiger score node (user, device, aggregate) To get metrics (external plugin, recommendations)
Implementation
Future updateScoreNode(var path, var nodeName,var type) async {
try{
Node scoreNode = await Storage.controller.get('$path$nodeName');
scoreNode.owner = Types.owner;
var geigerScore = 0.0;
///summarize for explaining of calculation
NodeValue description = NodeValueImpl('description', CoreValues.scoreDescription);
await scoreNode.updateValue(description);
///Calculate risk score each geiger threats (12)
///Based on metric of external plugin and recommendations
NodeValue geigerThreatScores = NodeValueImpl('threats_score', nodeName == Types.geigerScoreAggregate ? CoreValues.aggregateThreatsScore : await crtThreatScore(type));
await scoreNode.updateValue(geigerThreatScores);
///Calculate geiger total risk score based on indicator algorithm - refer user, device, recommendation
nodeName == Types.geigerScoreAggregate ? geigerScore = CoreValues.gagg : geigerScore = double.parse(await crtTotalThreatScore(type));
NodeValue geigerScoreNode = NodeValueImpl('GEIGER_score', geigerScore.toString());
await scoreNode.updateValue(geigerScoreNode);
///Calculate number of metric to used on risk score
num len = 0;
if(type == Types.users){
var temp = {};
temp.addAll(CoreValues.userPositive);
temp.addAll(CoreValues.userNegative);
for(var e in temp.entries){
len += e.value.length;
}
len += CoreValues.uuidUserImplementedRecommendations.length;
}else{
var temp = {};
temp.addAll(CoreValues.devicePositive);
temp.addAll(CoreValues.deviceNegative);
for(var e in temp.entries){
len += e.value.length;
}
len += CoreValues.uuidDeviceImplementedRecommendations.length;
}
var numberMetrics = '';
nodeName == Types.geigerScoreAggregate ? numberMetrics = CoreValues.nagg : numberMetrics = len.toString();
NodeValue geigerNumMetrics = NodeValueImpl('number_metrics', numberMetrics);
await scoreNode.updateValue(geigerNumMetrics);
///If type is user, device score (TRUE)
if (nodeName != Types.geigerScoreAggregate) {
var implementedRecommendationsReco = '';
type == Types.users ? implementedRecommendationsReco = CoreValues.uuidUserImplementedRecommendations.toString().replaceAll('[','').replaceAll(']','').trim() : implementedRecommendationsReco = CoreValues.uuidDeviceImplementedRecommendations.toString().replaceAll('[','').replaceAll(']','').trim();
NodeValue implementedRecommendations = NodeValueImpl('implementedRecommendations',implementedRecommendationsReco);
await scoreNode.updateValue(implementedRecommendations);
await Storage.controller.addOrUpdate(scoreNode);
logger.i('UPDATE $nodeName Node => ${await Storage.controller.dump('$path$nodeName')}');
}
///If type is aggregate score (total score) (FALSE)
else {
await Storage.controller.addOrUpdate(scoreNode);
logger.i('UPDATE $nodeName Node => ${await Storage.controller.dump('$path$nodeName')}');
}
}on StorageException{
logger.e('data does not exist');
}
catch (e){
logger.e(e);
}
}