sendRecommendation method
Add a new recommendation
- Check if the data node has already a recommendation -> not send a new one
- if the data node does not have a recommendation, or the currentRecommendationId = '', then send a new once
Implementation
Future<bool> sendRecommendation(
String rootType, RecommendationNodeModel recommendationNodeModel) async {
String recommendationStatusPath =
'$recommendationStatusRootPath:${recommendationNodeModel.sensorId}';
String? currentRecommendationId = await _readValueNode(
recommendationStatusPath, 'currentRecommendationId');
if (currentRecommendationId != null && currentRecommendationId.isNotEmpty) {
log('A recommendation has been sent and unresolved $currentRecommendationId. Do not send a new once');
return true;
}
log('Going to send a new recommendation');
String recommendationId = getUniqueId();
String createdDate = DateTime.now().toIso8601String();
try {
Node node = NodeImpl(recommendationId, pluginId, recommendationRootPath);
await addMultilingualValues(node, 'short', recommendationNodeModel.short);
await addMultilingualValues(node, 'long', recommendationNodeModel.long);
await node.addOrUpdateValue(
NodeValueImpl('Action', recommendationNodeModel.action),
);
await node.addOrUpdateValue(
NodeValueImpl('relatedThreatsWeights',
recommendationNodeModel.relatedThreatsWeights),
);
await node.addOrUpdateValue(
NodeValueImpl('costs', recommendationNodeModel.costs),
);
await node.addOrUpdateValue(
NodeValueImpl(
'RecommendationType', recommendationNodeModel.recommendationType),
);
await node.addOrUpdateValue(
NodeValueImpl('pluginId', pluginId),
);
await node.addOrUpdateValue(
NodeValueImpl('pluginName', pluginName),
);
await node.addOrUpdateValue(
NodeValueImpl('os', recommendationNodeModel.os),
);
await node.addOrUpdateValue(
NodeValueImpl('createdDate', createdDate),
);
log('A recommendation node has been created');
log(node.toString());
try {
await storageController!.addOrUpdate(node);
log('After adding a recommendation node $recommendationId');
await sendDataNode(
recommendationNodeModel.sensorId,
recommendationStatusRootPath!,
['currentRecommendationId'],
[recommendationId],
);
return true;
} catch (e2, trace2) {
log('Failed to update Storage');
log(e2.toString());
if (exceptionHandler != null) {
exceptionHandler!(e2, trace2);
}
return false;
}
} catch (e, trace) {
log('Failed to add a recommendation node $recommendationId');
log(e.toString());
if (exceptionHandler != null) {
exceptionHandler!(e, trace);
}
return false;
}
}