Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature/Reporting] Export Saved Search CSV as Dashboard Panel Action #34571

Merged
merged 83 commits into from
May 29, 2019

Conversation

joelgriffith
Copy link
Contributor

@joelgriffith joelgriffith commented Apr 4, 2019

Summary

Closes: #18110

This changes introduces a new API (Thanks @tsullivan) to convert a saved-search object into an immediately-downloadable CSV! I'll be pushing some fixes and tweaks next week once I'm off of support ramp, with the goal of getting this merged soon-ish.

Testing

  • Ensure you have xpack.reporting.csv.enablePanelActionDownload: true in your config.
  • Install some data, or create a dataset with a SavedSearch.
  • In the Dashboard, click on the ... panel action icon of the SavedSearch and click Download CSV

export-csv

Checklist

Use strikethroughs to remove checklist items you don't feel are applicable to this PR.

@tsullivan tsullivan changed the title Feature/reporting/csv export panel action [Feature/Reporting] Export Saved Search CSV as Dashboard Panel Action Apr 4, 2019
@elasticmachine
Copy link
Contributor

💚 Build Succeeded

@tsullivan tsullivan force-pushed the feature/reporting/csv-export-panel-action branch from edfb522 to 59034e0 Compare April 4, 2019 20:54
@elasticmachine
Copy link
Contributor

💚 Build Succeeded

@elasticmachine
Copy link
Contributor

💔 Build Failed

@elasticmachine
Copy link
Contributor

💚 Build Succeeded

@elasticmachine
Copy link
Contributor

💚 Build Succeeded

* Date field formatted via docvalue_fields; none else formatted

* fix integration test fixtures

* fix docvalue_fields search params for index patterns that have no time field

* simplify

* fix non-timebased index pattern test

* self-review

* fix lint
@elasticmachine
Copy link
Contributor

💚 Build Succeeded

* self review

* rename types.d.ts to index

* fix imports
@elasticmachine
Copy link
Contributor

💚 Build Succeeded

@elasticmachine

This comment has been minimized.

@joelgriffith
Copy link
Contributor Author

@kertal I think this is ready for another review pass (assuming we get a green CI)

@elasticmachine
Copy link
Contributor

💔 Build Failed

@elasticmachine
Copy link
Contributor

💚 Build Succeeded

@kertal
Copy link
Member

kertal commented May 29, 2019

@joelgriffith sorry for causing you timezone pain, maybe my inner clock wanted revenge for the Orlando - Vienna reverse Jetlag

Copy link
Member

@kertal kertal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just some notes I took before we talked, mainly it's not to show the download link when user's roles do not allow to generate the csv

return searchEmbeddable.searchScope.searchSource.getSearchRequestBody();
}

public isVisible = (panelActionAPI: PanelActionAPI): boolean => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would mean checking for the reporting_user or superuser, right?

@kertal
Copy link
Member

kertal commented May 29, 2019 via email

@joelgriffith
Copy link
Contributor Author

Just to follow up for now:

  • Config flag is in place to turn off this feature.
  • Better tools/utils are coming to help with doing UI-side check of roles. Right now, given how reporting works with roles, we cannot effectively check in the UI if a user can or can't generate reports. This means our UX takes a bit of a hit, however we'll address it once we're using better methods for role management.

@kertal kertal self-requested a review May 29, 2019 17:25
@joelgriffith
Copy link
Contributor Author

Hello from the future! You're looking at history in the making!

@joelgriffith joelgriffith merged commit 86c3ac4 into master May 29, 2019
@spalger spalger deleted the feature/reporting/csv-export-panel-action branch May 30, 2019 06:28
tsullivan added a commit that referenced this pull request Jan 11, 2023
## Summary

This restores an endpoint that was added in 7.3 in [this
PR](#34571), and was removed in
7.9 in [this PR](#71031). The
changes are re-done on top of 7.17, but still has a mostly-compatible
with the one that existed in 7.3-7.8. This serves 3rd parties that
relied on the earlier experimental code.

Supports:
* Saved searches with filters
* Saved searches with custom sorting
* Saved searches with or without selected columns
* Exports based on Index Patterns with or without a "time field"
* Requests can have an [optional POST
body](https://github.com/elastic/kibana/pull/148030/files#diff-0f565e26f3309c257fa919c5db227c3b7a78237015940c3d3677cbb1132a6701R27-R37)
with extra time range filters and/or specify a custom time zone.

LIMITATIONS:
* This endpoint is currently not supported in 8.x at this time.
* Saved Search objects created in older versions of Kibana may not work.
* Searching across hundreds of shards in the query could cause
Elasticsearch instability.
* Some minor bugs in the output of the CSV may exist, such as fields not
being formatted exactly as in the Discover table.
* This code may be forward-ported to `main` in a way that uses a
different API that is not compatible with this change.
* Does not allow "raw state" to be merged with the Search object, as in
the previous code. Otherwise, the API is compatible with the previous
code.
* This feature remains in "experimental" status, and is not ready to be
documented at this time.

## Testing
Since there is not a UI for this endpoint, there are a few options for
testing:
1. Run the functional test:
```sh
node scripts/functional_tests.js \
  --config x-pack/test/reporting_api_integration/reporting_and_security.config.ts \
  --grep 'CSV Generation from Saved Search ID'
```

2. Create a saved search in Kibana, and use a script to send a request
```sh
POST_URL="${HOST}/api/reporting/v1/generate/csv/saved-object/search:"$SAVED_SEARCH_ID

## Run transaction to generate a report, wait for execution completion, download the report, and send the
# report as an email attachment

# 1. Send a request to generate a report
DOWNLOAD_PATH=$(curl --silent -XPOST "$POST_URL" -H "kbn-xsrf: kibana-reporting" -H "${AUTH_HEADER}" | jq -e -r ".payload.path | values")
if [ -z "$DOWNLOAD_PATH" ]; then
  echo "Something went wrong! Could not send the request to generate a report!" 1>&2
  # TEST
  curl --silent -XPOST "$POST_URL" -H "kbn-xsrf: kibana-reporting" -H "${AUTH_HEADER}"
  exit 1
fi

# 2. Log the path used to download the report
DOWNLOAD_PATH=${HOST}$DOWNLOAD_PATH
echo Download path: $DOWNLOAD_PATH

# 3. Wait for report execution to finish
echo While the report is executing in the Kibana server, the reporting service will return a 503 status code response.
STATUS=''
while [[ -z $STATUS || $STATUS =~ .*503.* ]]
do
  echo Waiting 5 seconds...
  sleep 5
  STATUS=$(curl --silent --head "$DOWNLOAD_PATH" -H "${AUTH_HEADER}" | head -1)
  if [[ -z "$STATUS" || $STATUS =~ .*500.* ]]; then
    echo "Something went wrong! Could not request the report execution status!" 1>&2
    curl "$DOWNLOAD_PATH" -H "${AUTH_HEADER}" 1>&2
    exit 1
  fi
  echo $STATUS
done

# 4. Download final report and show the contents in the console
curl -v "$DOWNLOAD_PATH" -H "$AUTH_HEADER"
```

3. Test that the above script from (2) works in 7.8, and continues to
work after migrating to 7.17.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
(Deprecated) Feature:Reporting Use Reporting:Screenshot, Reporting:CSV, or Reporting:Framework instead release_note:enhancement review v7.3.0 v8.0.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Reporting] API endpoint for generating CSVs for Saved Searches
7 participants