updateScoreNode function

Future updateScoreNode(
  1. dynamic path,
  2. dynamic nodeName,
  3. dynamic type
)

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);
  }
}