From 5b632a9a46c0b157cc94d8b81bd291a457b20f14 Mon Sep 17 00:00:00 2001 From: Thomas E Lackey Date: Wed, 9 Dec 2020 18:45:09 -0600 Subject: [PATCH] fix: detect running addon and add their links to the console sidebar (#57) --- packages/console-app/config-testnet.yml | 2 +- .../console-app/src/components/Sidebar.js | 25 +++++++++++++ .../console-app/src/gql/addon_list.graphql | 9 +++++ packages/console-app/src/version.json | 4 +- packages/console-server/src/gql/api.graphql | 1 + .../console-server/src/resolvers/addons.js | 37 +++++++++++++++++++ .../console-server/src/resolvers/index.js | 3 +- 7 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 packages/console-app/src/gql/addon_list.graphql create mode 100644 packages/console-server/src/resolvers/addons.js diff --git a/packages/console-app/config-testnet.yml b/packages/console-app/config-testnet.yml index 45ac94c..9860696 100644 --- a/packages/console-app/config-testnet.yml +++ b/packages/console-app/config-testnet.yml @@ -11,7 +11,7 @@ app: publicUrl: '/console' api: - server: 'https://apollo1.kube.moon.dxos.network' + server: 'http://127.0.0.1:9004' path: '/api' intervalLog: 5000 pollInterval: 10000 diff --git a/packages/console-app/src/components/Sidebar.js b/packages/console-app/src/components/Sidebar.js index fd81ea4..7ce498b 100644 --- a/packages/console-app/src/components/Sidebar.js +++ b/packages/console-app/src/components/Sidebar.js @@ -4,13 +4,17 @@ import clsx from 'clsx'; import React from 'react'; +import { useQuery } from '@apollo/react-hooks'; import { useHistory, useParams } from 'react-router'; import { makeStyles } from '@material-ui/core'; import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; import ListItemIcon from '@material-ui/core/ListItemIcon'; +import LinkIcon from '@material-ui/icons/ExitToApp'; import ListItemText from '@material-ui/core/ListItemText'; +import { useQueryStatusReducer } from "../hooks"; +import ADDON_LIST from "../gql/addon_list.graphql"; const useStyles = makeStyles(theme => ({ root: { @@ -39,6 +43,13 @@ const Sidebar = ({ modules: { services, settings } }) => { const history = useHistory(); const { module } = useParams(); + const { data: addonResponse } = useQueryStatusReducer(useQuery(ADDON_LIST)); + console.log(addonResponse); + if (!addonResponse) { + return null; + } + const addons = JSON.parse(addonResponse.addon_list.json); + const isSelected = path => path === `/${module}`; const Modules = ({ modules }) => ( @@ -54,9 +65,23 @@ const Sidebar = ({ modules: { services, settings } }) => { ); + const Addons = ({ addons }) => ( + + {addons.map(({ url, title }) => ( + window.location = url}> + + + + + + ))} + + ); + return (
+
); diff --git a/packages/console-app/src/gql/addon_list.graphql b/packages/console-app/src/gql/addon_list.graphql new file mode 100644 index 0000000..3079e1c --- /dev/null +++ b/packages/console-app/src/gql/addon_list.graphql @@ -0,0 +1,9 @@ +# +# Copyright 2020 DXOS.org +# + +query { + addon_list { + json + } +} diff --git a/packages/console-app/src/version.json b/packages/console-app/src/version.json index d0ef15f..f0079e4 100644 --- a/packages/console-app/src/version.json +++ b/packages/console-app/src/version.json @@ -1,7 +1,7 @@ { "build": { "name": "@dxos/console-app", - "buildDate": "2020-12-03T20:40:32.208Z", - "version": "1.2.4-alpha.2" + "buildDate": "2020-12-09T23:25:12.047Z", + "version": "1.2.4-alpha.3" } } diff --git a/packages/console-server/src/gql/api.graphql b/packages/console-server/src/gql/api.graphql index 8ab636c..4f844b2 100644 --- a/packages/console-server/src/gql/api.graphql +++ b/packages/console-server/src/gql/api.graphql @@ -22,6 +22,7 @@ type Query { system_status: JSONResult! wns_status: JSONResult! bot_list: JSONResult! + addon_list: JSONResult! } type Mutation { diff --git a/packages/console-server/src/resolvers/addons.js b/packages/console-server/src/resolvers/addons.js new file mode 100644 index 0000000..36aea43 --- /dev/null +++ b/packages/console-server/src/resolvers/addons.js @@ -0,0 +1,37 @@ +// +// Copyright 2020 DXOS.org +// + +import childProcess from 'child_process'; + +// TODO(telackey): Make pluggable. +const ifRadicle = () => { + try { + const result = childProcess.execSync('docker ps -f "ancestor=dxos/radicle-seed-node" -q'); + if (result) { + return { title: 'Radicle', url: '/' }; + } + } catch (e) {} +}; + +// TODO(telackey): Use the local Sentry. +const ifSentry = () => { + return { + title: 'Sentry', + url: 'http://sentry.kube.dxos.network:9000/' + }; +}; + +export const addonResolvers = { + Query: { + addon_list: async (_, __, { config }) => { + return { + timestamp: new Date().toUTCString(), + json: JSON.stringify([ + ifSentry(), + ifRadicle() + ].filter(x => x)) + }; + } + } +}; diff --git a/packages/console-server/src/resolvers/index.js b/packages/console-server/src/resolvers/index.js index 65bd157..05f31bd 100644 --- a/packages/console-server/src/resolvers/index.js +++ b/packages/console-server/src/resolvers/index.js @@ -5,6 +5,7 @@ import debug from 'debug'; import defaultsDeep from 'lodash.defaultsdeep'; +import { addonResolvers } from './addons'; import { ipfsResolvers } from './ipfs'; import { systemResolvers } from './system'; import { logResolvers } from './log'; @@ -22,4 +23,4 @@ export const resolvers = defaultsDeep({ // TODO(burdon): Auth. // https://www.apollographql.com/docs/apollo-server/data/errors/#codes -}, ipfsResolvers, systemResolvers, logResolvers, botsResolvers); +}, ipfsResolvers, systemResolvers, logResolvers, botsResolvers, addonResolvers);