diff --git a/app/services/Analyzer.scala b/app/services/Analyzer.scala index 256d07136..34ebf7534 100644 --- a/app/services/Analyzer.scala +++ b/app/services/Analyzer.scala @@ -37,28 +37,41 @@ class AnalyzerSrv( def get(analyzerId: String): Option[Analyzer] = list.find(_.id == analyzerId) def listForType(dataType: String): Seq[Analyzer] = list.filter(_.dataTypeList.contains(dataType)) - private[services] def getExternalAnalyzers: Seq[Analyzer] = for { - analyzerDir ← Try(Files.newDirectoryStream(analyzerPath).toSeq).getOrElse { - log.warn(s"Analyzer directory ($analyzerPath)is not found") - Nil - } - if Files.isDirectory(analyzerDir) - infoFile ← Files.newDirectoryStream(analyzerDir, "*.json").toSeq - if Files.isReadable(infoFile) - info = readInfo(infoFile) - name ← (info \ "name").asOpt[String] orElse { log.warn(s"name is missing in $infoFile"); None } - version ← (info \ "version").asOpt[String] orElse { log.warn(s"version is missing in $infoFile"); None } - description ← (info \ "description").asOpt[String] orElse { log.warn(s"description is missing in $infoFile"); None } - dataTypeList ← (info \ "dataTypeList").asOpt[Seq[String]] orElse { log.warn(s"dataTypeList is missing in $infoFile"); None } - command ← (info \ "command").asOpt[String] orElse { log.warn(s"command is missing in $infoFile"); None } - config = (info \ "config").asOpt[JsObject].getOrElse(JsObject(Nil)) - baseConfig = (info \ "baseConfig").asOpt[String].flatMap(c ⇒ (analyzerConfig \ c).asOpt[JsObject]).getOrElse(JsObject(Nil)) - absoluteCommand = analyzerPath.resolve(Paths.get(command.replaceAll("[\\/]", File.separator))) - _ = log.info(s"Register analyzer $name $version (${(name + "_" + version).replaceAll("\\.", "_")})") - } yield ExternalAnalyzer(name, version, description, dataTypeList, absoluteCommand, baseConfig.deepMerge(config))(analyzeExecutionContext) + private[services] def getExternalAnalyzers: Seq[Analyzer] = { + val globalConfig = (analyzerConfig \ "global").asOpt[JsObject].getOrElse(JsObject(Nil)) + for { + analyzerDir ← Try(Files.newDirectoryStream(analyzerPath).toSeq).getOrElse { + log.warn(s"Analyzer directory ($analyzerPath) is not found") + Nil + } + if Files.isDirectory(analyzerDir) + infoFile ← Files.newDirectoryStream(analyzerDir, "*.json").toSeq + if Files.isReadable(infoFile) + info = readInfo(infoFile) + name ← (info \ "name").asOpt[String] orElse { + log.warn(s"name is missing in $infoFile"); None + } + version ← (info \ "version").asOpt[String] orElse { + log.warn(s"version is missing in $infoFile"); None + } + description ← (info \ "description").asOpt[String] orElse { + log.warn(s"description is missing in $infoFile"); None + } + dataTypeList ← (info \ "dataTypeList").asOpt[Seq[String]] orElse { + log.warn(s"dataTypeList is missing in $infoFile"); None + } + command ← (info \ "command").asOpt[String] orElse { + log.warn(s"command is missing in $infoFile"); None + } + config = (info \ "config").asOpt[JsObject].getOrElse(JsObject(Nil)) + baseConfig = (info \ "baseConfig").asOpt[String].flatMap(c ⇒ (analyzerConfig \ c).asOpt[JsObject]).getOrElse(JsObject(Nil)) + absoluteCommand = analyzerPath.resolve(Paths.get(command.replaceAll("[\\/]", File.separator))) + _ = log.info(s"Register analyzer $name $version (${(name + "_" + version).replaceAll("\\.", "_")})") + } yield ExternalAnalyzer(name, version, description, dataTypeList, absoluteCommand, globalConfig deepMerge baseConfig deepMerge config)(analyzeExecutionContext) + } private[services] def readInfo(file: Path): JsValue = { - val source = scala.io.Source.fromFile(file.toFile()) + val source = scala.io.Source.fromFile(file.toFile) try { Json.parse(source.mkString) } diff --git a/build.sbt b/build.sbt index b9c46dfc9..b149c99fc 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ name := """cortex""" -lazy val root = (project in file(".")) +lazy val cortex = (project in file(".")) .enablePlugins(PlayScala) .settings(PublishToBinTray.settings)