[ARVADOS-WORKBENCH2] updated: 1.4.1-237-ga3d36c33

Git user git at public.arvados.org
Thu Jan 23 21:05:49 UTC 2020


Summary of changes:
 src/services/api/filter-builder.ts                 |  4 +--
 src/services/favorite-service/favorite-service.ts  |  2 +-
 src/services/project-service/project-service.ts    |  2 +-
 .../all-processes-panel-middleware-service.ts      |  6 ++--
 src/store/processes/process.ts                     |  6 ++--
 .../project-panel-middleware-service.ts            | 33 ++++++++++++++++++++--
 .../resource-type-filters/resource-type-filters.ts | 11 ++++++--
 .../subprocess-panel/subprocess-panel-actions.ts   |  1 +
 src/views-components/data-explorer/renderers.tsx   |  6 ++++
 .../all-processes-panel/all-processes-panel.tsx    | 31 +++++++++++---------
 src/views/project-panel/project-panel.tsx          |  5 ++--
 src/websocket/websocket.ts                         |  2 ++
 12 files changed, 77 insertions(+), 32 deletions(-)

       via  a3d36c3310d51e8fceb2ea4e7e62932cb973a67e (commit)
       via  7403c18145f5581469bf22f73f2a442729055809 (commit)
       via  2c2b5e935152a258e2f7b01a15d3fda78c349c88 (commit)
       via  33d4ee917a1407611512195d288f445afe13b80f (commit)
       via  08fb41e26f7227e85c56faf833918e94ebf8531e (commit)
       via  17c26d8f0950c485cf160ed28c4bd1872bff868e (commit)
       via  4b05de442b4ac4353d83f13a00a341db0b03e710 (commit)
       via  e49d3131c26d3ae5f08025cf82c02d08a91f994d (commit)
       via  2a1d97be8bff60ef9b51f120b00c285d51a26a1c (commit)
      from  bbd6e1809d764ca269793424d3084bdb93311828 (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 a3d36c3310d51e8fceb2ea4e7e62932cb973a67e
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Thu Jan 23 18:05:21 2020 -0300

    15012: Fixes Queued process filtering.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/store/resource-type-filters/resource-type-filters.ts b/src/store/resource-type-filters/resource-type-filters.ts
index 1cc547ec..ef1198bc 100644
--- a/src/store/resource-type-filters/resource-type-filters.ts
+++ b/src/store/resource-type-filters/resource-type-filters.ts
@@ -10,6 +10,7 @@ import { FilterBuilder } from '~/services/api/filter-builder';
 import { getSelectedNodes } from '~/models/tree';
 import { CollectionType } from '~/models/collection';
 import { GroupContentsResourcePrefix } from '~/services/groups-service/groups-service';
+import { ContainerState } from '~/models/container';
 
 export enum ProcessStatusFilter {
     ALL = 'All',
@@ -236,19 +237,23 @@ export const serializeSimpleObjectTypeFilters = (filters: Tree<DataTableFilterIt
 export const buildProcessStatusFilters = ( fb:FilterBuilder, activeStatusFilter:string ): FilterBuilder => {
     switch (activeStatusFilter) {
         case ProcessStatusFilter.COMPLETED: {
-            fb.addEqual('container.state', 'Complete');
+            fb.addEqual('container.state', ContainerState.COMPLETE);
             fb.addEqual('container.exit_code', '0');
             break;
         }
         case ProcessStatusFilter.FAILED: {
-            fb.addEqual('container.state', 'Complete');
+            fb.addEqual('container.state', ContainerState.COMPLETE);
             fb.addDistinct('container.exit_code', '0');
             break;
         }
+        case ProcessStatusFilter.QUEUED: {
+            fb.addEqual('container.state', ContainerState.QUEUED);
+            fb.addDistinct('container.priority', '0');
+            break;
+        }
         case ProcessStatusFilter.CANCELLED:
         case ProcessStatusFilter.FAILED:
         case ProcessStatusFilter.LOCKED:
-        case ProcessStatusFilter.QUEUED:
         case ProcessStatusFilter.RUNNING: {
             fb.addEqual('container.state', activeStatusFilter);
             break;

commit 7403c18145f5581469bf22f73f2a442729055809
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Thu Jan 23 18:03:07 2020 -0300

    15012: Don't show Completed processes as Cancelled when priority=0.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/store/processes/process.ts b/src/store/processes/process.ts
index 400d77cf..e5b2c840 100644
--- a/src/store/processes/process.ts
+++ b/src/store/processes/process.ts
@@ -90,6 +90,9 @@ export const getProcessStatus = ({ containerRequest, container }: Process): Proc
         case containerRequest.state === ContainerRequestState.UNCOMMITTED:
             return ProcessStatus.DRAFT;
 
+        case container && container.state === ContainerState.COMPLETE && container.exitCode === 0:
+            return ProcessStatus.COMPLETED;
+
         case containerRequest.priority === 0:
         case container && container.state === ContainerState.CANCELLED:
             return ProcessStatus.CANCELLED;
@@ -103,9 +106,6 @@ export const getProcessStatus = ({ containerRequest, container }: Process): Proc
         case container && container.state === ContainerState.RUNNING:
             return ProcessStatus.RUNNING;
 
-        case container && container.state === ContainerState.COMPLETE && container.exitCode === 0:
-            return ProcessStatus.COMPLETED;
-
         case container && container.state === ContainerState.COMPLETE && container.exitCode !== 0:
             return ProcessStatus.FAILED;
 

commit 2c2b5e935152a258e2f7b01a15d3fda78c349c88
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Thu Jan 23 17:30:04 2020 -0300

    15012: Updates all processes page when websocket event received.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/websocket/websocket.ts b/src/websocket/websocket.ts
index 7895644f..506b92c8 100644
--- a/src/websocket/websocket.ts
+++ b/src/websocket/websocket.ts
@@ -14,6 +14,7 @@ import { addProcessLogsPanelItem } from '../store/process-logs-panel/process-log
 import { subprocessPanelActions } from "~/store/subprocess-panel/subprocess-panel-actions";
 import { projectPanelActions } from "~/store/project-panel/project-panel-action";
 import { getProjectPanelCurrentUuid } from '~/store/project-panel/project-panel-action';
+import { allProcessesPanelActions } from '~/store/all-processes-panel/all-processes-panel-action';
 
 export const initWebSocket = (config: Config, authService: AuthService, store: RootStore) => {
     if (config.websocketUrl) {
@@ -35,6 +36,7 @@ const messageListener = (store: RootStore) => (message: ResourceEventMessage) =>
             // fall through, this will happen for container requests as well.
             case ResourceKind.CONTAINER:
                 store.dispatch(subprocessPanelActions.REQUEST_ITEMS());
+                store.dispatch(allProcessesPanelActions.REQUEST_ITEMS());
                 if (message.objectOwnerUuid === getProjectPanelCurrentUuid(store.getState())) {
                     store.dispatch(projectPanelActions.REQUEST_ITEMS());
                 }

commit 33d4ee917a1407611512195d288f445afe13b80f
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Thu Jan 23 16:03:47 2020 -0300

    15012: Clears the subprocess panel before populating it with new data.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/store/subprocess-panel/subprocess-panel-actions.ts b/src/store/subprocess-panel/subprocess-panel-actions.ts
index 7e8d1e46..592e3d5d 100644
--- a/src/store/subprocess-panel/subprocess-panel-actions.ts
+++ b/src/store/subprocess-panel/subprocess-panel-actions.ts
@@ -12,5 +12,6 @@ export const subprocessPanelActions = bindDataExplorerActions(SUBPROCESS_PANEL_I
 
 export const loadSubprocessPanel = () =>
     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+        dispatch(subprocessPanelActions.CLEAR());
         dispatch(subprocessPanelActions.REQUEST_ITEMS());
     };

commit 08fb41e26f7227e85c56faf833918e94ebf8531e
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Thu Jan 23 14:23:55 2020 -0300

    15012: Shows process context menu on all_process page items.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/views/all-processes-panel/all-processes-panel.tsx b/src/views/all-processes-panel/all-processes-panel.tsx
index fcb8dbb7..650a0d95 100644
--- a/src/views/all-processes-panel/all-processes-panel.tsx
+++ b/src/views/all-processes-panel/all-processes-panel.tsx
@@ -22,7 +22,7 @@ import {
     ResourceCreatedAtDate
 } from '~/views-components/data-explorer/renderers';
 import { ProcessIcon } from '~/components/icon/icon';
-import { openContextMenu, resourceKindToContextMenuKind } from '~/store/context-menu/context-menu-actions';
+import { openProcessContextMenu } from '~/store/context-menu/context-menu-actions';
 import { loadDetailsPanel } from '~/store/details-panel/details-panel-action';
 import { navigateTo } from '~/store/navigation/navigation-action';
 import { ContainerRequestState } from "~/models/container-request";
@@ -30,6 +30,8 @@ import { RootState } from '~/store/store';
 import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
 import { createTree } from '~/models/tree';
 import { getInitialProcessStatusFilters, getInitialProcessTypeFilters } from '~/store/resource-type-filters/resource-type-filters';
+import { getProcess } from '~/store/processes/process';
+import { ResourcesState } from '~/store/resources/resources';
 
 type CssRules = "toolbar" | "button";
 
@@ -105,7 +107,7 @@ export const allProcessesPanelColumns: DataColumns<string> = [
 ];
 
 interface AllProcessesPanelDataProps {
-    isAdmin: boolean;
+    resources: ResourcesState;
 }
 
 interface AllProcessesPanelActionProps {
@@ -114,7 +116,7 @@ interface AllProcessesPanelActionProps {
     onItemDoubleClick: (item: string) => void;
 }
 const mapStateToProps = (state : RootState): AllProcessesPanelDataProps => ({
-    isAdmin: state.auth.user!.isAdmin
+    resources: state.resources
 });
 
 type AllProcessesPanelProps = AllProcessesPanelDataProps & AllProcessesPanelActionProps & DispatchProp
@@ -124,15 +126,9 @@ export const AllProcessesPanel = withStyles(styles)(
     connect(mapStateToProps)(
         class extends React.Component<AllProcessesPanelProps> {
             handleContextMenu = (event: React.MouseEvent<HTMLElement>, resourceUuid: string) => {
-                const menuKind = resourceKindToContextMenuKind(resourceUuid, this.props.isAdmin);
-                if (menuKind) {
-                    this.props.dispatch<any>(openContextMenu(event, {
-                        name: '',
-                        uuid: resourceUuid,
-                        ownerUuid: '',
-                        kind: ResourceKind.NONE,
-                        menuKind
-                    }));
+                const process = getProcess(resourceUuid)(this.props.resources);
+                if (process) {
+                    this.props.dispatch<any>(openProcessContextMenu(event, process));
                 }
                 this.props.dispatch<any>(loadDetailsPanel(resourceUuid));
             }

commit 17c26d8f0950c485cf160ed28c4bd1872bff868e
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Wed Jan 22 11:28:02 2020 -0300

    15012: Adds run time column to all_processes. Fixes created_at column's label.
    
    Also, adds container's started_at renderer for future use.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/views-components/data-explorer/renderers.tsx b/src/views-components/data-explorer/renderers.tsx
index c118017d..90d8d977 100644
--- a/src/views-components/data-explorer/renderers.tsx
+++ b/src/views-components/data-explorer/renderers.tsx
@@ -456,6 +456,12 @@ export const ProcessStatus = compose(
         </Typography>;
     });
 
+export const ProcessStartDate = connect(
+    (state: RootState, props: { uuid: string }) => {
+        const process = getProcess(props.uuid)(state.resources);
+        return { date: ( process && process.container ) ? process.container.startedAt : '' };
+    })((props: { date: string }) => renderDate(props.date));
+
 export const renderRunTime = (time: number) =>
     <Typography noWrap style={{ minWidth: '45px' }}>
         {formatTime(time, true)}
diff --git a/src/views/all-processes-panel/all-processes-panel.tsx b/src/views/all-processes-panel/all-processes-panel.tsx
index 723cf75b..fcb8dbb7 100644
--- a/src/views/all-processes-panel/all-processes-panel.tsx
+++ b/src/views/all-processes-panel/all-processes-panel.tsx
@@ -18,6 +18,7 @@ import {
     ResourceName,
     ResourceOwner,
     ResourceType,
+    ContainerRunTime,
     ResourceCreatedAtDate
 } from '~/views-components/data-explorer/renderers';
 import { ProcessIcon } from '~/components/icon/icon';
@@ -47,7 +48,8 @@ export enum AllProcessesPanelColumnNames {
     STATUS = "Status",
     TYPE = "Type",
     OWNER = "Owner",
-    CREATED_AT = "Started at"
+    CREATED_AT = "Created at",
+    RUNTIME = "Run Time"
 }
 
 export interface AllProcessesPanelFilter extends DataTableFilterItem {
@@ -92,6 +94,13 @@ export const allProcessesPanelColumns: DataColumns<string> = [
         sortDirection: SortDirection.DESC,
         filters: createTree(),
         render: uuid => <ResourceCreatedAtDate uuid={uuid} />
+    },
+    {
+        name: AllProcessesPanelColumnNames.RUNTIME,
+        selected: true,
+        configurable: true,
+        filters: createTree(),
+        render: uuid => <ContainerRunTime uuid={uuid} />
     }
 ];
 

commit 4b05de442b4ac4353d83f13a00a341db0b03e710
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Tue Jan 21 18:24:06 2020 -0300

    15012: Uses varargs version of joinFilters().
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/store/all-processes-panel/all-processes-panel-middleware-service.ts b/src/store/all-processes-panel/all-processes-panel-middleware-service.ts
index df4bc74b..7af28c9e 100644
--- a/src/store/all-processes-panel/all-processes-panel-middleware-service.ts
+++ b/src/store/all-processes-panel/all-processes-panel-middleware-service.ts
@@ -81,10 +81,8 @@ const getFilters = ( dataExplorer: DataExplorer ) => {
 
     return joinFilters(
         nameFilter,
-        // TODO: When 15019 is merged, this won't be necessary
-        joinFilters(
-            statusFilter,
-            typeFilters)
+        statusFilter,
+        typeFilters
     );
 };
 

commit e49d3131c26d3ae5f08025cf82c02d08a91f994d
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Sat Dec 21 17:15:49 2019 -0300

    15019: Adds Status filtering to project panel.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/store/project-panel/project-panel-middleware-service.ts b/src/store/project-panel/project-panel-middleware-service.ts
index d4b2416e..b889f7cb 100644
--- a/src/store/project-panel/project-panel-middleware-service.ts
+++ b/src/store/project-panel/project-panel-middleware-service.ts
@@ -29,7 +29,7 @@ import { ListResults } from '~/services/common-service/common-service';
 import { loadContainers } from '~/store/processes/processes-actions';
 import { ResourceKind } from '~/models/resource';
 import { getSortColumn } from "~/store/data-explorer/data-explorer-reducer";
-import { serializeResourceTypeFilters } from '~/store/resource-type-filters/resource-type-filters';
+import { serializeResourceTypeFilters, ProcessStatusFilter } from '~/store/resource-type-filters/resource-type-filters';
 import { updatePublicFavorites } from '~/store/public-favorites/public-favorites-actions';
 
 export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService {
@@ -103,6 +103,10 @@ export const getParams = (dataExplorer: DataExplorer, isProjectTrashed: boolean)
 export const getFilters = (dataExplorer: DataExplorer) => {
     const columns = dataExplorer.columns as DataColumns<string>;
     const typeFilters = serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, ProjectPanelColumnNames.TYPE));
+    const statusColumnFilters = getDataExplorerColumnFilters(columns, 'Status');
+    const activeStatusFilter = Object.keys(statusColumnFilters).find(
+        filterName => statusColumnFilters[filterName].selected
+    );
 
     // TODO: Extract group contents name filter
     const nameFilters = new FilterBuilder()
@@ -111,12 +115,35 @@ export const getFilters = (dataExplorer: DataExplorer) => {
         .addILike("name", dataExplorer.searchValue, GroupContentsResourcePrefix.PROJECT)
         .getFilters();
 
+    // Filter by container status
+    const fb = new FilterBuilder();
+    switch (activeStatusFilter) {
+        case ProcessStatusFilter.COMPLETED: {
+            fb.addEqual('container.state', 'Complete', GroupContentsResourcePrefix.PROCESS);
+            fb.addEqual('container.exit_code', '0', GroupContentsResourcePrefix.PROCESS);
+            break;
+        }
+        case ProcessStatusFilter.FAILED: {
+            fb.addEqual('container.state', 'Complete', GroupContentsResourcePrefix.PROCESS);
+            fb.addDistinct('container.exit_code', '0', GroupContentsResourcePrefix.PROCESS);
+            break;
+        }
+        case ProcessStatusFilter.CANCELLED:
+        case ProcessStatusFilter.FAILED:
+        case ProcessStatusFilter.LOCKED:
+        case ProcessStatusFilter.QUEUED:
+        case ProcessStatusFilter.RUNNING: {
+            fb.addEqual('container.state', activeStatusFilter, GroupContentsResourcePrefix.PROCESS);
+            break;
+        }
+    }
+    const statusFilters = fb.getFilters();
+
     return joinFilters(
+        statusFilters,
         typeFilters,
         nameFilters,
     );
-    // TODO: Restore process status filters
-    // const statusFilters = getDataExplorerColumnFilters(columns, ProjectPanelColumnNames.STATUS);
 };
 
 export const getOrder = (dataExplorer: DataExplorer) => {
diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx
index df8f22e7..1e26bc0d 100644
--- a/src/views/project-panel/project-panel.tsx
+++ b/src/views/project-panel/project-panel.tsx
@@ -28,7 +28,7 @@ import { PROJECT_PANEL_CURRENT_UUID } from '~/store/project-panel/project-panel-
 import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
 import { ArvadosTheme } from "~/common/custom-theme";
 import { createTree } from '~/models/tree';
-import { getInitialResourceTypeFilters } from '~/store/resource-type-filters/resource-type-filters';
+import { getInitialResourceTypeFilters, getInitialProcessStatusFilters } from '~/store/resource-type-filters/resource-type-filters';
 
 type CssRules = 'root' | "button";
 
@@ -69,7 +69,8 @@ export const projectPanelColumns: DataColumns<string> = [
         name: "Status",
         selected: true,
         configurable: true,
-        filters: createTree(),
+        mutuallyExclusiveFilters: true,
+        filters: getInitialProcessStatusFilters(),
         render: uuid => <ProcessStatus uuid={uuid} />,
     },
     {

commit 2a1d97be8bff60ef9b51f120b00c285d51a26a1c
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Sat Dec 21 17:13:07 2019 -0300

    15019: Changes joinFilters() to accept variable number of args.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/services/api/filter-builder.ts b/src/services/api/filter-builder.ts
index aa0f011b..102ff62c 100644
--- a/src/services/api/filter-builder.ts
+++ b/src/services/api/filter-builder.ts
@@ -2,8 +2,8 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-export function joinFilters(filters0?: string, filters1?: string) {
-    return [filters0, filters1].filter(s => s).join(",");
+export function joinFilters(...filters: string[]) {
+    return filters.filter(s => s).join(",");
 }
 
 export class FilterBuilder {
diff --git a/src/services/favorite-service/favorite-service.ts b/src/services/favorite-service/favorite-service.ts
index 8b504c86..90849c8b 100644
--- a/src/services/favorite-service/favorite-service.ts
+++ b/src/services/favorite-service/favorite-service.ts
@@ -53,7 +53,7 @@ export class FavoriteService {
 
         return this.linkService
             .list({
-                filters: joinFilters(filters, listFilters),
+                filters: joinFilters(filters || '', listFilters),
                 limit,
                 offset,
                 order: linkOrder
diff --git a/src/services/project-service/project-service.ts b/src/services/project-service/project-service.ts
index eec5a940..4ae91d4d 100644
--- a/src/services/project-service/project-service.ts
+++ b/src/services/project-service/project-service.ts
@@ -18,7 +18,7 @@ export class ProjectService extends GroupsService<ProjectResource> {
         return super.list({
             ...args,
             filters: joinFilters(
-                args.filters,
+                args.filters || '',
                 new FilterBuilder()
                     .addEqual("group_class", GroupClass.PROJECT)
                     .getFilters()

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list