From 8041ff2f6c350fb92dc0414d50760d35551e5b89 Mon Sep 17 00:00:00 2001 From: To-om Date: Thu, 8 Apr 2021 16:09:52 +0200 Subject: [PATCH] #1946 Optimise custom fields request --- .../org/thp/thehive/services/AlertSrv.scala | 15 +++++--- .../thehive/services/CaseTemplateSrv.scala | 35 +++++++++++-------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/thehive/app/org/thp/thehive/services/AlertSrv.scala b/thehive/app/org/thp/thehive/services/AlertSrv.scala index 2232e55cf1..a49baa3447 100644 --- a/thehive/app/org/thp/thehive/services/AlertSrv.scala +++ b/thehive/app/org/thp/thehive/services/AlertSrv.scala @@ -491,11 +491,16 @@ object AlertOps { .value(_.`type`) .headOption .map { - case CustomFieldType.boolean => traversal.filter(_.customFields(customField).has(_.booleanValue, predicate.mapValue(_.as[Boolean]))) - case CustomFieldType.date => traversal.filter(_.customFields(customField).has(_.dateValue, predicate.mapValue(_.as[Date]))) - case CustomFieldType.float => traversal.filter(_.customFields(customField).has(_.floatValue, predicate.mapValue(_.as[Double]))) - case CustomFieldType.integer => traversal.filter(_.customFields(customField).has(_.integerValue, predicate.mapValue(_.as[Int]))) - case CustomFieldType.string => traversal.filter(_.customFields(customField).has(_.stringValue, predicate.mapValue(_.as[String]))) + case CustomFieldType.boolean => + traversal.filter(_.customFields.has(_.booleanValue, predicate.mapValue(_.as[Boolean])).inV.v[CustomField].get(customField)) + case CustomFieldType.date => + traversal.filter(_.customFields.has(_.dateValue, predicate.mapValue(_.as[Date])).inV.v[CustomField].get(customField)) + case CustomFieldType.float => + traversal.filter(_.customFields.has(_.floatValue, predicate.mapValue(_.as[Double])).inV.v[CustomField].get(customField)) + case CustomFieldType.integer => + traversal.filter(_.customFields.has(_.integerValue, predicate.mapValue(_.as[Int])).inV.v[CustomField].get(customField)) + case CustomFieldType.string => + traversal.filter(_.customFields.has(_.stringValue, predicate.mapValue(_.as[String])).inV.v[CustomField].get(customField)) } .getOrElse(traversal.empty) diff --git a/thehive/app/org/thp/thehive/services/CaseTemplateSrv.scala b/thehive/app/org/thp/thehive/services/CaseTemplateSrv.scala index d5f208f698..413d96b57f 100644 --- a/thehive/app/org/thp/thehive/services/CaseTemplateSrv.scala +++ b/thehive/app/org/thp/thehive/services/CaseTemplateSrv.scala @@ -224,11 +224,16 @@ object CaseTemplateOps { .value(_.`type`) .headOption .map { - case CustomFieldType.boolean => traversal.filter(_.customFields(customField).has(_.booleanValue, predicate.mapValue(_.as[Boolean]))) - case CustomFieldType.date => traversal.filter(_.customFields(customField).has(_.dateValue, predicate.mapValue(_.as[Date]))) - case CustomFieldType.float => traversal.filter(_.customFields(customField).has(_.floatValue, predicate.mapValue(_.as[Double]))) - case CustomFieldType.integer => traversal.filter(_.customFields(customField).has(_.integerValue, predicate.mapValue(_.as[Int]))) - case CustomFieldType.string => traversal.filter(_.customFields(customField).has(_.stringValue, predicate.mapValue(_.as[String]))) + case CustomFieldType.boolean => + traversal.filter(_.customFields.has(_.booleanValue, predicate.mapValue(_.as[Boolean])).inV.v[CustomField].get(customField)) + case CustomFieldType.date => + traversal.filter(_.customFields.has(_.dateValue, predicate.mapValue(_.as[Date])).inV.v[CustomField].get(customField)) + case CustomFieldType.float => + traversal.filter(_.customFields.has(_.floatValue, predicate.mapValue(_.as[Double])).inV.v[CustomField].get(customField)) + case CustomFieldType.integer => + traversal.filter(_.customFields.has(_.integerValue, predicate.mapValue(_.as[Int])).inV.v[CustomField].get(customField)) + case CustomFieldType.string => + traversal.filter(_.customFields.has(_.stringValue, predicate.mapValue(_.as[String])).inV.v[CustomField].get(customField)) } .getOrElse(traversal.empty) @@ -240,11 +245,11 @@ object CaseTemplateOps { .value(_.`type`) .headOption .map { - case CustomFieldType.boolean => traversal.filter(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.booleanValue).inV.v[CustomField])) - case CustomFieldType.date => traversal.filter(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.dateValue).inV.v[CustomField])) - case CustomFieldType.float => traversal.filter(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.floatValue).inV.v[CustomField])) - case CustomFieldType.integer => traversal.filter(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.integerValue).inV.v[CustomField])) - case CustomFieldType.string => traversal.filter(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.stringValue).inV.v[CustomField])) + case CustomFieldType.boolean => traversal.filter(_.customFields.has(_.booleanValue).inV.v[CustomField].get(customField)) + case CustomFieldType.date => traversal.filter(_.customFields.has(_.dateValue).inV.v[CustomField].get(customField)) + case CustomFieldType.float => traversal.filter(_.customFields.has(_.floatValue).inV.v[CustomField].get(customField)) + case CustomFieldType.integer => traversal.filter(_.customFields.has(_.integerValue).inV.v[CustomField].get(customField)) + case CustomFieldType.string => traversal.filter(_.customFields.has(_.stringValue).inV.v[CustomField].get(customField)) } .getOrElse(traversal.empty) } @@ -257,11 +262,11 @@ object CaseTemplateOps { .value(_.`type`) .headOption .map { - case CustomFieldType.boolean => traversal.filterNot(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.booleanValue).inV.v[CustomField])) - case CustomFieldType.date => traversal.filterNot(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.dateValue).inV.v[CustomField])) - case CustomFieldType.float => traversal.filterNot(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.floatValue).inV.v[CustomField])) - case CustomFieldType.integer => traversal.filterNot(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.integerValue).inV.v[CustomField])) - case CustomFieldType.string => traversal.filterNot(t => cfFilter(t.outE[CaseTemplateCustomField].has(_.stringValue).inV.v[CustomField])) + case CustomFieldType.boolean => traversal.filterNot(_.customFields.has(_.booleanValue).inV.v[CustomField].get(customField)) + case CustomFieldType.date => traversal.filterNot(_.customFields.has(_.dateValue).inV.v[CustomField].get(customField)) + case CustomFieldType.float => traversal.filterNot(_.customFields.has(_.floatValue).inV.v[CustomField].get(customField)) + case CustomFieldType.integer => traversal.filterNot(_.customFields.has(_.integerValue).inV.v[CustomField].get(customField)) + case CustomFieldType.string => traversal.filterNot(_.customFields.has(_.stringValue).inV.v[CustomField].get(customField)) } .getOrElse(traversal.empty) }