[ARVADOS-WORKBENCH2] updated: 1.2.0-938-g944b778

Git user git at public.curoverse.com
Thu Nov 22 10:31:50 EST 2018


Summary of changes:
 src/models/link.ts                                 |  2 +-
 .../virtual-machines/virtual-machines-actions.ts   | 14 +++++++++--
 .../virtual-machines/virtual-machines-reducer.ts   | 11 ++++++++-
 .../virtual-machine-panel.tsx                      | 27 ++++++++++++++--------
 4 files changed, 40 insertions(+), 14 deletions(-)

       via  944b7786dd97c8de8f7cb9eb7e6446fc2dda58fd (commit)
      from  e4b54c3b5d99c99553e319ead28c3aa8dcd6eecc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 944b7786dd97c8de8f7cb9eb7e6446fc2dda58fd
Author: Pawel Kowalczyk <pawel.kowalczyk at contractors.roche.com>
Date:   Thu Nov 22 16:31:31 2018 +0100

    proper-username-and-link-to-ssh-keys-panel
    
    Feature #13864
    
    Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk at contractors.roche.com>

diff --git a/src/models/link.ts b/src/models/link.ts
index 9d1711d..0b5053d 100644
--- a/src/models/link.ts
+++ b/src/models/link.ts
@@ -9,7 +9,7 @@ export interface LinkResource extends Resource {
     tailUuid: string;
     linkClass: string;
     name: string;
-    properties: {};
+    properties: any;
 }
 
 export enum LinkClass {
diff --git a/src/store/virtual-machines/virtual-machines-actions.ts b/src/store/virtual-machines/virtual-machines-actions.ts
index e58a02c..c9283af 100644
--- a/src/store/virtual-machines/virtual-machines-actions.ts
+++ b/src/store/virtual-machines/virtual-machines-actions.ts
@@ -10,11 +10,14 @@ import { bindDataExplorerActions } from '~/store/data-explorer/data-explorer-act
 import { formatDate } from "~/common/formatters";
 import { unionize, ofType, UnionOf } from "~/common/unionize";
 import { VirtualMachinesLoginsResource } from '~/models/virtual-machines';
+import { FilterBuilder } from "~/services/api/filter-builder";
+import { ListResults } from "~/services/common-service/common-resource-service";
 
 export const virtualMachinesActions = unionize({
     SET_REQUESTED_DATE: ofType<string>(),
-    SET_VIRTUAL_MACHINES: ofType<any>(),
-    SET_LOGINS: ofType<VirtualMachinesLoginsResource[]>()
+    SET_VIRTUAL_MACHINES: ofType<ListResults<any>>(),
+    SET_LOGINS: ofType<VirtualMachinesLoginsResource[]>(),
+    SET_LINKS: ofType<ListResults<any>>()
 });
 
 export type VirtualMachineActions = UnionOf<typeof virtualMachinesActions>;
@@ -37,7 +40,14 @@ export const loadVirtualMachinesData = () =>
     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
         dispatch<any>(loadRequestedDate());
         const virtualMachines = await services.virtualMachineService.list();
+        const virtualMachinesUuids = virtualMachines.items.map(it => it.uuid);
+        const links = await services.linkService.list({
+            filters: new FilterBuilder()
+                .addIn("headUuid", virtualMachinesUuids)
+                .getFilters()
+        });
         dispatch(virtualMachinesActions.SET_VIRTUAL_MACHINES(virtualMachines));
+        dispatch(virtualMachinesActions.SET_LINKS(links));
         // const logins = await services.virtualMachineService.logins(virtualMachines.items[0].uuid);
         // console.log(logins);
         // const getAllLogins = await services.virtualMachineService.getAllLogins();
diff --git a/src/store/virtual-machines/virtual-machines-reducer.ts b/src/store/virtual-machines/virtual-machines-reducer.ts
index a0dd04d..fa28417 100644
--- a/src/store/virtual-machines/virtual-machines-reducer.ts
+++ b/src/store/virtual-machines/virtual-machines-reducer.ts
@@ -10,6 +10,7 @@ interface VirtualMachines {
     date: string;
     virtualMachines: ListResults<any>;
     logins: VirtualMachinesLoginsResource[];
+    links: ListResults<any>;
 }
 
 const initialState: VirtualMachines = {
@@ -21,7 +22,14 @@ const initialState: VirtualMachines = {
         itemsAvailable: 0,
         items: []
     },
-    logins: []
+    logins: [],
+    links: {
+        kind: '',
+        offset: 0,
+        limit: 0,
+        itemsAvailable: 0,
+        items: []
+    }
 };
 
 export const virtualMachinesReducer = (state = initialState, action: VirtualMachineActions): VirtualMachines =>
@@ -29,5 +37,6 @@ export const virtualMachinesReducer = (state = initialState, action: VirtualMach
         SET_REQUESTED_DATE: date => ({ ...state, date }),
         SET_VIRTUAL_MACHINES: virtualMachines => ({ ...state, virtualMachines }),
         SET_LOGINS: logins => ({ ...state, logins }),
+        SET_LINKS: links => ({ ...state, links }),
         default: () => state
     });
diff --git a/src/views/virtual-machine-panel/virtual-machine-panel.tsx b/src/views/virtual-machine-panel/virtual-machine-panel.tsx
index 7d9adde..6586537 100644
--- a/src/views/virtual-machine-panel/virtual-machine-panel.tsx
+++ b/src/views/virtual-machine-panel/virtual-machine-panel.tsx
@@ -15,6 +15,7 @@ import { RootState } from '~/store/store';
 import { ListResults } from '~/services/common-service/common-resource-service';
 import { HelpIcon } from '~/components/icon/icon';
 import { VirtualMachinesLoginsResource } from '~/models/virtual-machines';
+import { Routes } from '~/routes/routes';
 
 type CssRules = 'button' | 'codeSnippet' | 'link' | 'linkIcon' | 'icon';
 
@@ -54,7 +55,8 @@ const mapStateToProps = (state: RootState) => {
     return {
         requestedDate: state.virtualMachines.date,
         virtualMachines: state.virtualMachines.virtualMachines,
-        logins: state.virtualMachines.logins
+        logins: state.virtualMachines.logins,
+        links: state.virtualMachines.links
     };
 };
 
@@ -67,6 +69,7 @@ interface VirtualMachinesPanelDataProps {
     requestedDate: string;
     virtualMachines: ListResults<any>;
     logins: VirtualMachinesLoginsResource[];
+    links: ListResults<any>;
 }
 
 interface VirtualMachinesPanelActionProps {
@@ -85,11 +88,11 @@ export const VirtualMachinePanel = compose(
             }
 
             render() {
-                const { classes, saveRequestedDate, requestedDate, virtualMachines, logins } = this.props;
+                const { classes, saveRequestedDate, requestedDate, virtualMachines, logins, links } = this.props;
                 return (
                     <Grid container spacing={16}>
                         {cardContentWithNoVirtualMachines(requestedDate, saveRequestedDate, classes)}
-                        {virtualMachines.itemsAvailable > 0 && cardContentWithVirtualMachines(virtualMachines, classes)}
+                        {virtualMachines.itemsAvailable > 0 && links.itemsAvailable > 0 && cardContentWithVirtualMachines(virtualMachines, links, classes)}
                         {cardSSHSection(classes)}
                     </Grid>
                 );
@@ -117,7 +120,7 @@ const cardContentWithNoVirtualMachines = (requestedDate: string, saveRequestedDa
 
 const login = 'pawelkowalczyk';
 
-const cardContentWithVirtualMachines = (virtualMachines: ListResults<any>, classes: any) =>
+const cardContentWithVirtualMachines = (virtualMachines: ListResults<any>, links: ListResults<any>, classes: any) =>
     <Grid item xs={12}>
         <Card>
             <CardContent>
@@ -141,11 +144,11 @@ const cardContentWithVirtualMachines = (virtualMachines: ListResults<any>, class
                         {virtualMachines.items.map((it, index) =>
                             <TableRow key={index}>
                                 <TableCell>{it.hostname}</TableCell>
-                                <TableCell>{login}</TableCell>
-                                <TableCell>ssh {login}@shell.arvados</TableCell>
+                                <TableCell>{getUsername(links, it)}</TableCell>
+                                <TableCell>ssh {getUsername(links, it)}@shell.arvados</TableCell>
                                 <TableCell>
-                                    <a href={`https://workbench.c97qk.arvadosapi.com${it.href}/webshell/${login}`} target="_blank" className={classes.link}>
-                                        Log in as {login}
+                                    <a href={`https://workbench.c97qk.arvadosapi.com${it.href}/webshell/${getUsername(links, it)}`} target="_blank" className={classes.link}>
+                                        Log in as {getUsername(links, it)}
                                     </a>
                                 </TableCell>
                             </TableRow>
@@ -156,13 +159,17 @@ const cardContentWithVirtualMachines = (virtualMachines: ListResults<any>, class
         </Card>
     </Grid>;
 
-// dodac link do ssh panelu jak juz bedzie
+const getUsername = (links: ListResults<any>, virtualMachine: any) => {
+    const link = links.items.find((item: any) => item.headUuid === virtualMachine.uuid);
+    return link.properties.username || undefined;
+};
+
 const cardSSHSection = (classes: any) =>
     <Grid item xs={12}>
         <Card>
             <CardContent>
                 <Typography variant="body2">
-                    In order to access virtual machines using SSH, <Link to='' className={classes.link}>add an SSH key to your account</Link> and add a section like this to your SSH configuration file ( ~/.ssh/config):
+                    In order to access virtual machines using SSH, <Link to={Routes.SSH_KEYS} className={classes.link}>add an SSH key to your account</Link> and add a section like this to your SSH configuration file ( ~/.ssh/config):
                 </Typography>
                 <DefaultCodeSnippet
                     className={classes.codeSnippet}

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list