mirror of
https://github.com/fluencelabs/dashboard
synced 2025-04-08 07:58:14 +00:00
show service by id
This commit is contained in:
parent
a9c739c0b1
commit
2f192bd97c
@ -15,6 +15,7 @@ toInstance peerId identify blueprints service =
|
|||||||
let
|
let
|
||||||
name =
|
name =
|
||||||
blueprints |> Dict.get service.blueprint_id |> Maybe.withDefault "unknown"
|
blueprints |> Dict.get service.blueprint_id |> Maybe.withDefault "unknown"
|
||||||
|
|
||||||
ip =
|
ip =
|
||||||
List.head identify.external_addresses |> Maybe.withDefault "unknown"
|
List.head identify.external_addresses |> Maybe.withDefault "unknown"
|
||||||
in
|
in
|
||||||
@ -32,8 +33,11 @@ view model =
|
|||||||
|
|
||||||
instances =
|
instances =
|
||||||
Dict.toList model.discoveredPeers
|
Dict.toList model.discoveredPeers
|
||||||
|> List.map (\( peer, data ) -> data.services
|
|> List.map
|
||||||
|> List.map (toInstance peer data.identify bpsDict))
|
(\( peer, data ) ->
|
||||||
|
data.services
|
||||||
|
|> List.map (toInstance peer data.identify bpsDict)
|
||||||
|
)
|
||||||
|> List.concat
|
|> List.concat
|
||||||
in
|
in
|
||||||
viewTable instances
|
viewTable instances
|
||||||
@ -42,7 +46,7 @@ view model =
|
|||||||
viewTable : List Instance -> Html msg
|
viewTable : List Instance -> Html msg
|
||||||
viewTable instances =
|
viewTable instances =
|
||||||
div [ classes "pa4" ]
|
div [ classes "pa4" ]
|
||||||
[ div [ classes "overflow-auto" ]
|
[ div [ classes "" ]
|
||||||
[ table [ classes "f6 w-100 mw8 center", attribute "cellspacing" "0" ]
|
[ table [ classes "f6 w-100 mw8 center", attribute "cellspacing" "0" ]
|
||||||
[ thead []
|
[ thead []
|
||||||
[ tr [ classes "stripe-dark" ]
|
[ tr [ classes "stripe-dark" ]
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
module ModulePage.Model exposing (..)
|
|
||||||
|
|
||||||
import Services.Model exposing (Service)
|
|
||||||
|
|
||||||
|
|
||||||
type alias ModuleInfo =
|
|
||||||
{ name : String
|
|
||||||
, id : String
|
|
||||||
, author : String
|
|
||||||
, authorPeerId : String
|
|
||||||
, description : String
|
|
||||||
, website : String
|
|
||||||
, service : Service
|
|
||||||
}
|
|
@ -1,68 +0,0 @@
|
|||||||
module ModulePage.View exposing (..)
|
|
||||||
|
|
||||||
import Html exposing (Html, article, div, span, text)
|
|
||||||
import ModulePage.Model exposing (ModuleInfo)
|
|
||||||
import Palette exposing (classes)
|
|
||||||
import Services.Model exposing (Record, Signature)
|
|
||||||
import String.Interpolate exposing (interpolate)
|
|
||||||
|
|
||||||
|
|
||||||
view : ModuleInfo -> Html msg
|
|
||||||
view moduleInfo =
|
|
||||||
div [ classes "cf ph2-ns" ]
|
|
||||||
[ span [ classes "fl w-100 f1 lh-title dark-red" ] [ text ("Module: " ++ moduleInfo.name) ]
|
|
||||||
, span [ classes "fl w-100 light-red" ] [ text moduleInfo.id ]
|
|
||||||
, viewInfo moduleInfo
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
viewInfo : ModuleInfo -> Html msg
|
|
||||||
viewInfo moduleInfo =
|
|
||||||
article [ classes "cf" ]
|
|
||||||
[ div [ classes "fl w-30 gray mv1" ] [ text "AUTHOR" ]
|
|
||||||
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black b" ] [ text moduleInfo.author ], span [ classes "fl w-100 black" ] [ text moduleInfo.authorPeerId ] ]
|
|
||||||
, div [ classes "fl w-30 gray mv1" ] [ text "DESCRIPTION" ]
|
|
||||||
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black" ] [ text moduleInfo.description ] ]
|
|
||||||
, div [ classes "fl w-30 gray mv1" ] [ text "INTERFACE" ]
|
|
||||||
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black" ] (recordsView moduleInfo.service.interface.record_types ++ signaturesView moduleInfo.service.interface.function_signatures) ]
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
recordsView : List Record -> List (Html msg)
|
|
||||||
recordsView record =
|
|
||||||
List.map recordView record
|
|
||||||
|
|
||||||
|
|
||||||
recordView : Record -> Html msg
|
|
||||||
recordView record =
|
|
||||||
div [ classes "i" ]
|
|
||||||
([ span [ classes "fl w-100 mt2" ] [ text (record.name ++ " {") ] ]
|
|
||||||
++ fieldsView record.fields
|
|
||||||
++ [ span [ classes "fl w-100 mb2" ] [ text "}" ] ]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
fieldsView : List (List String) -> List (Html msg)
|
|
||||||
fieldsView fields =
|
|
||||||
fields |> List.map (\f -> span [ classes "fl w-100 ml2" ] [ text (String.join ": " f) ])
|
|
||||||
|
|
||||||
|
|
||||||
signaturesView : List Signature -> List (Html msg)
|
|
||||||
signaturesView signatures =
|
|
||||||
List.map signatureView signatures
|
|
||||||
|
|
||||||
|
|
||||||
signatureView : Signature -> Html msg
|
|
||||||
signatureView signature =
|
|
||||||
div [ classes "i fl w-100 mv2" ]
|
|
||||||
[ text (interpolate "fn {0}({1}) -> {2}" [ signature.name, argumentsToString signature.arguments, outputToString signature.output_types ]) ]
|
|
||||||
|
|
||||||
|
|
||||||
argumentsToString : List (List String) -> String
|
|
||||||
argumentsToString arguments =
|
|
||||||
String.join ", " (arguments |> List.map (String.join ": "))
|
|
||||||
|
|
||||||
|
|
||||||
outputToString : List String -> String
|
|
||||||
outputToString output =
|
|
||||||
output |> List.head |> Maybe.withDefault "void"
|
|
@ -2,12 +2,12 @@ module Route exposing (..)
|
|||||||
|
|
||||||
import Air exposing (callBI, fold, next, par, relayEvent, seq, set)
|
import Air exposing (callBI, fold, next, par, relayEvent, seq, set)
|
||||||
import Dict
|
import Dict
|
||||||
import Html exposing (Html)
|
import Html exposing (Html, text)
|
||||||
import HubPage.View as HubPage
|
import HubPage.View as HubPage
|
||||||
import Json.Encode as Encode
|
import Json.Encode as Encode
|
||||||
import Model exposing (Model, Route(..))
|
import Model exposing (Model, Route(..))
|
||||||
import ModulePage.View as ModulePage
|
|
||||||
import Port exposing (sendAir)
|
import Port exposing (sendAir)
|
||||||
|
import ServicePage.View as ServicePage
|
||||||
import Url.Parser exposing ((</>), Parser, map, oneOf, s, string)
|
import Url.Parser exposing ((</>), Parser, map, oneOf, s, string)
|
||||||
|
|
||||||
|
|
||||||
@ -37,39 +37,16 @@ routeView model route =
|
|||||||
HubPage.view model
|
HubPage.view model
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
Html.text ("undefined page: " ++ page)
|
text ("undefined page: " ++ page)
|
||||||
|
|
||||||
Peer peer ->
|
Peer peer ->
|
||||||
Html.text peer
|
text peer
|
||||||
|
|
||||||
Service serviceId ->
|
Service serviceId ->
|
||||||
Html.text serviceId
|
ServicePage.view model serviceId
|
||||||
|
|
||||||
Module moduleName ->
|
Module moduleName ->
|
||||||
let
|
text moduleName
|
||||||
up =
|
|
||||||
\( pid, p ) -> Maybe.map (\a -> Tuple.pair pid a) (List.head (List.drop 0 p.services))
|
|
||||||
|
|
||||||
el =
|
|
||||||
List.head (List.drop 2 (Dict.toList model.discoveredPeers))
|
|
||||||
in
|
|
||||||
case Maybe.andThen up el of
|
|
||||||
Just ( peerId, service ) ->
|
|
||||||
let
|
|
||||||
example =
|
|
||||||
{ name = moduleName
|
|
||||||
, id = service.service_id
|
|
||||||
, author = "Fluence Labs"
|
|
||||||
, authorPeerId = peerId
|
|
||||||
, description = "Cool service"
|
|
||||||
, website = "https://github.com/fluencelabs/chat"
|
|
||||||
, service = service
|
|
||||||
}
|
|
||||||
in
|
|
||||||
ModulePage.view example
|
|
||||||
|
|
||||||
Nothing ->
|
|
||||||
Html.text moduleName
|
|
||||||
|
|
||||||
|
|
||||||
getPeers : Model -> Cmd msg
|
getPeers : Model -> Cmd msg
|
||||||
|
@ -1 +1,14 @@
|
|||||||
module ServicePage.Model exposing (..)
|
module ServicePage.Model exposing (..)
|
||||||
|
|
||||||
|
import Services.Model exposing (Service)
|
||||||
|
|
||||||
|
|
||||||
|
type alias ServiceInfo =
|
||||||
|
{ name : String
|
||||||
|
, id : String
|
||||||
|
, author : String
|
||||||
|
, authorPeerId : String
|
||||||
|
, description : String
|
||||||
|
, website : String
|
||||||
|
, service : Service
|
||||||
|
}
|
||||||
|
@ -1 +1,117 @@
|
|||||||
module ServicePage.View exposing (..)
|
module ServicePage.View exposing (..)
|
||||||
|
|
||||||
|
import Dict
|
||||||
|
import Html exposing (Html, article, div, span, text)
|
||||||
|
import List.Extra
|
||||||
|
import Model exposing (Model)
|
||||||
|
import Palette exposing (classes)
|
||||||
|
import ServicePage.Model exposing (ServiceInfo)
|
||||||
|
import Services.Model exposing (Record, Signature)
|
||||||
|
import String.Interpolate exposing (interpolate)
|
||||||
|
|
||||||
|
|
||||||
|
view : Model -> String -> Html msg
|
||||||
|
view model id =
|
||||||
|
let
|
||||||
|
moduleInfo =
|
||||||
|
modelToServiceInfo model id
|
||||||
|
in
|
||||||
|
case moduleInfo of
|
||||||
|
Just mi ->
|
||||||
|
div [ classes "cf ph2-ns" ]
|
||||||
|
[ span [ classes "fl w-100 f1 lh-title dark-red" ] [ text ("Module: " ++ mi.name) ]
|
||||||
|
, span [ classes "fl w-100 light-red" ] [ text mi.id ]
|
||||||
|
, viewInfo mi
|
||||||
|
]
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
div [ classes "cf ph2-ns" ]
|
||||||
|
[ span [ classes "fl w-100 f1 lh-title dark-red" ] [ text "Module not found" ]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
modelToServiceInfo : Model -> String -> Maybe ServiceInfo
|
||||||
|
modelToServiceInfo model id =
|
||||||
|
let
|
||||||
|
datas =
|
||||||
|
Dict.toList model.discoveredPeers
|
||||||
|
|
||||||
|
services =
|
||||||
|
datas |> List.map (\( peer, data ) -> data.services |> List.map (\s -> ( peer, s ))) |> List.concat
|
||||||
|
|
||||||
|
blueprints =
|
||||||
|
datas |> List.map (\( _, data ) -> data.blueprints) |> List.concat |> List.map (\bp -> ( bp.id, bp.name )) |> Dict.fromList
|
||||||
|
|
||||||
|
service =
|
||||||
|
services |> List.Extra.find (\( _, s ) -> s.service_id == id)
|
||||||
|
|
||||||
|
name =
|
||||||
|
service |> Maybe.andThen (\( _, s ) -> blueprints |> Dict.get s.blueprint_id) |> Maybe.withDefault "unknown"
|
||||||
|
|
||||||
|
info =
|
||||||
|
service
|
||||||
|
|> Maybe.map
|
||||||
|
(\( p, s ) ->
|
||||||
|
{ name = name
|
||||||
|
, id = id
|
||||||
|
, author = "Fluence Labs"
|
||||||
|
, authorPeerId = p
|
||||||
|
, description = "Cool service"
|
||||||
|
, website = "https://github.com/fluencelabs/chat"
|
||||||
|
, service = s
|
||||||
|
}
|
||||||
|
)
|
||||||
|
in
|
||||||
|
info
|
||||||
|
|
||||||
|
|
||||||
|
viewInfo : ServiceInfo -> Html msg
|
||||||
|
viewInfo moduleInfo =
|
||||||
|
article [ classes "cf" ]
|
||||||
|
[ div [ classes "fl w-30 gray mv1" ] [ text "AUTHOR" ]
|
||||||
|
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black b" ] [ text moduleInfo.author ], span [ classes "fl w-100 black" ] [ text moduleInfo.authorPeerId ] ]
|
||||||
|
, div [ classes "fl w-30 gray mv1" ] [ text "DESCRIPTION" ]
|
||||||
|
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black" ] [ text moduleInfo.description ] ]
|
||||||
|
, div [ classes "fl w-30 gray mv1" ] [ text "INTERFACE" ]
|
||||||
|
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black" ] (recordsView moduleInfo.service.interface.record_types ++ signaturesView moduleInfo.service.interface.function_signatures) ]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
recordsView : List Record -> List (Html msg)
|
||||||
|
recordsView record =
|
||||||
|
List.map recordView record
|
||||||
|
|
||||||
|
|
||||||
|
recordView : Record -> Html msg
|
||||||
|
recordView record =
|
||||||
|
div [ classes "i" ]
|
||||||
|
([ span [ classes "fl w-100 mt2" ] [ text (record.name ++ " {") ] ]
|
||||||
|
++ fieldsView record.fields
|
||||||
|
++ [ span [ classes "fl w-100 mb2" ] [ text "}" ] ]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
fieldsView : List (List String) -> List (Html msg)
|
||||||
|
fieldsView fields =
|
||||||
|
fields |> List.map (\f -> span [ classes "fl w-100 ml2" ] [ text (String.join ": " f) ])
|
||||||
|
|
||||||
|
|
||||||
|
signaturesView : List Signature -> List (Html msg)
|
||||||
|
signaturesView signatures =
|
||||||
|
List.map signatureView signatures
|
||||||
|
|
||||||
|
|
||||||
|
signatureView : Signature -> Html msg
|
||||||
|
signatureView signature =
|
||||||
|
div [ classes "i fl w-100 mv2" ]
|
||||||
|
[ text (interpolate "fn {0}({1}) -> {2}" [ signature.name, argumentsToString signature.arguments, outputToString signature.output_types ]) ]
|
||||||
|
|
||||||
|
|
||||||
|
argumentsToString : List (List String) -> String
|
||||||
|
argumentsToString arguments =
|
||||||
|
String.join ", " (arguments |> List.map (String.join ": "))
|
||||||
|
|
||||||
|
|
||||||
|
outputToString : List String -> String
|
||||||
|
outputToString output =
|
||||||
|
output |> List.head |> Maybe.withDefault "void"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user