mirror of
https://github.com/fluencelabs/aqua.git
synced 2025-03-15 11:40:50 +00:00
parent
db016288b0
commit
a8eeeacb8a
@ -17,7 +17,7 @@ val scribeV = "3.7.1"
|
|||||||
name := "aqua-hll"
|
name := "aqua-hll"
|
||||||
|
|
||||||
val commons = Seq(
|
val commons = Seq(
|
||||||
baseAquaVersion := "0.7.4",
|
baseAquaVersion := "0.7.5",
|
||||||
version := baseAquaVersion.value + "-" + sys.env.getOrElse("BUILD_NUMBER", "SNAPSHOT"),
|
version := baseAquaVersion.value + "-" + sys.env.getOrElse("BUILD_NUMBER", "SNAPSHOT"),
|
||||||
scalaVersion := dottyVersion,
|
scalaVersion := dottyVersion,
|
||||||
libraryDependencies ++= Seq(
|
libraryDependencies ++= Seq(
|
||||||
|
@ -5,6 +5,7 @@ import aqua.io.OutputPrinter
|
|||||||
import aqua.js.{CallJsFunction, FluencePeer, ServiceHandler}
|
import aqua.js.{CallJsFunction, FluencePeer, ServiceHandler}
|
||||||
import aqua.types.ScalarType
|
import aqua.types.ScalarType
|
||||||
import cats.data.NonEmptyList
|
import cats.data.NonEmptyList
|
||||||
|
import scribe.Logging
|
||||||
|
|
||||||
import scala.scalajs.js
|
import scala.scalajs.js
|
||||||
import scala.scalajs.js.JSON
|
import scala.scalajs.js.JSON
|
||||||
@ -12,15 +13,15 @@ import scala.scalajs.js.JSON
|
|||||||
private case class Console(serviceId: String, functions: NonEmptyList[AquaFunction])
|
private case class Console(serviceId: String, functions: NonEmptyList[AquaFunction])
|
||||||
extends Service(serviceId, functions)
|
extends Service(serviceId, functions)
|
||||||
|
|
||||||
object Console {
|
object Console extends Logging {
|
||||||
|
|
||||||
private def printFunction(funcName: String) = new AquaFunction {
|
private def printFunction(funcName: String) = new AquaFunction {
|
||||||
override def fnName: String = funcName
|
override def fnName: String = funcName
|
||||||
|
|
||||||
def handler: ServiceHandler = { varArgs =>
|
def handler: ServiceHandler = { varArgs =>
|
||||||
js.typeOf(varArgs(0)) match {
|
js.typeOf(varArgs(0)) match {
|
||||||
case "string" | "number" | "boolean" => OutputPrinter.print(varArgs(0).toString)
|
case "string" | "number" | "boolean" => logger.info(varArgs(0).toString)
|
||||||
case _ => OutputPrinter.print(JSON.stringify(varArgs(0), space = 2))
|
case _ => logger.info(JSON.stringify(varArgs(0), space = 2))
|
||||||
}
|
}
|
||||||
js.Promise.resolve(Service.emptyObject)
|
js.Promise.resolve(Service.emptyObject)
|
||||||
}
|
}
|
||||||
|
48
cli/.js/src/main/scala/aqua/builder/DeployHelper.scala
Normal file
48
cli/.js/src/main/scala/aqua/builder/DeployHelper.scala
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package aqua.builder
|
||||||
|
|
||||||
|
import aqua.backend.*
|
||||||
|
import aqua.ipfs.js.IpfsApi
|
||||||
|
import aqua.js.{CallJsFunction, FluencePeer, ServiceHandler}
|
||||||
|
import aqua.types.ScalarType
|
||||||
|
import cats.data.NonEmptyList
|
||||||
|
import scribe.Logging
|
||||||
|
|
||||||
|
import scala.scalajs.js
|
||||||
|
|
||||||
|
object DeployHelper extends Logging {
|
||||||
|
|
||||||
|
private val CreateResult = "create_result"
|
||||||
|
|
||||||
|
private def createResult(funcName: String): AquaFunction = new AquaFunction {
|
||||||
|
override def fnName: String = funcName
|
||||||
|
|
||||||
|
override def handler: ServiceHandler = args => {
|
||||||
|
val bid = args(0)
|
||||||
|
val sid = args(1)
|
||||||
|
js.Promise.resolve(js.Dynamic.literal(blueprint_id = bid, service_id = sid))
|
||||||
|
}
|
||||||
|
|
||||||
|
def arrow: ArrowTypeDef = ArrowTypeDef(
|
||||||
|
LabeledProductTypeDef(
|
||||||
|
("bid", ScalarTypeDef.fromScalar(ScalarType.string)) :: (
|
||||||
|
"sid",
|
||||||
|
ScalarTypeDef.fromScalar(ScalarType.string)
|
||||||
|
) :: Nil
|
||||||
|
),
|
||||||
|
UnlabeledProductTypeDef(
|
||||||
|
StructTypeDef(
|
||||||
|
"DeployResult",
|
||||||
|
Map(
|
||||||
|
"blueprint_id" -> ScalarTypeDef.fromScalar(ScalarType.string),
|
||||||
|
"service_id" -> ScalarTypeDef.fromScalar(ScalarType.string)
|
||||||
|
)
|
||||||
|
) :: Nil
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
def apply(serviceId: String = "deploy_helper"): Service = {
|
||||||
|
val funcs = NonEmptyList.one(createResult(CreateResult))
|
||||||
|
Service(serviceId, funcs)
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,8 @@ import scala.scalajs.js
|
|||||||
|
|
||||||
object IPFSUploader extends Logging {
|
object IPFSUploader extends Logging {
|
||||||
|
|
||||||
|
private val UploadFile = "uploadFile"
|
||||||
|
|
||||||
private def uploadFunc(funcName: String): AquaFunction = new AquaFunction {
|
private def uploadFunc(funcName: String): AquaFunction = new AquaFunction {
|
||||||
override def fnName: String = funcName
|
override def fnName: String = funcName
|
||||||
|
|
||||||
@ -46,8 +48,8 @@ object IPFSUploader extends Logging {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
def apply(serviceId: String, fnName: String): Service = {
|
def apply(serviceId: String): Service = {
|
||||||
val funcs = NonEmptyList.one(uploadFunc(fnName))
|
val funcs = NonEmptyList.one(uploadFunc(UploadFile))
|
||||||
Service(serviceId, funcs)
|
Service(serviceId, funcs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ object RunCommand extends Logging {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val builtinServices =
|
private val builtinServices =
|
||||||
aqua.builder.Console() :: aqua.builder.IPFSUploader("ipfs", "uploadFile") :: Nil
|
aqua.builder.Console() :: aqua.builder.IPFSUploader("ipfs") :: aqua.builder.DeployHelper() :: Nil
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes a function with the specified settings
|
* Executes a function with the specified settings
|
||||||
|
@ -25,13 +25,13 @@ object LogLevels {
|
|||||||
.map(validNel)
|
.map(validNel)
|
||||||
.getOrElse(
|
.getOrElse(
|
||||||
invalidNel(
|
invalidNel(
|
||||||
s"Unknown log-level '$s'. Please use one of these: 'all', 'trace', 'debug', 'info', 'warn', 'error', 'off'"
|
s"Invalid log-level '$s'. ${FluenceOpts.logHelpMessage}"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
lazy val error =
|
lazy val error =
|
||||||
"Invalid log-level format. Must be: '<log-level>' or 'compiler=<log-level>,fluencejs=<log-level>,aquavm=<log-level>', where <log-level> is one of these strings: 'all', 'trace', 'debug', 'info', 'warn', 'error', 'off'"
|
s"Invalid log-level format. ${FluenceOpts.logHelpMessage}"
|
||||||
|
|
||||||
private def fromStrings(
|
private def fromStrings(
|
||||||
name: String,
|
name: String,
|
||||||
@ -126,8 +126,10 @@ object FluenceOpts {
|
|||||||
.map(_ => true)
|
.map(_ => true)
|
||||||
.withDefault(false)
|
.withDefault(false)
|
||||||
|
|
||||||
|
val logHelpMessage = "Format: '<level> OR <segment>=<level>[,]', where <level> is one of these strings: 'all', 'trace', 'debug', 'info', 'warn', 'error', 'off'. <segment> can be 'compiler', 'fluencejs' or 'aquavm'"
|
||||||
|
|
||||||
val logLevelOpt: Opts[LogLevels] =
|
val logLevelOpt: Opts[LogLevels] =
|
||||||
Opts.option[String]("log-level", help = "Set log level").mapValidated {
|
Opts.option[String]("log-level", help = s"Set log level. $logHelpMessage").mapValidated {
|
||||||
str =>
|
str =>
|
||||||
LogLevels.fromString(str)
|
LogLevels.fromString(str)
|
||||||
}.withDefault(LogLevels())
|
}.withDefault(LogLevels())
|
||||||
|
@ -18,6 +18,16 @@ data ModuleConf:
|
|||||||
mem_pages_count: ?u32
|
mem_pages_count: ?u32
|
||||||
max_heap_size: ?string
|
max_heap_size: ?string
|
||||||
|
|
||||||
|
service OpC("op"):
|
||||||
|
array_length(arr: []ModuleConf) -> u32
|
||||||
|
|
||||||
|
data DeployResult:
|
||||||
|
blueprint_id: string
|
||||||
|
service_id: string
|
||||||
|
|
||||||
|
service DeployHelper("deploy_helper"):
|
||||||
|
create_result(bid: string, sid: string) -> DeployResult
|
||||||
|
|
||||||
data ServiceConf:
|
data ServiceConf:
|
||||||
modules: []ModuleConf
|
modules: []ModuleConf
|
||||||
|
|
||||||
@ -33,51 +43,38 @@ func flattenS(input: []string) -> ?[]string:
|
|||||||
res <<- input
|
res <<- input
|
||||||
<- res
|
<- res
|
||||||
|
|
||||||
func deploy(serviceName: string, serviceConf: ServiceConf) -> string:
|
func deploy(serviceName: string, serviceConf: ServiceConf) -> DeployResult:
|
||||||
|
|
||||||
on ON_PEER:
|
on ON_PEER:
|
||||||
multiaddr <- Ipfs.get_external_api_multiaddr()
|
multiaddr <- Ipfs.get_external_api_multiaddr()
|
||||||
|
|
||||||
-- Console.print("BEFORE THAT")
|
|
||||||
mod_hashes: *string
|
mod_hashes: *string
|
||||||
for m <- serviceConf.modules:
|
for m <- serviceConf.modules par:
|
||||||
-- TODO check for cache
|
-- TODO check for cache
|
||||||
Console.print("Going to upload a module...")
|
Console.print(Op.concat_strings("Going to upload a module: ", m.name))
|
||||||
uploadRes <- LocalIpfs.uploadFile(m.path, multiaddr)
|
uploadRes <- LocalIpfs.uploadFile(m.path, multiaddr)
|
||||||
cid = uploadRes.cid
|
cid = uploadRes.cid
|
||||||
-- Console.print(cid)
|
Console.print(Op.concat_strings(Op.concat_strings("Module '", m.name), "' was uploaded"))
|
||||||
|
|
||||||
on ON_PEER:
|
on ON_PEER:
|
||||||
hostRes <- Ipfs.get(cid)
|
hostRes <- Ipfs.get(cid)
|
||||||
|
|
||||||
-- Console.print(hostRes.path)
|
|
||||||
-- on ON_PEER:
|
|
||||||
|
|
||||||
conf <- Dist.make_module_config(m.name, m.mem_pages_count, m.max_heap_size, m.logger_enabled, m.preopened_files, m.envs, m.mapped_dirs, m.mounted_binaries, m.logging_mask)
|
conf <- Dist.make_module_config(m.name, m.mem_pages_count, m.max_heap_size, m.logger_enabled, m.preopened_files, m.envs, m.mapped_dirs, m.mounted_binaries, m.logging_mask)
|
||||||
|
|
||||||
-- Console.print("Created config")
|
|
||||||
|
|
||||||
-- on ON_PEER:
|
|
||||||
|
|
||||||
mod <- Dist.add_module_from_vault(hostRes.path, conf)
|
mod <- Dist.add_module_from_vault(hostRes.path, conf)
|
||||||
|
|
||||||
mod_hashes <- Op.concat_strings("hash:", mod)
|
mod_hashes <- Op.concat_strings("hash:", mod)
|
||||||
|
|
||||||
|
join mod_hashes[OpC.array_length(serviceConf.modules) - 1]
|
||||||
|
|
||||||
Console.print("Now time to make a blueprint...")
|
Console.print("Now time to make a blueprint...")
|
||||||
on ON_PEER:
|
on ON_PEER:
|
||||||
|
|
||||||
blueprint <- Dist.make_blueprint(serviceName, mod_hashes)
|
blueprint <- Dist.make_blueprint(serviceName, mod_hashes)
|
||||||
|
blueprint_id <- Dist.add_blueprint(blueprint)
|
||||||
--Console.print("Got blueprint")
|
|
||||||
--on ON_PEER:
|
|
||||||
blueprint_id <- Dist.add_blueprint(blueprint)
|
|
||||||
|
|
||||||
service_id <- Srv.create(blueprint_id)
|
service_id <- Srv.create(blueprint_id)
|
||||||
|
|
||||||
Console.print("Blueprint id:")
|
res <- DeployHelper.create_result(blueprint_id, service_id)
|
||||||
Console.print(blueprint_id)
|
<- res
|
||||||
Console.print("And your service id is:")
|
|
||||||
|
|
||||||
<- service_id
|
|
||||||
|
|
||||||
func remove(service_id: string):
|
func remove(service_id: string):
|
||||||
on ON_PEER:
|
on ON_PEER:
|
||||||
|
@ -21,9 +21,9 @@
|
|||||||
"build": "tsc"
|
"build": "tsc"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fluencelabs/aqua-ipfs": "0.5.2",
|
"@fluencelabs/aqua-ipfs": "0.5.5",
|
||||||
"@fluencelabs/aqua-lib": "0.5.1",
|
"@fluencelabs/aqua-lib": "0.5.2",
|
||||||
"@fluencelabs/fluence": "0.23.3",
|
"@fluencelabs/fluence": "0.23.4",
|
||||||
"@fluencelabs/fluence-network-environment": "1.0.13",
|
"@fluencelabs/fluence-network-environment": "1.0.13",
|
||||||
"ipfs-http-client": "50.1.2"
|
"ipfs-http-client": "50.1.2"
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user