trying to add services

This commit is contained in:
Pavel Murygin 2021-06-18 01:02:45 +03:00
parent c790075a0e
commit dafa8a61e5
7 changed files with 418 additions and 113 deletions

View File

@ -4,11 +4,12 @@ service DashboardEvent("event"):
collectPeerInfo(peer: PeerId, ident: Info, services: []Service, blueprints: []Blueprint, modules: []Module)
collectServiceInterface(peer: PeerId, serviceId: string, interface: Interface)
-- func collectServiceInterfaces(peer: Peer, services: []Service):
-- on peer:
-- for srv <- services par:
-- info <- Srv.get_interface(srv.id)
-- DashboardEvent.collectServiceInterface(peer, service.id, info.Interface)
func collectServiceInterfaces(peer: PeerId, services: []Service):
on peer:
for srv <- services par:
info <- Srv.get_interface(srv.id)
on %init_peer_id%:
DashboardEvent.collectServiceInterface(peer, srv.id, info.interface)
func askAllAndSend(peer: PeerId):
on peer:
@ -17,7 +18,7 @@ func askAllAndSend(peer: PeerId):
modules <- Dist.list_modules()
services <- Srv.list()
DashboardEvent.collectPeerInfo(peer, ident, services, blueprints, modules)
-- collectServiceInterfaces(peer, services)
collectServiceInterfaces(peer, services)
func findAndAskNeighboursSchema(relayPeerId: PeerId, clientId: PeerId):

View File

@ -19,7 +19,7 @@ limitations under the License.
import Browser exposing (Document)
import Browser.Navigation as Navigation
import Config exposing (Flags)
import Dict
import Dict exposing (Dict)
import Model exposing (Model)
import Msg exposing (Msg(..))
import Route
@ -56,6 +56,7 @@ init flags url key =
, modules = Dict.empty
, modulesByHash = Dict.empty
, blueprints = Dict.empty
, services = Dict.empty
, toggledInterface = Nothing
, knownPeers = flags.knownPeers
, isInitialized = False

View File

@ -55,6 +55,7 @@ type alias Model =
, modules : Dict String Module
, modulesByHash : Dict String Module
, blueprints : Dict String Blueprint
, services : Dict String Service
, toggledInterface : Maybe String
, knownPeers : List String
, isInitialized : Bool

View File

@ -5,13 +5,20 @@ import Dict exposing (Dict)
import Json.Encode exposing (Value)
import Modules.Model exposing (Module)
import Nodes.Model exposing (Identify)
import Service.Model exposing (Service)
import Service.Model exposing (Interface, Service)
type alias ServiceInfo =
{ id : String
, blueprint_id : String
, owner_id : String
}
type alias CollectPeerInfo =
{ peerId : String
, identify : Maybe Identify
, services : Maybe (List Service)
, services : Maybe (List ServiceInfo)
, modules : Maybe (List Module)
, blueprints : Maybe (List Blueprint)
}
@ -20,30 +27,10 @@ type alias CollectPeerInfo =
port collectPeerInfo : (CollectPeerInfo -> msg) -> Sub msg
type alias FunctionSignature =
{ arguments : List String
, name : String
, output_types : List String
}
type alias RecordType =
{ fields : List String
, id : Int
, name : String
}
type alias ServiceInterface =
{ function_signatures : List FunctionSignature
, record_types : List RecordType
}
type alias CollectServiceInterface =
{ blueprint_id : String
{ peer_id : String
, service_id : String
, interface : ServiceInterface
, interface : Interface
}

View File

@ -25,4 +25,10 @@ type alias Service =
{ id : String
, blueprint_id : String
, owner_id : String
, interface : Maybe Interface
}
setInterface : Interface -> Service -> Service
setInterface interface service =
{ service | interface = Just interface }

View File

@ -27,7 +27,7 @@ import Msg exposing (..)
import Nodes.Model exposing (Identify)
import Port exposing (getAll)
import Route exposing (getAllCmd)
import Service.Model exposing (Service)
import Service.Model exposing (Service, setInterface)
import Url
@ -55,13 +55,34 @@ update msg model =
Browser.External href ->
( model, Nav.load href )
CollectServiceInterface { blueprint_id, service_id, interface } ->
( model, Cmd.none )
CollectServiceInterface { peer_id, service_id, interface } ->
let
service =
Dict.get service_id model.services
updatedServices =
Dict.update service_id (Maybe.map (setInterface interface)) model.services
newModel =
{ model | services = updatedServices }
in
( newModel, Cmd.none )
CollectPeerInfo { peerId, identify, services, modules, blueprints } ->
let
fromServiceInfo =
\si ->
{ id = si.id
, blueprint_id = si.blueprint_id
, owner_id = si.owner_id
, interface = Nothing
}
servicesCorrectType =
services |> Maybe.map (List.map fromServiceInfo)
updated =
Maybe.map4 (updateModel model peerId) identify services modules blueprints
Maybe.map4 (updateModel model peerId) identify servicesCorrectType modules blueprints
updatedModel =
withDefault model updated
@ -98,6 +119,9 @@ updateModel model peer identify services modules blueprints =
data =
Maybe.withDefault emptyPeerData (Dict.get peer model.discoveredPeers)
servicesDict =
services |> List.map (\m -> ( m.id, m )) |> Dict.fromList
moduleDict =
modules |> List.map (\m -> ( m.name, m )) |> Dict.fromList
@ -117,9 +141,15 @@ updateModel model peer identify services modules blueprints =
Dict.union blueprintDict model.blueprints
newData =
{ data | identify = identify, services = services, modules = Dict.keys moduleDict, blueprints = Dict.keys blueprintDict }
{ data | identify = identify, modules = Dict.keys moduleDict, blueprints = Dict.keys blueprintDict }
updated =
Dict.insert peer newData model.discoveredPeers
in
{ model | discoveredPeers = updated, modules = updatedModules, modulesByHash = updatedModulesByHash, blueprints = updatedBlueprints }
{ model
| discoveredPeers = updated
, services = servicesDict
, modules = updatedModules
, modulesByHash = updatedModulesByHash
, blueprints = updatedBlueprints
}

View File

@ -10,6 +10,92 @@ import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable';
export async function collectServiceInterfaces(client, peer, services) {
let request;
const promise = new Promise((resolve, reject) => {
request = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "peer") [] peer)
)
(call %init_peer_id% ("getDataSrv" "services") [] services)
)
(call -relay- ("op" "identity") [])
)
(xor
(fold services srv
(par
(seq
(call peer ("srv" "get_interface") [srv.$.id!] info)
(xor
(call %init_peer_id% ("event" "collectServiceInterface") [peer srv.$.id! info.$.interface!])
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
)
(seq
(seq
(seq
(call -relay- ("op" "identity") [])
(next srv)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("op" "identity") [])
)
)
)
(seq
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
(call -relay- ("op" "identity") [])
)
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId;
});
h.on('getDataSrv', 'peer', () => {return peer;});
h.on('getDataSrv', 'services', () => {return services;});
h.onEvent('errorHandlingSrv', 'error', (args) => {
// assuming error is the single argument
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for collectServiceInterfaces');
})
.build();
});
await client.initiateFlow(request);
return Promise.race([promise, Promise.resolve()]);
}
export async function askAllAndSend(client, peer) {
let request;
const promise = new Promise((resolve, reject) => {
@ -20,6 +106,8 @@ export async function askAllAndSend(client, peer) {
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
@ -49,7 +137,46 @@ export async function askAllAndSend(client, peer) {
)
(call %init_peer_id% ("event" "collectPeerInfo") [peer ident services blueprints modules])
)
(call -relay- ("op" "identity") [])
)
(xor
(fold services srv
(par
(seq
(call peer ("srv" "get_interface") [srv.$.id!] info)
(xor
(call %init_peer_id% ("event" "collectServiceInterface") [peer srv.$.id! info.$.interface!])
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
)
(seq
(seq
(seq
(call -relay- ("op" "identity") [])
(next srv)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("op" "identity") [])
)
)
)
(seq
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
(call -relay- ("op" "identity") [])
)
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)
)
`,
@ -106,6 +233,8 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId)
(seq
(call n ("kad" "neighborhood") [clientId false] neighbors2)
(fold neighbors2 n2
(seq
(seq
(seq
(seq
(seq
@ -129,13 +258,46 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId)
)
(call n ("event" "collectPeerInfo") [n2 ident services blueprints modules])
)
(xor
(fold services srv
(par
(seq
(call n2 ("srv" "get_interface") [srv.$.id!] info)
(xor
(call %init_peer_id% ("event" "collectServiceInterface") [n2 srv.$.id! info.$.interface!])
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
)
(seq
(seq
(seq
(call -relay- ("op" "identity") [])
(next srv)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("op" "identity") [])
)
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
)
(call -relay- ("op" "identity") [])
)
(next n2)
)
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)
)
(seq
@ -154,7 +316,7 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId)
(seq
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
)
(call -relay- ("op" "identity") [])
)
@ -162,7 +324,7 @@ export async function findAndAskNeighboursSchema(client, relayPeerId, clientId)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6])
)
)
@ -212,6 +374,8 @@ export async function getAll(client, relayPeerId, knownPeers) {
(call %init_peer_id% ("getDataSrv" "knownPeers") [] knownPeers)
)
(par
(seq
(seq
(seq
(seq
(seq
@ -237,8 +401,47 @@ export async function getAll(client, relayPeerId, knownPeers) {
)
(call %init_peer_id% ("event" "collectPeerInfo") [relayPeerId ident services blueprints modules])
)
(call -relay- ("op" "identity") [])
)
(xor
(fold services srv
(par
(seq
(call relayPeerId ("srv" "get_interface") [srv.$.id!] info)
(xor
(call %init_peer_id% ("event" "collectServiceInterface") [relayPeerId srv.$.id! info.$.interface!])
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
)
(seq
(seq
(seq
(call -relay- ("op" "identity") [])
(next srv)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("op" "identity") [])
)
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
)
(seq
(seq
(seq
(call -relay- ("op" "identity") [])
(fold knownPeers peer
(par
(seq
(seq
(seq
(seq
(seq
@ -256,7 +459,7 @@ export async function getAll(client, relayPeerId, knownPeers) {
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)
)
)
@ -264,6 +467,41 @@ export async function getAll(client, relayPeerId, knownPeers) {
)
(call %init_peer_id% ("event" "collectPeerInfo") [peer ident0 services0 blueprints0 modules0])
)
(call -relay- ("op" "identity") [])
)
(xor
(fold services0 srv0
(par
(seq
(call peer ("srv" "get_interface") [srv0.$.id!] info0)
(xor
(call %init_peer_id% ("event" "collectServiceInterface") [peer srv0.$.id! info0.$.interface!])
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
)
)
)
(seq
(seq
(seq
(call -relay- ("op" "identity") [])
(next srv0)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("op" "identity") [])
)
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6])
)
)
)
(seq
(call -relay- ("op" "identity") [])
(next peer)
)
)
@ -271,6 +509,12 @@ export async function getAll(client, relayPeerId, knownPeers) {
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("op" "identity") [])
)
)
)
(call -relay- ("op" "identity") [])
)
(xor
(seq
(call relayPeerId ("kad" "neighborhood") [%init_peer_id% false] neighbors)
@ -280,6 +524,8 @@ export async function getAll(client, relayPeerId, knownPeers) {
(seq
(call n ("kad" "neighborhood") [%init_peer_id% false] neighbors2)
(fold neighbors2 n2
(seq
(seq
(seq
(seq
(seq
@ -296,20 +542,53 @@ export async function getAll(client, relayPeerId, knownPeers) {
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 7])
)
)
(call -relay- ("op" "identity") [])
)
(call n ("event" "collectPeerInfo") [n2 ident1 services1 blueprints1 modules1])
)
(xor
(fold services1 srv1
(par
(seq
(call n2 ("srv" "get_interface") [srv1.$.id!] info1)
(xor
(call %init_peer_id% ("event" "collectServiceInterface") [n2 srv1.$.id! info1.$.interface!])
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 8])
)
)
)
(seq
(seq
(seq
(call -relay- ("op" "identity") [])
(next srv1)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("op" "identity") [])
)
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 9])
)
)
)
(call -relay- ("op" "identity") [])
)
(next n2)
)
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 10])
)
)
(seq
@ -328,7 +607,7 @@ export async function getAll(client, relayPeerId, knownPeers) {
(seq
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 11])
)
(call -relay- ("op" "identity") [])
)
@ -336,7 +615,7 @@ export async function getAll(client, relayPeerId, knownPeers) {
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 12])
)
)