diff --git a/CHANGELOG.md b/CHANGELOG.md index 347d4a3b6..2a6858f0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,34 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] -## [v7.0.1] - 2021-10-19 +## [v8.0.0] - 2021-11-04 + +## Breaking Changes + +This version of the dashboard requires Cumulus API 9.9.0 +### Added + +- **CUMULUS-2584** + - Added Associated Executions to execution-status.js + +### Changed + +- **CUMULUS-2584** + - Updated Granule detail component to reference `Executions List`. + - Removed `Execution` from Granule detail component + - Updated execution-events.js to only show step name with status icon. moved execution name, step name and event type into the More Details modal + +### Fixed + +- **CUMULUS-2633** + - Fix pagination on reconciliation report sub-tables. + - Remove granule actions from tables without granuleIds. +- **CUMULUS-2725** + - Fixed bugs related to adding and editing providers + - Requires @cumulus/api@9.9.0 + + +## [v7.1.0] - 2021-10-19 ### Added @@ -43,9 +70,9 @@ This version of the dashboard requires Cumulus API `v9.5.0` + ES\_CLOUDWATCH\_TARGET\_PATTERN (Generally: `-cumulus-cloudwatch--*`) + ES\_DISTRIBUTION\_TARGET\_PATTERN (Generally: `-distribution--*`) - Kibana links are changed. We no longer try to build URLs that describe the - metrics' Elasicsearch results. Instead, we now only return a simple link to + metrics' Elasticsearch results. Instead, we now only return a simple link to configured Kibana root. It is up to the kibana user to interact with the - dashbaord, setting default security tenant and default kibana index + dashboard, setting default security tenant and default kibana index patterns. You can create kibana Index Patterns (or they may exist already) to gather the cloudwatch logs sent to metrics with a similar patter to the ES\_CLOUDWATCH\_TARGET\_PATTERN, and if you have configured s3 server access @@ -76,7 +103,7 @@ This version of the dashboard requires Cumulus API `v9.5.0` - **CUMULUS-2505** - Update column show/hide component with new styling and "reset to default interaction for each table - **CUMULUS-2506** - - Adds horizontal scroll buttons to tables improving accessibily + - Adds horizontal scroll buttons to tables improving accessibility - **CUMULUS-2511** - Ensured that sort state will persist through page changes. - **CUMULUS-2524** @@ -107,7 +134,7 @@ This version of the dashboard requires Cumulus API `v9.5.0` - Layout CSS styling tweaks - **CUMULUS-2459** - Updated localAPI docker-compose.yml to include SSM, Postgres container to be used with RDS compatible API - - Updated integration tests due to changes in API behavior related to Postgres contstraints between tables + - Updated integration tests due to changes in API behavior related to Postgres constraints between tables - **CUMULUS-NONE** - Downgrades elasticsearch version in testing container to 5.3 to match AWS version. @@ -341,7 +368,7 @@ This version of the dashboard requires Cumulus API v5.0.0 - **CUMULUS-2242** and **CUMULUS-2177** - building with `npm run build` will now build a distribution that can be served from behind cloudfront. - - Fixed bug in nginx config that allows the application to run in the continer built by `bin/build_dashboard_image.sh`. + - Fixed bug in nginx config that allows the application to run in the container built by `bin/build_dashboard_image.sh`. - Overhauled the README.md and added a "Quick start" section - **CUMULUS-1873** @@ -381,7 +408,7 @@ This version of the dashboard requires Cumulus API v5.0.0 - Updates the dashboard to use alpha version `@cumulus/api@3.0.1-alpha.2` for testing. - Code changes to allow for private CMR collections to have links to the MMT. - **CUMULUS-2215** - - Omits unnecesary statistics request when building the option list of collection names on the granules page. + - Omits unnecessary statistics request when building the option list of collection names on the granules page. - **CUMULUS-2171** - Allows filtering of the Granule Inventory List CSV download based on Granule IDs, Status, and Collection. - **CUMULUS-2242** @@ -422,7 +449,7 @@ This version of the dashboard requires Cumulus API v5.0.0 - Add dashboard version to footer - **CUMULUS-2076** - - Add context references in headings on indivdual pages for screen reader accessibility + - Add context references in headings on individual pages for screen reader accessibility - **CUMULUS-2087** - Add Reconciliation Report creation page with report type selection @@ -498,7 +525,7 @@ This version of the dashboard requires Cumulus API v5.0.0 - **CUMULUS-1906** - Adds a download button dropdown to reconciliation report inventory view. - Option to download full report as json or indivdual tables as csv files. + Option to download full report as json or individual tables as csv files. - **CUMULUS-1908** - Adds Conflict Type and Conflict Details columns to reconciliation report inventory view tables. @@ -581,22 +608,22 @@ This version of the dashboard requires Cumulus API v5.0.0 - Fix dashboard table sort issue - **CUMULUS-1870** - - Fix/remove unecessary timers on Pdrs page + - Fix/remove unnecessary timers on Pdrs page - **CUMULUS-1871** - - Fix/remove unecessary timers on Providers page + - Fix/remove unnecessary timers on Providers page - **CUMULUS-1872** - - Fix/remove unecessary timers on granules page + - Fix/remove unnecessary timers on granules page - **CUMULUS-1873** - - Fix/remove unecessary timers on executions page + - Fix/remove unnecessary timers on executions page - **CUMULUS-1875** - - Fix/remove unecessary timers on Operations Page + - Fix/remove unnecessary timers on Operations Page - **CUMULUS-1877** - - Fix/remove unecessary timers on Reconcilation Reports page + - Fix/remove unnecessary timers on Reconciliation Reports page - **CUMULUS-1882** - Fix ES query for TEA Lambda metrics @@ -617,18 +644,18 @@ This version of the dashboard requires Cumulus API v5.0.0 ### Changed - **CUMULUS-1888** - - On the Granules page, CSV data was being refreshed in the background alog with the rest + - On the Granules page, CSV data was being refreshed in the background along with the rest of the data based on the timer. This could take a long time, depending on the number of granules. This has been changed so that the data is only fetched when the user clicks the "Download CSV" button. - **CUMULUS-1913** - - Add datepicker to reconcilation-reports page + - Add datepicker to reconciliation-reports page - **CUMULUS-1915** - - Add filters for `Report Type` and `Status` to reconcilation-reports page + - Add filters for `Report Type` and `Status` to reconciliation-reports page - **CUMULUS-1916** - - reconcilation-reports page now requires Cumulus API version >= v1.23.0 + - reconciliation-reports page now requires Cumulus API version >= v1.23.0 ## [v1.8.1] @@ -636,7 +663,7 @@ This version of the dashboard requires Cumulus API v5.0.0 - **CUMULUS-1816** - Change Datepicker behavior on login. The default to "Recent" start/end dates - now only occurs on first login on the hompage. + now only occurs on first login on the homepage. - URL is updated on login to reflect Datepicker params - **CUMULUS-1903** @@ -658,7 +685,7 @@ This version of the dashboard requires Cumulus API v5.0.0 - **CUMULUS-1984** - Fix bug where Distribution metrics were showing on the homepage even when - Elasaticsearch/Kibana not set up + Elasticsearch/Kibana not set up - **CUMULUS-1988** - Fix bugs in reducer-creators @@ -700,7 +727,7 @@ This version of the dashboard requires Cumulus API v5.0.0 - Change the metrics section on the home page to update based on datepicker time period. - **CUMULUS-1509** - - Update styles on grnaules page + - Update styles on granules page - **CUMULUS-1525** - Style changes for rules overview page @@ -721,10 +748,10 @@ This version of the dashboard requires Cumulus API v5.0.0 - Update executions details page styles - **CUMULUS-1787** - - Changes `listCollections` action to hit `/collections/active` endpoint when timefilters are present (requires Cumulus API v1.22.1) + - Changes `listCollections` action to hit `/collections/active` endpoint when time filters are present (requires Cumulus API v1.22.1) - **CUMULUS-1790** - - Changes default values and visuals for home page's datepicker. When the page loads, it defauls to display "Recent" data, which is the previous 24 hours with no end time. + - Changes default values and visuals for home page's datepicker. When the page loads, it defaults to display "Recent" data, which is the previous 24 hours with no end time. - **CUMULUS-1798** - Change the 12HR/24HR Format selector from radio to dropdown @@ -903,7 +930,7 @@ Fix for serving the dashboard through the Cumulus API. ### Added - **CUMULUS-1337** - - Must use Cumulus API version v1.14.0 or above in order to use the newi + - Must use Cumulus API version v1.14.0 or above in order to use the new distribution metrics functionality. - Distribution metrics are no longer served from the Cumulus API, but are computed from the logs in an ELK stack. @@ -1012,7 +1039,8 @@ Fix for serving the dashboard through the Cumulus API. ### Added - Versioning and changelog [CUMULUS-197] by @kkelly51 -[Unreleased]: https://github.com/nasa/cumulus-dashboard/compare/v7.1.0...HEAD +[Unreleased]: https://github.com/nasa/cumulus-dashboard/compare/v8.0.0...HEAD +[v8.0.0]: https://github.com/nasa/cumulus-dashboard/compare/v7.1.0...v8.0.0 [v7.1.0]: https://github.com/nasa/cumulus-dashboard/compare/v7.0.0...v7.1.0 [v7.0.0]: https://github.com/nasa/cumulus-dashboard/compare/v6.0.0...v7.0.0 [v6.0.0]: https://github.com/nasa/cumulus-dashboard/compare/v5.0.0...v6.0.0 diff --git a/README.md b/README.md index 03c973787..28b1a0b7f 100644 --- a/README.md +++ b/README.md @@ -57,13 +57,13 @@ The dashboard source is available on github and can be cloned with git. ```bash $ git clone https://github.com/nasa/cumulus-dashboard ``` -The cloned directory `./cumulus-dashboard` will be refered as the root directory of the project and commands that are referenced in this document, should start from that directory. +The cloned directory `./cumulus-dashboard` will be referred as the root directory of the project and commands that are referenced in this document, should start from that directory. ### Build the dashboard using Docker and Docker Compose -It is easy to build a producution-ready, deployable version of the Cumulus dashboard without having to learn the complicated build process details. A single script, `./bin/build_dashboard_via_docker.sh`, when combined with your dashboard's environment customizations, allows you to run the entire build process within a Docker container. +It is easy to build a production-ready, deployable version of the Cumulus dashboard without having to learn the complicated build process details. A single script, `./bin/build_dashboard_via_docker.sh`, when combined with your dashboard's environment customizations, allows you to run the entire build process within a Docker container. -All of the environment variables in the [configuration](#configuration) section are available to override with custom values for your dashboard. A recommended method is to store your variables in a sourceable environment file for each dashboard you are going to build and deploy. +All of the environment variables in the [configuration](#configuration) section are available to override with custom values for your dashboard. A recommended method is to store your variables in a source-able environment file for each dashboard you are going to build and deploy. If you are using bash, export the values for each configuration option. An example `production.env` could look like: ```sh @@ -125,13 +125,13 @@ To build a dashboard bundle[1](#bundlefootnote): $ nvm use $ [SERVED_BY_CUMULUS_API=true] [DAAC_NAME=LPDAAC] [STAGE=production] [HIDE_PDR=false] [LABELS=daac] APIROOT=https://myapi.com npm run build ``` -**NOTE**: Only the `APIROOT` environment variable is required and any of the environment varaibles currently set are passed to the build. +**NOTE**: Only the `APIROOT` environment variable is required and any of the environment variables currently set are passed to the build. The compiled dashboard files (dashboard bundle) will be placed in the `./dist` directory. #### Build dashboard to be served by CloudFront -If you wish to serve the dashboard from behind [CloudFront](https://aws.amazon.com/cloudfront/). Build a `dist` with your configuration including `APIROOT` and ensure the `SERVED_BY_CUMULUS_API` variable is unset. For NGAP uers, follow the documentation to *Request Public or Protected Access to the APIs and Dashboard*, Step 5 of [Cumulus Deployments in NGAP](https://wiki.earthdata.nasa.gov/display/CUMULUS/Cumulus+Deployments+in+NGAP). +If you wish to serve the dashboard from behind [CloudFront](https://aws.amazon.com/cloudfront/). Build a `dist` with your configuration including `APIROOT` and ensure the `SERVED_BY_CUMULUS_API` variable is unset. For NGAP users, follow the documentation to *Request Public or Protected Access to the APIs and Dashboard*, Step 5 of [Cumulus Deployments in NGAP](https://wiki.earthdata.nasa.gov/display/CUMULUS/Cumulus+Deployments+in+NGAP). #### Build dashboard to be served by the Cumulus API. @@ -176,7 +176,7 @@ This runs a node http-server in front of whatever exists in the `./dist` directo ### Using S3 -First, [build the dasbboard](#build-the-dashboard). Then deploy the `./dist` folder, the dashboard bundle, to an AWS bucket. +First, [build the dashboard](#build-the-dashboard). Then deploy the `./dist` folder, the dashboard bundle, to an AWS bucket. ```bash $ aws s3 sync dist s3://my-bucket-to-be-used @@ -288,7 +288,7 @@ Bring up and down the entire stack (the localAPI and the dashboard) with: $ npm run start-dashboard $ npm run stop-dashboard ``` -This runs everything, the backing Localstack and Elasticsearch containers, the local Cumulus API and dashboard. Edits to your code will be reflected in the running dashboard. You can run cypress tests still with `npm run cypress`. As a warning, this command takes a very long time to start up because the containers come up in a specific order and generally this should be reserved for use by Earthdata Bamboo or some other continuous intergration service. But, if you are using it locally, **be sure to wait until all containers are fully up** before trying to visit the dashboard which is exposed at http://localhost:3000 +This runs everything, the backing Localstack and Elasticsearch containers, the local Cumulus API and dashboard. Edits to your code will be reflected in the running dashboard. You can run cypress tests still with `npm run cypress`. As a warning, this command takes a very long time to start up because the containers come up in a specific order and generally this should be reserved for use by Earthdata Bamboo or some other continuous integration service. But, if you are using it locally, **be sure to wait until all containers are fully up** before trying to visit the dashboard which is exposed at http://localhost:3000 The stack is ready when the `view-docker-logs` task shows: ```bash dashboard_1 | > NODE_ENV=production http-server dist -p 3000 --proxy http://localhost:3000? diff --git a/TABLES.md b/TABLES.md index 11a740d20..4f654fda7 100644 --- a/TABLES.md +++ b/TABLES.md @@ -14,11 +14,11 @@ A basic table component that supports row selection and dumb sorting (see below) * Options for each column include: - Header: *text or component that will render as the header* - accessor: *key or function for obtaining value* - - id: *unqiure column id. required if accessor is function* + - id: *unique column id. required if accessor is function* - disableSortBy: *set to true if the column should not be sortable* - width: *default is 125. set value if column needs to be wider/smaller* - * Additional options can be found [here](https://github.com/tannerlinsley/react-table/blob/master/docs/api/useTable.md#column-options) or in the documation for a specific plugin hook + * Additional options can be found [here](https://github.com/tannerlinsley/react-table/blob/master/docs/api/useTable.md#column-options) or in the documentation for a specific plugin hook - **data**: Array of data items. Items can be any format. - **sortId**: The id of the column to sort on. @@ -44,7 +44,7 @@ Wraps `sortable-table` and implements auto-update and smart sort. When a new sor ## Dumb vs smart sort -Dumb sorting uses react-table's built in sort functionality to sort table data that has **already** been received from the API. Smart sorting initiates a new API request, passing the sort parameter to the server (elasticsearch) which returns a sorted response. The `maunalSortBy` option passed to `useTable()` tells react-table whether we are doing server-side sorting (`true`) or letting react-table sort (`false`). +Dumb sorting uses react-table's built in sort functionality to sort table data that has **already** been received from the API. Smart sorting initiates a new API request, passing the sort parameter to the server (elasticsearch) which returns a sorted response. The `manualSortBy` option passed to `useTable()` tells react-table whether we are doing server-side sorting (`true`) or letting react-table sort (`false`). When sorting on multiple columns, select the first column, hold down the shift key, and select another column. diff --git a/app/src/css/_badges.scss b/app/src/css/_badges.scss index 2d1f6b362..cea61784d 100644 --- a/app/src/css/_badges.scss +++ b/app/src/css/_badges.scss @@ -19,6 +19,11 @@ background: $white; color: $ocean-blue; } + + &--round { + @extend .num-title; + border-radius: 50%; + } } .status__badge { diff --git a/app/src/css/_base.scss b/app/src/css/_base.scss index e3121e656..5e20414d1 100644 --- a/app/src/css/_base.scss +++ b/app/src/css/_base.scss @@ -95,6 +95,10 @@ a:active { } } +.link--pad-right { + margin-right: 0.5em +} + .link--no-underline { border-bottom: 0; } @@ -755,6 +759,16 @@ a:active { } } +.status-icon { + &--success { + color: $light-green; + } + + &--failed { + color: $error-red; + } +} + /************************************************** Table **************************************************/ diff --git a/app/src/css/modules/_table.scss b/app/src/css/modules/_table.scss index 8565d64f4..e1d2f66ff 100644 --- a/app/src/css/modules/_table.scss +++ b/app/src/css/modules/_table.scss @@ -96,7 +96,7 @@ .table__header { display: flex; align-items: center; - justify-content: space-between; + justify-content: flex-start; padding: 0 1em; div { @@ -108,6 +108,10 @@ margin: 0 .3em; } + .simple-pagination { + padding: 20px; + } + input { width: 2em; text-align: center; @@ -325,6 +329,13 @@ border: 1px solid $border-grey; box-shadow: $shadow__default; border-radius: 10px; + + .simple-pagination { + margin: initial; + border: initial; + box-shadow: initial; + } + } .list--errors { diff --git a/app/src/css/vendor/bootstrap/overrides/_pagination.scss b/app/src/css/vendor/bootstrap/overrides/_pagination.scss index bb47ee75d..44a894a4f 100644 --- a/app/src/css/vendor/bootstrap/overrides/_pagination.scss +++ b/app/src/css/vendor/bootstrap/overrides/_pagination.scss @@ -1,15 +1,15 @@ +.simple-pagination { + border: 1px solid $border-grey; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.08); + box-shadow: 0 1px 3px rgba(0,0,0,.08); + border-radius: 0 0 10px 10px; + margin: 0 0 10px; + padding: 2em 0; +} + .pagination { padding: 20px 0px; - &.simple-pagination { - border: 1px solid $border-grey; - -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.08); - box-shadow: 0 1px 3px rgba(0,0,0,.08); - border-radius: 0 0 10px 10px; - margin: 0 0 10px; - padding: 2em 0; - } - ol { text-align: center; } diff --git a/app/src/js/components/Add/add.js b/app/src/js/components/Add/add.js index 7872d2b35..7e7ff9492 100644 --- a/app/src/js/components/Add/add.js +++ b/app/src/js/components/Add/add.js @@ -1,5 +1,5 @@ import path from 'path'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router-dom'; @@ -14,49 +14,49 @@ import { historyPushWithQueryParams } from '../../utils/url-helper'; const { updateDelay } = _config; -class AddRecord extends React.Component { - constructor (props) { - super(props); - this.state = { - pk: null - }; - this.navigateBack = this.navigateBack.bind(this); - this.post = this.post.bind(this); - } - - componentDidMount () { - this.props.dispatch(getSchema(this.props.schemaKey)); - } - - componentDidUpdate (prevProps) { - const { pk } = this.state; - const { baseRoute } = prevProps; - const status = get(this.props.state, ['created', pk, 'status']); - +const AddRecord = ({ + attachMeta, + baseRoute, + createRecord, + data, + dispatch, + enums, + exclude, + include, + primaryProperty, + schemaKey, + schemaState, + state, + title, + validate, + validationError, +}) => { + const [pk, setPk] = useState(null); + const [error, setError] = useState(null); + const record = pk ? get(state.created, pk, {}) : {}; + const schema = schemaState[schemaKey]; + + useEffect(() => { + dispatch(getSchema(schemaKey)); + }, [dispatch, schemaKey]); + + useEffect(() => { + const status = get(state, ['created', pk, 'status']); if (status === 'success') { - return setTimeout(() => { + setTimeout(() => { historyPushWithQueryParams(path.join(baseRoute, pk)); if (window) { window.scrollTo(0, 0); } }, updateDelay); } - } + }, [baseRoute, pk, state]); - navigateBack () { - const { baseRoute } = this.props; + function navigateBack () { historyPushWithQueryParams(`/${baseRoute.split('/')[1]}`); } - post (id, payload) { - const { - primaryProperty, - dispatch, - attachMeta, - validate, - createRecord - } = this.props; - + function post (_id, payload) { if (attachMeta) { payload.createdAt = new Date().getTime(); payload.updatedAt = payload.createdAt; @@ -64,50 +64,46 @@ class AddRecord extends React.Component { } if (!validate || validate(payload)) { - const pk = get(payload, primaryProperty); - this.setState({ pk }, () => dispatch(createRecord(pk, payload))); + const newPk = get(payload, primaryProperty); + dispatch(createRecord(newPk, payload)); + setPk(newPk); } else { - console.log('Payload failed validation'); + const errorMessage = validationError || 'Payload failed validation'; + console.log(errorMessage); + setError(errorMessage); } } - render () { - const { data, title, state, schemaKey } = this.props; - const { pk } = this.state; - const record = pk ? get(state.created, pk, {}) : {}; - const schema = this.props.schema[schemaKey]; - - return ( -
-
-
-

{title}

-
- {schema ? ( - - ) : ( - - )} -
-
- ); - } -} + return ( +
+
+
+

{title}

+
+ {schema ? ( + + ) : ( + + )} +
+
+ ); +}; AddRecord.propTypes = { data: PropTypes.object, - schema: PropTypes.object, + schemaState: PropTypes.object, schemaKey: PropTypes.string, primaryProperty: PropTypes.string, title: PropTypes.string, @@ -121,6 +117,7 @@ AddRecord.propTypes = { createRecord: PropTypes.func, validate: PropTypes.func, + validationError: PropTypes.string, // Specifies schema properties to include on the form. Each element in this // array may be either a string that specifies the full path of the property @@ -148,6 +145,6 @@ Schema.defaultProps = { export default withRouter( connect((state) => ({ - schema: state.schema + schemaState: state.schema }))(AddRecord) ); diff --git a/app/src/js/components/ArbitraryList/arbitrary-list.js b/app/src/js/components/ArbitraryList/arbitrary-list.js deleted file mode 100644 index 7cb9f1eef..000000000 --- a/app/src/js/components/ArbitraryList/arbitrary-list.js +++ /dev/null @@ -1,90 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -class List extends React.Component { - constructor () { - super(); - this.onChange = this.onChange.bind(this); - this.add = this.add.bind(this); - this.remove = this.remove.bind(this); - this.renderItem = this.renderItem.bind(this); - } - - onChange (index, newValue) { - const value = this.props.value.slice(); - value[index] = newValue; - this.props.onChange(this.props.id, value); - } - - add (e) { - e.preventDefault(); - const value = this.props.value.slice(); - if (!value[value.length - 1]) return; - value.push(''); - this.props.onChange(this.props.id, value); - } - - remove (index) { - const value = this.props.value.slice(); - value.splice(index, 1); - this.props.onChange(this.props.id, value); - } - - render () { - const { - label, - value, - error - } = this.props; - - // if there are no items, include an extra row - const items = value.length ? value : ['']; - - return ( -
- -
- ); - } - - renderItem (item, i, items) { - const add = i === items.length - 1; - // only allow adds if you've entered something - const disabled = add && !item.length; - return ( -
  • - this.onChange(i, e.target.value)} - /> - { add ? - : null } - - { !add ? - : null } -
  • - ); - } -} - -List.propTypes = { - label: PropTypes.any, - value: PropTypes.array, - id: PropTypes.string, - error: PropTypes.string, - onChange: PropTypes.func -}; - -export default List; diff --git a/app/src/js/components/Edit/edit.js b/app/src/js/components/Edit/edit.js index ba45c1033..3459558aa 100644 --- a/app/src/js/components/Edit/edit.js +++ b/app/src/js/components/Edit/edit.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { get } from 'object-path'; @@ -13,113 +13,103 @@ import { historyPushWithQueryParams } from '../../utils/url-helper'; const { updateDelay } = _config; -class EditRecord extends React.Component { - constructor () { - super(); - this.state = { - pk: null, - error: null - }; - this.get = this.get.bind(this); - this.navigateBack = this.navigateBack.bind(this); - this.onSubmit = this.onSubmit.bind(this); - } - - get (pk) { - const record = this.props.state.map[pk]; - if (!record) { - this.props.dispatch(this.props.getRecord(pk)); - } - } +const EditRecord = ({ + attachMeta, + backRoute, + clearRecordUpdate, + dispatch, + getRecord, + includedForms, + merge: shouldMerge, + pk, + schemaKey, + schemaState, + state, + updateRecord, + validate, + validationError, +}) => { + const record = get(state.map, pk, {}); + const meta = get(state.updated, pk, {}); + const schema = schemaState[schemaKey]; + const [error, setError] = useState(record.error || meta.error); + const [pkState, setPkState] = useState(pk); - componentDidMount () { - const { pk } = this.props; - this.get(pk); - this.props.dispatch(getSchema(this.props.schemaKey)); - } + useEffect(() => { + dispatch(getRecord(pk)); + dispatch(getSchema(schemaKey)); + }, [dispatch, getRecord, pk, schemaKey]); - componentDidUpdate (prevProps) { - const { pk, state } = this.props; - const { dispatch, clearRecordUpdate, backRoute } = prevProps; + useEffect(() => { const updateStatus = get(state.updated, [pk, 'status']); if (updateStatus === 'success') { - return setTimeout(() => { + setTimeout(() => { dispatch(clearRecordUpdate(pk)); historyPushWithQueryParams(backRoute); }, updateDelay); } - if (this.state.pk === pk) { return; } - - const record = get(state.map, pk, {}); - + if (pkState !== pk) { // record has hit an API error - if (record.error) { - this.setState({ // eslint-disable-line react/no-did-update-set-state - pk, - error: record.error - }); - } else if (record.data) { - // record has hit an API success; update the UI - this.setState({ // eslint-disable-line react/no-did-update-set-state - pk, - error: null - }); - } else if (!record.inflight) { - // we've not yet fetched the record, request it - this.get(pk); + if (record.error) { + setError(record.error); + setPkState(pk); + } else if (record.data) { + setError(null); + setPkState(pk); + } else if (!record.inflight) { + // we've not yet fetched the record, request it + dispatch(getRecord(pk)); + } } - } + }, + [backRoute, clearRecordUpdate, dispatch, getRecord, pk, pkState, record, state.updated]); - navigateBack () { - const { backRoute } = this.props; + function navigateBack () { historyPushWithQueryParams(backRoute); } - onSubmit (id, payload) { - const { pk, state, dispatch, updateRecord, attachMeta } = this.props; - const record = state.map[pk]; - const json = this.props.merge ? merge(record.data, payload) : payload; + function onSubmit (_id, payload) { + const json = shouldMerge ? merge(record.data, payload) : payload; if (attachMeta) { json.updatedAt = new Date().getTime(); json.changedBy = strings.dashboard; } - this.setState({ error: null }); - console.log('About to update', json); - dispatch(updateRecord(pk, json)); + if (!validate || validate(payload)) { + setError(null); + console.log('About to update', json); + dispatch(updateRecord(pk, json)); + } else { + const errorMessage = validationError || 'Payload failed validation'; + console.log(errorMessage); + setError(errorMessage); + } } - render () { - const { pk, state, schemaKey, includedForms } = this.props; - const record = get(state.map, pk, {}); - const meta = get(state.updated, pk, {}); - const error = this.state.error || record.error || meta.error; - const schema = this.props.schema[schemaKey]; - return ( -
    -
    -

    Edit {schemaKey}: {pk}

    - {schema && record.data ? ( - - ) : } -
    -
    - ); - } -} + return ( +
    +
    +

    Edit {schemaKey}: {pk}

    + {schema && record.data ? ( + + ) : } +
    +
    + ); +}; EditRecord.propTypes = { pk: PropTypes.string, - schema: PropTypes.object, + schemaState: PropTypes.object, schemaKey: PropTypes.string, dispatch: PropTypes.func, state: PropTypes.object, @@ -131,10 +121,12 @@ EditRecord.propTypes = { getRecord: PropTypes.func, updateRecord: PropTypes.func, - clearRecordUpdate: PropTypes.func + clearRecordUpdate: PropTypes.func, + validate: PropTypes.func, + validationError: PropTypes.string, }; export { EditRecord }; export default withRouter(connect((state) => ({ - schema: state.schema + schemaState: state.schema }))(EditRecord)); diff --git a/app/src/js/components/EditRaw/edit-raw.js b/app/src/js/components/EditRaw/edit-raw.js index ff9ab4be1..7b7dd6dda 100644 --- a/app/src/js/components/EditRaw/edit-raw.js +++ b/app/src/js/components/EditRaw/edit-raw.js @@ -29,7 +29,7 @@ const EditRaw = ({ updateRecord, clearRecordUpdate, pk, - schema, + schemaState, schemaKey, hasModal }) => { @@ -60,10 +60,10 @@ const EditRaw = ({ if (!stateMap[pk]) { dispatch(getRecord(pk)); } - if (!schema[schemaKey]) { + if (!schemaState[schemaKey]) { dispatch(getSchema(schemaKey)); } - }, [dispatch, pk, stateMap, getRecord, schema, schemaKey]); + }, [dispatch, pk, stateMap, getRecord, schemaState, schemaKey]); // Handle effects of an update success or error useEffect(() => { @@ -81,8 +81,8 @@ const EditRaw = ({ // ported from componentDidUpdate useEffect(() => { - if (recordPk === pk || !schema[schemaKey]) { return; } - const recordSchema = schema[schemaKey]; + if (recordPk === pk || !schemaState[schemaKey]) { return; } + const recordSchema = schemaState[schemaKey]; const newRecord = stateMap[pk] || {}; if (newRecord.error) { @@ -107,7 +107,7 @@ const EditRaw = ({ } else if (!newRecord.inflight && !stateMap[pk]) { dispatch(getRecord(pk)); } - }, [recordPk, pk, schema, schemaKey, stateMap, dispatch, record, getRecord]); + }, [recordPk, pk, schemaState, schemaKey, stateMap, dispatch, record, getRecord]); function onSubmit (e) { e.preventDefault(); @@ -219,7 +219,7 @@ const EditRaw = ({ EditRaw.propTypes = { dispatch: PropTypes.func, pk: PropTypes.string, - schema: PropTypes.object, + schemaState: PropTypes.object, schemaKey: PropTypes.string, state: PropTypes.object, backRoute: PropTypes.string, @@ -231,5 +231,5 @@ EditRaw.propTypes = { }; export default withRouter(connect((state) => ({ - schema: state.schema + schemaState: state.schema }))(EditRaw)); diff --git a/app/src/js/components/Form/Form.js b/app/src/js/components/Form/Form.js index 19119ede1..aa5533dac 100644 --- a/app/src/js/components/Form/Form.js +++ b/app/src/js/components/Form/Form.js @@ -12,7 +12,7 @@ import ErrorReport from '../Errors/report'; import TextForm from '../TextAreaForm/text'; import TextAreaForm from '../TextAreaForm/text-area'; import SimpleDropdown from '../DropDown/simple-dropdown'; -import List from '../ArbitraryList/arbitrary-list'; +import FormList from '../FormList/form-list'; import SubForm from '../SubForm/sub-form'; import t from '../../utils/strings'; import { window } from '../../utils/browser'; @@ -277,7 +277,7 @@ export class Form extends React.Component { element = SimpleDropdown; break; case formTypes.list: - element = List; + element = FormList; break; case formTypes.subform: element = SubForm; @@ -296,6 +296,11 @@ export class Form extends React.Component { value = String(value); } + // filter out empty values from the list + if (type === formTypes.list) { + value = value.filter((item) => item !== ''); + } + // dropdowns have options const options = (type === formTypes.dropdown && input.options) || null; // textarea forms pass a mode value to ace @@ -305,9 +310,11 @@ export class Form extends React.Component { const autoComplete = (type === formTypes.text && input.isPassword) ? 'on' : null; // text forms can be type=password or number let textType = (type === formTypes.text && input.isPassword) ? 'password' : null; + const additionalConfig = {}; if (type === formTypes.number) { textType = 'number'; + additionalConfig.min = 0; } const elem = React.createElement(element, { @@ -320,7 +327,8 @@ export class Form extends React.Component { fieldset, type: textType, autoComplete, - onChange: this.onChange + onChange: this.onChange, + ...additionalConfig }); return
  • {elem}
  • ; diff --git a/app/src/js/components/Form/_form.scss b/app/src/js/components/Form/_form.scss index 8b85c9926..77a2892a0 100644 --- a/app/src/js/components/Form/_form.scss +++ b/app/src/js/components/Form/_form.scss @@ -353,7 +353,7 @@ select option{ .form__addone--input { width: 50%; - margin-right: 1em; + margin-right: 0.5em; } .form__addone--button { @@ -420,10 +420,8 @@ select option{ .page__section--fullpage-form { .form__item { input { - &:not([type=number]) { - padding: 10px 0; - } - &[type=text] { + padding: 10px; + &[type=text], &[type=password] { width: 100%; } } @@ -455,8 +453,11 @@ select option{ .page__section--fullpage-form--internal { .form__item { margin-bottom: 3em; - input[type=text] { - width: 70%; + input{ + padding: 10px; + &[type=text] { + width: 70%; + } } .subform__item--expanded { width: 70%; @@ -479,8 +480,7 @@ select option{ .form__addone--item { margin-bottom: 1em; input { - width: 59%; - float: left; + width: 93%; } } &--require__description { diff --git a/app/src/js/components/FormList/form-list.js b/app/src/js/components/FormList/form-list.js new file mode 100644 index 000000000..fdf1a938e --- /dev/null +++ b/app/src/js/components/FormList/form-list.js @@ -0,0 +1,87 @@ +import React, { useState } from 'react'; +import PropTypes from 'prop-types'; + +const FormList = ({ error, id, label, onChange, value }) => { + const [values, setValues] = useState(value.length ? value : ['']); + + function handleChange(index, newValue) { + // make a copy of values so we can update the index + const newValues = [...values]; + newValues[index] = newValue; + setValues(newValues); + onChange(id, newValues); + } + + function addItem(e) { + e.preventDefault(); + if (!value[value.length - 1]) return; + setValues((prevValues) => [...prevValues, '']); + } + + function removeItem(index) { + // make a copy of values so we can update the index + const newValues = [...values]; + newValues.splice(index, 1); + setValues(newValues); + onChange(id, newValues); + } + + function renderItem(item, index, items) { + const add = index === items.length - 1; + // only allow adds if you've entered something + const disabled = add && !item.length; + return ( +
  • + handleChange(index, e.target.value)} + /> + {add && ( + + )} + + {!add && ( + + )} +
  • + ); + } + + return ( +
    + +
    + ); +}; + +FormList.propTypes = { + error: PropTypes.string, + id: PropTypes.string, + label: PropTypes.any, + onChange: PropTypes.func, + value: PropTypes.array, +}; + +export default FormList; diff --git a/app/src/js/components/FormSchema/schema.js b/app/src/js/components/FormSchema/schema.js index 7771c5541..2d54ede01 100644 --- a/app/src/js/components/FormSchema/schema.js +++ b/app/src/js/components/FormSchema/schema.js @@ -1,6 +1,6 @@ /* eslint-disable no-restricted-syntax */ /* eslint-disable import/no-cycle */ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { get, set } from 'object-path'; import startCase from 'lodash/startCase'; @@ -198,7 +198,7 @@ function textField (config, property, validate) { config.type = formTypes.text; config.validate = validate; config.error = validate && get(errors, property, errors.required); - if (property === 'password') config.isPassword = true; + if (property === 'password' || property === 'username') config.isPassword = true; return config; } @@ -225,45 +225,36 @@ function listField (config, property, validate) { return config; } -export class Schema extends React.Component { - constructor (props) { - super(props); - - const { schema, data, include, exclude, enums } = props; - - this.state = { - fields: createFormConfig(data, schema, include, exclude, enums) - }; - } - - componentDidUpdate (prevProps) { - const { schema, data, include, exclude, pk, enums } = this.props; - - if (prevProps.pk !== pk || prevProps.enums !== enums || prevProps.data !== data) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState({ - fields: createFormConfig(data, schema, include, exclude, enums) - }); - } - } - - render () { - const { fields } = this.state; - const { error } = this.props; - - return ( -
    { error && element && element.scrollIntoView(true); }}> - {error && } -
    -
    - ); - } -} +const Schema = ({ + data, + enums, + error, + exclude, + include, + onCancel, + onSubmit, + pk, + schema, + status, +}) => { + const [fields, setFields] = useState(createFormConfig(data, schema, include, exclude, enums)); + + useEffect(() => { + setFields(createFormConfig(data, schema, include, exclude, enums)); + }, [enums, data, schema, include, exclude, pk]); + + return ( +
    { error && element && element.scrollIntoView(true); }}> + {error && } + +
    + ); +}; Schema.propTypes = { schema: PropTypes.object, diff --git a/app/src/js/components/Granules/granule.js b/app/src/js/components/Granules/granule.js index 235c36855..843a7eba5 100644 --- a/app/src/js/components/Granules/granule.js +++ b/app/src/js/components/Granules/granule.js @@ -41,7 +41,7 @@ import { strings } from '../locale'; import { workflowOptionNames } from '../../selectors'; import { defaultWorkflowMeta, executeDialog } from '../../utils/table-config/granules'; import Breadcrumbs from '../Breadcrumbs/Breadcrumbs'; -import { getPersistentQueryParams, historyPushWithQueryParams } from '../../utils/url-helper'; +import { historyPushWithQueryParams } from '../../utils/url-helper'; const link = 'Link'; @@ -102,17 +102,9 @@ const metaAccessors = [ )), }, { - label: 'Execution', - property: 'execution', - accessor: (d) => (d ? ( - ({ - pathname: `/executions/execution/${path.basename(d)}`, - search: getPersistentQueryParams(location), - })} - > - link - + label: 'Executions List', + accessor: (row) => (row.granuleId && row.collectionId ? ( + ({ pathname: `/executions/executions-list/${encodeURIComponent(row.collectionId)}/${encodeURIComponent(path.basename(row.granuleId))}` })}>link ) : ( nullValue )), diff --git a/app/src/js/components/ListActions/ListActions.js b/app/src/js/components/ListActions/ListActions.js index 876af0c03..d3aa1a543 100644 --- a/app/src/js/components/ListActions/ListActions.js +++ b/app/src/js/components/ListActions/ListActions.js @@ -17,8 +17,8 @@ const ListActions = ({ completedBulkActions }) => { const [actionsExpanded, setFiltersExpanded] = useState(false); - const hasActions = Array.isArray(bulkActions) && bulkActions.length > 0; - const hasGroupAction = hasActions && groupAction; + const hasBulkActions = Array.isArray(bulkActions) && bulkActions.length > 0; + const hasGroupAction = hasBulkActions && groupAction; function handleBulkActionSuccess(results, error) { if (typeof onBulkActionSuccess === 'function') { @@ -87,13 +87,13 @@ const ListActions = ({ - + />} ); } @@ -101,24 +101,24 @@ const ListActions = ({ function renderActions() { return (
    - {hasActions && ( + {hasBulkActions && (
    {listBulkActions()}
    )} - + />}
    ); } return ( -
    +
    {children} {hasGroupAction && renderGroupActions()} {!hasGroupAction && renderActions()} diff --git a/app/src/js/components/Providers/add.js b/app/src/js/components/Providers/add.js index 4fae194b7..99e6f5c3f 100644 --- a/app/src/js/components/Providers/add.js +++ b/app/src/js/components/Providers/add.js @@ -5,40 +5,34 @@ import { withRouter } from 'react-router-dom'; import PropTypes from 'prop-types'; import { createProvider } from '../../actions'; import AddRecord from '../Add/add'; +import { isValidProvider } from '../../utils/validate'; const SCHEMA_KEY = 'provider'; -class AddProvider extends React.Component { - constructor () { - super(); - this.state = { name: null }; - } - - render () { - return ( -
    - - Add Provider - - -
    - ); - } -} +const AddProvider = ({ providers }) => ( +
    + + Add Provider + + +
    +); AddProvider.propTypes = { - providers: PropTypes.object + providers: PropTypes.object, }; export default withRouter( connect((state) => ({ - providers: state.providers + providers: state.providers, }))(AddProvider) ); diff --git a/app/src/js/components/Providers/edit.js b/app/src/js/components/Providers/edit.js index ecb3e364a..58e6b4e58 100644 --- a/app/src/js/components/Providers/edit.js +++ b/app/src/js/components/Providers/edit.js @@ -9,6 +9,7 @@ import { clearUpdateProvider } from '../../actions'; import EditRecord from '../Edit/edit'; +import { isValidProvider } from '../../utils/validate'; const SCHEMA_KEY = 'provider'; @@ -31,6 +32,8 @@ const EditProvider = ({ updateRecord={updateProvider} clearRecordUpdate={clearUpdateProvider} backRoute={`/providers/provider/${providerId}`} + validate={isValidProvider} + validationError={'Concurrent Connection Limit cannot be a negative value'} />
    ); diff --git a/app/src/js/components/ReconciliationReports/gnf-report.js b/app/src/js/components/ReconciliationReports/gnf-report.js index c753d70bb..764cd9132 100644 --- a/app/src/js/components/ReconciliationReports/gnf-report.js +++ b/app/src/js/components/ReconciliationReports/gnf-report.js @@ -4,7 +4,6 @@ import groupBy from 'lodash/groupBy'; import { searchReconciliationReport, clearReconciliationSearch, - listGranules } from '../../actions'; import List from '../Table/Table'; import Search from '../Search/search'; @@ -114,15 +113,14 @@ const GnfReport = ({ />
    diff --git a/app/src/js/components/ReconciliationReports/inventory-report.js b/app/src/js/components/ReconciliationReports/inventory-report.js index ddf401bac..fc778e13e 100644 --- a/app/src/js/components/ReconciliationReports/inventory-report.js +++ b/app/src/js/components/ReconciliationReports/inventory-report.js @@ -10,7 +10,6 @@ import { clearReconciliationSearch, filterReconciliationReport, clearReconciliationReportFilter, - listGranules } from '../../actions'; import List from '../Table/Table'; import { reshapeReport } from './reshape-report'; @@ -176,8 +175,19 @@ const InventoryReport = ({ {reportComparisons .find((displayObj) => displayObj.id === activeId) - .tables.map((item, index) => { - const isExpanded = expandedState[activeId][item.id]; + .tables.map((table, index) => { + const { columns, data, id, name, type } = table; + const isExpanded = expandedState[activeId][id]; + const listProps = {}; + + if (type === 'granule' || type === 'file') { + listProps.bulkActions = bulkActions; + listProps.groupAction = groupAction; + listProps.rowId = 'granuleId'; + } else if (type === 'collection') { + listProps.rowId = 'name'; + } + return (
    handleToggleClick(e, item.id)} - aria-controls={item.id} + onClick={(e) => handleToggleClick(e, id)} + aria-controls={id} > - {item.name} + {name} - {item.data.length} + {data.length} -
    +
    diff --git a/app/src/js/components/ReconciliationReports/reconciliation-report.js b/app/src/js/components/ReconciliationReports/reconciliation-report.js index 80678e65a..7a0e8e945 100644 --- a/app/src/js/components/ReconciliationReports/reconciliation-report.js +++ b/app/src/js/components/ReconciliationReports/reconciliation-report.js @@ -112,8 +112,11 @@ const ReconciliationReport = ({ ]; } - function updateSelection(selection) { - setSelected(selection); + function updateSelection(selectedIds, currentSelectedRows) { + const allSelectedRows = selected.concat(currentSelectedRows); + const selectedRows = selectedIds + .map((id) => allSelectedRows.find((g) => id === g.granuleId)).filter(Boolean); + setSelected(selectedRows); } if (!record || (record.inflight && !record.data)) { diff --git a/app/src/js/components/ReconciliationReports/reshape-report.js b/app/src/js/components/ReconciliationReports/reshape-report.js index eba3b0522..6759ee03b 100644 --- a/app/src/js/components/ReconciliationReports/reshape-report.js +++ b/app/src/js/components/ReconciliationReports/reshape-report.js @@ -177,6 +177,7 @@ export const reshapeReport = (recordData, filterString, filterBucket) => { { id: 'dynamoNotS3', name: 'Files in DynamoDb not found in S3', + type: 'file', data: filesInDynamoDb, columns: tableColumnsFiles, }, @@ -189,6 +190,7 @@ export const reshapeReport = (recordData, filterString, filterBucket) => { { id: 's3NotDynamo', name: 'Files in S3 not found in DynamoDb', + type: 'file', data: filesInS3, columns: tableColumnsS3Files, }, @@ -204,18 +206,21 @@ export const reshapeReport = (recordData, filterString, filterBucket) => { { id: 'cumulusCollections', name: 'Collections only in Cumulus', + type: 'collection', data: collectionsInCumulus, columns: tableColumnsCollections, }, { id: 'cumulusGranules', name: 'Granules only in Cumulus', + type: 'granule', data: granulesInCumulus, columns: tableColumnsGranules, }, { id: 'cumulusFiles', name: 'Files only in Cumulus', + type: 'file', data: granuleFilesOnlyInCumulus, columns: tableColumnsFiles, }, @@ -228,18 +233,21 @@ export const reshapeReport = (recordData, filterString, filterBucket) => { { id: 'cmrCollections', name: 'Collections only in CMR', + type: 'collection', data: collectionsInCmr, columns: tableColumnsCollections, }, { id: 'cmrGranules', name: 'Granules only in CMR', + type: 'granule', data: granulesInCmr, columns: tableColumnsGranules, }, { id: 'cmrFiles', name: 'Files only in CMR', + type: 'file', data: granuleFilesOnlyInCmr, columns: tableColumnsFiles, }, diff --git a/app/src/js/components/SortableTable/SortableTable.js b/app/src/js/components/SortableTable/SortableTable.js index fcbb5393a..c016f95e1 100644 --- a/app/src/js/components/SortableTable/SortableTable.js +++ b/app/src/js/components/SortableTable/SortableTable.js @@ -11,10 +11,12 @@ import classNames from 'classnames'; import omit from 'lodash/omit'; import { useTable, useResizeColumns, useFlexLayout, useSortBy, useRowSelect, usePagination, useExpanded } from 'react-table'; import { useDispatch } from 'react-redux'; +import TableHeader from '../TableHeader/table-header'; import SimplePagination from '../Pagination/simple-pagination'; import TableFilters from '../Table/TableFilters'; import ListFilters from '../ListActions/ListFilters'; import { sortPersist } from '../../actions/index'; + const getColumnWidth = (rows, accessor, headerText, originalWidth) => { const maxWidth = 400; const magicSpacing = 10; @@ -355,6 +357,22 @@ const SortableTable = ({ } {legend} } + {shouldUsePagination && + + }
    diff --git a/app/src/js/components/Table/Table.js b/app/src/js/components/Table/Table.js index e82f6a4c3..68af50794 100644 --- a/app/src/js/components/Table/Table.js +++ b/app/src/js/components/Table/Table.js @@ -45,6 +45,7 @@ const List = ({ tableColumns, tableId, toggleColumnOptionsAction, + useSimplePagination = false, }) => { const { data: listData, @@ -256,15 +257,16 @@ const List = ({ renderRowSubComponent={renderRowSubComponent} tableId={tableId} initialSortBy={sortBy} + shouldUsePagination={useSimplePagination} /> - + />}
    @@ -296,6 +298,7 @@ List.propTypes = { renderRowSubComponent: PropTypes.func, tableId: PropTypes.string, sorts: PropTypes.object, + useSimplePagination: PropTypes.bool, }; export { List }; diff --git a/app/src/js/components/TableHeader/table-header.js b/app/src/js/components/TableHeader/table-header.js index b00ba6c4a..2f141db72 100644 --- a/app/src/js/components/TableHeader/table-header.js +++ b/app/src/js/components/TableHeader/table-header.js @@ -1,5 +1,7 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; +import isEmpty from 'lodash/isEmpty'; +import SimplePagination from '../Pagination/simple-pagination'; import Pagination from '../Pagination/pagination'; import Dropdown from '../DropDown/dropdown'; import pageSizeOptions from '../../utils/page-size'; @@ -20,11 +22,15 @@ const TableHeader = ({ onNewPage, page, selected = [], + simplePaginationOptions = {}, }) => { - const [selectedValues, setSelectedValues] = useState([{ - id: limit, - label: limit.toString(), - }]); + const useSimplePagination = !isEmpty(simplePaginationOptions); + const [selectedValues, setSelectedValues] = useState([ + { + id: limit, + label: limit.toString(), + }, + ]); const numberChecked = selected.length; @@ -33,10 +39,12 @@ const TableHeader = ({ setSelectedValues([]); } else { const { label: value } = selections[0]; - setSelectedValues([{ - id: value, - label: value, - }]); + setSelectedValues([ + { + id: value, + label: value, + }, + ]); } updateSelection(); } @@ -45,34 +53,44 @@ const TableHeader = ({
    - {count} total records {numberChecked > 0 && <>({numberChecked} selected)} + {count} total records{' '} + {numberChecked > 0 && ( + <> + ({numberChecked} selected) + + )}
    - -
    - Show - Limit} - onChange={handleLimitChange} - options={pageSizeOptions} - paramKey="limit" - selectedValues={selectedValues} - /> - per page -
    + {useSimplePagination && } + {!useSimplePagination && ( + <> + +
    + Show + Limit} + onChange={handleLimitChange} + options={pageSizeOptions} + paramKey="limit" + selectedValues={selectedValues} + /> + per page +
    + + )}
    ); }; @@ -85,6 +103,7 @@ TableHeader.propTypes = { onNewPage: PropTypes.func, page: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), selected: PropTypes.array, + simplePaginationOptions: PropTypes.object, }; export default TableHeader; diff --git a/app/src/js/config/index.js b/app/src/js/config/index.js index 24c2b3818..c2d8c6b53 100644 --- a/app/src/js/config/index.js +++ b/app/src/js/config/index.js @@ -8,7 +8,7 @@ const deploymentConfig = require('./config'); const baseConfig = { environment: 'development', requireEarthdataLogin: false, - minCompatibleApiVersion: 'v9.5.0', + minCompatibleApiVersion: 'v9.9.0', oauthMethod: 'earthdata', graphicsPath: '/src/assets/images/', diff --git a/app/src/js/utils/table-config/execution-status.js b/app/src/js/utils/table-config/execution-status.js index db0c8243c..01980d491 100644 --- a/app/src/js/utils/table-config/execution-status.js +++ b/app/src/js/utils/table-config/execution-status.js @@ -1,4 +1,5 @@ /* eslint-disable react/prop-types */ +import path from 'path'; import React, { useState } from 'react'; import { Link } from 'react-router-dom'; import get from 'lodash/get'; @@ -10,102 +11,61 @@ import DefaultModal from '../../components/Modal/modal'; export const tableColumns = [ { - Header: 'Id', + Header: 'Event ID', accessor: 'id', - width: 10 - }, - { - Header: 'Type', - accessor: 'type', - Cell: ({ cell: { value }, row: { original: { eventDetails } } }) => { - const [showModal, setShowModal] = useState(false); - const { id } = eventDetails || {}; - function toggleModal(e) { - if (e) { - e.preventDefault(); - } - setShowModal(!showModal); - } - if (eventDetails) { - let buttonClass; - if (eventDetails.type === 'LambdaFunctionFailed') { - buttonClass = 'button button--small button--no-left-padding button--failed'; - } else { - buttonClass = 'button button--small button--no-left-padding'; - } + width: 10, + Cell: ({ cell: { value } }) => { + if (value) { return ( <> - - -
    {JSON.stringify(eventDetails, null, 2)}
    -
    + + {value} + ); } return 'N/A'; - }, + } }, { Header: 'Step Name', accessor: 'name', - }, - { - Header: 'Timestamp', - accessor: 'timestamp', - Cell: ({ cell: { value } }) => fullDate(value) - }, - { - Header: 'Event Details', - accessor: 'eventDetails', - Cell: ({ cell: { value } }) => { + Cell: ({ cell: { value }, row: { original: { id, eventDetails } } }) => { const [showModal, setShowModal] = useState(false); - const { id } = value || {}; function toggleModal(e) { if (e) { e.preventDefault(); } setShowModal(!showModal); } - if (value) { - return ( - <> - - -
    {JSON.stringify(value, null, 2)}
    -
    - - ); - } - return 'N/A'; + return ( + <> + + {value || 'N/A'} + + {eventDetails.type.toLowerCase().includes('failed') + ? + : } + +
    {JSON.stringify(eventDetails, null, 2)}
    +
    + + ); }, - disableSortBy: true, - } + }, + { + Header: 'Timestamp', + accessor: 'timestamp', + Cell: ({ cell: { value } }) => fullDate(value) + }, ]; export const metaAccessors = ({ @@ -176,6 +136,26 @@ export const metaAccessors = ({ return 'N/A'; }, }, + { + label: 'Granule ID', + property: 'granules', + accessor: (d) => { + if (!d) return 'N/A'; + return ( + ({ pathname: `/granules/granule/${encodeURIComponent(path.basename(d[0].granuleId))}` })}>{d[0].granuleId} + ); + }, + }, + { + label: 'Associated Executions List', + property: 'granules', + accessor: (d) => { + if (!d) return 'N/A'; + return ( + ({ pathname: `/executions/executions-list/${encodeURIComponent(d[0].collectionId)}/${encodeURIComponent(path.basename(d[0].granuleId))}` })}>Link + ); + }, + }, { label: 'Input', property: 'input', @@ -187,7 +167,7 @@ export const metaAccessors = ({ onClick={() => toggleModal('input')} className="button button--small button--no-left-padding" > - Show Input + Show Input { if (d) { const jsonData = - typeof Blob !== 'undefined' - ? new Blob([d], { type: 'text/json' }) - : null; + typeof Blob !== 'undefined' + ? new Blob([d], { type: 'text/json' }) + : null; const downloadUrl = - typeof window.URL.createObjectURL === 'function' - ? window.URL.createObjectURL(jsonData) - : ''; + typeof window.URL.createObjectURL === 'function' + ? window.URL.createObjectURL(jsonData) + : ''; return ( <> - Download File + Download File } @@ -262,11 +242,11 @@ export const metaAccessors = ({ accessor: (d) => { const kibanaLink = kibanaExecutionLink(cumulusInstance, d); const className = - 'button button--small button__goto button__arrow button__animation button__arrow--white'; + 'button button--small button__goto button__arrow button__animation button__arrow--white'; if (kibanaLink && kibanaLink.length) { return ( - View Logs in Kibana + View Logs in Kibana ); } @@ -280,7 +260,7 @@ export const metaAccessors = ({ title={`${d}/logs`} className={className} > - View Execution Logs + View Execution Logs ); }, diff --git a/app/src/js/utils/validate.js b/app/src/js/utils/validate.js index 86d74303b..c22d2ce28 100644 --- a/app/src/js/utils/validate.js +++ b/app/src/js/utils/validate.js @@ -13,3 +13,9 @@ export const granuleModel = (obj) => isText(obj.granuleId); export const collectionModel = (obj) => isText(obj.collectionName) && granuleModel(obj.granuleDefinition); export const isUndefined = (test) => typeof test === 'undefined'; + +export const isValidProvider = (provider) => { + if (!provider.globalConnectionLimit) return true; + if (provider.globalConnectionLimit > 0) return true; + return false; +}; diff --git a/cypress/fixtures/valid-execution-with-failure.json b/cypress/fixtures/valid-execution-with-failure.json new file mode 100644 index 000000000..8cc42a3ad --- /dev/null +++ b/cypress/fixtures/valid-execution-with-failure.json @@ -0,0 +1,77 @@ +{ + "execution": { + "executionArn": "arn:aws:states:us-east-1:012345678901:execution:test-stack-HelloWorldWorkflow:8e21ca0f-79d3-4782-8247-cacd42a595ea", + "stateMachineArn": "arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow", + "name": "8e21ca0f-79d3-4782-8247-cacd42a595ea", + "status": "SUCCEEDED", + "startDate": "2019-12-13T15:16:46.753Z", + "stopDate": "2019-12-13T15:16:52.582Z", + "input": "{\"cumulus_meta\":{\"execution_name\":\"8e21ca0f-79d3-4782-8247-cacd42a595ea\",\"message_source\":\"sfn\",\"state_machine\":\"arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow\",\"system_bucket\":\"test-stack-internal\",\"workflow_start_time\":null,\"queueName\":\"startSF\"},\"exception\":null,\"meta\":{\"buckets\":{\"internal\":{\"name\":\"test-stack-internal\",\"type\":\"internal\"},\"private\":{\"name\":\"test-stack-private\",\"type\":\"private\"},\"protected\":{\"name\":\"test-stack-protected\",\"type\":\"protected\"},\"protected-2\":{\"name\":\"test-stack-protected-2\",\"type\":\"protected\"},\"public\":{\"name\":\"test-stack-public\",\"type\":\"public\"}},\"cmr\":{\"clientId\":\"cumulus-core-test-stack\",\"cmrEnvironment\":\"UAT\",\"cmrLimit\":100,\"cmrPageSize\":50,\"oauthProvider\":\"launchpad\",\"password\":\"CY8t6pT4BPlSV8l3KGSBHcgz075nqMHSWWSrtprp1nTB58SOJexRL0s9nbTgG+uL5tGK5HLiwbYdTJCDgvJLaNiK5/4zPZIUIcBdoeWTRdmxU6v6oPWogGUj1L6FUaih67eZD3XhrHv8xuUEZLPMbrg7whXT5d9UzAd+gbi0/Cc1wTy+fYi2Zgo4FUYgOamm6AFcKYEVtdvyOTxbqp5ZNUockv3FOso/Q8ypNbXFY+tGFMllGhtj5uK1pijKnaqX1dcaOLnV8fQuJYzU2TXHCF97rAektas0Y6b+dNAvPu3um93yByPmeRaZNSkXN+1QL9AsoNwpWU0vltNjV+PSQg==\",\"provider\":\"CUMULUS\",\"username\":\"matthewsavoie\"},\"collection\":{\"process\":\"modis\",\"granuleIdExtraction\":\"(MOD09GQ\\\\..*)(\\\\.hdf|\\\\.cmr|_ndvi\\\\.jpg)\",\"version\":\"006\",\"dataType\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"createdAt\":1576250156248,\"name\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"duplicateHandling\":\"replace\",\"provider_path\":\"cumulus-test-data/pdrs\",\"files\":[{\"bucket\":\"protected\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{extractYear(cmrMetadata.Granule.Temporal.RangeDateTime.BeginningDateTime)}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"private\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf\\\\.met$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf.met\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"protected-2\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.cmr\\\\.xml$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.cmr.xml\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"public\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}_ndvi\\\\.jpg$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104_ndvi.jpg\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"}],\"updatedAt\":1576250156248,\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}\",\"reportToEms\":false,\"granuleId\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\"},\"distribution_endpoint\":\"https://b8f8ybopuh.execute-api.us-east-1.amazonaws.com:7003/DEV/\",\"launchpad\":{\"api\":\"https://api.launchpad.nasa.gov/icam/api/sm/v1\",\"certificate\":\"launchpad.pfx\",\"passphrase\":\"dfXLbkZkPNSOntQU70dyEM0GYkWbt59dTXxiU8uquwlFUwlaDpsfjoEWXYa1EvUpGHh1kvrYD5UDBkQDW5hT5ziGGRQCLfDXlan7YEHaZvYLPOXPv3ZW7LGhRXCNidNS1dSBXnRfvYBa6RescGvuMtdpuoU1duCQfuuh4F5Psu0QDrLMfwZsfxgTTEGTjC6PkxAU3UhWY/M2AullXk2mU55g9XTwCOqsSHqP1n7tZRTm0+4YbJopk0i6CvnMjAuVgYDBe2kTGnQWKkrWHcViUK7po8FFl9CNA5XqZv8p4FAmPLA5XJS5tw5Mrunsj98+e8WGESty0hyT13enuKUXJg==\"},\"provider\":{},\"queueExecutionLimits\":{\"backgroundProcessing\":5},\"queues\":{\"ScheduleSFDeadLetterQueue\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-ScheduleSFDeadLetterQueue\",\"backgroundProcessing\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-backgroundProcessing\",\"kinesisFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-kinesisFailure\",\"startSF\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-startSF\",\"triggerLambdaFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-triggerLambdaFailure\"},\"stack\":\"test-stack\",\"template\":\"s3://test-stack-internal/test-stack/workflow_template.json\",\"workflow_name\":\"HelloWorldWorkflow\",\"workflow_tasks\":{},\"triggerRule\":\"Updated_1576250154395\"},\"payload\":{}}", + "output": "{\"exception\":\"None\",\"task_config\":{\"buckets\":\"{$.meta.buckets}\",\"collection\":\"{$.meta.collection}\",\"provider\":\"{$.meta.provider}\"},\"meta\":{\"launchpad\":{\"api\":\"https://api.launchpad.nasa.gov/icam/api/sm/v1\",\"passphrase\":\"dfXLbkZkPNSOntQU70dyEM0GYkWbt59dTXxiU8uquwlFUwlaDpsfjoEWXYa1EvUpGHh1kvrYD5UDBkQDW5hT5ziGGRQCLfDXlan7YEHaZvYLPOXPv3ZW7LGhRXCNidNS1dSBXnRfvYBa6RescGvuMtdpuoU1duCQfuuh4F5Psu0QDrLMfwZsfxgTTEGTjC6PkxAU3UhWY/M2AullXk2mU55g9XTwCOqsSHqP1n7tZRTm0+4YbJopk0i6CvnMjAuVgYDBe2kTGnQWKkrWHcViUK7po8FFl9CNA5XqZv8p4FAmPLA5XJS5tw5Mrunsj98+e8WGESty0hyT13enuKUXJg==\",\"certificate\":\"launchpad.pfx\"},\"workflow_name\":\"HelloWorldWorkflow\",\"stack\":\"test-stack\",\"buckets\":{\"protected-2\":{\"type\":\"protected\",\"name\":\"test-stack-protected-2\"},\"protected\":{\"type\":\"protected\",\"name\":\"test-stack-protected\"},\"internal\":{\"type\":\"internal\",\"name\":\"test-stack-internal\"},\"private\":{\"type\":\"private\",\"name\":\"test-stack-private\"},\"public\":{\"type\":\"public\",\"name\":\"test-stack-public\"}},\"collection\":{\"files\":[{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"bucket\":\"protected\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{extractYear(cmrMetadata.Granule.Temporal.RangeDateTime.BeginningDateTime)}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf\\\\.met$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf.met\",\"bucket\":\"private\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.cmr\\\\.xml$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.cmr.xml\",\"bucket\":\"protected-2\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}_ndvi\\\\.jpg$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104_ndvi.jpg\",\"bucket\":\"public\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"}],\"reportToEms\":false,\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"name\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"granuleId\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}$\",\"process\":\"modis\",\"dataType\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"granuleIdExtraction\":\"(MOD09GQ\\\\..*)(\\\\.hdf|\\\\.cmr|_ndvi\\\\.jpg)\",\"provider_path\":\"cumulus-test-data/pdrs\",\"version\":\"006\",\"updatedAt\":1576250156248,\"duplicateHandling\":\"replace\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}\",\"createdAt\":1576250156248},\"cmr\":{\"username\":\"matthewsavoie\",\"cmrEnvironment\":\"UAT\",\"cmrLimit\":100,\"clientId\":\"cumulus-core-test-stack\",\"oauthProvider\":\"launchpad\",\"provider\":\"CUMULUS\",\"password\":\"CY8t6pT4BPlSV8l3KGSBHcgz075nqMHSWWSrtprp1nTB58SOJexRL0s9nbTgG+uL5tGK5HLiwbYdTJCDgvJLaNiK5/4zPZIUIcBdoeWTRdmxU6v6oPWogGUj1L6FUaih67eZD3XhrHv8xuUEZLPMbrg7whXT5d9UzAd+gbi0/Cc1wTy+fYi2Zgo4FUYgOamm6AFcKYEVtdvyOTxbqp5ZNUockv3FOso/Q8ypNbXFY+tGFMllGhtj5uK1pijKnaqX1dcaOLnV8fQuJYzU2TXHCF97rAektas0Y6b+dNAvPu3um93yByPmeRaZNSkXN+1QL9AsoNwpWU0vltNjV+PSQg==\",\"cmrPageSize\":50},\"workflow_tasks\":{\"HelloWorld\":{\"version\":\"$LATEST\",\"name\":\"test-stack-HelloWorld\",\"arn\":\"arn:aws:lambda:us-east-1:012345678901:function:test-stack-HelloWorld\"}},\"provider\":{},\"queues\":{\"backgroundProcessing\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-backgroundProcessing\",\"ScheduleSFDeadLetterQueue\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-ScheduleSFDeadLetterQueue\",\"startSF\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-startSF\",\"kinesisFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-kinesisFailure\",\"triggerLambdaFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-triggerLambdaFailure\"},\"distribution_endpoint\":\"https://b8f8ybopuh.execute-api.us-east-1.amazonaws.com:7003/DEV/\",\"template\":\"s3://test-stack-internal/test-stack/workflow_template.json\",\"triggerRule\":\"Updated_1576250154395\",\"queueExecutionLimits\":{\"backgroundProcessing\":5}},\"cumulus_meta\":{\"message_source\":\"sfn\",\"execution_name\":\"8e21ca0f-79d3-4782-8247-cacd42a595ea\",\"state_machine\":\"arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow\",\"workflow_start_time\":null,\"system_bucket\":\"test-stack-internal\",\"queueName\":\"startSF\"},\"payload\":{\"hello\":\"Hello World\"}}" + }, + "executionHistory": { + "events": [ + { + "timestamp": "2019-12-13T15:16:46.753Z", + "type": "ExecutionStarted", + "id": 1, + "previousEventId": 0, + "input": "{\"cumulus_meta\":{\"execution_name\":\"8e21ca0f-79d3-4782-8247-cacd42a595ea\",\"message_source\":\"sfn\",\"state_machine\":\"arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow\",\"system_bucket\":\"test-stack-internal\",\"workflow_start_time\":null,\"queueName\":\"startSF\"},\"exception\":null,\"meta\":{\"buckets\":{\"internal\":{\"name\":\"test-stack-internal\",\"type\":\"internal\"},\"private\":{\"name\":\"test-stack-private\",\"type\":\"private\"},\"protected\":{\"name\":\"test-stack-protected\",\"type\":\"protected\"},\"protected-2\":{\"name\":\"test-stack-protected-2\",\"type\":\"protected\"},\"public\":{\"name\":\"test-stack-public\",\"type\":\"public\"}},\"cmr\":{\"clientId\":\"cumulus-core-test-stack\",\"cmrEnvironment\":\"UAT\",\"cmrLimit\":100,\"cmrPageSize\":50,\"oauthProvider\":\"launchpad\",\"password\":\"CY8t6pT4BPlSV8l3KGSBHcgz075nqMHSWWSrtprp1nTB58SOJexRL0s9nbTgG+uL5tGK5HLiwbYdTJCDgvJLaNiK5/4zPZIUIcBdoeWTRdmxU6v6oPWogGUj1L6FUaih67eZD3XhrHv8xuUEZLPMbrg7whXT5d9UzAd+gbi0/Cc1wTy+fYi2Zgo4FUYgOamm6AFcKYEVtdvyOTxbqp5ZNUockv3FOso/Q8ypNbXFY+tGFMllGhtj5uK1pijKnaqX1dcaOLnV8fQuJYzU2TXHCF97rAektas0Y6b+dNAvPu3um93yByPmeRaZNSkXN+1QL9AsoNwpWU0vltNjV+PSQg==\",\"provider\":\"CUMULUS\",\"username\":\"matthewsavoie\"},\"collection\":{\"process\":\"modis\",\"granuleIdExtraction\":\"(MOD09GQ\\\\..*)(\\\\.hdf|\\\\.cmr|_ndvi\\\\.jpg)\",\"version\":\"006\",\"dataType\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"createdAt\":1576250156248,\"name\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"duplicateHandling\":\"replace\",\"provider_path\":\"cumulus-test-data/pdrs\",\"files\":[{\"bucket\":\"protected\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{extractYear(cmrMetadata.Granule.Temporal.RangeDateTime.BeginningDateTime)}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"private\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf\\\\.met$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf.met\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"protected-2\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.cmr\\\\.xml$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.cmr.xml\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"public\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}_ndvi\\\\.jpg$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104_ndvi.jpg\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"}],\"updatedAt\":1576250156248,\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}\",\"reportToEms\":false,\"granuleId\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\"},\"distribution_endpoint\":\"https://b8f8ybopuh.execute-api.us-east-1.amazonaws.com:7003/DEV/\",\"launchpad\":{\"api\":\"https://api.launchpad.nasa.gov/icam/api/sm/v1\",\"certificate\":\"launchpad.pfx\",\"passphrase\":\"dfXLbkZkPNSOntQU70dyEM0GYkWbt59dTXxiU8uquwlFUwlaDpsfjoEWXYa1EvUpGHh1kvrYD5UDBkQDW5hT5ziGGRQCLfDXlan7YEHaZvYLPOXPv3ZW7LGhRXCNidNS1dSBXnRfvYBa6RescGvuMtdpuoU1duCQfuuh4F5Psu0QDrLMfwZsfxgTTEGTjC6PkxAU3UhWY/M2AullXk2mU55g9XTwCOqsSHqP1n7tZRTm0+4YbJopk0i6CvnMjAuVgYDBe2kTGnQWKkrWHcViUK7po8FFl9CNA5XqZv8p4FAmPLA5XJS5tw5Mrunsj98+e8WGESty0hyT13enuKUXJg==\"},\"provider\":{},\"queueExecutionLimits\":{\"backgroundProcessing\":5},\"queues\":{\"ScheduleSFDeadLetterQueue\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-ScheduleSFDeadLetterQueue\",\"backgroundProcessing\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-backgroundProcessing\",\"kinesisFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-kinesisFailure\",\"startSF\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-startSF\",\"triggerLambdaFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-triggerLambdaFailure\"},\"stack\":\"test-stack\",\"template\":\"s3://test-stack-internal/test-stack/workflow_template.json\",\"workflow_name\":\"HelloWorldWorkflow\",\"workflow_tasks\":{},\"triggerRule\":\"Updated_1576250154395\"},\"payload\":{}}", + "roleArn": "arn:aws:iam::012345678901:role/test-stack-steprole" + }, + { + "timestamp": "2019-12-13T15:16:46.776Z", + "type": "TaskStateEntered", + "id": 2, + "previousEventId": 1, + "name": "HelloWorld", + "input": "{\"cumulus_meta\":{\"execution_name\":\"8e21ca0f-79d3-4782-8247-cacd42a595ea\",\"message_source\":\"sfn\",\"state_machine\":\"arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow\",\"system_bucket\":\"test-stack-internal\",\"workflow_start_time\":null,\"queueName\":\"startSF\"},\"exception\":null,\"meta\":{\"buckets\":{\"internal\":{\"name\":\"test-stack-internal\",\"type\":\"internal\"},\"private\":{\"name\":\"test-stack-private\",\"type\":\"private\"},\"protected\":{\"name\":\"test-stack-protected\",\"type\":\"protected\"},\"protected-2\":{\"name\":\"test-stack-protected-2\",\"type\":\"protected\"},\"public\":{\"name\":\"test-stack-public\",\"type\":\"public\"}},\"cmr\":{\"clientId\":\"cumulus-core-test-stack\",\"cmrEnvironment\":\"UAT\",\"cmrLimit\":100,\"cmrPageSize\":50,\"oauthProvider\":\"launchpad\",\"password\":\"CY8t6pT4BPlSV8l3KGSBHcgz075nqMHSWWSrtprp1nTB58SOJexRL0s9nbTgG+uL5tGK5HLiwbYdTJCDgvJLaNiK5/4zPZIUIcBdoeWTRdmxU6v6oPWogGUj1L6FUaih67eZD3XhrHv8xuUEZLPMbrg7whXT5d9UzAd+gbi0/Cc1wTy+fYi2Zgo4FUYgOamm6AFcKYEVtdvyOTxbqp5ZNUockv3FOso/Q8ypNbXFY+tGFMllGhtj5uK1pijKnaqX1dcaOLnV8fQuJYzU2TXHCF97rAektas0Y6b+dNAvPu3um93yByPmeRaZNSkXN+1QL9AsoNwpWU0vltNjV+PSQg==\",\"provider\":\"CUMULUS\",\"username\":\"matthewsavoie\"},\"collection\":{\"process\":\"modis\",\"granuleIdExtraction\":\"(MOD09GQ\\\\..*)(\\\\.hdf|\\\\.cmr|_ndvi\\\\.jpg)\",\"version\":\"006\",\"dataType\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"createdAt\":1576250156248,\"name\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"duplicateHandling\":\"replace\",\"provider_path\":\"cumulus-test-data/pdrs\",\"files\":[{\"bucket\":\"protected\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{extractYear(cmrMetadata.Granule.Temporal.RangeDateTime.BeginningDateTime)}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"private\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf\\\\.met$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf.met\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"protected-2\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.cmr\\\\.xml$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.cmr.xml\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"public\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}_ndvi\\\\.jpg$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104_ndvi.jpg\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"}],\"updatedAt\":1576250156248,\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}\",\"reportToEms\":false,\"granuleId\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\"},\"distribution_endpoint\":\"https://b8f8ybopuh.execute-api.us-east-1.amazonaws.com:7003/DEV/\",\"launchpad\":{\"api\":\"https://api.launchpad.nasa.gov/icam/api/sm/v1\",\"certificate\":\"launchpad.pfx\",\"passphrase\":\"dfXLbkZkPNSOntQU70dyEM0GYkWbt59dTXxiU8uquwlFUwlaDpsfjoEWXYa1EvUpGHh1kvrYD5UDBkQDW5hT5ziGGRQCLfDXlan7YEHaZvYLPOXPv3ZW7LGhRXCNidNS1dSBXnRfvYBa6RescGvuMtdpuoU1duCQfuuh4F5Psu0QDrLMfwZsfxgTTEGTjC6PkxAU3UhWY/M2AullXk2mU55g9XTwCOqsSHqP1n7tZRTm0+4YbJopk0i6CvnMjAuVgYDBe2kTGnQWKkrWHcViUK7po8FFl9CNA5XqZv8p4FAmPLA5XJS5tw5Mrunsj98+e8WGESty0hyT13enuKUXJg==\"},\"provider\":{},\"queueExecutionLimits\":{\"backgroundProcessing\":5},\"queues\":{\"ScheduleSFDeadLetterQueue\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-ScheduleSFDeadLetterQueue\",\"backgroundProcessing\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-backgroundProcessing\",\"kinesisFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-kinesisFailure\",\"startSF\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-startSF\",\"triggerLambdaFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-triggerLambdaFailure\"},\"stack\":\"test-stack\",\"template\":\"s3://test-stack-internal/test-stack/workflow_template.json\",\"workflow_name\":\"HelloWorldWorkflow\",\"workflow_tasks\":{},\"triggerRule\":\"Updated_1576250154395\"},\"payload\":{}}" + }, + { + "timestamp": "2019-12-13T15:16:46.776Z", + "type": "LambdaFunctionScheduled", + "id": 3, + "previousEventId": 2, + "resource": "arn:aws:lambda:us-east-1:012345678901:function:test-stack-HelloWorld", + "input": "{\"cma\":{\"task_config\":{\"buckets\":\"{$.meta.buckets}\",\"provider\":\"{$.meta.provider}\",\"collection\":\"{$.meta.collection}\"},\"event\":{\"cumulus_meta\":{\"execution_name\":\"8e21ca0f-79d3-4782-8247-cacd42a595ea\",\"message_source\":\"sfn\",\"state_machine\":\"arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow\",\"system_bucket\":\"test-stack-internal\",\"workflow_start_time\":null,\"queueName\":\"startSF\"},\"exception\":null,\"meta\":{\"buckets\":{\"internal\":{\"name\":\"test-stack-internal\",\"type\":\"internal\"},\"private\":{\"name\":\"test-stack-private\",\"type\":\"private\"},\"protected\":{\"name\":\"test-stack-protected\",\"type\":\"protected\"},\"protected-2\":{\"name\":\"test-stack-protected-2\",\"type\":\"protected\"},\"public\":{\"name\":\"test-stack-public\",\"type\":\"public\"}},\"cmr\":{\"clientId\":\"cumulus-core-test-stack\",\"cmrEnvironment\":\"UAT\",\"cmrLimit\":100,\"cmrPageSize\":50,\"oauthProvider\":\"launchpad\",\"password\":\"CY8t6pT4BPlSV8l3KGSBHcgz075nqMHSWWSrtprp1nTB58SOJexRL0s9nbTgG+uL5tGK5HLiwbYdTJCDgvJLaNiK5/4zPZIUIcBdoeWTRdmxU6v6oPWogGUj1L6FUaih67eZD3XhrHv8xuUEZLPMbrg7whXT5d9UzAd+gbi0/Cc1wTy+fYi2Zgo4FUYgOamm6AFcKYEVtdvyOTxbqp5ZNUockv3FOso/Q8ypNbXFY+tGFMllGhtj5uK1pijKnaqX1dcaOLnV8fQuJYzU2TXHCF97rAektas0Y6b+dNAvPu3um93yByPmeRaZNSkXN+1QL9AsoNwpWU0vltNjV+PSQg==\",\"provider\":\"CUMULUS\",\"username\":\"matthewsavoie\"},\"collection\":{\"process\":\"modis\",\"granuleIdExtraction\":\"(MOD09GQ\\\\..*)(\\\\.hdf|\\\\.cmr|_ndvi\\\\.jpg)\",\"version\":\"006\",\"dataType\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"createdAt\":1576250156248,\"name\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"duplicateHandling\":\"replace\",\"provider_path\":\"cumulus-test-data/pdrs\",\"files\":[{\"bucket\":\"protected\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{extractYear(cmrMetadata.Granule.Temporal.RangeDateTime.BeginningDateTime)}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"private\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf\\\\.met$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf.met\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"protected-2\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.cmr\\\\.xml$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.cmr.xml\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"bucket\":\"public\",\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}_ndvi\\\\.jpg$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104_ndvi.jpg\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"}],\"updatedAt\":1576250156248,\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}\",\"reportToEms\":false,\"granuleId\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\"},\"distribution_endpoint\":\"https://b8f8ybopuh.execute-api.us-east-1.amazonaws.com:7003/DEV/\",\"launchpad\":{\"api\":\"https://api.launchpad.nasa.gov/icam/api/sm/v1\",\"certificate\":\"launchpad.pfx\",\"passphrase\":\"dfXLbkZkPNSOntQU70dyEM0GYkWbt59dTXxiU8uquwlFUwlaDpsfjoEWXYa1EvUpGHh1kvrYD5UDBkQDW5hT5ziGGRQCLfDXlan7YEHaZvYLPOXPv3ZW7LGhRXCNidNS1dSBXnRfvYBa6RescGvuMtdpuoU1duCQfuuh4F5Psu0QDrLMfwZsfxgTTEGTjC6PkxAU3UhWY/M2AullXk2mU55g9XTwCOqsSHqP1n7tZRTm0+4YbJopk0i6CvnMjAuVgYDBe2kTGnQWKkrWHcViUK7po8FFl9CNA5XqZv8p4FAmPLA5XJS5tw5Mrunsj98+e8WGESty0hyT13enuKUXJg==\"},\"provider\":{},\"queueExecutionLimits\":{\"backgroundProcessing\":5},\"queues\":{\"ScheduleSFDeadLetterQueue\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-ScheduleSFDeadLetterQueue\",\"backgroundProcessing\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-backgroundProcessing\",\"kinesisFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-kinesisFailure\",\"startSF\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-startSF\",\"triggerLambdaFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-triggerLambdaFailure\"},\"stack\":\"test-stack\",\"template\":\"s3://test-stack-internal/test-stack/workflow_template.json\",\"workflow_name\":\"HelloWorldWorkflow\",\"workflow_tasks\":{},\"triggerRule\":\"Updated_1576250154395\"},\"payload\":{}}}}" + }, + { + "timestamp": "2019-12-13T15:16:46.788Z", + "type": "LambdaFunctionStarted", + "id": 4, + "previousEventId": 3 + }, + { + "timestamp": "2019-12-13T15:16:52.582Z", + "type": "LambdaFunctionFailed", + "id": 5, + "previousEventId": 4, + "output": "{\"exception\":\"None\",\"task_config\":{\"buckets\":\"{$.meta.buckets}\",\"collection\":\"{$.meta.collection}\",\"provider\":\"{$.meta.provider}\"},\"meta\":{\"launchpad\":{\"api\":\"https://api.launchpad.nasa.gov/icam/api/sm/v1\",\"passphrase\":\"dfXLbkZkPNSOntQU70dyEM0GYkWbt59dTXxiU8uquwlFUwlaDpsfjoEWXYa1EvUpGHh1kvrYD5UDBkQDW5hT5ziGGRQCLfDXlan7YEHaZvYLPOXPv3ZW7LGhRXCNidNS1dSBXnRfvYBa6RescGvuMtdpuoU1duCQfuuh4F5Psu0QDrLMfwZsfxgTTEGTjC6PkxAU3UhWY/M2AullXk2mU55g9XTwCOqsSHqP1n7tZRTm0+4YbJopk0i6CvnMjAuVgYDBe2kTGnQWKkrWHcViUK7po8FFl9CNA5XqZv8p4FAmPLA5XJS5tw5Mrunsj98+e8WGESty0hyT13enuKUXJg==\",\"certificate\":\"launchpad.pfx\"},\"workflow_name\":\"HelloWorldWorkflow\",\"stack\":\"test-stack\",\"buckets\":{\"protected-2\":{\"type\":\"protected\",\"name\":\"test-stack-protected-2\"},\"protected\":{\"type\":\"protected\",\"name\":\"test-stack-protected\"},\"internal\":{\"type\":\"internal\",\"name\":\"test-stack-internal\"},\"private\":{\"type\":\"private\",\"name\":\"test-stack-private\"},\"public\":{\"type\":\"public\",\"name\":\"test-stack-public\"}},\"collection\":{\"files\":[{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"bucket\":\"protected\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{extractYear(cmrMetadata.Granule.Temporal.RangeDateTime.BeginningDateTime)}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf\\\\.met$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf.met\",\"bucket\":\"private\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.cmr\\\\.xml$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.cmr.xml\",\"bucket\":\"protected-2\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}_ndvi\\\\.jpg$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104_ndvi.jpg\",\"bucket\":\"public\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"}],\"reportToEms\":false,\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"name\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"granuleId\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}$\",\"process\":\"modis\",\"dataType\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"granuleIdExtraction\":\"(MOD09GQ\\\\..*)(\\\\.hdf|\\\\.cmr|_ndvi\\\\.jpg)\",\"provider_path\":\"cumulus-test-data/pdrs\",\"version\":\"006\",\"updatedAt\":1576250156248,\"duplicateHandling\":\"replace\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}\",\"createdAt\":1576250156248},\"cmr\":{\"username\":\"matthewsavoie\",\"cmrEnvironment\":\"UAT\",\"cmrLimit\":100,\"clientId\":\"cumulus-core-test-stack\",\"oauthProvider\":\"launchpad\",\"provider\":\"CUMULUS\",\"password\":\"CY8t6pT4BPlSV8l3KGSBHcgz075nqMHSWWSrtprp1nTB58SOJexRL0s9nbTgG+uL5tGK5HLiwbYdTJCDgvJLaNiK5/4zPZIUIcBdoeWTRdmxU6v6oPWogGUj1L6FUaih67eZD3XhrHv8xuUEZLPMbrg7whXT5d9UzAd+gbi0/Cc1wTy+fYi2Zgo4FUYgOamm6AFcKYEVtdvyOTxbqp5ZNUockv3FOso/Q8ypNbXFY+tGFMllGhtj5uK1pijKnaqX1dcaOLnV8fQuJYzU2TXHCF97rAektas0Y6b+dNAvPu3um93yByPmeRaZNSkXN+1QL9AsoNwpWU0vltNjV+PSQg==\",\"cmrPageSize\":50},\"workflow_tasks\":{\"HelloWorld\":{\"version\":\"$LATEST\",\"name\":\"test-stack-HelloWorld\",\"arn\":\"arn:aws:lambda:us-east-1:012345678901:function:test-stack-HelloWorld\"}},\"provider\":{},\"queues\":{\"backgroundProcessing\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-backgroundProcessing\",\"ScheduleSFDeadLetterQueue\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-ScheduleSFDeadLetterQueue\",\"startSF\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-startSF\",\"kinesisFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-kinesisFailure\",\"triggerLambdaFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-triggerLambdaFailure\"},\"distribution_endpoint\":\"https://b8f8ybopuh.execute-api.us-east-1.amazonaws.com:7003/DEV/\",\"template\":\"s3://test-stack-internal/test-stack/workflow_template.json\",\"triggerRule\":\"Updated_1576250154395\",\"queueExecutionLimits\":{\"backgroundProcessing\":5}},\"cumulus_meta\":{\"message_source\":\"sfn\",\"execution_name\":\"8e21ca0f-79d3-4782-8247-cacd42a595ea\",\"state_machine\":\"arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow\",\"workflow_start_time\":null,\"system_bucket\":\"test-stack-internal\",\"queueName\":\"startSF\"},\"payload\":{\"hello\":\"Hello World\"}}" + }, + { + "timestamp": "2019-12-13T15:16:52.582Z", + "type": "TaskStateExited", + "id": 6, + "previousEventId": 5, + "name": "HelloWorld", + "output": "{\"exception\":\"None\",\"task_config\":{\"buckets\":\"{$.meta.buckets}\",\"collection\":\"{$.meta.collection}\",\"provider\":\"{$.meta.provider}\"},\"meta\":{\"launchpad\":{\"api\":\"https://api.launchpad.nasa.gov/icam/api/sm/v1\",\"passphrase\":\"dfXLbkZkPNSOntQU70dyEM0GYkWbt59dTXxiU8uquwlFUwlaDpsfjoEWXYa1EvUpGHh1kvrYD5UDBkQDW5hT5ziGGRQCLfDXlan7YEHaZvYLPOXPv3ZW7LGhRXCNidNS1dSBXnRfvYBa6RescGvuMtdpuoU1duCQfuuh4F5Psu0QDrLMfwZsfxgTTEGTjC6PkxAU3UhWY/M2AullXk2mU55g9XTwCOqsSHqP1n7tZRTm0+4YbJopk0i6CvnMjAuVgYDBe2kTGnQWKkrWHcViUK7po8FFl9CNA5XqZv8p4FAmPLA5XJS5tw5Mrunsj98+e8WGESty0hyT13enuKUXJg==\",\"certificate\":\"launchpad.pfx\"},\"workflow_name\":\"HelloWorldWorkflow\",\"stack\":\"test-stack\",\"buckets\":{\"protected-2\":{\"type\":\"protected\",\"name\":\"test-stack-protected-2\"},\"protected\":{\"type\":\"protected\",\"name\":\"test-stack-protected\"},\"internal\":{\"type\":\"internal\",\"name\":\"test-stack-internal\"},\"private\":{\"type\":\"private\",\"name\":\"test-stack-private\"},\"public\":{\"type\":\"public\",\"name\":\"test-stack-public\"}},\"collection\":{\"files\":[{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"bucket\":\"protected\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{extractYear(cmrMetadata.Granule.Temporal.RangeDateTime.BeginningDateTime)}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf\\\\.met$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf.met\",\"bucket\":\"private\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.cmr\\\\.xml$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.cmr.xml\",\"bucket\":\"protected-2\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}_ndvi\\\\.jpg$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104_ndvi.jpg\",\"bucket\":\"public\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"}],\"reportToEms\":false,\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"name\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"granuleId\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}$\",\"process\":\"modis\",\"dataType\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"granuleIdExtraction\":\"(MOD09GQ\\\\..*)(\\\\.hdf|\\\\.cmr|_ndvi\\\\.jpg)\",\"provider_path\":\"cumulus-test-data/pdrs\",\"version\":\"006\",\"updatedAt\":1576250156248,\"duplicateHandling\":\"replace\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}\",\"createdAt\":1576250156248},\"cmr\":{\"username\":\"matthewsavoie\",\"cmrEnvironment\":\"UAT\",\"cmrLimit\":100,\"clientId\":\"cumulus-core-test-stack\",\"oauthProvider\":\"launchpad\",\"provider\":\"CUMULUS\",\"password\":\"CY8t6pT4BPlSV8l3KGSBHcgz075nqMHSWWSrtprp1nTB58SOJexRL0s9nbTgG+uL5tGK5HLiwbYdTJCDgvJLaNiK5/4zPZIUIcBdoeWTRdmxU6v6oPWogGUj1L6FUaih67eZD3XhrHv8xuUEZLPMbrg7whXT5d9UzAd+gbi0/Cc1wTy+fYi2Zgo4FUYgOamm6AFcKYEVtdvyOTxbqp5ZNUockv3FOso/Q8ypNbXFY+tGFMllGhtj5uK1pijKnaqX1dcaOLnV8fQuJYzU2TXHCF97rAektas0Y6b+dNAvPu3um93yByPmeRaZNSkXN+1QL9AsoNwpWU0vltNjV+PSQg==\",\"cmrPageSize\":50},\"workflow_tasks\":{\"HelloWorld\":{\"version\":\"$LATEST\",\"name\":\"test-stack-HelloWorld\",\"arn\":\"arn:aws:lambda:us-east-1:012345678901:function:test-stack-HelloWorld\"}},\"provider\":{},\"queues\":{\"backgroundProcessing\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-backgroundProcessing\",\"ScheduleSFDeadLetterQueue\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-ScheduleSFDeadLetterQueue\",\"startSF\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-startSF\",\"kinesisFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-kinesisFailure\",\"triggerLambdaFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-triggerLambdaFailure\"},\"distribution_endpoint\":\"https://b8f8ybopuh.execute-api.us-east-1.amazonaws.com:7003/DEV/\",\"template\":\"s3://test-stack-internal/test-stack/workflow_template.json\",\"triggerRule\":\"Updated_1576250154395\",\"queueExecutionLimits\":{\"backgroundProcessing\":5}},\"cumulus_meta\":{\"message_source\":\"sfn\",\"execution_name\":\"8e21ca0f-79d3-4782-8247-cacd42a595ea\",\"state_machine\":\"arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow\",\"workflow_start_time\":null,\"system_bucket\":\"test-stack-internal\",\"queueName\":\"startSF\"},\"payload\":{\"hello\":\"Hello World\"}}" + }, + { + "timestamp": "2019-12-13T15:16:52.582Z", + "type": "ExecutionSucceeded", + "id": 7, + "previousEventId": 6, + "output": "{\"exception\":\"None\",\"task_config\":{\"buckets\":\"{$.meta.buckets}\",\"collection\":\"{$.meta.collection}\",\"provider\":\"{$.meta.provider}\"},\"meta\":{\"launchpad\":{\"api\":\"https://api.launchpad.nasa.gov/icam/api/sm/v1\",\"passphrase\":\"dfXLbkZkPNSOntQU70dyEM0GYkWbt59dTXxiU8uquwlFUwlaDpsfjoEWXYa1EvUpGHh1kvrYD5UDBkQDW5hT5ziGGRQCLfDXlan7YEHaZvYLPOXPv3ZW7LGhRXCNidNS1dSBXnRfvYBa6RescGvuMtdpuoU1duCQfuuh4F5Psu0QDrLMfwZsfxgTTEGTjC6PkxAU3UhWY/M2AullXk2mU55g9XTwCOqsSHqP1n7tZRTm0+4YbJopk0i6CvnMjAuVgYDBe2kTGnQWKkrWHcViUK7po8FFl9CNA5XqZv8p4FAmPLA5XJS5tw5Mrunsj98+e8WGESty0hyT13enuKUXJg==\",\"certificate\":\"launchpad.pfx\"},\"workflow_name\":\"HelloWorldWorkflow\",\"stack\":\"test-stack\",\"buckets\":{\"protected-2\":{\"type\":\"protected\",\"name\":\"test-stack-protected-2\"},\"protected\":{\"type\":\"protected\",\"name\":\"test-stack-protected\"},\"internal\":{\"type\":\"internal\",\"name\":\"test-stack-internal\"},\"private\":{\"type\":\"private\",\"name\":\"test-stack-private\"},\"public\":{\"type\":\"public\",\"name\":\"test-stack-public\"}},\"collection\":{\"files\":[{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"bucket\":\"protected\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{extractYear(cmrMetadata.Granule.Temporal.RangeDateTime.BeginningDateTime)}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.hdf\\\\.met$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf.met\",\"bucket\":\"private\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}\\\\.cmr\\\\.xml$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.cmr.xml\",\"bucket\":\"protected-2\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"},{\"regex\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}_ndvi\\\\.jpg$\",\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104_ndvi.jpg\",\"bucket\":\"public\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}/test-stack-Rule-1576250154395/\"}],\"reportToEms\":false,\"sampleFileName\":\"MOD09GQ.A2017025.h21v00.006.2017034065104.hdf\",\"name\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"granuleId\":\"^MOD09GQ\\\\.A[\\\\d]{7}\\\\.[\\\\S]{6}\\\\.006\\\\.[\\\\d]{13}$\",\"process\":\"modis\",\"dataType\":\"MOD09GQ_test-test-stack-Rule-1576250154395\",\"granuleIdExtraction\":\"(MOD09GQ\\\\..*)(\\\\.hdf|\\\\.cmr|_ndvi\\\\.jpg)\",\"provider_path\":\"cumulus-test-data/pdrs\",\"version\":\"006\",\"updatedAt\":1576250156248,\"duplicateHandling\":\"replace\",\"url_path\":\"{cmrMetadata.Granule.Collection.ShortName}___{cmrMetadata.Granule.Collection.VersionId}/{substring(file.name, 0, 3)}\",\"createdAt\":1576250156248},\"cmr\":{\"username\":\"matthewsavoie\",\"cmrEnvironment\":\"UAT\",\"cmrLimit\":100,\"clientId\":\"cumulus-core-test-stack\",\"oauthProvider\":\"launchpad\",\"provider\":\"CUMULUS\",\"password\":\"CY8t6pT4BPlSV8l3KGSBHcgz075nqMHSWWSrtprp1nTB58SOJexRL0s9nbTgG+uL5tGK5HLiwbYdTJCDgvJLaNiK5/4zPZIUIcBdoeWTRdmxU6v6oPWogGUj1L6FUaih67eZD3XhrHv8xuUEZLPMbrg7whXT5d9UzAd+gbi0/Cc1wTy+fYi2Zgo4FUYgOamm6AFcKYEVtdvyOTxbqp5ZNUockv3FOso/Q8ypNbXFY+tGFMllGhtj5uK1pijKnaqX1dcaOLnV8fQuJYzU2TXHCF97rAektas0Y6b+dNAvPu3um93yByPmeRaZNSkXN+1QL9AsoNwpWU0vltNjV+PSQg==\",\"cmrPageSize\":50},\"workflow_tasks\":{\"HelloWorld\":{\"version\":\"$LATEST\",\"name\":\"test-stack-HelloWorld\",\"arn\":\"arn:aws:lambda:us-east-1:012345678901:function:test-stack-HelloWorld\"}},\"provider\":{},\"queues\":{\"backgroundProcessing\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-backgroundProcessing\",\"ScheduleSFDeadLetterQueue\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-ScheduleSFDeadLetterQueue\",\"startSF\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-startSF\",\"kinesisFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-kinesisFailure\",\"triggerLambdaFailure\":\"https://sqs.us-east-1.amazonaws.com/012345678901/test-stack-triggerLambdaFailure\"},\"distribution_endpoint\":\"https://b8f8ybopuh.execute-api.us-east-1.amazonaws.com:7003/DEV/\",\"template\":\"s3://test-stack-internal/test-stack/workflow_template.json\",\"triggerRule\":\"Updated_1576250154395\",\"queueExecutionLimits\":{\"backgroundProcessing\":5}},\"cumulus_meta\":{\"message_source\":\"sfn\",\"execution_name\":\"8e21ca0f-79d3-4782-8247-cacd42a595ea\",\"state_machine\":\"arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow\",\"workflow_start_time\":null,\"system_bucket\":\"test-stack-internal\",\"queueName\":\"startSF\"},\"payload\":{\"hello\":\"Hello World\"}}" + } + ] + }, + "stateMachine": { + "stateMachineArn": "arn:aws:states:us-east-1:012345678901:stateMachine:test-stack-HelloWorldWorkflow", + "name": "test-stack-HelloWorldWorkflow", + "status": "ACTIVE", + "definition": "{\n \"Comment\": \"Returns Hello World\",\n \"StartAt\": \"HelloWorld\",\n \"States\": {\n \"HelloWorld\": {\n \"Parameters\": {\n \"cma\": {\n \"event.$\": \"$\",\n \"task_config\": {\n \"buckets\": \"{$.meta.buckets}\",\n \"provider\": \"{$.meta.provider}\",\n \"collection\": \"{$.meta.collection}\"\n }\n }\n },\n \"Type\": \"Task\",\n \"Resource\": \"arn:aws:lambda:us-east-1:012345678901:function:test-stack-HelloWorld\",\n \"Retry\": [\n {\n \"ErrorEquals\": [\n \"Lambda.ServiceException\",\n \"Lambda.AWSLambdaException\",\n \"Lambda.SdkClientException\"\n ],\n \"IntervalSeconds\": 2,\n \"MaxAttempts\": 6,\n \"BackoffRate\": 2\n }\n ],\n \"End\": true\n }\n }\n}\n", + "roleArn": "arn:aws:iam::012345678901:role/test-stack-steprole", + "type": "STANDARD", + "creationDate": "2019-11-14T18:42:28.568Z" + } +} diff --git a/cypress/integration/executions_spec.js b/cypress/integration/executions_spec.js index 05f34bbac..703807409 100644 --- a/cypress/integration/executions_spec.js +++ b/cypress/integration/executions_spec.js @@ -175,31 +175,38 @@ describe('Dashboard Executions Page', () => { cy.contains('.num-title', 7); cy.get('.table .thead .tr .th').as('columnHeaders'); - cy.get('@columnHeaders').eq(0).should('contain.text', 'Id'); - cy.get('@columnHeaders').eq(1).should('contain.text', 'Type'); - cy.get('@columnHeaders').eq(2).should('contain.text', 'Step'); - cy.get('@columnHeaders').eq(3).should('contain.text', 'Timestamp'); - cy.get('@columnHeaders').eq(4).should('contain.text', 'Event Details'); + cy.get('@columnHeaders').eq(0).should('contain.text', 'Event ID'); + cy.get('@columnHeaders').eq(1).should('contain.text', 'Step Name'); + cy.get('@columnHeaders').eq(2).should('contain.text', 'Timestamp'); cy.get('.table .tbody .tr').as('events'); cy.get('@events').should('have.length', 7); cy.getFixture('valid-execution').as('executionStatus'); cy.get('@executionStatus').its('executionHistory').its('events').then((events) => { + let prevStepName; cy.get('@events').each(($el, index, $list) => { const timestamp = fullDate(events[index].timestamp); cy.wrap($el).children('.td').as('columns'); - cy.get('@columns').should('have.length', 5); + cy.get('@columns').should('have.length', 3); const id = index + 1; const idMatch = `"id": ${id},`; const previousIdMatch = `"previousEventId": ${index}`; - + prevStepName = ((index === 0 || !events[index].type.match('LambdaFunction')) + ? 'N/A' + : (events[index - 1].name || prevStepName)); + const stepColumnText = events[index].name || prevStepName; cy.get('@columns').eq(0).should('have.text', (index + 1).toString()); - cy.get('@columns').eq(3).should('have.text', timestamp); + cy.get('@columns').eq(1).should('have.text', stepColumnText); + cy.get('@columns').eq(1).children('i') + .should('have.class', 'fa-check-circle') + .should('have.class', 'status-icon--success'); + cy.get('@columns').eq(2).should('have.text', timestamp); cy.get('.execution__modal').should('not.exist'); - cy.get('@columns').eq(4).contains('More Details').click(); + cy.get('@columns').eq(1).children('span').click(); cy.get('.execution__modal').should('exist'); - cy.get('.execution__modal .modal-title').contains(`ID ${id}: Event Details`); + const stepType = events[index].type; + cy.get('.execution__modal .modal-title').contains(`ID ${id}: ${stepColumnText} - ${stepType}`); cy.get('.execution__modal .modal-body').contains(idMatch); if (index !== 0) { cy.get('.execution__modal .modal-body').contains(previousIdMatch); @@ -209,6 +216,40 @@ describe('Dashboard Executions Page', () => { }); }); + it('should show the correct status icon for each step', () => { + const executionArn = 'arn:aws:states:us-east-1:012345678901:execution:test-stack-HelloWorldWorkflow:8e21ca0f-79d3-4782-8247-cacd42a595ea'; + + cy.intercept( + { method: 'GET', url: `http://localhost:5001/executions/status/${executionArn}` }, + { fixture: 'valid-execution-with-failure.json', statusCode: 200 } + ); + + cy.visit(`/executions/execution/${executionArn}`); + + cy.contains('div ul li a', 'Events').click(); + + cy.get('.table .thead .tr .th').as('columnHeaders'); + + cy.get('.table .tbody .tr').as('events'); + cy.get('@events').should('have.length', 7); + + cy.getFixture('valid-execution-with-failure').as('executionStatus'); + cy.get('@executionStatus').its('executionHistory').its('events').then((events) => { + cy.get('@events').each(($el, index, $list) => { + cy.wrap($el).children('.td').as('columns'); + if (events[index].type.toLowerCase().includes('failed')) { + cy.get('@columns').eq(1).children('i') + .should('have.class', 'fa-times-circle') + .should('have.class', 'status-icon--failed'); + } else { + cy.get('@columns').eq(1).children('i') + .should('have.class', 'fa-check-circle') + .should('have.class', 'status-icon--success'); + } + }); + }); + }); + it('should correctly handle searching execution events', () => { const executionName = '8e21ca0f-79d3-4782-8247-cacd42a595ea'; const executionArn = 'arn:aws:states:us-east-1:012345678901:execution:test-stack-HelloWorldWorkflow:8e21ca0f-79d3-4782-8247-cacd42a595ea'; @@ -243,6 +284,7 @@ describe('Dashboard Executions Page', () => { const executionName = 'b313e777-d28a-435b-a0dd-f1fad08116t1'; const executionArn = 'arn:aws:states:us-east-1:123456789012:execution:TestSourceIntegrationIngestAndPublishGranuleStateMachine-yCAhWOss5Xgo:b313e777-d28a-435b-a0dd-f1fad08116t1'; const stateMachine = 'arn:aws:states:us-east-1:123456789012:stateMachine:TestSourceIntegrationIngestAndPublishGranuleStateMachine-yCAhWOss5Xgo'; + const granuleId = 'MOD09GQ.A9344328.K9yI3O.006.4625818663028'; cy.intercept( { method: 'GET', url: `http://localhost:5001/logs/${executionName}` }, @@ -269,6 +311,8 @@ describe('Dashboard Executions Page', () => { cy.contains('State Machine Arn').next().should('have.text', stateMachine); cy.contains('Started').next().should('have.text', startMatch); cy.contains('Ended').next().should('have.text', endMatch); + cy.contains('Granule ID').next().should('have.text', granuleId); + cy.contains('Associated Executions List').next().should('have.text', 'Link'); }); cy.getFakeApiFixture('executions').as('executionsFixture'); @@ -291,9 +335,42 @@ describe('Dashboard Executions Page', () => { }); }); + it('should navigate to to executions-list when Associated Executions List link is clicked on execution detail page', () => { + const executionArn = 'arn:aws:states:us-east-1:123456789012:execution:TestSourceIntegrationIngestAndPublishGranuleStateMachine-yCAhWOss5Xgo:b313e777-d28a-435b-a0dd-f1fad08116t1'; + + cy.intercept('http://localhost:5001/executions/status/*', (req) => { + // Remove the header that will allow caching of the request + delete req.headers['if-none-match']; + }).as('execution-status'); + + cy.visit(`/executions/execution/${executionArn}`); + + cy.wait('@execution-status').as('response'); + + // validate Associated Executions List link contains correct parameters + cy.get('@response').then((resp) => { + cy.wrap(resp.response.body.execution.granules[0]).as('granule'); + cy.get('@granule').then((granule) => { + cy.get('.status--process').within(() => { + cy.contains('Associated Executions List') + .next() + .should('have.text', 'Link') + .children('a') + .should('have.attr', 'href') + .should('include', `${granule.collectionId}/${granule.granuleId}`); + cy.contains('Associated Executions List').next().children('a').click(); + }); + }); + }); + + // Validate link navigates to the correct page + cy.get('@granule').then((granule) => { + cy.get('.heading--large').should('contain.text', granule.granuleId); + }); + }); + it('should show an execution graph for a single execution', () => { const executionArn = 'arn:aws:states:us-east-1:012345678901:execution:test-stack-HelloWorldWorkflow:8e21ca0f-79d3-4782-8247-cacd42a595ea'; - cy.intercept( { method: 'GET', url: `http://localhost:5001/executions/status/${executionArn}` }, { fixture: 'valid-execution.json', statusCode: 200 } diff --git a/cypress/integration/granules_spec.js b/cypress/integration/granules_spec.js index 349d1e24a..a83783f49 100644 --- a/cypress/integration/granules_spec.js +++ b/cypress/integration/granules_spec.js @@ -827,5 +827,16 @@ describe('Dashboard Granules Page', () => { cy.get('.tr:nth-child(1) > .td:nth-child(6) > a').click(); cy.url().should('include', 'executions-list'); }); + + it('should navigate to to executions-list when executions-list link is clicked on granule detail page', () => { + cy.visit('/granules'); + + cy.get('.tr:nth-child(1) > .td:nth-child(3) > div > span > a').click(); + cy.url().should('include', 'granules/granule'); + + // overrode default timeout of 4 seconds because granules detail page takes longer than 4 seconds even locally + cy.get('.meta__row > dt', { timeout: 10000 }).contains('Executions List').siblings('dd').children('a') + .click(); + }); }); }); diff --git a/cypress/integration/main_page_spec.js b/cypress/integration/main_page_spec.js index 3d770c885..df097c371 100644 --- a/cypress/integration/main_page_spec.js +++ b/cypress/integration/main_page_spec.js @@ -53,7 +53,6 @@ describe('Dashboard Home Page', () => { beforeEach(() => { cy.login(); - cy.server(); cy.visit('/'); }); diff --git a/cypress/integration/reconciliation_spec.js b/cypress/integration/reconciliation_spec.js index 007274ccf..235447776 100644 --- a/cypress/integration/reconciliation_spec.js +++ b/cypress/integration/reconciliation_spec.js @@ -200,15 +200,16 @@ describe('Dashboard Reconciliation Reports Page', () => { count: 216, secondColumn: 'Filename' }, + // collections do not have select column, so need to check first column { title: 'Cumulus', count: 21, - secondColumn: 'Collection name' + firstColumn: 'Collection name' }, { title: 'CMR', count: 391, - secondColumn: 'Collection name' + firstColumn: 'Collection name' } ]; @@ -220,7 +221,13 @@ describe('Dashboard Reconciliation Reports Page', () => { card.get('.card-title').contains(cards[index].count); // verify correct table is displayed on click - cy.get('.table .th').eq(1).contains(cards[index].secondColumn); + if (cards[index].firstColumn) { + cy.get('.table .th').eq(0).contains(cards[index].firstColumn); + } + + if (cards[index].secondColumn) { + cy.get('.table .th').eq(1).contains(cards[index].secondColumn); + } }); /** Table Filters **/ @@ -241,10 +248,10 @@ describe('Dashboard Reconciliation Reports Page', () => { cy.contains('.table__filters .button__filter', 'Show/Hide Columns'); }); - /** Pagination */ /* Please fix this test when working on ticket CUMULUS-2633 - // cy.contains('.pagination__link--active', '1'); - // cy.contains('.pagination button', 'Next').click(); - // cy.contains('.pagination__link--active', '2'); + /** Pagination */ + cy.contains('.pagination__link--active', '1'); + cy.contains('.pagination button', 'Next').click(); + cy.contains('.pagination__link--active', '2'); /** Legend - there should be one for each table */ cy.get('.legend').should('have.length', 3); diff --git a/package-lock.json b/package-lock.json index b303c2eb8..e92c0874a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1343,31 +1343,31 @@ "dev": true }, "@cumulus/api": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/api/-/api-9.8.0.tgz", - "integrity": "sha512-ic2ZjwDqnRKwT15MRpK7ndL8e3Eed8O4ZSRFClaynHt/H8grGssDEjOXvfqPdNPlc5jo7ZZvsdlKkNha2UPelA==", - "dev": true, - "requires": { - "@cumulus/api-client": "9.8.0", - "@cumulus/async-operations": "9.8.0", - "@cumulus/aws-client": "9.8.0", - "@cumulus/cmr-client": "9.8.0", - "@cumulus/cmrjs": "9.8.0", - "@cumulus/collection-config-store": "9.8.0", - "@cumulus/common": "9.8.0", - "@cumulus/db": "9.8.0", - "@cumulus/distribution-utils": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/es-client": "9.8.0", - "@cumulus/ingest": "9.8.0", - "@cumulus/launchpad-auth": "9.8.0", - "@cumulus/logger": "9.8.0", - "@cumulus/message": "9.8.0", - "@cumulus/oauth-client": "9.8.0", - "@cumulus/object-store": "9.8.0", - "@cumulus/pvl": "9.8.0", - "@cumulus/sftp-client": "9.8.0", - "@cumulus/types": "9.8.0", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/api/-/api-9.9.0.tgz", + "integrity": "sha512-tR6HsLBuJt80dlIZlNGZ0L1LItmgPQAlo1KD/0CU+qlVkdLKiYy2PRMhvtCZ3Hml3WNV/BTjX0/GV+RgxkAFVg==", + "dev": true, + "requires": { + "@cumulus/api-client": "9.9.0", + "@cumulus/async-operations": "9.9.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/cmr-client": "9.9.0", + "@cumulus/cmrjs": "9.9.0", + "@cumulus/collection-config-store": "9.9.0", + "@cumulus/common": "9.9.0", + "@cumulus/db": "9.9.0", + "@cumulus/distribution-utils": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/es-client": "9.9.0", + "@cumulus/ingest": "9.9.0", + "@cumulus/launchpad-auth": "9.9.0", + "@cumulus/logger": "9.9.0", + "@cumulus/message": "9.9.0", + "@cumulus/oauth-client": "9.9.0", + "@cumulus/object-store": "9.9.0", + "@cumulus/pvl": "9.9.0", + "@cumulus/sftp-client": "9.9.0", + "@cumulus/types": "9.9.0", "@mapbox/dyno": "^1.4.2", "aggregate-error": "^3.1.0", "ajv": "^6.12.3", @@ -1412,14 +1412,14 @@ }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -1457,24 +1457,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -1539,25 +1539,25 @@ } }, "@cumulus/api-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/api-client/-/api-client-9.8.0.tgz", - "integrity": "sha512-TP60aHZ3WwBcqigqZju4EHDIpwOA2FFht3BVzs3GUVUGpKYaTlmScXvUoiqocD/JD2b1hn01f64YQeq/AId8zA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/api-client/-/api-client-9.9.0.tgz", + "integrity": "sha512-l/6Yxc1XCirlsojwwNP2lBwNc2gn/4oDEmdE1R+te4CmKeGaxWyoTxspeb6CmeejiP2mXueJRzh1EBJF127mWg==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/logger": "9.9.0", "p-retry": "^2.0.0" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -1580,24 +1580,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -1621,27 +1621,27 @@ } }, "@cumulus/async-operations": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/async-operations/-/async-operations-9.8.0.tgz", - "integrity": "sha512-1iX3gUvQ1czAmHZMDHZFX1IAt7GD3ykfWuGMm+3LTOuXDk2HwtTqcxjC6aOxEFXxF4DewKf8lH4QmF0hUEkAgg==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/async-operations/-/async-operations-9.9.0.tgz", + "integrity": "sha512-Bw20WE1UgeDuECkKJB4VdyJCKc69Xy3O1g1f00wRsfSOej+EiKpm01LzNDgS27E2yWDcFzOfCBJIDAzyQRJAug==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/db": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/types": "9.8.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/db": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/types": "9.9.0", "uuid": "8.3.2" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -1652,24 +1652,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -1709,14 +1709,14 @@ } }, "@cumulus/aws-client": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.5.0.tgz", - "integrity": "sha512-xI8IDdEN6Mxthb9Fb45F4fTo0WKOtpdUtEZ73SHV/B44z9M9YeejsGDLmL7J3O4v7eNAVKyQLVCqnPsai9nN9g==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.5.0", - "@cumulus/errors": "9.5.0", - "@cumulus/logger": "9.5.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -1750,33 +1750,27 @@ "requires": { "p-timeout": "^3.0.0" } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true } } }, "@cumulus/checksum": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.5.0.tgz", - "integrity": "sha512-CDKcMwMfh0WDcjfLawJvC6w2YNFW+04S2HyCEu4Ow/Fr0JT7qZGgdMgbLnyhQhclQQyqlrJap7ROUA98aMbTNQ==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/cmr-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/cmr-client/-/cmr-client-9.8.0.tgz", - "integrity": "sha512-wnnqFQP1UGCkfRG0T4IwpUcjtX9CWXXrjpmYCEnGL66Qv7BS+E1dx/OIBaFbxaxdQfI98D/XhsNOjXuKrSG53A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/cmr-client/-/cmr-client-9.9.0.tgz", + "integrity": "sha512-igTLEBwuE9BDcVwIIKtUBES4OrKYaq0umBr3lyGlEpGnksEM+2Y2xFXIY6CJHewrD+dvNe0ylL9BT8b5s3bmGA==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "got": "^11.7.0", "lodash": "^4.17.20", "public-ip": "^3.0.0", @@ -1784,14 +1778,14 @@ }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -1802,24 +1796,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -1853,18 +1847,18 @@ } }, "@cumulus/cmrjs": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/cmrjs/-/cmrjs-9.8.0.tgz", - "integrity": "sha512-5ytOnC+Hpl+lnPPjCZnYauWdwPCka72Wp/k7+YouLFR8nK8LuRmz2Y0SxCngAg//PjYTGcU/4STLNoUdXaDDvQ==", - "dev": true, - "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/cmr-client": "9.8.0", - "@cumulus/common": "9.8.0", - "@cumulus/distribution-utils": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/launchpad-auth": "9.8.0", - "@cumulus/logger": "9.8.0", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/cmrjs/-/cmrjs-9.9.0.tgz", + "integrity": "sha512-sSG5RLove/kS3naDZqxuWYbeVwW3NRbE22+IZXfxfPUR8Y0aNURV4e7zhD28Er4szjtCAYLeyGehH+pSifSOWA==", + "dev": true, + "requires": { + "@cumulus/aws-client": "9.9.0", + "@cumulus/cmr-client": "9.9.0", + "@cumulus/common": "9.9.0", + "@cumulus/distribution-utils": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/launchpad-auth": "9.9.0", + "@cumulus/logger": "9.9.0", "got": "^11.8.1", "js2xmlparser": "^4.0.0", "lodash": "^4.17.20", @@ -1874,14 +1868,14 @@ }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -1892,24 +1886,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -1949,25 +1943,25 @@ } }, "@cumulus/collection-config-store": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/collection-config-store/-/collection-config-store-9.8.0.tgz", - "integrity": "sha512-ZG6ybfJEN1lG+6m8IOhmVhVi4my/UMLplTGpArPQmlXYqqmGNmUfjtzMhht0k60svWS4sspSmAGnI8VPQiOKCw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/collection-config-store/-/collection-config-store-9.9.0.tgz", + "integrity": "sha512-dpkUCGtMGflwobdUqqW7GgZlhXa5xfjY5NO52ex2MCrENHM9w84GPLeZwlwtHmBnacLnlczdWXR+dTB9D91+YA==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/common": "9.8.0", - "@cumulus/message": "9.8.0" + "@cumulus/aws-client": "9.9.0", + "@cumulus/common": "9.9.0", + "@cumulus/message": "9.9.0" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -1978,24 +1972,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2029,13 +2023,13 @@ } }, "@cumulus/common": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/common/-/common-9.8.0.tgz", - "integrity": "sha512-gBXtoDRes59RdeVhzYMHnnxBLo4YCeU0yxpjMqzY6/nEtd9GKQsUBUu/+9T+PDx7z9Pqe4yqPcc1RHucszpTmQ==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/common/-/common-9.9.0.tgz", + "integrity": "sha512-hlhapWSP5Sg60mtfZi8xqSozTZermVl50oNaBpWhec3DYHRUTUZmODoPZX587+Ig0EfmydodmrzET/iPTBacnw==", "dev": true, "requires": { - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "ajv": "^6.12.3", "aws-sdk": "^2.585.0", "follow-redirects": "^1.2.4", @@ -2053,15 +2047,15 @@ }, "dependencies": { "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2092,35 +2086,35 @@ } }, "@cumulus/db": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/db/-/db-9.8.0.tgz", - "integrity": "sha512-awSP0HnZBMMImmwWuwjTjRdFsgAGcN48gBT6iZnGyqJHnGhBAr5CAwJXbTDoBA6P6NBxZgUpNNzwlBbEuOdM4Q==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/db/-/db-9.9.0.tgz", + "integrity": "sha512-4/8mSuhtI1RiT/wi76F3CR70om6/2+Y1xK+AdoR8mKH7zQ55BBhq68QzuQ42L4J5lpPYkur6I2BmGnEHCymrfg==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/common": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", - "@cumulus/message": "9.8.0", - "@cumulus/types": "9.8.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/common": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", + "@cumulus/message": "9.9.0", + "@cumulus/types": "9.9.0", "crypto-random-string": "^3.2.0", "is-valid-hostname": "0.0.1", "knex": "0.95.11", "lodash": "^4.17.20", "pg": "^8.3.0", "snake-camel": "^1.0.6", - "uuid": "8.3.1" + "uuid": "8.3.2" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -2131,24 +2125,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2189,34 +2183,34 @@ } }, "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true } } }, "@cumulus/distribution-utils": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/distribution-utils/-/distribution-utils-9.8.0.tgz", - "integrity": "sha512-FGvejHh5TO4jIXWfK7rXkI4t2UuoaDgql0syGeYwwxovV7KhBZHczZ4YLVTWQPjaklloO6qHuYbnnxPHIAlZbw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/distribution-utils/-/distribution-utils-9.9.0.tgz", + "integrity": "sha512-1wvVrp9wyF5Gg6n+C2lq3z2pI/6UBRNz/x/3Ndy5xSQvi/PmDipa/3RWnLMlMXOE7zjqkioYzN8yhOQYUN87ww==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/common": "9.8.0", - "@cumulus/errors": "9.8.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/common": "9.9.0", + "@cumulus/errors": "9.9.0", "url-join": "^1.1.0" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -2227,24 +2221,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2284,50 +2278,44 @@ } }, "@cumulus/errors": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.5.0.tgz", - "integrity": "sha512-jMiIq8AwJoNVv/reoWxfM352YwJIGfzycLT4IgdDldRAk6ZEs6GHiiO7aeqvMi065kF0sVLgVebJxlImf7wwnw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/es-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/es-client/-/es-client-9.8.0.tgz", - "integrity": "sha512-1EAjQY9PP85bIxgMvsuaJhLnn/KHFleLONw3bBPQmExTCzTOMPa9rM4zRD8CxaTPwBOcdTWr2oKR4MVaWqZurw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/es-client/-/es-client-9.9.0.tgz", + "integrity": "sha512-yWkJPqfUjYdloJqS9ldrlgVumJzBnlGijgM9af2d3eRKdx3vuaYxV69rGQONZsLf816L7ufc0L0ZKnsyJqMLrw==", "dev": true, "requires": { - "@cumulus/common": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", - "@cumulus/message": "9.8.0", + "@cumulus/common": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", + "@cumulus/message": "9.9.0", "@elastic/elasticsearch": "^5.6.20", "aws-elasticsearch-connector": "8.2.0", "aws-sdk": "^2.585.0", "lodash": "~4.17.20", - "moment": "2.24.0", + "moment": "2.29.1", "p-limit": "^1.2.0" }, "dependencies": { "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" } }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -2346,18 +2334,18 @@ } }, "@cumulus/ingest": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/ingest/-/ingest-9.8.0.tgz", - "integrity": "sha512-tSveQUdF6LOXVJFrliLfCaJUfJzHhyUAFbVvTdqvfVgAanJ6BBN1w5BgnWXByFsK6GVNf1rX3LSMiCBcnpRAtg==", - "dev": true, - "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/common": "9.8.0", - "@cumulus/db": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", - "@cumulus/message": "9.8.0", - "@cumulus/sftp-client": "9.8.0", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/ingest/-/ingest-9.9.0.tgz", + "integrity": "sha512-P6Aj5eGGNULABTO7Q+T5H7N7UHfg35mvrAw4bzvHpGdoVtTDAZVDdD6uBESuu/SRAhKJiBpDF2+n3ZiljhSt3Q==", + "dev": true, + "requires": { + "@cumulus/aws-client": "9.9.0", + "@cumulus/common": "9.9.0", + "@cumulus/db": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", + "@cumulus/message": "9.9.0", + "@cumulus/sftp-client": "9.9.0", "aws-sdk": "^2.585.0", "cksum": "^1.3.0", "delay": "^4.3.0", @@ -2365,24 +2353,24 @@ "fs-extra": "^5.0.0", "got": "^11.7.0", "is-ip": "^2.0.0", - "is-valid-hostname": "^0.0.1", + "is-valid-hostname": "^0.1.1", "jsftp": "git+https://github.com/jkovarik/jsftp.git#add_288", "lodash": "^4.17.20", "mime-types": "^2.1.22", - "moment": "2.24.0", + "moment": "2.29.1", "simplecrawler": "^1.1.9", "tough-cookie": "^4.0.0" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -2393,24 +2381,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2431,10 +2419,10 @@ "ip-regex": "^2.0.0" } }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "is-valid-hostname": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-hostname/-/is-valid-hostname-0.1.1.tgz", + "integrity": "sha512-v7EiG12aMHgkD2HN/lf+uoDzR7kJ9b17a/A7AzckRacFyr5ZCOuAYNEshfMY7+Kt2keeOcNOHmgFWJn1Nj9/9w==", "dev": true }, "p-map": { @@ -2482,27 +2470,27 @@ } }, "@cumulus/launchpad-auth": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/launchpad-auth/-/launchpad-auth-9.8.0.tgz", - "integrity": "sha512-8kn1aov4Oh6f2NKhyGeCPqbCw+zef6fAqxMZYpNtMYje2rwWeGt6VgRjE3OC5tvgk7j6n4JDuY90i/mBxAQLBQ==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/launchpad-auth/-/launchpad-auth-9.9.0.tgz", + "integrity": "sha512-51JzEZJCATHNB0x/f1kOkcuXgK1uqwBO3rfEcytk8FS7gwq0b+jyAYoooZl6MBhBIYM9ZdCR8Fwoxd6HEGUVqw==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/logger": "9.9.0", "got": "^11.7.0", "lodash": "^4.17.20", "uuid": "^3.2.1" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -2513,24 +2501,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2564,39 +2552,39 @@ } }, "@cumulus/logger": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.5.0.tgz", - "integrity": "sha512-bSjk5d94b0gIapbVD6iaR/dq+vk4v4R5VdEpSz49IdGVjh0nPGKT2EnEYxeJBViS9kyIgaSfhFklAVLSGLjbXQ==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" } }, "@cumulus/message": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/message/-/message-9.8.0.tgz", - "integrity": "sha512-YNuEoP/Q7sQsq/sF/w9dcIZpfBZ4CXk/CDrhajH48N3irz9XUCT9KIv3AwKJ7/n8f3JhEoDodga93situFwYSg==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/message/-/message-9.9.0.tgz", + "integrity": "sha512-kgWJUtjPM2+V4ap/Hzsr1dyw1R4PMZadWbcw1uQrPpTaHFoxWgt9F2icjDaeTKXLK1X7eZZlR6dSXp242mAKqQ==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/common": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", - "@cumulus/types": "9.8.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/common": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", + "@cumulus/types": "9.9.0", "jsonpath-plus": "^3.0.0", "lodash": "^4.17.20", "uuid": "^8.2.0" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -2615,24 +2603,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2678,32 +2666,32 @@ } }, "@cumulus/oauth-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/oauth-client/-/oauth-client-9.8.0.tgz", - "integrity": "sha512-bp0pL6Fiw216bRcRn3oXJ1zuTWAdT7chPGDq8wTewnT7+hehJvh2NjOR/do7W7vHWy8ygvJwioktOIit7jEM+g==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/oauth-client/-/oauth-client-9.9.0.tgz", + "integrity": "sha512-KPRUw8wDxPjqMsdW5W5OPwYBpvbogWqBm1vPto2kLhj4CY593JcmrNOgAxTp6geX4QbCyzY5q8jwYyI5G3oYJA==", "dev": true, "requires": { "got": "^11.7.0" } }, "@cumulus/object-store": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/object-store/-/object-store-9.8.0.tgz", - "integrity": "sha512-AMdk264xnLWJYHXAmFLXSeYbAHC8NIfVas/C5kgGxQt/OlbShf/vZgWdcdxM11BKKjoTpbouq034rndyiIAqww==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/object-store/-/object-store-9.9.0.tgz", + "integrity": "sha512-8bwBCIhz1kYKMLLhtwSJ9xfIML2eCjFKNW4OH1AmpD5NcmQuYMpn+GoSR2L9YoDGZh6TB3YPCUEEi9c4lBViFw==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0" + "@cumulus/aws-client": "9.9.0" }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -2714,24 +2702,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2765,22 +2753,22 @@ } }, "@cumulus/pvl": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/pvl/-/pvl-9.8.0.tgz", - "integrity": "sha512-uReFDZsAuxsKlYT2iCybF4K4u+UdZRsdbfOjKhVNRXkUGPK0bHnhDjwjfCAjpnCbqPpROrZL7rOhlsyb4Nb26w==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/pvl/-/pvl-9.9.0.tgz", + "integrity": "sha512-4BOEbAqnFSaUKM5B9EwfmcagAdcfLQIJPNjPEeKigQl2tBFRkpHaeMZfK24ZXEByZepNihNJV0N4+DuTDoS9zw==", "dev": true, "requires": { "lodash": "^4.17.20" } }, "@cumulus/sftp-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/sftp-client/-/sftp-client-9.8.0.tgz", - "integrity": "sha512-yAbpsEs8Qk0+i2TYLOiytspclU8RoQKbRbCWYfzJ3YzT0mOc67gaZaPg0K7mbwGhQ/B+alfYMnLEC5txvWgXDw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/sftp-client/-/sftp-client-9.9.0.tgz", + "integrity": "sha512-U/EN8K8je5rGM9gJBm8fvv99OOuXK3zO0fd6Kcr8VQTnqLQwVfti7v0j6k1H7JwcT+nGSELVm2MSdcq9mQvKTg==", "dev": true, "requires": { - "@cumulus/aws-client": "9.8.0", - "@cumulus/common": "9.8.0", + "@cumulus/aws-client": "9.9.0", + "@cumulus/common": "9.9.0", "lodash": "^4.17.20", "mime-types": "^2.1.27", "ssh2": "^1.0.0", @@ -2788,14 +2776,14 @@ }, "dependencies": { "@cumulus/aws-client": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.8.0.tgz", - "integrity": "sha512-Hj1PbLoLAUsufeD8IlryYJUE61r/pgOx9zRDuq91RWLFYXeUhTB2qqUfAHBu03TSAhC912YBOHGbCztAqV7sPA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/aws-client/-/aws-client-9.9.0.tgz", + "integrity": "sha512-HHIchB2PJanmDw39se2Y5uqGhxTmHs1y4cy8kUWDv6xEURMlH1CN/SzJN0JNKBM5LqmMrWtaN8m34+8sVzUclw==", "dev": true, "requires": { - "@cumulus/checksum": "9.8.0", - "@cumulus/errors": "9.8.0", - "@cumulus/logger": "9.8.0", + "@cumulus/checksum": "9.9.0", + "@cumulus/errors": "9.9.0", + "@cumulus/logger": "9.9.0", "aws-sdk": "^2.814.0", "jsonpath-plus": "^1.1.0", "lodash": "~4.17.20", @@ -2806,24 +2794,24 @@ } }, "@cumulus/checksum": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.8.0.tgz", - "integrity": "sha512-gD7xLP0HzQW2jZuMAtlucEztlqH6ViDp8XecxBdfwNZY7qQyIUfqV1P9LH7kM/tMkTMyrvG2Y89GZ6TYI3NiTw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/checksum/-/checksum-9.9.0.tgz", + "integrity": "sha512-eSeffek4xDOZSeKGRI+bNwPJhl/yv2tzIlK5wNtZGNQN42Pp3acon9lYLoTTc/X0mX0J0jQa60nknCbLlF9WEg==", "dev": true, "requires": { "cksum": "^1.3.0" } }, "@cumulus/errors": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.8.0.tgz", - "integrity": "sha512-jyX/SXcnxpqYOa2+ZZfs13MPz/4lEp7GcmHquIIhjGLX9z3g9zmO2oIl0aHdPPZVKqjrToWV2FMX89OzXJpXuA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/errors/-/errors-9.9.0.tgz", + "integrity": "sha512-pG0OFpMGT0nV/COGbxswTa0M9K90EOOEp6aOI/NvqVFEDGkngJi8/LQa1TxG21UtVtoCpgma/l/Er1U/6qUFhg==", "dev": true }, "@cumulus/logger": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.8.0.tgz", - "integrity": "sha512-MSaGmTbcaxsmmjBAAB5q7QJ6Cy0//YfM6A3fpSGm62UAZo//CnLcPf1kbX6wEQ60Nmg0EdvhTxO6jV6wwH824A==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/logger/-/logger-9.9.0.tgz", + "integrity": "sha512-YcHD0iOl+d5Jgx47bUhdKhG6GkljhpPAcfoFMR8Cd6sUH3NHDnuKTjZKSR0w+ZcePm1mF7Vdh+SNcBA243sWuQ==", "dev": true, "requires": { "lodash.iserror": "^3.1.1" @@ -2857,9 +2845,9 @@ } }, "@cumulus/types": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@cumulus/types/-/types-9.8.0.tgz", - "integrity": "sha512-G8VJMDbbM6hUumZOoK+/cGnhkA4AriNkoK5popELo8STJve1uFN05l8KqXeHLyuJ0qpNl/dbt0j9G2ZDPefPmw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@cumulus/types/-/types-9.9.0.tgz", + "integrity": "sha512-4kOqVfzEz+QCGShRSvdds/EioQiUBC6HEw/WCk4alC7Ld6kJGZ8LbQOZtzrssSbpVI0Bzm7F1AyBtkoaZwo1Dg==", "dev": true }, "@cypress/request": { @@ -3990,11 +3978,6 @@ "string-width": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -4588,11 +4571,6 @@ "yargs": "^16.2.0" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -5430,11 +5408,6 @@ "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -6240,11 +6213,6 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9022,11 +8990,6 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -11690,11 +11653,6 @@ "type-fest": "^0.21.3" } }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -12311,12 +12269,12 @@ } }, "js2xmlparser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", - "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", "dev": true, "requires": { - "xmlcreate": "^2.0.3" + "xmlcreate": "^2.0.4" } }, "jsbn": { @@ -12538,9 +12496,9 @@ } }, "keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", "dev": true, "requires": { "json-buffer": "3.0.1" @@ -13786,9 +13744,9 @@ } }, "node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "dev": true, "requires": { "whatwg-url": "^5.0.0" @@ -14261,11 +14219,6 @@ "wcwidth": "^1.0.1" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -22182,11 +22135,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -22382,11 +22330,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -22467,11 +22410,6 @@ "string-width": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -24467,11 +24405,6 @@ "type-fest": "^0.21.3" } }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -24870,9 +24803,9 @@ "dev": true }, "xmlcreate": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", - "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", "dev": true }, "xmldom": { diff --git a/package.json b/package.json index 37916515e..eacb2502f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cumulus-dashboard", - "version": "7.1.0", + "version": "8.0.0", "description": "A dashboard for Cumulus API", "repository": { "type": "git", @@ -68,8 +68,8 @@ "@babel/preset-react": "^7.10.4", "@babel/register": "^7.12.0", "@babel/runtime": "^7.12.0", - "@cumulus/api": "9.8.0", - "@cumulus/aws-client": "9.5.0", + "@cumulus/api": "9.9.0", + "@cumulus/aws-client": "9.9.0", "@cypress/webpack-preprocessor": "^4.1.5", "audit-ci": "^3.1.1", "autoprefixer": "^9.8.6", diff --git a/test/components/executions/execution-events.js b/test/components/executions/execution-events.js index 8a240ea59..becf3a381 100644 --- a/test/components/executions/execution-events.js +++ b/test/components/executions/execution-events.js @@ -99,7 +99,7 @@ test.serial('Execution Events displays the correct step name', function (t) { t.is(tableRows.length, 9); const expectedStepNames = [ - '', + 'N/A', 'SyncGranule', 'SyncGranule', 'SyncGranule', @@ -107,14 +107,14 @@ test.serial('Execution Events displays the correct step name', function (t) { 'SyncGranule', 'ChooseProcess', 'ChooseProcess', - '', + 'N/A', ]; tableRows.forEach((row, index) => { const columns = row.find('Cell'); - t.is(columns.length, 5); - const stepName = columns.at(2).shallow().text(); - t.is(stepName, expectedStepNames[index]) + t.is(columns.length, 3); + const stepName = columns.at(1).shallow().text(); + t.assert(stepName.includes(expectedStepNames[index])); }); }); @@ -127,7 +127,7 @@ test.serial('Execution Events shows event history', function (t) { error: false, meta: {}, }; - + const executionEvents = shallow( { const columns = row.find('Cell'); - t.is(columns.length, 5); + t.is(columns.length, 3); const moreDetails = columns.last().shallow().find('pre'); moreDetails.map((node) => { const parsedDetailsOutput = JSON.parse(node.text()).output; diff --git a/test/components/executions/execution-status.js b/test/components/executions/execution-status.js index c62416256..0657f48eb 100644 --- a/test/components/executions/execution-status.js +++ b/test/components/executions/execution-status.js @@ -42,7 +42,7 @@ test('Cumulus-690 Execution Status shows workflow task and version information', t.is(metadataDetails.length, 1); const metadataLabels = metadataDetails.find('dt'); - t.is(metadataLabels.length, 9); + t.is(metadataLabels.length, 11); const metadataValues = metadataDetails.find('dd'); - t.is(metadataValues.length, 9); + t.is(metadataValues.length, 11); }); diff --git a/test/components/form/edit-record.js b/test/components/form/edit-record.js index fb7fd8968..d8e46d79e 100644 --- a/test/components/form/edit-record.js +++ b/test/components/form/edit-record.js @@ -31,7 +31,7 @@ test('EditRecord sends full object when merge property is true', (t) => { const providerWrapper = shallow(